1 //===--- Sema.cpp - AST Builder and Semantic Analysis Implementation ------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements the actions class which performs semantic analysis and 11 // builds an AST out of a parse stream. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "clang/AST/ASTContext.h" 16 #include "clang/AST/ASTDiagnostic.h" 17 #include "clang/AST/DeclCXX.h" 18 #include "clang/AST/DeclFriend.h" 19 #include "clang/AST/DeclObjC.h" 20 #include "clang/AST/Expr.h" 21 #include "clang/AST/ExprCXX.h" 22 #include "clang/AST/PrettyDeclStackTrace.h" 23 #include "clang/AST/StmtCXX.h" 24 #include "clang/Basic/DiagnosticOptions.h" 25 #include "clang/Basic/PartialDiagnostic.h" 26 #include "clang/Basic/TargetInfo.h" 27 #include "clang/Lex/HeaderSearch.h" 28 #include "clang/Lex/Preprocessor.h" 29 #include "clang/Sema/CXXFieldCollector.h" 30 #include "clang/Sema/DelayedDiagnostic.h" 31 #include "clang/Sema/ExternalSemaSource.h" 32 #include "clang/Sema/Initialization.h" 33 #include "clang/Sema/MultiplexExternalSemaSource.h" 34 #include "clang/Sema/ObjCMethodList.h" 35 #include "clang/Sema/Scope.h" 36 #include "clang/Sema/ScopeInfo.h" 37 #include "clang/Sema/SemaConsumer.h" 38 #include "clang/Sema/SemaInternal.h" 39 #include "clang/Sema/TemplateDeduction.h" 40 #include "clang/Sema/TemplateInstCallback.h" 41 #include "llvm/ADT/DenseMap.h" 42 #include "llvm/ADT/SmallSet.h" 43 using namespace clang; 44 using namespace sema; 45 46 SourceLocation Sema::getLocForEndOfToken(SourceLocation Loc, unsigned Offset) { 47 return Lexer::getLocForEndOfToken(Loc, Offset, SourceMgr, LangOpts); 48 } 49 50 ModuleLoader &Sema::getModuleLoader() const { return PP.getModuleLoader(); } 51 52 PrintingPolicy Sema::getPrintingPolicy(const ASTContext &Context, 53 const Preprocessor &PP) { 54 PrintingPolicy Policy = Context.getPrintingPolicy(); 55 // In diagnostics, we print _Bool as bool if the latter is defined as the 56 // former. 57 Policy.Bool = Context.getLangOpts().Bool; 58 if (!Policy.Bool) { 59 if (const MacroInfo *BoolMacro = PP.getMacroInfo(Context.getBoolName())) { 60 Policy.Bool = BoolMacro->isObjectLike() && 61 BoolMacro->getNumTokens() == 1 && 62 BoolMacro->getReplacementToken(0).is(tok::kw__Bool); 63 } 64 } 65 66 return Policy; 67 } 68 69 void Sema::ActOnTranslationUnitScope(Scope *S) { 70 TUScope = S; 71 PushDeclContext(S, Context.getTranslationUnitDecl()); 72 } 73 74 namespace clang { 75 namespace sema { 76 77 class SemaPPCallbacks : public PPCallbacks { 78 Sema *S = nullptr; 79 llvm::SmallVector<SourceLocation, 8> IncludeStack; 80 81 public: 82 void set(Sema &S) { this->S = &S; } 83 84 void reset() { S = nullptr; } 85 86 virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason, 87 SrcMgr::CharacteristicKind FileType, 88 FileID PrevFID) override { 89 if (!S) 90 return; 91 switch (Reason) { 92 case EnterFile: { 93 SourceManager &SM = S->getSourceManager(); 94 SourceLocation IncludeLoc = SM.getIncludeLoc(SM.getFileID(Loc)); 95 if (IncludeLoc.isValid()) { 96 IncludeStack.push_back(IncludeLoc); 97 S->DiagnoseNonDefaultPragmaPack( 98 Sema::PragmaPackDiagnoseKind::NonDefaultStateAtInclude, IncludeLoc); 99 } 100 break; 101 } 102 case ExitFile: 103 if (!IncludeStack.empty()) 104 S->DiagnoseNonDefaultPragmaPack( 105 Sema::PragmaPackDiagnoseKind::ChangedStateAtExit, 106 IncludeStack.pop_back_val()); 107 break; 108 default: 109 break; 110 } 111 } 112 }; 113 114 } // end namespace sema 115 } // end namespace clang 116 117 Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer, 118 TranslationUnitKind TUKind, CodeCompleteConsumer *CodeCompleter) 119 : ExternalSource(nullptr), isMultiplexExternalSource(false), 120 FPFeatures(pp.getLangOpts()), LangOpts(pp.getLangOpts()), PP(pp), 121 Context(ctxt), Consumer(consumer), Diags(PP.getDiagnostics()), 122 SourceMgr(PP.getSourceManager()), CollectStats(false), 123 CodeCompleter(CodeCompleter), CurContext(nullptr), 124 OriginalLexicalContext(nullptr), MSStructPragmaOn(false), 125 MSPointerToMemberRepresentationMethod( 126 LangOpts.getMSPointerToMemberRepresentationMethod()), 127 VtorDispStack(MSVtorDispAttr::Mode(LangOpts.VtorDispMode)), PackStack(0), 128 DataSegStack(nullptr), BSSSegStack(nullptr), ConstSegStack(nullptr), 129 CodeSegStack(nullptr), CurInitSeg(nullptr), VisContext(nullptr), 130 PragmaAttributeCurrentTargetDecl(nullptr), 131 IsBuildingRecoveryCallExpr(false), Cleanup{}, LateTemplateParser(nullptr), 132 LateTemplateParserCleanup(nullptr), OpaqueParser(nullptr), IdResolver(pp), 133 StdExperimentalNamespaceCache(nullptr), StdInitializerList(nullptr), 134 StdCoroutineTraitsCache(nullptr), CXXTypeInfoDecl(nullptr), 135 MSVCGuidDecl(nullptr), NSNumberDecl(nullptr), NSValueDecl(nullptr), 136 NSStringDecl(nullptr), StringWithUTF8StringMethod(nullptr), 137 ValueWithBytesObjCTypeMethod(nullptr), NSArrayDecl(nullptr), 138 ArrayWithObjectsMethod(nullptr), NSDictionaryDecl(nullptr), 139 DictionaryWithObjectsMethod(nullptr), GlobalNewDeleteDeclared(false), 140 TUKind(TUKind), NumSFINAEErrors(0), 141 FullyCheckedComparisonCategories( 142 static_cast<unsigned>(ComparisonCategoryType::Last) + 1), 143 AccessCheckingSFINAE(false), InNonInstantiationSFINAEContext(false), 144 NonInstantiationEntries(0), ArgumentPackSubstitutionIndex(-1), 145 CurrentInstantiationScope(nullptr), DisableTypoCorrection(false), 146 TyposCorrected(0), AnalysisWarnings(*this), 147 ThreadSafetyDeclCache(nullptr), VarDataSharingAttributesStack(nullptr), 148 CurScope(nullptr), Ident_super(nullptr), Ident___float128(nullptr) { 149 TUScope = nullptr; 150 151 LoadedExternalKnownNamespaces = false; 152 for (unsigned I = 0; I != NSAPI::NumNSNumberLiteralMethods; ++I) 153 NSNumberLiteralMethods[I] = nullptr; 154 155 if (getLangOpts().ObjC) 156 NSAPIObj.reset(new NSAPI(Context)); 157 158 if (getLangOpts().CPlusPlus) 159 FieldCollector.reset(new CXXFieldCollector()); 160 161 // Tell diagnostics how to render things from the AST library. 162 Diags.SetArgToStringFn(&FormatASTNodeDiagnosticArgument, &Context); 163 164 ExprEvalContexts.emplace_back( 165 ExpressionEvaluationContext::PotentiallyEvaluated, 0, CleanupInfo{}, 166 nullptr, ExpressionEvaluationContextRecord::EK_Other); 167 168 PreallocatedFunctionScope.reset(new FunctionScopeInfo(Diags)); 169 170 // Initialization of data sharing attributes stack for OpenMP 171 InitDataSharingAttributesStack(); 172 173 std::unique_ptr<sema::SemaPPCallbacks> Callbacks = 174 llvm::make_unique<sema::SemaPPCallbacks>(); 175 SemaPPCallbackHandler = Callbacks.get(); 176 PP.addPPCallbacks(std::move(Callbacks)); 177 SemaPPCallbackHandler->set(*this); 178 } 179 180 void Sema::addImplicitTypedef(StringRef Name, QualType T) { 181 DeclarationName DN = &Context.Idents.get(Name); 182 if (IdResolver.begin(DN) == IdResolver.end()) 183 PushOnScopeChains(Context.buildImplicitTypedef(T, Name), TUScope); 184 } 185 186 void Sema::Initialize() { 187 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer)) 188 SC->InitializeSema(*this); 189 190 // Tell the external Sema source about this Sema object. 191 if (ExternalSemaSource *ExternalSema 192 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource())) 193 ExternalSema->InitializeSema(*this); 194 195 // This needs to happen after ExternalSemaSource::InitializeSema(this) or we 196 // will not be able to merge any duplicate __va_list_tag decls correctly. 197 VAListTagName = PP.getIdentifierInfo("__va_list_tag"); 198 199 if (!TUScope) 200 return; 201 202 // Initialize predefined 128-bit integer types, if needed. 203 if (Context.getTargetInfo().hasInt128Type()) { 204 // If either of the 128-bit integer types are unavailable to name lookup, 205 // define them now. 206 DeclarationName Int128 = &Context.Idents.get("__int128_t"); 207 if (IdResolver.begin(Int128) == IdResolver.end()) 208 PushOnScopeChains(Context.getInt128Decl(), TUScope); 209 210 DeclarationName UInt128 = &Context.Idents.get("__uint128_t"); 211 if (IdResolver.begin(UInt128) == IdResolver.end()) 212 PushOnScopeChains(Context.getUInt128Decl(), TUScope); 213 } 214 215 216 // Initialize predefined Objective-C types: 217 if (getLangOpts().ObjC) { 218 // If 'SEL' does not yet refer to any declarations, make it refer to the 219 // predefined 'SEL'. 220 DeclarationName SEL = &Context.Idents.get("SEL"); 221 if (IdResolver.begin(SEL) == IdResolver.end()) 222 PushOnScopeChains(Context.getObjCSelDecl(), TUScope); 223 224 // If 'id' does not yet refer to any declarations, make it refer to the 225 // predefined 'id'. 226 DeclarationName Id = &Context.Idents.get("id"); 227 if (IdResolver.begin(Id) == IdResolver.end()) 228 PushOnScopeChains(Context.getObjCIdDecl(), TUScope); 229 230 // Create the built-in typedef for 'Class'. 231 DeclarationName Class = &Context.Idents.get("Class"); 232 if (IdResolver.begin(Class) == IdResolver.end()) 233 PushOnScopeChains(Context.getObjCClassDecl(), TUScope); 234 235 // Create the built-in forward declaratino for 'Protocol'. 236 DeclarationName Protocol = &Context.Idents.get("Protocol"); 237 if (IdResolver.begin(Protocol) == IdResolver.end()) 238 PushOnScopeChains(Context.getObjCProtocolDecl(), TUScope); 239 } 240 241 // Create the internal type for the *StringMakeConstantString builtins. 242 DeclarationName ConstantString = &Context.Idents.get("__NSConstantString"); 243 if (IdResolver.begin(ConstantString) == IdResolver.end()) 244 PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope); 245 246 // Initialize Microsoft "predefined C++ types". 247 if (getLangOpts().MSVCCompat) { 248 if (getLangOpts().CPlusPlus && 249 IdResolver.begin(&Context.Idents.get("type_info")) == IdResolver.end()) 250 PushOnScopeChains(Context.buildImplicitRecord("type_info", TTK_Class), 251 TUScope); 252 253 addImplicitTypedef("size_t", Context.getSizeType()); 254 } 255 256 // Initialize predefined OpenCL types and supported extensions and (optional) 257 // core features. 258 if (getLangOpts().OpenCL) { 259 getOpenCLOptions().addSupport(Context.getTargetInfo().getSupportedOpenCLOpts()); 260 getOpenCLOptions().enableSupportedCore(getLangOpts().OpenCLVersion); 261 addImplicitTypedef("sampler_t", Context.OCLSamplerTy); 262 addImplicitTypedef("event_t", Context.OCLEventTy); 263 if (getLangOpts().OpenCLVersion >= 200) { 264 addImplicitTypedef("clk_event_t", Context.OCLClkEventTy); 265 addImplicitTypedef("queue_t", Context.OCLQueueTy); 266 addImplicitTypedef("reserve_id_t", Context.OCLReserveIDTy); 267 addImplicitTypedef("atomic_int", Context.getAtomicType(Context.IntTy)); 268 addImplicitTypedef("atomic_uint", 269 Context.getAtomicType(Context.UnsignedIntTy)); 270 auto AtomicLongT = Context.getAtomicType(Context.LongTy); 271 addImplicitTypedef("atomic_long", AtomicLongT); 272 auto AtomicULongT = Context.getAtomicType(Context.UnsignedLongTy); 273 addImplicitTypedef("atomic_ulong", AtomicULongT); 274 addImplicitTypedef("atomic_float", 275 Context.getAtomicType(Context.FloatTy)); 276 auto AtomicDoubleT = Context.getAtomicType(Context.DoubleTy); 277 addImplicitTypedef("atomic_double", AtomicDoubleT); 278 // OpenCLC v2.0, s6.13.11.6 requires that atomic_flag is implemented as 279 // 32-bit integer and OpenCLC v2.0, s6.1.1 int is always 32-bit wide. 280 addImplicitTypedef("atomic_flag", Context.getAtomicType(Context.IntTy)); 281 auto AtomicIntPtrT = Context.getAtomicType(Context.getIntPtrType()); 282 addImplicitTypedef("atomic_intptr_t", AtomicIntPtrT); 283 auto AtomicUIntPtrT = Context.getAtomicType(Context.getUIntPtrType()); 284 addImplicitTypedef("atomic_uintptr_t", AtomicUIntPtrT); 285 auto AtomicSizeT = Context.getAtomicType(Context.getSizeType()); 286 addImplicitTypedef("atomic_size_t", AtomicSizeT); 287 auto AtomicPtrDiffT = Context.getAtomicType(Context.getPointerDiffType()); 288 addImplicitTypedef("atomic_ptrdiff_t", AtomicPtrDiffT); 289 290 // OpenCL v2.0 s6.13.11.6: 291 // - The atomic_long and atomic_ulong types are supported if the 292 // cl_khr_int64_base_atomics and cl_khr_int64_extended_atomics 293 // extensions are supported. 294 // - The atomic_double type is only supported if double precision 295 // is supported and the cl_khr_int64_base_atomics and 296 // cl_khr_int64_extended_atomics extensions are supported. 297 // - If the device address space is 64-bits, the data types 298 // atomic_intptr_t, atomic_uintptr_t, atomic_size_t and 299 // atomic_ptrdiff_t are supported if the cl_khr_int64_base_atomics and 300 // cl_khr_int64_extended_atomics extensions are supported. 301 std::vector<QualType> Atomic64BitTypes; 302 Atomic64BitTypes.push_back(AtomicLongT); 303 Atomic64BitTypes.push_back(AtomicULongT); 304 Atomic64BitTypes.push_back(AtomicDoubleT); 305 if (Context.getTypeSize(AtomicSizeT) == 64) { 306 Atomic64BitTypes.push_back(AtomicSizeT); 307 Atomic64BitTypes.push_back(AtomicIntPtrT); 308 Atomic64BitTypes.push_back(AtomicUIntPtrT); 309 Atomic64BitTypes.push_back(AtomicPtrDiffT); 310 } 311 for (auto &I : Atomic64BitTypes) 312 setOpenCLExtensionForType(I, 313 "cl_khr_int64_base_atomics cl_khr_int64_extended_atomics"); 314 315 setOpenCLExtensionForType(AtomicDoubleT, "cl_khr_fp64"); 316 } 317 318 setOpenCLExtensionForType(Context.DoubleTy, "cl_khr_fp64"); 319 320 #define GENERIC_IMAGE_TYPE_EXT(Type, Id, Ext) \ 321 setOpenCLExtensionForType(Context.Id, Ext); 322 #include "clang/Basic/OpenCLImageTypes.def" 323 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \ 324 addImplicitTypedef(#ExtType, Context.Id##Ty); \ 325 setOpenCLExtensionForType(Context.Id##Ty, #Ext); 326 #include "clang/Basic/OpenCLExtensionTypes.def" 327 }; 328 329 if (Context.getTargetInfo().hasBuiltinMSVaList()) { 330 DeclarationName MSVaList = &Context.Idents.get("__builtin_ms_va_list"); 331 if (IdResolver.begin(MSVaList) == IdResolver.end()) 332 PushOnScopeChains(Context.getBuiltinMSVaListDecl(), TUScope); 333 } 334 335 DeclarationName BuiltinVaList = &Context.Idents.get("__builtin_va_list"); 336 if (IdResolver.begin(BuiltinVaList) == IdResolver.end()) 337 PushOnScopeChains(Context.getBuiltinVaListDecl(), TUScope); 338 } 339 340 Sema::~Sema() { 341 if (VisContext) FreeVisContext(); 342 343 // Kill all the active scopes. 344 for (sema::FunctionScopeInfo *FSI : FunctionScopes) 345 if (FSI != PreallocatedFunctionScope.get()) 346 delete FSI; 347 348 // Tell the SemaConsumer to forget about us; we're going out of scope. 349 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer)) 350 SC->ForgetSema(); 351 352 // Detach from the external Sema source. 353 if (ExternalSemaSource *ExternalSema 354 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource())) 355 ExternalSema->ForgetSema(); 356 357 // If Sema's ExternalSource is the multiplexer - we own it. 358 if (isMultiplexExternalSource) 359 delete ExternalSource; 360 361 threadSafety::threadSafetyCleanup(ThreadSafetyDeclCache); 362 363 // Destroys data sharing attributes stack for OpenMP 364 DestroyDataSharingAttributesStack(); 365 366 // Detach from the PP callback handler which outlives Sema since it's owned 367 // by the preprocessor. 368 SemaPPCallbackHandler->reset(); 369 370 assert(DelayedTypos.empty() && "Uncorrected typos!"); 371 } 372 373 /// makeUnavailableInSystemHeader - There is an error in the current 374 /// context. If we're still in a system header, and we can plausibly 375 /// make the relevant declaration unavailable instead of erroring, do 376 /// so and return true. 377 bool Sema::makeUnavailableInSystemHeader(SourceLocation loc, 378 UnavailableAttr::ImplicitReason reason) { 379 // If we're not in a function, it's an error. 380 FunctionDecl *fn = dyn_cast<FunctionDecl>(CurContext); 381 if (!fn) return false; 382 383 // If we're in template instantiation, it's an error. 384 if (inTemplateInstantiation()) 385 return false; 386 387 // If that function's not in a system header, it's an error. 388 if (!Context.getSourceManager().isInSystemHeader(loc)) 389 return false; 390 391 // If the function is already unavailable, it's not an error. 392 if (fn->hasAttr<UnavailableAttr>()) return true; 393 394 fn->addAttr(UnavailableAttr::CreateImplicit(Context, "", reason, loc)); 395 return true; 396 } 397 398 ASTMutationListener *Sema::getASTMutationListener() const { 399 return getASTConsumer().GetASTMutationListener(); 400 } 401 402 ///Registers an external source. If an external source already exists, 403 /// creates a multiplex external source and appends to it. 404 /// 405 ///\param[in] E - A non-null external sema source. 406 /// 407 void Sema::addExternalSource(ExternalSemaSource *E) { 408 assert(E && "Cannot use with NULL ptr"); 409 410 if (!ExternalSource) { 411 ExternalSource = E; 412 return; 413 } 414 415 if (isMultiplexExternalSource) 416 static_cast<MultiplexExternalSemaSource*>(ExternalSource)->addSource(*E); 417 else { 418 ExternalSource = new MultiplexExternalSemaSource(*ExternalSource, *E); 419 isMultiplexExternalSource = true; 420 } 421 } 422 423 /// Print out statistics about the semantic analysis. 424 void Sema::PrintStats() const { 425 llvm::errs() << "\n*** Semantic Analysis Stats:\n"; 426 llvm::errs() << NumSFINAEErrors << " SFINAE diagnostics trapped.\n"; 427 428 BumpAlloc.PrintStats(); 429 AnalysisWarnings.PrintStats(); 430 } 431 432 void Sema::diagnoseNullableToNonnullConversion(QualType DstType, 433 QualType SrcType, 434 SourceLocation Loc) { 435 Optional<NullabilityKind> ExprNullability = SrcType->getNullability(Context); 436 if (!ExprNullability || *ExprNullability != NullabilityKind::Nullable) 437 return; 438 439 Optional<NullabilityKind> TypeNullability = DstType->getNullability(Context); 440 if (!TypeNullability || *TypeNullability != NullabilityKind::NonNull) 441 return; 442 443 Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType; 444 } 445 446 void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr* E) { 447 if (Diags.isIgnored(diag::warn_zero_as_null_pointer_constant, 448 E->getBeginLoc())) 449 return; 450 // nullptr only exists from C++11 on, so don't warn on its absence earlier. 451 if (!getLangOpts().CPlusPlus11) 452 return; 453 454 if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer) 455 return; 456 if (E->IgnoreParenImpCasts()->getType()->isNullPtrType()) 457 return; 458 459 // If it is a macro from system header, and if the macro name is not "NULL", 460 // do not warn. 461 SourceLocation MaybeMacroLoc = E->getBeginLoc(); 462 if (Diags.getSuppressSystemWarnings() && 463 SourceMgr.isInSystemMacro(MaybeMacroLoc) && 464 !findMacroSpelling(MaybeMacroLoc, "NULL")) 465 return; 466 467 Diag(E->getBeginLoc(), diag::warn_zero_as_null_pointer_constant) 468 << FixItHint::CreateReplacement(E->getSourceRange(), "nullptr"); 469 } 470 471 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast. 472 /// If there is already an implicit cast, merge into the existing one. 473 /// The result is of the given category. 474 ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty, 475 CastKind Kind, ExprValueKind VK, 476 const CXXCastPath *BasePath, 477 CheckedConversionKind CCK) { 478 #ifndef NDEBUG 479 if (VK == VK_RValue && !E->isRValue()) { 480 switch (Kind) { 481 default: 482 llvm_unreachable("can't implicitly cast lvalue to rvalue with this cast " 483 "kind"); 484 case CK_LValueToRValue: 485 case CK_ArrayToPointerDecay: 486 case CK_FunctionToPointerDecay: 487 case CK_ToVoid: 488 case CK_NonAtomicToAtomic: 489 break; 490 } 491 } 492 assert((VK == VK_RValue || !E->isRValue()) && "can't cast rvalue to lvalue"); 493 #endif 494 495 diagnoseNullableToNonnullConversion(Ty, E->getType(), E->getBeginLoc()); 496 diagnoseZeroToNullptrConversion(Kind, E); 497 498 QualType ExprTy = Context.getCanonicalType(E->getType()); 499 QualType TypeTy = Context.getCanonicalType(Ty); 500 501 if (ExprTy == TypeTy) 502 return E; 503 504 // C++1z [conv.array]: The temporary materialization conversion is applied. 505 // We also use this to fuel C++ DR1213, which applies to C++11 onwards. 506 if (Kind == CK_ArrayToPointerDecay && getLangOpts().CPlusPlus && 507 E->getValueKind() == VK_RValue) { 508 // The temporary is an lvalue in C++98 and an xvalue otherwise. 509 ExprResult Materialized = CreateMaterializeTemporaryExpr( 510 E->getType(), E, !getLangOpts().CPlusPlus11); 511 if (Materialized.isInvalid()) 512 return ExprError(); 513 E = Materialized.get(); 514 } 515 516 if (ImplicitCastExpr *ImpCast = dyn_cast<ImplicitCastExpr>(E)) { 517 if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) { 518 ImpCast->setType(Ty); 519 ImpCast->setValueKind(VK); 520 return E; 521 } 522 } 523 524 return ImplicitCastExpr::Create(Context, Ty, Kind, E, BasePath, VK); 525 } 526 527 /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding 528 /// to the conversion from scalar type ScalarTy to the Boolean type. 529 CastKind Sema::ScalarTypeToBooleanCastKind(QualType ScalarTy) { 530 switch (ScalarTy->getScalarTypeKind()) { 531 case Type::STK_Bool: return CK_NoOp; 532 case Type::STK_CPointer: return CK_PointerToBoolean; 533 case Type::STK_BlockPointer: return CK_PointerToBoolean; 534 case Type::STK_ObjCObjectPointer: return CK_PointerToBoolean; 535 case Type::STK_MemberPointer: return CK_MemberPointerToBoolean; 536 case Type::STK_Integral: return CK_IntegralToBoolean; 537 case Type::STK_Floating: return CK_FloatingToBoolean; 538 case Type::STK_IntegralComplex: return CK_IntegralComplexToBoolean; 539 case Type::STK_FloatingComplex: return CK_FloatingComplexToBoolean; 540 case Type::STK_FixedPoint: return CK_FixedPointToBoolean; 541 } 542 llvm_unreachable("unknown scalar type kind"); 543 } 544 545 /// Used to prune the decls of Sema's UnusedFileScopedDecls vector. 546 static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D) { 547 if (D->getMostRecentDecl()->isUsed()) 548 return true; 549 550 if (D->isExternallyVisible()) 551 return true; 552 553 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 554 // If this is a function template and none of its specializations is used, 555 // we should warn. 556 if (FunctionTemplateDecl *Template = FD->getDescribedFunctionTemplate()) 557 for (const auto *Spec : Template->specializations()) 558 if (ShouldRemoveFromUnused(SemaRef, Spec)) 559 return true; 560 561 // UnusedFileScopedDecls stores the first declaration. 562 // The declaration may have become definition so check again. 563 const FunctionDecl *DeclToCheck; 564 if (FD->hasBody(DeclToCheck)) 565 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 566 567 // Later redecls may add new information resulting in not having to warn, 568 // so check again. 569 DeclToCheck = FD->getMostRecentDecl(); 570 if (DeclToCheck != FD) 571 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 572 } 573 574 if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { 575 // If a variable usable in constant expressions is referenced, 576 // don't warn if it isn't used: if the value of a variable is required 577 // for the computation of a constant expression, it doesn't make sense to 578 // warn even if the variable isn't odr-used. (isReferenced doesn't 579 // precisely reflect that, but it's a decent approximation.) 580 if (VD->isReferenced() && 581 VD->isUsableInConstantExpressions(SemaRef->Context)) 582 return true; 583 584 if (VarTemplateDecl *Template = VD->getDescribedVarTemplate()) 585 // If this is a variable template and none of its specializations is used, 586 // we should warn. 587 for (const auto *Spec : Template->specializations()) 588 if (ShouldRemoveFromUnused(SemaRef, Spec)) 589 return true; 590 591 // UnusedFileScopedDecls stores the first declaration. 592 // The declaration may have become definition so check again. 593 const VarDecl *DeclToCheck = VD->getDefinition(); 594 if (DeclToCheck) 595 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 596 597 // Later redecls may add new information resulting in not having to warn, 598 // so check again. 599 DeclToCheck = VD->getMostRecentDecl(); 600 if (DeclToCheck != VD) 601 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 602 } 603 604 return false; 605 } 606 607 static bool isFunctionOrVarDeclExternC(NamedDecl *ND) { 608 if (auto *FD = dyn_cast<FunctionDecl>(ND)) 609 return FD->isExternC(); 610 return cast<VarDecl>(ND)->isExternC(); 611 } 612 613 /// Determine whether ND is an external-linkage function or variable whose 614 /// type has no linkage. 615 bool Sema::isExternalWithNoLinkageType(ValueDecl *VD) { 616 // Note: it's not quite enough to check whether VD has UniqueExternalLinkage, 617 // because we also want to catch the case where its type has VisibleNoLinkage, 618 // which does not affect the linkage of VD. 619 return getLangOpts().CPlusPlus && VD->hasExternalFormalLinkage() && 620 !isExternalFormalLinkage(VD->getType()->getLinkage()) && 621 !isFunctionOrVarDeclExternC(VD); 622 } 623 624 /// Obtains a sorted list of functions and variables that are undefined but 625 /// ODR-used. 626 void Sema::getUndefinedButUsed( 627 SmallVectorImpl<std::pair<NamedDecl *, SourceLocation> > &Undefined) { 628 for (const auto &UndefinedUse : UndefinedButUsed) { 629 NamedDecl *ND = UndefinedUse.first; 630 631 // Ignore attributes that have become invalid. 632 if (ND->isInvalidDecl()) continue; 633 634 // __attribute__((weakref)) is basically a definition. 635 if (ND->hasAttr<WeakRefAttr>()) continue; 636 637 if (isa<CXXDeductionGuideDecl>(ND)) 638 continue; 639 640 if (ND->hasAttr<DLLImportAttr>() || ND->hasAttr<DLLExportAttr>()) { 641 // An exported function will always be emitted when defined, so even if 642 // the function is inline, it doesn't have to be emitted in this TU. An 643 // imported function implies that it has been exported somewhere else. 644 continue; 645 } 646 647 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) { 648 if (FD->isDefined()) 649 continue; 650 if (FD->isExternallyVisible() && 651 !isExternalWithNoLinkageType(FD) && 652 !FD->getMostRecentDecl()->isInlined() && 653 !FD->hasAttr<ExcludeFromExplicitInstantiationAttr>()) 654 continue; 655 if (FD->getBuiltinID()) 656 continue; 657 } else { 658 auto *VD = cast<VarDecl>(ND); 659 if (VD->hasDefinition() != VarDecl::DeclarationOnly) 660 continue; 661 if (VD->isExternallyVisible() && 662 !isExternalWithNoLinkageType(VD) && 663 !VD->getMostRecentDecl()->isInline() && 664 !VD->hasAttr<ExcludeFromExplicitInstantiationAttr>()) 665 continue; 666 667 // Skip VarDecls that lack formal definitions but which we know are in 668 // fact defined somewhere. 669 if (VD->isKnownToBeDefined()) 670 continue; 671 } 672 673 Undefined.push_back(std::make_pair(ND, UndefinedUse.second)); 674 } 675 } 676 677 /// checkUndefinedButUsed - Check for undefined objects with internal linkage 678 /// or that are inline. 679 static void checkUndefinedButUsed(Sema &S) { 680 if (S.UndefinedButUsed.empty()) return; 681 682 // Collect all the still-undefined entities with internal linkage. 683 SmallVector<std::pair<NamedDecl *, SourceLocation>, 16> Undefined; 684 S.getUndefinedButUsed(Undefined); 685 if (Undefined.empty()) return; 686 687 for (auto Undef : Undefined) { 688 ValueDecl *VD = cast<ValueDecl>(Undef.first); 689 SourceLocation UseLoc = Undef.second; 690 691 if (S.isExternalWithNoLinkageType(VD)) { 692 // C++ [basic.link]p8: 693 // A type without linkage shall not be used as the type of a variable 694 // or function with external linkage unless 695 // -- the entity has C language linkage 696 // -- the entity is not odr-used or is defined in the same TU 697 // 698 // As an extension, accept this in cases where the type is externally 699 // visible, since the function or variable actually can be defined in 700 // another translation unit in that case. 701 S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage()) 702 ? diag::ext_undefined_internal_type 703 : diag::err_undefined_internal_type) 704 << isa<VarDecl>(VD) << VD; 705 } else if (!VD->isExternallyVisible()) { 706 // FIXME: We can promote this to an error. The function or variable can't 707 // be defined anywhere else, so the program must necessarily violate the 708 // one definition rule. 709 S.Diag(VD->getLocation(), diag::warn_undefined_internal) 710 << isa<VarDecl>(VD) << VD; 711 } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) { 712 (void)FD; 713 assert(FD->getMostRecentDecl()->isInlined() && 714 "used object requires definition but isn't inline or internal?"); 715 // FIXME: This is ill-formed; we should reject. 716 S.Diag(VD->getLocation(), diag::warn_undefined_inline) << VD; 717 } else { 718 assert(cast<VarDecl>(VD)->getMostRecentDecl()->isInline() && 719 "used var requires definition but isn't inline or internal?"); 720 S.Diag(VD->getLocation(), diag::err_undefined_inline_var) << VD; 721 } 722 if (UseLoc.isValid()) 723 S.Diag(UseLoc, diag::note_used_here); 724 } 725 726 S.UndefinedButUsed.clear(); 727 } 728 729 void Sema::LoadExternalWeakUndeclaredIdentifiers() { 730 if (!ExternalSource) 731 return; 732 733 SmallVector<std::pair<IdentifierInfo *, WeakInfo>, 4> WeakIDs; 734 ExternalSource->ReadWeakUndeclaredIdentifiers(WeakIDs); 735 for (auto &WeakID : WeakIDs) 736 WeakUndeclaredIdentifiers.insert(WeakID); 737 } 738 739 740 typedef llvm::DenseMap<const CXXRecordDecl*, bool> RecordCompleteMap; 741 742 /// Returns true, if all methods and nested classes of the given 743 /// CXXRecordDecl are defined in this translation unit. 744 /// 745 /// Should only be called from ActOnEndOfTranslationUnit so that all 746 /// definitions are actually read. 747 static bool MethodsAndNestedClassesComplete(const CXXRecordDecl *RD, 748 RecordCompleteMap &MNCComplete) { 749 RecordCompleteMap::iterator Cache = MNCComplete.find(RD); 750 if (Cache != MNCComplete.end()) 751 return Cache->second; 752 if (!RD->isCompleteDefinition()) 753 return false; 754 bool Complete = true; 755 for (DeclContext::decl_iterator I = RD->decls_begin(), 756 E = RD->decls_end(); 757 I != E && Complete; ++I) { 758 if (const CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(*I)) 759 Complete = M->isDefined() || M->isDefaulted() || 760 (M->isPure() && !isa<CXXDestructorDecl>(M)); 761 else if (const FunctionTemplateDecl *F = dyn_cast<FunctionTemplateDecl>(*I)) 762 // If the template function is marked as late template parsed at this 763 // point, it has not been instantiated and therefore we have not 764 // performed semantic analysis on it yet, so we cannot know if the type 765 // can be considered complete. 766 Complete = !F->getTemplatedDecl()->isLateTemplateParsed() && 767 F->getTemplatedDecl()->isDefined(); 768 else if (const CXXRecordDecl *R = dyn_cast<CXXRecordDecl>(*I)) { 769 if (R->isInjectedClassName()) 770 continue; 771 if (R->hasDefinition()) 772 Complete = MethodsAndNestedClassesComplete(R->getDefinition(), 773 MNCComplete); 774 else 775 Complete = false; 776 } 777 } 778 MNCComplete[RD] = Complete; 779 return Complete; 780 } 781 782 /// Returns true, if the given CXXRecordDecl is fully defined in this 783 /// translation unit, i.e. all methods are defined or pure virtual and all 784 /// friends, friend functions and nested classes are fully defined in this 785 /// translation unit. 786 /// 787 /// Should only be called from ActOnEndOfTranslationUnit so that all 788 /// definitions are actually read. 789 static bool IsRecordFullyDefined(const CXXRecordDecl *RD, 790 RecordCompleteMap &RecordsComplete, 791 RecordCompleteMap &MNCComplete) { 792 RecordCompleteMap::iterator Cache = RecordsComplete.find(RD); 793 if (Cache != RecordsComplete.end()) 794 return Cache->second; 795 bool Complete = MethodsAndNestedClassesComplete(RD, MNCComplete); 796 for (CXXRecordDecl::friend_iterator I = RD->friend_begin(), 797 E = RD->friend_end(); 798 I != E && Complete; ++I) { 799 // Check if friend classes and methods are complete. 800 if (TypeSourceInfo *TSI = (*I)->getFriendType()) { 801 // Friend classes are available as the TypeSourceInfo of the FriendDecl. 802 if (CXXRecordDecl *FriendD = TSI->getType()->getAsCXXRecordDecl()) 803 Complete = MethodsAndNestedClassesComplete(FriendD, MNCComplete); 804 else 805 Complete = false; 806 } else { 807 // Friend functions are available through the NamedDecl of FriendDecl. 808 if (const FunctionDecl *FD = 809 dyn_cast<FunctionDecl>((*I)->getFriendDecl())) 810 Complete = FD->isDefined(); 811 else 812 // This is a template friend, give up. 813 Complete = false; 814 } 815 } 816 RecordsComplete[RD] = Complete; 817 return Complete; 818 } 819 820 void Sema::emitAndClearUnusedLocalTypedefWarnings() { 821 if (ExternalSource) 822 ExternalSource->ReadUnusedLocalTypedefNameCandidates( 823 UnusedLocalTypedefNameCandidates); 824 for (const TypedefNameDecl *TD : UnusedLocalTypedefNameCandidates) { 825 if (TD->isReferenced()) 826 continue; 827 Diag(TD->getLocation(), diag::warn_unused_local_typedef) 828 << isa<TypeAliasDecl>(TD) << TD->getDeclName(); 829 } 830 UnusedLocalTypedefNameCandidates.clear(); 831 } 832 833 /// This is called before the very first declaration in the translation unit 834 /// is parsed. Note that the ASTContext may have already injected some 835 /// declarations. 836 void Sema::ActOnStartOfTranslationUnit() { 837 if (getLangOpts().ModulesTS && 838 (getLangOpts().getCompilingModule() == LangOptions::CMK_ModuleInterface || 839 getLangOpts().getCompilingModule() == LangOptions::CMK_None)) { 840 SourceLocation StartOfTU = 841 SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID()); 842 843 // We start in the global module; all those declarations are implicitly 844 // module-private (though they do not have module linkage). 845 auto &Map = PP.getHeaderSearchInfo().getModuleMap(); 846 auto *GlobalModule = Map.createGlobalModuleForInterfaceUnit(StartOfTU); 847 assert(GlobalModule && "module creation should not fail"); 848 849 // Enter the scope of the global module. 850 ModuleScopes.push_back({}); 851 ModuleScopes.back().Module = GlobalModule; 852 VisibleModules.setVisible(GlobalModule, StartOfTU); 853 854 // All declarations created from now on are owned by the global module. 855 auto *TU = Context.getTranslationUnitDecl(); 856 TU->setModuleOwnershipKind(Decl::ModuleOwnershipKind::Visible); 857 TU->setLocalOwningModule(GlobalModule); 858 } 859 } 860 861 /// ActOnEndOfTranslationUnit - This is called at the very end of the 862 /// translation unit when EOF is reached and all but the top-level scope is 863 /// popped. 864 void Sema::ActOnEndOfTranslationUnit() { 865 assert(DelayedDiagnostics.getCurrentPool() == nullptr 866 && "reached end of translation unit with a pool attached?"); 867 868 // If code completion is enabled, don't perform any end-of-translation-unit 869 // work. 870 if (PP.isCodeCompletionEnabled()) 871 return; 872 873 // Transfer late parsed template instantiations over to the pending template 874 // instantiation list. During normal compliation, the late template parser 875 // will be installed and instantiating these templates will succeed. 876 // 877 // If we are building a TU prefix for serialization, it is also safe to 878 // transfer these over, even though they are not parsed. The end of the TU 879 // should be outside of any eager template instantiation scope, so when this 880 // AST is deserialized, these templates will not be parsed until the end of 881 // the combined TU. 882 PendingInstantiations.insert(PendingInstantiations.end(), 883 LateParsedInstantiations.begin(), 884 LateParsedInstantiations.end()); 885 LateParsedInstantiations.clear(); 886 887 // Complete translation units and modules define vtables and perform implicit 888 // instantiations. PCH files do not. 889 if (TUKind != TU_Prefix) { 890 DiagnoseUseOfUnimplementedSelectors(); 891 892 // If DefinedUsedVTables ends up marking any virtual member functions it 893 // might lead to more pending template instantiations, which we then need 894 // to instantiate. 895 DefineUsedVTables(); 896 897 // C++: Perform implicit template instantiations. 898 // 899 // FIXME: When we perform these implicit instantiations, we do not 900 // carefully keep track of the point of instantiation (C++ [temp.point]). 901 // This means that name lookup that occurs within the template 902 // instantiation will always happen at the end of the translation unit, 903 // so it will find some names that are not required to be found. This is 904 // valid, but we could do better by diagnosing if an instantiation uses a 905 // name that was not visible at its first point of instantiation. 906 if (ExternalSource) { 907 // Load pending instantiations from the external source. 908 SmallVector<PendingImplicitInstantiation, 4> Pending; 909 ExternalSource->ReadPendingInstantiations(Pending); 910 for (auto PII : Pending) 911 if (auto Func = dyn_cast<FunctionDecl>(PII.first)) 912 Func->setInstantiationIsPending(true); 913 PendingInstantiations.insert(PendingInstantiations.begin(), 914 Pending.begin(), Pending.end()); 915 } 916 917 PerformPendingInstantiations(); 918 919 assert(LateParsedInstantiations.empty() && 920 "end of TU template instantiation should not create more " 921 "late-parsed templates"); 922 923 if (LateTemplateParserCleanup) 924 LateTemplateParserCleanup(OpaqueParser); 925 926 CheckDelayedMemberExceptionSpecs(); 927 } 928 929 DiagnoseUnterminatedPragmaPack(); 930 DiagnoseUnterminatedPragmaAttribute(); 931 932 // All delayed member exception specs should be checked or we end up accepting 933 // incompatible declarations. 934 assert(DelayedOverridingExceptionSpecChecks.empty()); 935 assert(DelayedEquivalentExceptionSpecChecks.empty()); 936 assert(DelayedDefaultedMemberExceptionSpecs.empty()); 937 938 // All dllexport classes should have been processed already. 939 assert(DelayedDllExportClasses.empty()); 940 941 // Remove file scoped decls that turned out to be used. 942 UnusedFileScopedDecls.erase( 943 std::remove_if(UnusedFileScopedDecls.begin(nullptr, true), 944 UnusedFileScopedDecls.end(), 945 [this](const DeclaratorDecl *DD) { 946 return ShouldRemoveFromUnused(this, DD); 947 }), 948 UnusedFileScopedDecls.end()); 949 950 if (TUKind == TU_Prefix) { 951 // Translation unit prefixes don't need any of the checking below. 952 if (!PP.isIncrementalProcessingEnabled()) 953 TUScope = nullptr; 954 return; 955 } 956 957 // Check for #pragma weak identifiers that were never declared 958 LoadExternalWeakUndeclaredIdentifiers(); 959 for (auto WeakID : WeakUndeclaredIdentifiers) { 960 if (WeakID.second.getUsed()) 961 continue; 962 963 Decl *PrevDecl = LookupSingleName(TUScope, WeakID.first, SourceLocation(), 964 LookupOrdinaryName); 965 if (PrevDecl != nullptr && 966 !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl))) 967 Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type) 968 << "'weak'" << ExpectedVariableOrFunction; 969 else 970 Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared) 971 << WeakID.first; 972 } 973 974 if (LangOpts.CPlusPlus11 && 975 !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation())) 976 CheckDelegatingCtorCycles(); 977 978 if (!Diags.hasErrorOccurred()) { 979 if (ExternalSource) 980 ExternalSource->ReadUndefinedButUsed(UndefinedButUsed); 981 checkUndefinedButUsed(*this); 982 } 983 984 if (TUKind == TU_Module) { 985 // If we are building a module interface unit, we need to have seen the 986 // module declaration by now. 987 if (getLangOpts().getCompilingModule() == 988 LangOptions::CMK_ModuleInterface && 989 (ModuleScopes.empty() || 990 ModuleScopes.back().Module->Kind != Module::ModuleInterfaceUnit)) { 991 // FIXME: Make a better guess as to where to put the module declaration. 992 Diag(getSourceManager().getLocForStartOfFile( 993 getSourceManager().getMainFileID()), 994 diag::err_module_declaration_missing); 995 } 996 997 // If we are building a module, resolve all of the exported declarations 998 // now. 999 if (Module *CurrentModule = PP.getCurrentModule()) { 1000 ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap(); 1001 1002 SmallVector<Module *, 2> Stack; 1003 Stack.push_back(CurrentModule); 1004 while (!Stack.empty()) { 1005 Module *Mod = Stack.pop_back_val(); 1006 1007 // Resolve the exported declarations and conflicts. 1008 // FIXME: Actually complain, once we figure out how to teach the 1009 // diagnostic client to deal with complaints in the module map at this 1010 // point. 1011 ModMap.resolveExports(Mod, /*Complain=*/false); 1012 ModMap.resolveUses(Mod, /*Complain=*/false); 1013 ModMap.resolveConflicts(Mod, /*Complain=*/false); 1014 1015 // Queue the submodules, so their exports will also be resolved. 1016 Stack.append(Mod->submodule_begin(), Mod->submodule_end()); 1017 } 1018 } 1019 1020 // Warnings emitted in ActOnEndOfTranslationUnit() should be emitted for 1021 // modules when they are built, not every time they are used. 1022 emitAndClearUnusedLocalTypedefWarnings(); 1023 } 1024 1025 // C99 6.9.2p2: 1026 // A declaration of an identifier for an object that has file 1027 // scope without an initializer, and without a storage-class 1028 // specifier or with the storage-class specifier static, 1029 // constitutes a tentative definition. If a translation unit 1030 // contains one or more tentative definitions for an identifier, 1031 // and the translation unit contains no external definition for 1032 // that identifier, then the behavior is exactly as if the 1033 // translation unit contains a file scope declaration of that 1034 // identifier, with the composite type as of the end of the 1035 // translation unit, with an initializer equal to 0. 1036 llvm::SmallSet<VarDecl *, 32> Seen; 1037 for (TentativeDefinitionsType::iterator 1038 T = TentativeDefinitions.begin(ExternalSource), 1039 TEnd = TentativeDefinitions.end(); 1040 T != TEnd; ++T) { 1041 VarDecl *VD = (*T)->getActingDefinition(); 1042 1043 // If the tentative definition was completed, getActingDefinition() returns 1044 // null. If we've already seen this variable before, insert()'s second 1045 // return value is false. 1046 if (!VD || VD->isInvalidDecl() || !Seen.insert(VD).second) 1047 continue; 1048 1049 if (const IncompleteArrayType *ArrayT 1050 = Context.getAsIncompleteArrayType(VD->getType())) { 1051 // Set the length of the array to 1 (C99 6.9.2p5). 1052 Diag(VD->getLocation(), diag::warn_tentative_incomplete_array); 1053 llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true); 1054 QualType T = Context.getConstantArrayType(ArrayT->getElementType(), 1055 One, ArrayType::Normal, 0); 1056 VD->setType(T); 1057 } else if (RequireCompleteType(VD->getLocation(), VD->getType(), 1058 diag::err_tentative_def_incomplete_type)) 1059 VD->setInvalidDecl(); 1060 1061 // No initialization is performed for a tentative definition. 1062 CheckCompleteVariableDeclaration(VD); 1063 1064 // Notify the consumer that we've completed a tentative definition. 1065 if (!VD->isInvalidDecl()) 1066 Consumer.CompleteTentativeDefinition(VD); 1067 } 1068 1069 // If there were errors, disable 'unused' warnings since they will mostly be 1070 // noise. Don't warn for a use from a module: either we should warn on all 1071 // file-scope declarations in modules or not at all, but whether the 1072 // declaration is used is immaterial. 1073 if (!Diags.hasErrorOccurred() && TUKind != TU_Module) { 1074 // Output warning for unused file scoped decls. 1075 for (UnusedFileScopedDeclsType::iterator 1076 I = UnusedFileScopedDecls.begin(ExternalSource), 1077 E = UnusedFileScopedDecls.end(); I != E; ++I) { 1078 if (ShouldRemoveFromUnused(this, *I)) 1079 continue; 1080 1081 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) { 1082 const FunctionDecl *DiagD; 1083 if (!FD->hasBody(DiagD)) 1084 DiagD = FD; 1085 if (DiagD->isDeleted()) 1086 continue; // Deleted functions are supposed to be unused. 1087 if (DiagD->isReferenced()) { 1088 if (isa<CXXMethodDecl>(DiagD)) 1089 Diag(DiagD->getLocation(), diag::warn_unneeded_member_function) 1090 << DiagD->getDeclName(); 1091 else { 1092 if (FD->getStorageClass() == SC_Static && 1093 !FD->isInlineSpecified() && 1094 !SourceMgr.isInMainFile( 1095 SourceMgr.getExpansionLoc(FD->getLocation()))) 1096 Diag(DiagD->getLocation(), 1097 diag::warn_unneeded_static_internal_decl) 1098 << DiagD->getDeclName(); 1099 else 1100 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) 1101 << /*function*/0 << DiagD->getDeclName(); 1102 } 1103 } else { 1104 if (FD->getDescribedFunctionTemplate()) 1105 Diag(DiagD->getLocation(), diag::warn_unused_template) 1106 << /*function*/0 << DiagD->getDeclName(); 1107 else 1108 Diag(DiagD->getLocation(), 1109 isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function 1110 : diag::warn_unused_function) 1111 << DiagD->getDeclName(); 1112 } 1113 } else { 1114 const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition(); 1115 if (!DiagD) 1116 DiagD = cast<VarDecl>(*I); 1117 if (DiagD->isReferenced()) { 1118 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) 1119 << /*variable*/1 << DiagD->getDeclName(); 1120 } else if (DiagD->getType().isConstQualified()) { 1121 const SourceManager &SM = SourceMgr; 1122 if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) || 1123 !PP.getLangOpts().IsHeaderFile) 1124 Diag(DiagD->getLocation(), diag::warn_unused_const_variable) 1125 << DiagD->getDeclName(); 1126 } else { 1127 if (DiagD->getDescribedVarTemplate()) 1128 Diag(DiagD->getLocation(), diag::warn_unused_template) 1129 << /*variable*/1 << DiagD->getDeclName(); 1130 else 1131 Diag(DiagD->getLocation(), diag::warn_unused_variable) 1132 << DiagD->getDeclName(); 1133 } 1134 } 1135 } 1136 1137 emitAndClearUnusedLocalTypedefWarnings(); 1138 } 1139 1140 if (!Diags.isIgnored(diag::warn_unused_private_field, SourceLocation())) { 1141 // FIXME: Load additional unused private field candidates from the external 1142 // source. 1143 RecordCompleteMap RecordsComplete; 1144 RecordCompleteMap MNCComplete; 1145 for (NamedDeclSetType::iterator I = UnusedPrivateFields.begin(), 1146 E = UnusedPrivateFields.end(); I != E; ++I) { 1147 const NamedDecl *D = *I; 1148 const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D->getDeclContext()); 1149 if (RD && !RD->isUnion() && 1150 IsRecordFullyDefined(RD, RecordsComplete, MNCComplete)) { 1151 Diag(D->getLocation(), diag::warn_unused_private_field) 1152 << D->getDeclName(); 1153 } 1154 } 1155 } 1156 1157 if (!Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation())) { 1158 if (ExternalSource) 1159 ExternalSource->ReadMismatchingDeleteExpressions(DeleteExprs); 1160 for (const auto &DeletedFieldInfo : DeleteExprs) { 1161 for (const auto &DeleteExprLoc : DeletedFieldInfo.second) { 1162 AnalyzeDeleteExprMismatch(DeletedFieldInfo.first, DeleteExprLoc.first, 1163 DeleteExprLoc.second); 1164 } 1165 } 1166 } 1167 1168 // Check we've noticed that we're no longer parsing the initializer for every 1169 // variable. If we miss cases, then at best we have a performance issue and 1170 // at worst a rejects-valid bug. 1171 assert(ParsingInitForAutoVars.empty() && 1172 "Didn't unmark var as having its initializer parsed"); 1173 1174 if (!PP.isIncrementalProcessingEnabled()) 1175 TUScope = nullptr; 1176 } 1177 1178 1179 //===----------------------------------------------------------------------===// 1180 // Helper functions. 1181 //===----------------------------------------------------------------------===// 1182 1183 DeclContext *Sema::getFunctionLevelDeclContext() { 1184 DeclContext *DC = CurContext; 1185 1186 while (true) { 1187 if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC)) { 1188 DC = DC->getParent(); 1189 } else if (isa<CXXMethodDecl>(DC) && 1190 cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call && 1191 cast<CXXRecordDecl>(DC->getParent())->isLambda()) { 1192 DC = DC->getParent()->getParent(); 1193 } 1194 else break; 1195 } 1196 1197 return DC; 1198 } 1199 1200 /// getCurFunctionDecl - If inside of a function body, this returns a pointer 1201 /// to the function decl for the function being parsed. If we're currently 1202 /// in a 'block', this returns the containing context. 1203 FunctionDecl *Sema::getCurFunctionDecl() { 1204 DeclContext *DC = getFunctionLevelDeclContext(); 1205 return dyn_cast<FunctionDecl>(DC); 1206 } 1207 1208 ObjCMethodDecl *Sema::getCurMethodDecl() { 1209 DeclContext *DC = getFunctionLevelDeclContext(); 1210 while (isa<RecordDecl>(DC)) 1211 DC = DC->getParent(); 1212 return dyn_cast<ObjCMethodDecl>(DC); 1213 } 1214 1215 NamedDecl *Sema::getCurFunctionOrMethodDecl() { 1216 DeclContext *DC = getFunctionLevelDeclContext(); 1217 if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC)) 1218 return cast<NamedDecl>(DC); 1219 return nullptr; 1220 } 1221 1222 void Sema::EmitCurrentDiagnostic(unsigned DiagID) { 1223 // FIXME: It doesn't make sense to me that DiagID is an incoming argument here 1224 // and yet we also use the current diag ID on the DiagnosticsEngine. This has 1225 // been made more painfully obvious by the refactor that introduced this 1226 // function, but it is possible that the incoming argument can be 1227 // eliminated. If it truly cannot be (for example, there is some reentrancy 1228 // issue I am not seeing yet), then there should at least be a clarifying 1229 // comment somewhere. 1230 if (Optional<TemplateDeductionInfo*> Info = isSFINAEContext()) { 1231 switch (DiagnosticIDs::getDiagnosticSFINAEResponse( 1232 Diags.getCurrentDiagID())) { 1233 case DiagnosticIDs::SFINAE_Report: 1234 // We'll report the diagnostic below. 1235 break; 1236 1237 case DiagnosticIDs::SFINAE_SubstitutionFailure: 1238 // Count this failure so that we know that template argument deduction 1239 // has failed. 1240 ++NumSFINAEErrors; 1241 1242 // Make a copy of this suppressed diagnostic and store it with the 1243 // template-deduction information. 1244 if (*Info && !(*Info)->hasSFINAEDiagnostic()) { 1245 Diagnostic DiagInfo(&Diags); 1246 (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(), 1247 PartialDiagnostic(DiagInfo, Context.getDiagAllocator())); 1248 } 1249 1250 Diags.setLastDiagnosticIgnored(); 1251 Diags.Clear(); 1252 return; 1253 1254 case DiagnosticIDs::SFINAE_AccessControl: { 1255 // Per C++ Core Issue 1170, access control is part of SFINAE. 1256 // Additionally, the AccessCheckingSFINAE flag can be used to temporarily 1257 // make access control a part of SFINAE for the purposes of checking 1258 // type traits. 1259 if (!AccessCheckingSFINAE && !getLangOpts().CPlusPlus11) 1260 break; 1261 1262 SourceLocation Loc = Diags.getCurrentDiagLoc(); 1263 1264 // Suppress this diagnostic. 1265 ++NumSFINAEErrors; 1266 1267 // Make a copy of this suppressed diagnostic and store it with the 1268 // template-deduction information. 1269 if (*Info && !(*Info)->hasSFINAEDiagnostic()) { 1270 Diagnostic DiagInfo(&Diags); 1271 (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(), 1272 PartialDiagnostic(DiagInfo, Context.getDiagAllocator())); 1273 } 1274 1275 Diags.setLastDiagnosticIgnored(); 1276 Diags.Clear(); 1277 1278 // Now the diagnostic state is clear, produce a C++98 compatibility 1279 // warning. 1280 Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control); 1281 1282 // The last diagnostic which Sema produced was ignored. Suppress any 1283 // notes attached to it. 1284 Diags.setLastDiagnosticIgnored(); 1285 return; 1286 } 1287 1288 case DiagnosticIDs::SFINAE_Suppress: 1289 // Make a copy of this suppressed diagnostic and store it with the 1290 // template-deduction information; 1291 if (*Info) { 1292 Diagnostic DiagInfo(&Diags); 1293 (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(), 1294 PartialDiagnostic(DiagInfo, Context.getDiagAllocator())); 1295 } 1296 1297 // Suppress this diagnostic. 1298 Diags.setLastDiagnosticIgnored(); 1299 Diags.Clear(); 1300 return; 1301 } 1302 } 1303 1304 // Copy the diagnostic printing policy over the ASTContext printing policy. 1305 // TODO: Stop doing that. See: https://reviews.llvm.org/D45093#1090292 1306 Context.setPrintingPolicy(getPrintingPolicy()); 1307 1308 // Emit the diagnostic. 1309 if (!Diags.EmitCurrentDiagnostic()) 1310 return; 1311 1312 // If this is not a note, and we're in a template instantiation 1313 // that is different from the last template instantiation where 1314 // we emitted an error, print a template instantiation 1315 // backtrace. 1316 if (!DiagnosticIDs::isBuiltinNote(DiagID)) 1317 PrintContextStack(); 1318 } 1319 1320 Sema::SemaDiagnosticBuilder 1321 Sema::Diag(SourceLocation Loc, const PartialDiagnostic& PD) { 1322 SemaDiagnosticBuilder Builder(Diag(Loc, PD.getDiagID())); 1323 PD.Emit(Builder); 1324 1325 return Builder; 1326 } 1327 1328 /// Looks through the macro-expansion chain for the given 1329 /// location, looking for a macro expansion with the given name. 1330 /// If one is found, returns true and sets the location to that 1331 /// expansion loc. 1332 bool Sema::findMacroSpelling(SourceLocation &locref, StringRef name) { 1333 SourceLocation loc = locref; 1334 if (!loc.isMacroID()) return false; 1335 1336 // There's no good way right now to look at the intermediate 1337 // expansions, so just jump to the expansion location. 1338 loc = getSourceManager().getExpansionLoc(loc); 1339 1340 // If that's written with the name, stop here. 1341 SmallVector<char, 16> buffer; 1342 if (getPreprocessor().getSpelling(loc, buffer) == name) { 1343 locref = loc; 1344 return true; 1345 } 1346 return false; 1347 } 1348 1349 /// Determines the active Scope associated with the given declaration 1350 /// context. 1351 /// 1352 /// This routine maps a declaration context to the active Scope object that 1353 /// represents that declaration context in the parser. It is typically used 1354 /// from "scope-less" code (e.g., template instantiation, lazy creation of 1355 /// declarations) that injects a name for name-lookup purposes and, therefore, 1356 /// must update the Scope. 1357 /// 1358 /// \returns The scope corresponding to the given declaraion context, or NULL 1359 /// if no such scope is open. 1360 Scope *Sema::getScopeForContext(DeclContext *Ctx) { 1361 1362 if (!Ctx) 1363 return nullptr; 1364 1365 Ctx = Ctx->getPrimaryContext(); 1366 for (Scope *S = getCurScope(); S; S = S->getParent()) { 1367 // Ignore scopes that cannot have declarations. This is important for 1368 // out-of-line definitions of static class members. 1369 if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope)) 1370 if (DeclContext *Entity = S->getEntity()) 1371 if (Ctx == Entity->getPrimaryContext()) 1372 return S; 1373 } 1374 1375 return nullptr; 1376 } 1377 1378 /// Enter a new function scope 1379 void Sema::PushFunctionScope() { 1380 if (FunctionScopes.empty()) { 1381 // Use PreallocatedFunctionScope to avoid allocating memory when possible. 1382 PreallocatedFunctionScope->Clear(); 1383 FunctionScopes.push_back(PreallocatedFunctionScope.get()); 1384 } else { 1385 FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics())); 1386 } 1387 if (LangOpts.OpenMP) 1388 pushOpenMPFunctionRegion(); 1389 } 1390 1391 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) { 1392 FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(), 1393 BlockScope, Block)); 1394 } 1395 1396 LambdaScopeInfo *Sema::PushLambdaScope() { 1397 LambdaScopeInfo *const LSI = new LambdaScopeInfo(getDiagnostics()); 1398 FunctionScopes.push_back(LSI); 1399 return LSI; 1400 } 1401 1402 void Sema::RecordParsingTemplateParameterDepth(unsigned Depth) { 1403 if (LambdaScopeInfo *const LSI = getCurLambda()) { 1404 LSI->AutoTemplateParameterDepth = Depth; 1405 return; 1406 } 1407 llvm_unreachable( 1408 "Remove assertion if intentionally called in a non-lambda context."); 1409 } 1410 1411 // Check that the type of the VarDecl has an accessible copy constructor and 1412 // resolve its destructor's exception spefication. 1413 static void checkEscapingByref(VarDecl *VD, Sema &S) { 1414 QualType T = VD->getType(); 1415 EnterExpressionEvaluationContext scope( 1416 S, Sema::ExpressionEvaluationContext::PotentiallyEvaluated); 1417 SourceLocation Loc = VD->getLocation(); 1418 Expr *VarRef = 1419 new (S.Context) DeclRefExpr(S.Context, VD, false, T, VK_LValue, Loc); 1420 ExprResult Result = S.PerformMoveOrCopyInitialization( 1421 InitializedEntity::InitializeBlock(Loc, T, false), VD, VD->getType(), 1422 VarRef, /*AllowNRVO=*/true); 1423 if (!Result.isInvalid()) { 1424 Result = S.MaybeCreateExprWithCleanups(Result); 1425 Expr *Init = Result.getAs<Expr>(); 1426 S.Context.setBlockVarCopyInit(VD, Init, S.canThrow(Init)); 1427 } 1428 1429 // The destructor's exception spefication is needed when IRGen generates 1430 // block copy/destroy functions. Resolve it here. 1431 if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) 1432 if (CXXDestructorDecl *DD = RD->getDestructor()) { 1433 auto *FPT = DD->getType()->getAs<FunctionProtoType>(); 1434 S.ResolveExceptionSpec(Loc, FPT); 1435 } 1436 } 1437 1438 static void markEscapingByrefs(const FunctionScopeInfo &FSI, Sema &S) { 1439 // Set the EscapingByref flag of __block variables captured by 1440 // escaping blocks. 1441 for (const BlockDecl *BD : FSI.Blocks) { 1442 if (BD->doesNotEscape()) 1443 continue; 1444 for (const BlockDecl::Capture &BC : BD->captures()) { 1445 VarDecl *VD = BC.getVariable(); 1446 if (VD->hasAttr<BlocksAttr>()) 1447 VD->setEscapingByref(); 1448 } 1449 } 1450 1451 for (VarDecl *VD : FSI.ByrefBlockVars) { 1452 // __block variables might require us to capture a copy-initializer. 1453 if (!VD->isEscapingByref()) 1454 continue; 1455 // It's currently invalid to ever have a __block variable with an 1456 // array type; should we diagnose that here? 1457 // Regardless, we don't want to ignore array nesting when 1458 // constructing this copy. 1459 if (VD->getType()->isStructureOrClassType()) 1460 checkEscapingByref(VD, S); 1461 } 1462 } 1463 1464 void Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP, 1465 const Decl *D, const BlockExpr *blkExpr) { 1466 assert(!FunctionScopes.empty() && "mismatched push/pop!"); 1467 1468 // This function shouldn't be called after popping the current function scope. 1469 // markEscapingByrefs calls PerformMoveOrCopyInitialization, which can call 1470 // PushFunctionScope, which can cause clearing out PreallocatedFunctionScope 1471 // when FunctionScopes is empty. 1472 markEscapingByrefs(*FunctionScopes.back(), *this); 1473 1474 FunctionScopeInfo *Scope = FunctionScopes.pop_back_val(); 1475 1476 if (LangOpts.OpenMP) 1477 popOpenMPFunctionRegion(Scope); 1478 1479 // Issue any analysis-based warnings. 1480 if (WP && D) 1481 AnalysisWarnings.IssueWarnings(*WP, Scope, D, blkExpr); 1482 else 1483 for (const auto &PUD : Scope->PossiblyUnreachableDiags) 1484 Diag(PUD.Loc, PUD.PD); 1485 1486 // Delete the scope unless its our preallocated scope. 1487 if (Scope != PreallocatedFunctionScope.get()) 1488 delete Scope; 1489 } 1490 1491 void Sema::PushCompoundScope(bool IsStmtExpr) { 1492 getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr)); 1493 } 1494 1495 void Sema::PopCompoundScope() { 1496 FunctionScopeInfo *CurFunction = getCurFunction(); 1497 assert(!CurFunction->CompoundScopes.empty() && "mismatched push/pop"); 1498 1499 CurFunction->CompoundScopes.pop_back(); 1500 } 1501 1502 /// Determine whether any errors occurred within this function/method/ 1503 /// block. 1504 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const { 1505 return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred(); 1506 } 1507 1508 void Sema::setFunctionHasBranchIntoScope() { 1509 if (!FunctionScopes.empty()) 1510 FunctionScopes.back()->setHasBranchIntoScope(); 1511 } 1512 1513 void Sema::setFunctionHasBranchProtectedScope() { 1514 if (!FunctionScopes.empty()) 1515 FunctionScopes.back()->setHasBranchProtectedScope(); 1516 } 1517 1518 void Sema::setFunctionHasIndirectGoto() { 1519 if (!FunctionScopes.empty()) 1520 FunctionScopes.back()->setHasIndirectGoto(); 1521 } 1522 1523 BlockScopeInfo *Sema::getCurBlock() { 1524 if (FunctionScopes.empty()) 1525 return nullptr; 1526 1527 auto CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back()); 1528 if (CurBSI && CurBSI->TheDecl && 1529 !CurBSI->TheDecl->Encloses(CurContext)) { 1530 // We have switched contexts due to template instantiation. 1531 assert(!CodeSynthesisContexts.empty()); 1532 return nullptr; 1533 } 1534 1535 return CurBSI; 1536 } 1537 1538 FunctionScopeInfo *Sema::getEnclosingFunction() const { 1539 if (FunctionScopes.empty()) 1540 return nullptr; 1541 1542 for (int e = FunctionScopes.size() - 1; e >= 0; --e) { 1543 if (isa<sema::BlockScopeInfo>(FunctionScopes[e])) 1544 continue; 1545 return FunctionScopes[e]; 1546 } 1547 return nullptr; 1548 } 1549 1550 LambdaScopeInfo *Sema::getCurLambda(bool IgnoreNonLambdaCapturingScope) { 1551 if (FunctionScopes.empty()) 1552 return nullptr; 1553 1554 auto I = FunctionScopes.rbegin(); 1555 if (IgnoreNonLambdaCapturingScope) { 1556 auto E = FunctionScopes.rend(); 1557 while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I)) 1558 ++I; 1559 if (I == E) 1560 return nullptr; 1561 } 1562 auto *CurLSI = dyn_cast<LambdaScopeInfo>(*I); 1563 if (CurLSI && CurLSI->Lambda && 1564 !CurLSI->Lambda->Encloses(CurContext)) { 1565 // We have switched contexts due to template instantiation. 1566 assert(!CodeSynthesisContexts.empty()); 1567 return nullptr; 1568 } 1569 1570 return CurLSI; 1571 } 1572 // We have a generic lambda if we parsed auto parameters, or we have 1573 // an associated template parameter list. 1574 LambdaScopeInfo *Sema::getCurGenericLambda() { 1575 if (LambdaScopeInfo *LSI = getCurLambda()) { 1576 return (LSI->AutoTemplateParams.size() || 1577 LSI->GLTemplateParameterList) ? LSI : nullptr; 1578 } 1579 return nullptr; 1580 } 1581 1582 1583 void Sema::ActOnComment(SourceRange Comment) { 1584 if (!LangOpts.RetainCommentsFromSystemHeaders && 1585 SourceMgr.isInSystemHeader(Comment.getBegin())) 1586 return; 1587 RawComment RC(SourceMgr, Comment, LangOpts.CommentOpts, false); 1588 if (RC.isAlmostTrailingComment()) { 1589 SourceRange MagicMarkerRange(Comment.getBegin(), 1590 Comment.getBegin().getLocWithOffset(3)); 1591 StringRef MagicMarkerText; 1592 switch (RC.getKind()) { 1593 case RawComment::RCK_OrdinaryBCPL: 1594 MagicMarkerText = "///<"; 1595 break; 1596 case RawComment::RCK_OrdinaryC: 1597 MagicMarkerText = "/**<"; 1598 break; 1599 default: 1600 llvm_unreachable("if this is an almost Doxygen comment, " 1601 "it should be ordinary"); 1602 } 1603 Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) << 1604 FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText); 1605 } 1606 Context.addComment(RC); 1607 } 1608 1609 // Pin this vtable to this file. 1610 ExternalSemaSource::~ExternalSemaSource() {} 1611 1612 void ExternalSemaSource::ReadMethodPool(Selector Sel) { } 1613 void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { } 1614 1615 void ExternalSemaSource::ReadKnownNamespaces( 1616 SmallVectorImpl<NamespaceDecl *> &Namespaces) { 1617 } 1618 1619 void ExternalSemaSource::ReadUndefinedButUsed( 1620 llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {} 1621 1622 void ExternalSemaSource::ReadMismatchingDeleteExpressions(llvm::MapVector< 1623 FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &) {} 1624 1625 /// Figure out if an expression could be turned into a call. 1626 /// 1627 /// Use this when trying to recover from an error where the programmer may have 1628 /// written just the name of a function instead of actually calling it. 1629 /// 1630 /// \param E - The expression to examine. 1631 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call 1632 /// with no arguments, this parameter is set to the type returned by such a 1633 /// call; otherwise, it is set to an empty QualType. 1634 /// \param OverloadSet - If the expression is an overloaded function 1635 /// name, this parameter is populated with the decls of the various overloads. 1636 bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy, 1637 UnresolvedSetImpl &OverloadSet) { 1638 ZeroArgCallReturnTy = QualType(); 1639 OverloadSet.clear(); 1640 1641 const OverloadExpr *Overloads = nullptr; 1642 bool IsMemExpr = false; 1643 if (E.getType() == Context.OverloadTy) { 1644 OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E)); 1645 1646 // Ignore overloads that are pointer-to-member constants. 1647 if (FR.HasFormOfMemberPointer) 1648 return false; 1649 1650 Overloads = FR.Expression; 1651 } else if (E.getType() == Context.BoundMemberTy) { 1652 Overloads = dyn_cast<UnresolvedMemberExpr>(E.IgnoreParens()); 1653 IsMemExpr = true; 1654 } 1655 1656 bool Ambiguous = false; 1657 bool IsMV = false; 1658 1659 if (Overloads) { 1660 for (OverloadExpr::decls_iterator it = Overloads->decls_begin(), 1661 DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) { 1662 OverloadSet.addDecl(*it); 1663 1664 // Check whether the function is a non-template, non-member which takes no 1665 // arguments. 1666 if (IsMemExpr) 1667 continue; 1668 if (const FunctionDecl *OverloadDecl 1669 = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) { 1670 if (OverloadDecl->getMinRequiredArguments() == 0) { 1671 if (!ZeroArgCallReturnTy.isNull() && !Ambiguous && 1672 (!IsMV || !(OverloadDecl->isCPUDispatchMultiVersion() || 1673 OverloadDecl->isCPUSpecificMultiVersion()))) { 1674 ZeroArgCallReturnTy = QualType(); 1675 Ambiguous = true; 1676 } else { 1677 ZeroArgCallReturnTy = OverloadDecl->getReturnType(); 1678 IsMV = OverloadDecl->isCPUDispatchMultiVersion() || 1679 OverloadDecl->isCPUSpecificMultiVersion(); 1680 } 1681 } 1682 } 1683 } 1684 1685 // If it's not a member, use better machinery to try to resolve the call 1686 if (!IsMemExpr) 1687 return !ZeroArgCallReturnTy.isNull(); 1688 } 1689 1690 // Attempt to call the member with no arguments - this will correctly handle 1691 // member templates with defaults/deduction of template arguments, overloads 1692 // with default arguments, etc. 1693 if (IsMemExpr && !E.isTypeDependent()) { 1694 bool Suppress = getDiagnostics().getSuppressAllDiagnostics(); 1695 getDiagnostics().setSuppressAllDiagnostics(true); 1696 ExprResult R = BuildCallToMemberFunction(nullptr, &E, SourceLocation(), 1697 None, SourceLocation()); 1698 getDiagnostics().setSuppressAllDiagnostics(Suppress); 1699 if (R.isUsable()) { 1700 ZeroArgCallReturnTy = R.get()->getType(); 1701 return true; 1702 } 1703 return false; 1704 } 1705 1706 if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) { 1707 if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) { 1708 if (Fun->getMinRequiredArguments() == 0) 1709 ZeroArgCallReturnTy = Fun->getReturnType(); 1710 return true; 1711 } 1712 } 1713 1714 // We don't have an expression that's convenient to get a FunctionDecl from, 1715 // but we can at least check if the type is "function of 0 arguments". 1716 QualType ExprTy = E.getType(); 1717 const FunctionType *FunTy = nullptr; 1718 QualType PointeeTy = ExprTy->getPointeeType(); 1719 if (!PointeeTy.isNull()) 1720 FunTy = PointeeTy->getAs<FunctionType>(); 1721 if (!FunTy) 1722 FunTy = ExprTy->getAs<FunctionType>(); 1723 1724 if (const FunctionProtoType *FPT = 1725 dyn_cast_or_null<FunctionProtoType>(FunTy)) { 1726 if (FPT->getNumParams() == 0) 1727 ZeroArgCallReturnTy = FunTy->getReturnType(); 1728 return true; 1729 } 1730 return false; 1731 } 1732 1733 /// Give notes for a set of overloads. 1734 /// 1735 /// A companion to tryExprAsCall. In cases when the name that the programmer 1736 /// wrote was an overloaded function, we may be able to make some guesses about 1737 /// plausible overloads based on their return types; such guesses can be handed 1738 /// off to this method to be emitted as notes. 1739 /// 1740 /// \param Overloads - The overloads to note. 1741 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to 1742 /// -fshow-overloads=best, this is the location to attach to the note about too 1743 /// many candidates. Typically this will be the location of the original 1744 /// ill-formed expression. 1745 static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, 1746 const SourceLocation FinalNoteLoc) { 1747 int ShownOverloads = 0; 1748 int SuppressedOverloads = 0; 1749 for (UnresolvedSetImpl::iterator It = Overloads.begin(), 1750 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 1751 // FIXME: Magic number for max shown overloads stolen from 1752 // OverloadCandidateSet::NoteCandidates. 1753 if (ShownOverloads >= 4 && S.Diags.getShowOverloads() == Ovl_Best) { 1754 ++SuppressedOverloads; 1755 continue; 1756 } 1757 1758 NamedDecl *Fn = (*It)->getUnderlyingDecl(); 1759 // Don't print overloads for non-default multiversioned functions. 1760 if (const auto *FD = Fn->getAsFunction()) { 1761 if (FD->isMultiVersion() && FD->hasAttr<TargetAttr>() && 1762 !FD->getAttr<TargetAttr>()->isDefaultVersion()) 1763 continue; 1764 } 1765 S.Diag(Fn->getLocation(), diag::note_possible_target_of_call); 1766 ++ShownOverloads; 1767 } 1768 1769 if (SuppressedOverloads) 1770 S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates) 1771 << SuppressedOverloads; 1772 } 1773 1774 static void notePlausibleOverloads(Sema &S, SourceLocation Loc, 1775 const UnresolvedSetImpl &Overloads, 1776 bool (*IsPlausibleResult)(QualType)) { 1777 if (!IsPlausibleResult) 1778 return noteOverloads(S, Overloads, Loc); 1779 1780 UnresolvedSet<2> PlausibleOverloads; 1781 for (OverloadExpr::decls_iterator It = Overloads.begin(), 1782 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 1783 const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It); 1784 QualType OverloadResultTy = OverloadDecl->getReturnType(); 1785 if (IsPlausibleResult(OverloadResultTy)) 1786 PlausibleOverloads.addDecl(It.getDecl()); 1787 } 1788 noteOverloads(S, PlausibleOverloads, Loc); 1789 } 1790 1791 /// Determine whether the given expression can be called by just 1792 /// putting parentheses after it. Notably, expressions with unary 1793 /// operators can't be because the unary operator will start parsing 1794 /// outside the call. 1795 static bool IsCallableWithAppend(Expr *E) { 1796 E = E->IgnoreImplicit(); 1797 return (!isa<CStyleCastExpr>(E) && 1798 !isa<UnaryOperator>(E) && 1799 !isa<BinaryOperator>(E) && 1800 !isa<CXXOperatorCallExpr>(E)); 1801 } 1802 1803 static bool IsCPUDispatchCPUSpecificMultiVersion(const Expr *E) { 1804 if (const auto *UO = dyn_cast<UnaryOperator>(E)) 1805 E = UO->getSubExpr(); 1806 1807 if (const auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) { 1808 if (ULE->getNumDecls() == 0) 1809 return false; 1810 1811 const NamedDecl *ND = *ULE->decls_begin(); 1812 if (const auto *FD = dyn_cast<FunctionDecl>(ND)) 1813 return FD->isCPUDispatchMultiVersion() || FD->isCPUSpecificMultiVersion(); 1814 } 1815 return false; 1816 } 1817 1818 bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD, 1819 bool ForceComplain, 1820 bool (*IsPlausibleResult)(QualType)) { 1821 SourceLocation Loc = E.get()->getExprLoc(); 1822 SourceRange Range = E.get()->getSourceRange(); 1823 1824 QualType ZeroArgCallTy; 1825 UnresolvedSet<4> Overloads; 1826 if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) && 1827 !ZeroArgCallTy.isNull() && 1828 (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) { 1829 // At this point, we know E is potentially callable with 0 1830 // arguments and that it returns something of a reasonable type, 1831 // so we can emit a fixit and carry on pretending that E was 1832 // actually a CallExpr. 1833 SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd()); 1834 bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get()); 1835 Diag(Loc, PD) << /*zero-arg*/ 1 << IsMV << Range 1836 << (IsCallableWithAppend(E.get()) 1837 ? FixItHint::CreateInsertion(ParenInsertionLoc, "()") 1838 : FixItHint()); 1839 if (!IsMV) 1840 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 1841 1842 // FIXME: Try this before emitting the fixit, and suppress diagnostics 1843 // while doing so. 1844 E = ActOnCallExpr(nullptr, E.get(), Range.getEnd(), None, 1845 Range.getEnd().getLocWithOffset(1)); 1846 return true; 1847 } 1848 1849 if (!ForceComplain) return false; 1850 1851 bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get()); 1852 Diag(Loc, PD) << /*not zero-arg*/ 0 << IsMV << Range; 1853 if (!IsMV) 1854 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 1855 E = ExprError(); 1856 return true; 1857 } 1858 1859 IdentifierInfo *Sema::getSuperIdentifier() const { 1860 if (!Ident_super) 1861 Ident_super = &Context.Idents.get("super"); 1862 return Ident_super; 1863 } 1864 1865 IdentifierInfo *Sema::getFloat128Identifier() const { 1866 if (!Ident___float128) 1867 Ident___float128 = &Context.Idents.get("__float128"); 1868 return Ident___float128; 1869 } 1870 1871 void Sema::PushCapturedRegionScope(Scope *S, CapturedDecl *CD, RecordDecl *RD, 1872 CapturedRegionKind K) { 1873 CapturingScopeInfo *CSI = new CapturedRegionScopeInfo( 1874 getDiagnostics(), S, CD, RD, CD->getContextParam(), K, 1875 (getLangOpts().OpenMP && K == CR_OpenMP) ? getOpenMPNestingLevel() : 0); 1876 CSI->ReturnType = Context.VoidTy; 1877 FunctionScopes.push_back(CSI); 1878 } 1879 1880 CapturedRegionScopeInfo *Sema::getCurCapturedRegion() { 1881 if (FunctionScopes.empty()) 1882 return nullptr; 1883 1884 return dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back()); 1885 } 1886 1887 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> & 1888 Sema::getMismatchingDeleteExpressions() const { 1889 return DeleteExprs; 1890 } 1891 1892 void Sema::setOpenCLExtensionForType(QualType T, llvm::StringRef ExtStr) { 1893 if (ExtStr.empty()) 1894 return; 1895 llvm::SmallVector<StringRef, 1> Exts; 1896 ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false); 1897 auto CanT = T.getCanonicalType().getTypePtr(); 1898 for (auto &I : Exts) 1899 OpenCLTypeExtMap[CanT].insert(I.str()); 1900 } 1901 1902 void Sema::setOpenCLExtensionForDecl(Decl *FD, StringRef ExtStr) { 1903 llvm::SmallVector<StringRef, 1> Exts; 1904 ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false); 1905 if (Exts.empty()) 1906 return; 1907 for (auto &I : Exts) 1908 OpenCLDeclExtMap[FD].insert(I.str()); 1909 } 1910 1911 void Sema::setCurrentOpenCLExtensionForType(QualType T) { 1912 if (CurrOpenCLExtension.empty()) 1913 return; 1914 setOpenCLExtensionForType(T, CurrOpenCLExtension); 1915 } 1916 1917 void Sema::setCurrentOpenCLExtensionForDecl(Decl *D) { 1918 if (CurrOpenCLExtension.empty()) 1919 return; 1920 setOpenCLExtensionForDecl(D, CurrOpenCLExtension); 1921 } 1922 1923 std::string Sema::getOpenCLExtensionsFromDeclExtMap(FunctionDecl *FD) { 1924 if (!OpenCLDeclExtMap.empty()) 1925 return getOpenCLExtensionsFromExtMap(FD, OpenCLDeclExtMap); 1926 1927 return ""; 1928 } 1929 1930 std::string Sema::getOpenCLExtensionsFromTypeExtMap(FunctionType *FT) { 1931 if (!OpenCLTypeExtMap.empty()) 1932 return getOpenCLExtensionsFromExtMap(FT, OpenCLTypeExtMap); 1933 1934 return ""; 1935 } 1936 1937 template <typename T, typename MapT> 1938 std::string Sema::getOpenCLExtensionsFromExtMap(T *FDT, MapT &Map) { 1939 std::string ExtensionNames = ""; 1940 auto Loc = Map.find(FDT); 1941 1942 for (auto const& I : Loc->second) { 1943 ExtensionNames += I; 1944 ExtensionNames += " "; 1945 } 1946 ExtensionNames.pop_back(); 1947 1948 return ExtensionNames; 1949 } 1950 1951 bool Sema::isOpenCLDisabledDecl(Decl *FD) { 1952 auto Loc = OpenCLDeclExtMap.find(FD); 1953 if (Loc == OpenCLDeclExtMap.end()) 1954 return false; 1955 for (auto &I : Loc->second) { 1956 if (!getOpenCLOptions().isEnabled(I)) 1957 return true; 1958 } 1959 return false; 1960 } 1961 1962 template <typename T, typename DiagLocT, typename DiagInfoT, typename MapT> 1963 bool Sema::checkOpenCLDisabledTypeOrDecl(T D, DiagLocT DiagLoc, 1964 DiagInfoT DiagInfo, MapT &Map, 1965 unsigned Selector, 1966 SourceRange SrcRange) { 1967 auto Loc = Map.find(D); 1968 if (Loc == Map.end()) 1969 return false; 1970 bool Disabled = false; 1971 for (auto &I : Loc->second) { 1972 if (I != CurrOpenCLExtension && !getOpenCLOptions().isEnabled(I)) { 1973 Diag(DiagLoc, diag::err_opencl_requires_extension) << Selector << DiagInfo 1974 << I << SrcRange; 1975 Disabled = true; 1976 } 1977 } 1978 return Disabled; 1979 } 1980 1981 bool Sema::checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType QT) { 1982 // Check extensions for declared types. 1983 Decl *Decl = nullptr; 1984 if (auto TypedefT = dyn_cast<TypedefType>(QT.getTypePtr())) 1985 Decl = TypedefT->getDecl(); 1986 if (auto TagT = dyn_cast<TagType>(QT.getCanonicalType().getTypePtr())) 1987 Decl = TagT->getDecl(); 1988 auto Loc = DS.getTypeSpecTypeLoc(); 1989 1990 // Check extensions for vector types. 1991 // e.g. double4 is not allowed when cl_khr_fp64 is absent. 1992 if (QT->isExtVectorType()) { 1993 auto TypePtr = QT->castAs<ExtVectorType>()->getElementType().getTypePtr(); 1994 return checkOpenCLDisabledTypeOrDecl(TypePtr, Loc, QT, OpenCLTypeExtMap); 1995 } 1996 1997 if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap)) 1998 return true; 1999 2000 // Check extensions for builtin types. 2001 return checkOpenCLDisabledTypeOrDecl(QT.getCanonicalType().getTypePtr(), Loc, 2002 QT, OpenCLTypeExtMap); 2003 } 2004 2005 bool Sema::checkOpenCLDisabledDecl(const NamedDecl &D, const Expr &E) { 2006 IdentifierInfo *FnName = D.getIdentifier(); 2007 return checkOpenCLDisabledTypeOrDecl(&D, E.getBeginLoc(), FnName, 2008 OpenCLDeclExtMap, 1, D.getSourceRange()); 2009 } 2010