1 //===--- Sema.cpp - AST Builder and Semantic Analysis Implementation ------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file implements the actions class which performs semantic analysis and 10 // builds an AST out of a parse stream. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "UsedDeclVisitor.h" 15 #include "clang/AST/ASTContext.h" 16 #include "clang/AST/ASTDiagnostic.h" 17 #include "clang/AST/Decl.h" 18 #include "clang/AST/DeclCXX.h" 19 #include "clang/AST/DeclFriend.h" 20 #include "clang/AST/DeclObjC.h" 21 #include "clang/AST/Expr.h" 22 #include "clang/AST/ExprCXX.h" 23 #include "clang/AST/PrettyDeclStackTrace.h" 24 #include "clang/AST/StmtCXX.h" 25 #include "clang/Basic/DarwinSDKInfo.h" 26 #include "clang/Basic/DiagnosticOptions.h" 27 #include "clang/Basic/PartialDiagnostic.h" 28 #include "clang/Basic/SourceManager.h" 29 #include "clang/Basic/Stack.h" 30 #include "clang/Basic/TargetInfo.h" 31 #include "clang/Lex/HeaderSearch.h" 32 #include "clang/Lex/HeaderSearchOptions.h" 33 #include "clang/Lex/Preprocessor.h" 34 #include "clang/Sema/CXXFieldCollector.h" 35 #include "clang/Sema/DelayedDiagnostic.h" 36 #include "clang/Sema/ExternalSemaSource.h" 37 #include "clang/Sema/Initialization.h" 38 #include "clang/Sema/MultiplexExternalSemaSource.h" 39 #include "clang/Sema/ObjCMethodList.h" 40 #include "clang/Sema/Scope.h" 41 #include "clang/Sema/ScopeInfo.h" 42 #include "clang/Sema/SemaConsumer.h" 43 #include "clang/Sema/SemaInternal.h" 44 #include "clang/Sema/TemplateDeduction.h" 45 #include "clang/Sema/TemplateInstCallback.h" 46 #include "clang/Sema/TypoCorrection.h" 47 #include "llvm/ADT/DenseMap.h" 48 #include "llvm/ADT/SmallPtrSet.h" 49 #include "llvm/Support/TimeProfiler.h" 50 51 using namespace clang; 52 using namespace sema; 53 54 SourceLocation Sema::getLocForEndOfToken(SourceLocation Loc, unsigned Offset) { 55 return Lexer::getLocForEndOfToken(Loc, Offset, SourceMgr, LangOpts); 56 } 57 58 ModuleLoader &Sema::getModuleLoader() const { return PP.getModuleLoader(); } 59 60 DarwinSDKInfo * 61 Sema::getDarwinSDKInfoForAvailabilityChecking(SourceLocation Loc, 62 StringRef Platform) { 63 if (CachedDarwinSDKInfo) 64 return CachedDarwinSDKInfo->get(); 65 auto SDKInfo = parseDarwinSDKInfo( 66 PP.getFileManager().getVirtualFileSystem(), 67 PP.getHeaderSearchInfo().getHeaderSearchOpts().Sysroot); 68 if (SDKInfo && *SDKInfo) { 69 CachedDarwinSDKInfo = std::make_unique<DarwinSDKInfo>(std::move(**SDKInfo)); 70 return CachedDarwinSDKInfo->get(); 71 } 72 if (!SDKInfo) 73 llvm::consumeError(SDKInfo.takeError()); 74 Diag(Loc, diag::warn_missing_sdksettings_for_availability_checking) 75 << Platform; 76 CachedDarwinSDKInfo = std::unique_ptr<DarwinSDKInfo>(); 77 return nullptr; 78 } 79 80 IdentifierInfo * 81 Sema::InventAbbreviatedTemplateParameterTypeName(IdentifierInfo *ParamName, 82 unsigned int Index) { 83 std::string InventedName; 84 llvm::raw_string_ostream OS(InventedName); 85 86 if (!ParamName) 87 OS << "auto:" << Index + 1; 88 else 89 OS << ParamName->getName() << ":auto"; 90 91 OS.flush(); 92 return &Context.Idents.get(OS.str()); 93 } 94 95 PrintingPolicy Sema::getPrintingPolicy(const ASTContext &Context, 96 const Preprocessor &PP) { 97 PrintingPolicy Policy = Context.getPrintingPolicy(); 98 // In diagnostics, we print _Bool as bool if the latter is defined as the 99 // former. 100 Policy.Bool = Context.getLangOpts().Bool; 101 if (!Policy.Bool) { 102 if (const MacroInfo *BoolMacro = PP.getMacroInfo(Context.getBoolName())) { 103 Policy.Bool = BoolMacro->isObjectLike() && 104 BoolMacro->getNumTokens() == 1 && 105 BoolMacro->getReplacementToken(0).is(tok::kw__Bool); 106 } 107 } 108 109 return Policy; 110 } 111 112 void Sema::ActOnTranslationUnitScope(Scope *S) { 113 TUScope = S; 114 PushDeclContext(S, Context.getTranslationUnitDecl()); 115 } 116 117 namespace clang { 118 namespace sema { 119 120 class SemaPPCallbacks : public PPCallbacks { 121 Sema *S = nullptr; 122 llvm::SmallVector<SourceLocation, 8> IncludeStack; 123 124 public: 125 void set(Sema &S) { this->S = &S; } 126 127 void reset() { S = nullptr; } 128 129 virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason, 130 SrcMgr::CharacteristicKind FileType, 131 FileID PrevFID) override { 132 if (!S) 133 return; 134 switch (Reason) { 135 case EnterFile: { 136 SourceManager &SM = S->getSourceManager(); 137 SourceLocation IncludeLoc = SM.getIncludeLoc(SM.getFileID(Loc)); 138 if (IncludeLoc.isValid()) { 139 if (llvm::timeTraceProfilerEnabled()) { 140 const FileEntry *FE = SM.getFileEntryForID(SM.getFileID(Loc)); 141 llvm::timeTraceProfilerBegin( 142 "Source", FE != nullptr ? FE->getName() : StringRef("<unknown>")); 143 } 144 145 IncludeStack.push_back(IncludeLoc); 146 S->DiagnoseNonDefaultPragmaAlignPack( 147 Sema::PragmaAlignPackDiagnoseKind::NonDefaultStateAtInclude, 148 IncludeLoc); 149 } 150 break; 151 } 152 case ExitFile: 153 if (!IncludeStack.empty()) { 154 if (llvm::timeTraceProfilerEnabled()) 155 llvm::timeTraceProfilerEnd(); 156 157 S->DiagnoseNonDefaultPragmaAlignPack( 158 Sema::PragmaAlignPackDiagnoseKind::ChangedStateAtExit, 159 IncludeStack.pop_back_val()); 160 } 161 break; 162 default: 163 break; 164 } 165 } 166 }; 167 168 } // end namespace sema 169 } // end namespace clang 170 171 const unsigned Sema::MaxAlignmentExponent; 172 const unsigned Sema::MaximumAlignment; 173 174 Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer, 175 TranslationUnitKind TUKind, CodeCompleteConsumer *CodeCompleter) 176 : ExternalSource(nullptr), isMultiplexExternalSource(false), 177 CurFPFeatures(pp.getLangOpts()), LangOpts(pp.getLangOpts()), PP(pp), 178 Context(ctxt), Consumer(consumer), Diags(PP.getDiagnostics()), 179 SourceMgr(PP.getSourceManager()), CollectStats(false), 180 CodeCompleter(CodeCompleter), CurContext(nullptr), 181 OriginalLexicalContext(nullptr), MSStructPragmaOn(false), 182 MSPointerToMemberRepresentationMethod( 183 LangOpts.getMSPointerToMemberRepresentationMethod()), 184 VtorDispStack(LangOpts.getVtorDispMode()), 185 AlignPackStack(AlignPackInfo(getLangOpts().XLPragmaPack)), 186 DataSegStack(nullptr), BSSSegStack(nullptr), ConstSegStack(nullptr), 187 CodeSegStack(nullptr), FpPragmaStack(FPOptionsOverride()), 188 CurInitSeg(nullptr), VisContext(nullptr), 189 PragmaAttributeCurrentTargetDecl(nullptr), 190 IsBuildingRecoveryCallExpr(false), Cleanup{}, LateTemplateParser(nullptr), 191 LateTemplateParserCleanup(nullptr), OpaqueParser(nullptr), IdResolver(pp), 192 StdExperimentalNamespaceCache(nullptr), StdInitializerList(nullptr), 193 StdCoroutineTraitsCache(nullptr), CXXTypeInfoDecl(nullptr), 194 MSVCGuidDecl(nullptr), NSNumberDecl(nullptr), NSValueDecl(nullptr), 195 NSStringDecl(nullptr), StringWithUTF8StringMethod(nullptr), 196 ValueWithBytesObjCTypeMethod(nullptr), NSArrayDecl(nullptr), 197 ArrayWithObjectsMethod(nullptr), NSDictionaryDecl(nullptr), 198 DictionaryWithObjectsMethod(nullptr), GlobalNewDeleteDeclared(false), 199 TUKind(TUKind), NumSFINAEErrors(0), 200 FullyCheckedComparisonCategories( 201 static_cast<unsigned>(ComparisonCategoryType::Last) + 1), 202 SatisfactionCache(Context), AccessCheckingSFINAE(false), 203 InNonInstantiationSFINAEContext(false), NonInstantiationEntries(0), 204 ArgumentPackSubstitutionIndex(-1), CurrentInstantiationScope(nullptr), 205 DisableTypoCorrection(false), TyposCorrected(0), AnalysisWarnings(*this), 206 ThreadSafetyDeclCache(nullptr), VarDataSharingAttributesStack(nullptr), 207 CurScope(nullptr), Ident_super(nullptr), Ident___float128(nullptr) { 208 assert(pp.TUKind == TUKind); 209 TUScope = nullptr; 210 isConstantEvaluatedOverride = false; 211 212 LoadedExternalKnownNamespaces = false; 213 for (unsigned I = 0; I != NSAPI::NumNSNumberLiteralMethods; ++I) 214 NSNumberLiteralMethods[I] = nullptr; 215 216 if (getLangOpts().ObjC) 217 NSAPIObj.reset(new NSAPI(Context)); 218 219 if (getLangOpts().CPlusPlus) 220 FieldCollector.reset(new CXXFieldCollector()); 221 222 // Tell diagnostics how to render things from the AST library. 223 Diags.SetArgToStringFn(&FormatASTNodeDiagnosticArgument, &Context); 224 225 ExprEvalContexts.emplace_back( 226 ExpressionEvaluationContext::PotentiallyEvaluated, 0, CleanupInfo{}, 227 nullptr, ExpressionEvaluationContextRecord::EK_Other); 228 229 // Initialization of data sharing attributes stack for OpenMP 230 InitDataSharingAttributesStack(); 231 232 std::unique_ptr<sema::SemaPPCallbacks> Callbacks = 233 std::make_unique<sema::SemaPPCallbacks>(); 234 SemaPPCallbackHandler = Callbacks.get(); 235 PP.addPPCallbacks(std::move(Callbacks)); 236 SemaPPCallbackHandler->set(*this); 237 } 238 239 // Anchor Sema's type info to this TU. 240 void Sema::anchor() {} 241 242 void Sema::addImplicitTypedef(StringRef Name, QualType T) { 243 DeclarationName DN = &Context.Idents.get(Name); 244 if (IdResolver.begin(DN) == IdResolver.end()) 245 PushOnScopeChains(Context.buildImplicitTypedef(T, Name), TUScope); 246 } 247 248 void Sema::Initialize() { 249 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer)) 250 SC->InitializeSema(*this); 251 252 // Tell the external Sema source about this Sema object. 253 if (ExternalSemaSource *ExternalSema 254 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource())) 255 ExternalSema->InitializeSema(*this); 256 257 // This needs to happen after ExternalSemaSource::InitializeSema(this) or we 258 // will not be able to merge any duplicate __va_list_tag decls correctly. 259 VAListTagName = PP.getIdentifierInfo("__va_list_tag"); 260 261 if (!TUScope) 262 return; 263 264 // Initialize predefined 128-bit integer types, if needed. 265 if (Context.getTargetInfo().hasInt128Type() || 266 (Context.getAuxTargetInfo() && 267 Context.getAuxTargetInfo()->hasInt128Type())) { 268 // If either of the 128-bit integer types are unavailable to name lookup, 269 // define them now. 270 DeclarationName Int128 = &Context.Idents.get("__int128_t"); 271 if (IdResolver.begin(Int128) == IdResolver.end()) 272 PushOnScopeChains(Context.getInt128Decl(), TUScope); 273 274 DeclarationName UInt128 = &Context.Idents.get("__uint128_t"); 275 if (IdResolver.begin(UInt128) == IdResolver.end()) 276 PushOnScopeChains(Context.getUInt128Decl(), TUScope); 277 } 278 279 280 // Initialize predefined Objective-C types: 281 if (getLangOpts().ObjC) { 282 // If 'SEL' does not yet refer to any declarations, make it refer to the 283 // predefined 'SEL'. 284 DeclarationName SEL = &Context.Idents.get("SEL"); 285 if (IdResolver.begin(SEL) == IdResolver.end()) 286 PushOnScopeChains(Context.getObjCSelDecl(), TUScope); 287 288 // If 'id' does not yet refer to any declarations, make it refer to the 289 // predefined 'id'. 290 DeclarationName Id = &Context.Idents.get("id"); 291 if (IdResolver.begin(Id) == IdResolver.end()) 292 PushOnScopeChains(Context.getObjCIdDecl(), TUScope); 293 294 // Create the built-in typedef for 'Class'. 295 DeclarationName Class = &Context.Idents.get("Class"); 296 if (IdResolver.begin(Class) == IdResolver.end()) 297 PushOnScopeChains(Context.getObjCClassDecl(), TUScope); 298 299 // Create the built-in forward declaratino for 'Protocol'. 300 DeclarationName Protocol = &Context.Idents.get("Protocol"); 301 if (IdResolver.begin(Protocol) == IdResolver.end()) 302 PushOnScopeChains(Context.getObjCProtocolDecl(), TUScope); 303 } 304 305 // Create the internal type for the *StringMakeConstantString builtins. 306 DeclarationName ConstantString = &Context.Idents.get("__NSConstantString"); 307 if (IdResolver.begin(ConstantString) == IdResolver.end()) 308 PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope); 309 310 // Initialize Microsoft "predefined C++ types". 311 if (getLangOpts().MSVCCompat) { 312 if (getLangOpts().CPlusPlus && 313 IdResolver.begin(&Context.Idents.get("type_info")) == IdResolver.end()) 314 PushOnScopeChains(Context.buildImplicitRecord("type_info", TTK_Class), 315 TUScope); 316 317 addImplicitTypedef("size_t", Context.getSizeType()); 318 } 319 320 // Initialize predefined OpenCL types and supported extensions and (optional) 321 // core features. 322 if (getLangOpts().OpenCL) { 323 getOpenCLOptions().addSupport( 324 Context.getTargetInfo().getSupportedOpenCLOpts(), getLangOpts()); 325 addImplicitTypedef("sampler_t", Context.OCLSamplerTy); 326 addImplicitTypedef("event_t", Context.OCLEventTy); 327 if (getLangOpts().OpenCLCPlusPlus || getLangOpts().OpenCLVersion >= 200) { 328 addImplicitTypedef("clk_event_t", Context.OCLClkEventTy); 329 addImplicitTypedef("queue_t", Context.OCLQueueTy); 330 if (getLangOpts().OpenCLPipes) 331 addImplicitTypedef("reserve_id_t", Context.OCLReserveIDTy); 332 addImplicitTypedef("atomic_int", Context.getAtomicType(Context.IntTy)); 333 addImplicitTypedef("atomic_uint", 334 Context.getAtomicType(Context.UnsignedIntTy)); 335 addImplicitTypedef("atomic_float", 336 Context.getAtomicType(Context.FloatTy)); 337 // OpenCLC v2.0, s6.13.11.6 requires that atomic_flag is implemented as 338 // 32-bit integer and OpenCLC v2.0, s6.1.1 int is always 32-bit wide. 339 addImplicitTypedef("atomic_flag", Context.getAtomicType(Context.IntTy)); 340 341 342 // OpenCL v2.0 s6.13.11.6: 343 // - The atomic_long and atomic_ulong types are supported if the 344 // cl_khr_int64_base_atomics and cl_khr_int64_extended_atomics 345 // extensions are supported. 346 // - The atomic_double type is only supported if double precision 347 // is supported and the cl_khr_int64_base_atomics and 348 // cl_khr_int64_extended_atomics extensions are supported. 349 // - If the device address space is 64-bits, the data types 350 // atomic_intptr_t, atomic_uintptr_t, atomic_size_t and 351 // atomic_ptrdiff_t are supported if the cl_khr_int64_base_atomics and 352 // cl_khr_int64_extended_atomics extensions are supported. 353 354 auto AddPointerSizeDependentTypes = [&]() { 355 auto AtomicSizeT = Context.getAtomicType(Context.getSizeType()); 356 auto AtomicIntPtrT = Context.getAtomicType(Context.getIntPtrType()); 357 auto AtomicUIntPtrT = Context.getAtomicType(Context.getUIntPtrType()); 358 auto AtomicPtrDiffT = 359 Context.getAtomicType(Context.getPointerDiffType()); 360 addImplicitTypedef("atomic_size_t", AtomicSizeT); 361 addImplicitTypedef("atomic_intptr_t", AtomicIntPtrT); 362 addImplicitTypedef("atomic_uintptr_t", AtomicUIntPtrT); 363 addImplicitTypedef("atomic_ptrdiff_t", AtomicPtrDiffT); 364 }; 365 366 if (Context.getTypeSize(Context.getSizeType()) == 32) { 367 AddPointerSizeDependentTypes(); 368 } 369 370 std::vector<QualType> Atomic64BitTypes; 371 if (getOpenCLOptions().isSupported("cl_khr_int64_base_atomics", 372 getLangOpts()) && 373 getOpenCLOptions().isSupported("cl_khr_int64_extended_atomics", 374 getLangOpts())) { 375 if (getOpenCLOptions().isSupported("cl_khr_fp64", getLangOpts())) { 376 auto AtomicDoubleT = Context.getAtomicType(Context.DoubleTy); 377 addImplicitTypedef("atomic_double", AtomicDoubleT); 378 Atomic64BitTypes.push_back(AtomicDoubleT); 379 } 380 auto AtomicLongT = Context.getAtomicType(Context.LongTy); 381 auto AtomicULongT = Context.getAtomicType(Context.UnsignedLongTy); 382 addImplicitTypedef("atomic_long", AtomicLongT); 383 addImplicitTypedef("atomic_ulong", AtomicULongT); 384 385 386 if (Context.getTypeSize(Context.getSizeType()) == 64) { 387 AddPointerSizeDependentTypes(); 388 } 389 } 390 } 391 392 393 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \ 394 if (getOpenCLOptions().isSupported(#Ext, getLangOpts())) { \ 395 addImplicitTypedef(#ExtType, Context.Id##Ty); \ 396 } 397 #include "clang/Basic/OpenCLExtensionTypes.def" 398 } 399 400 if (Context.getTargetInfo().hasAArch64SVETypes()) { 401 #define SVE_TYPE(Name, Id, SingletonId) \ 402 addImplicitTypedef(Name, Context.SingletonId); 403 #include "clang/Basic/AArch64SVEACLETypes.def" 404 } 405 406 if (Context.getTargetInfo().getTriple().isPPC64() && 407 Context.getTargetInfo().hasFeature("paired-vector-memops")) { 408 if (Context.getTargetInfo().hasFeature("mma")) { 409 #define PPC_VECTOR_MMA_TYPE(Name, Id, Size) \ 410 addImplicitTypedef(#Name, Context.Id##Ty); 411 #include "clang/Basic/PPCTypes.def" 412 } 413 #define PPC_VECTOR_VSX_TYPE(Name, Id, Size) \ 414 addImplicitTypedef(#Name, Context.Id##Ty); 415 #include "clang/Basic/PPCTypes.def" 416 } 417 418 if (Context.getTargetInfo().hasRISCVVTypes()) { 419 #define RVV_TYPE(Name, Id, SingletonId) \ 420 addImplicitTypedef(Name, Context.SingletonId); 421 #include "clang/Basic/RISCVVTypes.def" 422 } 423 424 if (Context.getTargetInfo().hasBuiltinMSVaList()) { 425 DeclarationName MSVaList = &Context.Idents.get("__builtin_ms_va_list"); 426 if (IdResolver.begin(MSVaList) == IdResolver.end()) 427 PushOnScopeChains(Context.getBuiltinMSVaListDecl(), TUScope); 428 } 429 430 DeclarationName BuiltinVaList = &Context.Idents.get("__builtin_va_list"); 431 if (IdResolver.begin(BuiltinVaList) == IdResolver.end()) 432 PushOnScopeChains(Context.getBuiltinVaListDecl(), TUScope); 433 } 434 435 Sema::~Sema() { 436 assert(InstantiatingSpecializations.empty() && 437 "failed to clean up an InstantiatingTemplate?"); 438 439 if (VisContext) FreeVisContext(); 440 441 // Kill all the active scopes. 442 for (sema::FunctionScopeInfo *FSI : FunctionScopes) 443 delete FSI; 444 445 // Tell the SemaConsumer to forget about us; we're going out of scope. 446 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer)) 447 SC->ForgetSema(); 448 449 // Detach from the external Sema source. 450 if (ExternalSemaSource *ExternalSema 451 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource())) 452 ExternalSema->ForgetSema(); 453 454 // If Sema's ExternalSource is the multiplexer - we own it. 455 if (isMultiplexExternalSource) 456 delete ExternalSource; 457 458 // Delete cached satisfactions. 459 std::vector<ConstraintSatisfaction *> Satisfactions; 460 Satisfactions.reserve(Satisfactions.size()); 461 for (auto &Node : SatisfactionCache) 462 Satisfactions.push_back(&Node); 463 for (auto *Node : Satisfactions) 464 delete Node; 465 466 threadSafety::threadSafetyCleanup(ThreadSafetyDeclCache); 467 468 // Destroys data sharing attributes stack for OpenMP 469 DestroyDataSharingAttributesStack(); 470 471 // Detach from the PP callback handler which outlives Sema since it's owned 472 // by the preprocessor. 473 SemaPPCallbackHandler->reset(); 474 } 475 476 void Sema::warnStackExhausted(SourceLocation Loc) { 477 // Only warn about this once. 478 if (!WarnedStackExhausted) { 479 Diag(Loc, diag::warn_stack_exhausted); 480 WarnedStackExhausted = true; 481 } 482 } 483 484 void Sema::runWithSufficientStackSpace(SourceLocation Loc, 485 llvm::function_ref<void()> Fn) { 486 clang::runWithSufficientStackSpace([&] { warnStackExhausted(Loc); }, Fn); 487 } 488 489 /// makeUnavailableInSystemHeader - There is an error in the current 490 /// context. If we're still in a system header, and we can plausibly 491 /// make the relevant declaration unavailable instead of erroring, do 492 /// so and return true. 493 bool Sema::makeUnavailableInSystemHeader(SourceLocation loc, 494 UnavailableAttr::ImplicitReason reason) { 495 // If we're not in a function, it's an error. 496 FunctionDecl *fn = dyn_cast<FunctionDecl>(CurContext); 497 if (!fn) return false; 498 499 // If we're in template instantiation, it's an error. 500 if (inTemplateInstantiation()) 501 return false; 502 503 // If that function's not in a system header, it's an error. 504 if (!Context.getSourceManager().isInSystemHeader(loc)) 505 return false; 506 507 // If the function is already unavailable, it's not an error. 508 if (fn->hasAttr<UnavailableAttr>()) return true; 509 510 fn->addAttr(UnavailableAttr::CreateImplicit(Context, "", reason, loc)); 511 return true; 512 } 513 514 ASTMutationListener *Sema::getASTMutationListener() const { 515 return getASTConsumer().GetASTMutationListener(); 516 } 517 518 ///Registers an external source. If an external source already exists, 519 /// creates a multiplex external source and appends to it. 520 /// 521 ///\param[in] E - A non-null external sema source. 522 /// 523 void Sema::addExternalSource(ExternalSemaSource *E) { 524 assert(E && "Cannot use with NULL ptr"); 525 526 if (!ExternalSource) { 527 ExternalSource = E; 528 return; 529 } 530 531 if (isMultiplexExternalSource) 532 static_cast<MultiplexExternalSemaSource*>(ExternalSource)->addSource(*E); 533 else { 534 ExternalSource = new MultiplexExternalSemaSource(*ExternalSource, *E); 535 isMultiplexExternalSource = true; 536 } 537 } 538 539 /// Print out statistics about the semantic analysis. 540 void Sema::PrintStats() const { 541 llvm::errs() << "\n*** Semantic Analysis Stats:\n"; 542 llvm::errs() << NumSFINAEErrors << " SFINAE diagnostics trapped.\n"; 543 544 BumpAlloc.PrintStats(); 545 AnalysisWarnings.PrintStats(); 546 } 547 548 void Sema::diagnoseNullableToNonnullConversion(QualType DstType, 549 QualType SrcType, 550 SourceLocation Loc) { 551 Optional<NullabilityKind> ExprNullability = SrcType->getNullability(Context); 552 if (!ExprNullability || (*ExprNullability != NullabilityKind::Nullable && 553 *ExprNullability != NullabilityKind::NullableResult)) 554 return; 555 556 Optional<NullabilityKind> TypeNullability = DstType->getNullability(Context); 557 if (!TypeNullability || *TypeNullability != NullabilityKind::NonNull) 558 return; 559 560 Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType; 561 } 562 563 void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr* E) { 564 if (Diags.isIgnored(diag::warn_zero_as_null_pointer_constant, 565 E->getBeginLoc())) 566 return; 567 // nullptr only exists from C++11 on, so don't warn on its absence earlier. 568 if (!getLangOpts().CPlusPlus11) 569 return; 570 571 if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer) 572 return; 573 if (E->IgnoreParenImpCasts()->getType()->isNullPtrType()) 574 return; 575 576 // Don't diagnose the conversion from a 0 literal to a null pointer argument 577 // in a synthesized call to operator<=>. 578 if (!CodeSynthesisContexts.empty() && 579 CodeSynthesisContexts.back().Kind == 580 CodeSynthesisContext::RewritingOperatorAsSpaceship) 581 return; 582 583 // If it is a macro from system header, and if the macro name is not "NULL", 584 // do not warn. 585 SourceLocation MaybeMacroLoc = E->getBeginLoc(); 586 if (Diags.getSuppressSystemWarnings() && 587 SourceMgr.isInSystemMacro(MaybeMacroLoc) && 588 !findMacroSpelling(MaybeMacroLoc, "NULL")) 589 return; 590 591 Diag(E->getBeginLoc(), diag::warn_zero_as_null_pointer_constant) 592 << FixItHint::CreateReplacement(E->getSourceRange(), "nullptr"); 593 } 594 595 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast. 596 /// If there is already an implicit cast, merge into the existing one. 597 /// The result is of the given category. 598 ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty, 599 CastKind Kind, ExprValueKind VK, 600 const CXXCastPath *BasePath, 601 CheckedConversionKind CCK) { 602 #ifndef NDEBUG 603 if (VK == VK_PRValue && !E->isPRValue()) { 604 switch (Kind) { 605 default: 606 llvm_unreachable( 607 ("can't implicitly cast glvalue to prvalue with this cast " 608 "kind: " + 609 std::string(CastExpr::getCastKindName(Kind))) 610 .c_str()); 611 case CK_Dependent: 612 case CK_LValueToRValue: 613 case CK_ArrayToPointerDecay: 614 case CK_FunctionToPointerDecay: 615 case CK_ToVoid: 616 case CK_NonAtomicToAtomic: 617 break; 618 } 619 } 620 assert((VK == VK_PRValue || Kind == CK_Dependent || !E->isPRValue()) && 621 "can't cast prvalue to glvalue"); 622 #endif 623 624 diagnoseNullableToNonnullConversion(Ty, E->getType(), E->getBeginLoc()); 625 diagnoseZeroToNullptrConversion(Kind, E); 626 627 QualType ExprTy = Context.getCanonicalType(E->getType()); 628 QualType TypeTy = Context.getCanonicalType(Ty); 629 630 if (ExprTy == TypeTy) 631 return E; 632 633 if (Kind == CK_ArrayToPointerDecay) { 634 // C++1z [conv.array]: The temporary materialization conversion is applied. 635 // We also use this to fuel C++ DR1213, which applies to C++11 onwards. 636 if (getLangOpts().CPlusPlus && E->isPRValue()) { 637 // The temporary is an lvalue in C++98 and an xvalue otherwise. 638 ExprResult Materialized = CreateMaterializeTemporaryExpr( 639 E->getType(), E, !getLangOpts().CPlusPlus11); 640 if (Materialized.isInvalid()) 641 return ExprError(); 642 E = Materialized.get(); 643 } 644 // C17 6.7.1p6 footnote 124: The implementation can treat any register 645 // declaration simply as an auto declaration. However, whether or not 646 // addressable storage is actually used, the address of any part of an 647 // object declared with storage-class specifier register cannot be 648 // computed, either explicitly(by use of the unary & operator as discussed 649 // in 6.5.3.2) or implicitly(by converting an array name to a pointer as 650 // discussed in 6.3.2.1).Thus, the only operator that can be applied to an 651 // array declared with storage-class specifier register is sizeof. 652 if (VK == VK_PRValue && !getLangOpts().CPlusPlus && !E->isPRValue()) { 653 if (const auto *DRE = dyn_cast<DeclRefExpr>(E)) { 654 if (const auto *VD = dyn_cast<VarDecl>(DRE->getDecl())) { 655 if (VD->getStorageClass() == SC_Register) { 656 Diag(E->getExprLoc(), diag::err_typecheck_address_of) 657 << /*register variable*/ 3 << E->getSourceRange(); 658 return ExprError(); 659 } 660 } 661 } 662 } 663 } 664 665 if (ImplicitCastExpr *ImpCast = dyn_cast<ImplicitCastExpr>(E)) { 666 if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) { 667 ImpCast->setType(Ty); 668 ImpCast->setValueKind(VK); 669 return E; 670 } 671 } 672 673 return ImplicitCastExpr::Create(Context, Ty, Kind, E, BasePath, VK, 674 CurFPFeatureOverrides()); 675 } 676 677 /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding 678 /// to the conversion from scalar type ScalarTy to the Boolean type. 679 CastKind Sema::ScalarTypeToBooleanCastKind(QualType ScalarTy) { 680 switch (ScalarTy->getScalarTypeKind()) { 681 case Type::STK_Bool: return CK_NoOp; 682 case Type::STK_CPointer: return CK_PointerToBoolean; 683 case Type::STK_BlockPointer: return CK_PointerToBoolean; 684 case Type::STK_ObjCObjectPointer: return CK_PointerToBoolean; 685 case Type::STK_MemberPointer: return CK_MemberPointerToBoolean; 686 case Type::STK_Integral: return CK_IntegralToBoolean; 687 case Type::STK_Floating: return CK_FloatingToBoolean; 688 case Type::STK_IntegralComplex: return CK_IntegralComplexToBoolean; 689 case Type::STK_FloatingComplex: return CK_FloatingComplexToBoolean; 690 case Type::STK_FixedPoint: return CK_FixedPointToBoolean; 691 } 692 llvm_unreachable("unknown scalar type kind"); 693 } 694 695 /// Used to prune the decls of Sema's UnusedFileScopedDecls vector. 696 static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D) { 697 if (D->getMostRecentDecl()->isUsed()) 698 return true; 699 700 if (D->isExternallyVisible()) 701 return true; 702 703 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 704 // If this is a function template and none of its specializations is used, 705 // we should warn. 706 if (FunctionTemplateDecl *Template = FD->getDescribedFunctionTemplate()) 707 for (const auto *Spec : Template->specializations()) 708 if (ShouldRemoveFromUnused(SemaRef, Spec)) 709 return true; 710 711 // UnusedFileScopedDecls stores the first declaration. 712 // The declaration may have become definition so check again. 713 const FunctionDecl *DeclToCheck; 714 if (FD->hasBody(DeclToCheck)) 715 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 716 717 // Later redecls may add new information resulting in not having to warn, 718 // so check again. 719 DeclToCheck = FD->getMostRecentDecl(); 720 if (DeclToCheck != FD) 721 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 722 } 723 724 if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { 725 // If a variable usable in constant expressions is referenced, 726 // don't warn if it isn't used: if the value of a variable is required 727 // for the computation of a constant expression, it doesn't make sense to 728 // warn even if the variable isn't odr-used. (isReferenced doesn't 729 // precisely reflect that, but it's a decent approximation.) 730 if (VD->isReferenced() && 731 VD->mightBeUsableInConstantExpressions(SemaRef->Context)) 732 return true; 733 734 if (VarTemplateDecl *Template = VD->getDescribedVarTemplate()) 735 // If this is a variable template and none of its specializations is used, 736 // we should warn. 737 for (const auto *Spec : Template->specializations()) 738 if (ShouldRemoveFromUnused(SemaRef, Spec)) 739 return true; 740 741 // UnusedFileScopedDecls stores the first declaration. 742 // The declaration may have become definition so check again. 743 const VarDecl *DeclToCheck = VD->getDefinition(); 744 if (DeclToCheck) 745 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 746 747 // Later redecls may add new information resulting in not having to warn, 748 // so check again. 749 DeclToCheck = VD->getMostRecentDecl(); 750 if (DeclToCheck != VD) 751 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 752 } 753 754 return false; 755 } 756 757 static bool isFunctionOrVarDeclExternC(NamedDecl *ND) { 758 if (auto *FD = dyn_cast<FunctionDecl>(ND)) 759 return FD->isExternC(); 760 return cast<VarDecl>(ND)->isExternC(); 761 } 762 763 /// Determine whether ND is an external-linkage function or variable whose 764 /// type has no linkage. 765 bool Sema::isExternalWithNoLinkageType(ValueDecl *VD) { 766 // Note: it's not quite enough to check whether VD has UniqueExternalLinkage, 767 // because we also want to catch the case where its type has VisibleNoLinkage, 768 // which does not affect the linkage of VD. 769 return getLangOpts().CPlusPlus && VD->hasExternalFormalLinkage() && 770 !isExternalFormalLinkage(VD->getType()->getLinkage()) && 771 !isFunctionOrVarDeclExternC(VD); 772 } 773 774 /// Obtains a sorted list of functions and variables that are undefined but 775 /// ODR-used. 776 void Sema::getUndefinedButUsed( 777 SmallVectorImpl<std::pair<NamedDecl *, SourceLocation> > &Undefined) { 778 for (const auto &UndefinedUse : UndefinedButUsed) { 779 NamedDecl *ND = UndefinedUse.first; 780 781 // Ignore attributes that have become invalid. 782 if (ND->isInvalidDecl()) continue; 783 784 // __attribute__((weakref)) is basically a definition. 785 if (ND->hasAttr<WeakRefAttr>()) continue; 786 787 if (isa<CXXDeductionGuideDecl>(ND)) 788 continue; 789 790 if (ND->hasAttr<DLLImportAttr>() || ND->hasAttr<DLLExportAttr>()) { 791 // An exported function will always be emitted when defined, so even if 792 // the function is inline, it doesn't have to be emitted in this TU. An 793 // imported function implies that it has been exported somewhere else. 794 continue; 795 } 796 797 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) { 798 if (FD->isDefined()) 799 continue; 800 if (FD->isExternallyVisible() && 801 !isExternalWithNoLinkageType(FD) && 802 !FD->getMostRecentDecl()->isInlined() && 803 !FD->hasAttr<ExcludeFromExplicitInstantiationAttr>()) 804 continue; 805 if (FD->getBuiltinID()) 806 continue; 807 } else { 808 auto *VD = cast<VarDecl>(ND); 809 if (VD->hasDefinition() != VarDecl::DeclarationOnly) 810 continue; 811 if (VD->isExternallyVisible() && 812 !isExternalWithNoLinkageType(VD) && 813 !VD->getMostRecentDecl()->isInline() && 814 !VD->hasAttr<ExcludeFromExplicitInstantiationAttr>()) 815 continue; 816 817 // Skip VarDecls that lack formal definitions but which we know are in 818 // fact defined somewhere. 819 if (VD->isKnownToBeDefined()) 820 continue; 821 } 822 823 Undefined.push_back(std::make_pair(ND, UndefinedUse.second)); 824 } 825 } 826 827 /// checkUndefinedButUsed - Check for undefined objects with internal linkage 828 /// or that are inline. 829 static void checkUndefinedButUsed(Sema &S) { 830 if (S.UndefinedButUsed.empty()) return; 831 832 // Collect all the still-undefined entities with internal linkage. 833 SmallVector<std::pair<NamedDecl *, SourceLocation>, 16> Undefined; 834 S.getUndefinedButUsed(Undefined); 835 if (Undefined.empty()) return; 836 837 for (auto Undef : Undefined) { 838 ValueDecl *VD = cast<ValueDecl>(Undef.first); 839 SourceLocation UseLoc = Undef.second; 840 841 if (S.isExternalWithNoLinkageType(VD)) { 842 // C++ [basic.link]p8: 843 // A type without linkage shall not be used as the type of a variable 844 // or function with external linkage unless 845 // -- the entity has C language linkage 846 // -- the entity is not odr-used or is defined in the same TU 847 // 848 // As an extension, accept this in cases where the type is externally 849 // visible, since the function or variable actually can be defined in 850 // another translation unit in that case. 851 S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage()) 852 ? diag::ext_undefined_internal_type 853 : diag::err_undefined_internal_type) 854 << isa<VarDecl>(VD) << VD; 855 } else if (!VD->isExternallyVisible()) { 856 // FIXME: We can promote this to an error. The function or variable can't 857 // be defined anywhere else, so the program must necessarily violate the 858 // one definition rule. 859 bool IsImplicitBase = false; 860 if (const auto *BaseD = dyn_cast<FunctionDecl>(VD)) { 861 auto *DVAttr = BaseD->getAttr<OMPDeclareVariantAttr>(); 862 if (DVAttr && !DVAttr->getTraitInfo().isExtensionActive( 863 llvm::omp::TraitProperty:: 864 implementation_extension_disable_implicit_base)) { 865 const auto *Func = cast<FunctionDecl>( 866 cast<DeclRefExpr>(DVAttr->getVariantFuncRef())->getDecl()); 867 IsImplicitBase = BaseD->isImplicit() && 868 Func->getIdentifier()->isMangledOpenMPVariantName(); 869 } 870 } 871 if (!S.getLangOpts().OpenMP || !IsImplicitBase) 872 S.Diag(VD->getLocation(), diag::warn_undefined_internal) 873 << isa<VarDecl>(VD) << VD; 874 } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) { 875 (void)FD; 876 assert(FD->getMostRecentDecl()->isInlined() && 877 "used object requires definition but isn't inline or internal?"); 878 // FIXME: This is ill-formed; we should reject. 879 S.Diag(VD->getLocation(), diag::warn_undefined_inline) << VD; 880 } else { 881 assert(cast<VarDecl>(VD)->getMostRecentDecl()->isInline() && 882 "used var requires definition but isn't inline or internal?"); 883 S.Diag(VD->getLocation(), diag::err_undefined_inline_var) << VD; 884 } 885 if (UseLoc.isValid()) 886 S.Diag(UseLoc, diag::note_used_here); 887 } 888 889 S.UndefinedButUsed.clear(); 890 } 891 892 void Sema::LoadExternalWeakUndeclaredIdentifiers() { 893 if (!ExternalSource) 894 return; 895 896 SmallVector<std::pair<IdentifierInfo *, WeakInfo>, 4> WeakIDs; 897 ExternalSource->ReadWeakUndeclaredIdentifiers(WeakIDs); 898 for (auto &WeakID : WeakIDs) 899 WeakUndeclaredIdentifiers.insert(WeakID); 900 } 901 902 903 typedef llvm::DenseMap<const CXXRecordDecl*, bool> RecordCompleteMap; 904 905 /// Returns true, if all methods and nested classes of the given 906 /// CXXRecordDecl are defined in this translation unit. 907 /// 908 /// Should only be called from ActOnEndOfTranslationUnit so that all 909 /// definitions are actually read. 910 static bool MethodsAndNestedClassesComplete(const CXXRecordDecl *RD, 911 RecordCompleteMap &MNCComplete) { 912 RecordCompleteMap::iterator Cache = MNCComplete.find(RD); 913 if (Cache != MNCComplete.end()) 914 return Cache->second; 915 if (!RD->isCompleteDefinition()) 916 return false; 917 bool Complete = true; 918 for (DeclContext::decl_iterator I = RD->decls_begin(), 919 E = RD->decls_end(); 920 I != E && Complete; ++I) { 921 if (const CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(*I)) 922 Complete = M->isDefined() || M->isDefaulted() || 923 (M->isPure() && !isa<CXXDestructorDecl>(M)); 924 else if (const FunctionTemplateDecl *F = dyn_cast<FunctionTemplateDecl>(*I)) 925 // If the template function is marked as late template parsed at this 926 // point, it has not been instantiated and therefore we have not 927 // performed semantic analysis on it yet, so we cannot know if the type 928 // can be considered complete. 929 Complete = !F->getTemplatedDecl()->isLateTemplateParsed() && 930 F->getTemplatedDecl()->isDefined(); 931 else if (const CXXRecordDecl *R = dyn_cast<CXXRecordDecl>(*I)) { 932 if (R->isInjectedClassName()) 933 continue; 934 if (R->hasDefinition()) 935 Complete = MethodsAndNestedClassesComplete(R->getDefinition(), 936 MNCComplete); 937 else 938 Complete = false; 939 } 940 } 941 MNCComplete[RD] = Complete; 942 return Complete; 943 } 944 945 /// Returns true, if the given CXXRecordDecl is fully defined in this 946 /// translation unit, i.e. all methods are defined or pure virtual and all 947 /// friends, friend functions and nested classes are fully defined in this 948 /// translation unit. 949 /// 950 /// Should only be called from ActOnEndOfTranslationUnit so that all 951 /// definitions are actually read. 952 static bool IsRecordFullyDefined(const CXXRecordDecl *RD, 953 RecordCompleteMap &RecordsComplete, 954 RecordCompleteMap &MNCComplete) { 955 RecordCompleteMap::iterator Cache = RecordsComplete.find(RD); 956 if (Cache != RecordsComplete.end()) 957 return Cache->second; 958 bool Complete = MethodsAndNestedClassesComplete(RD, MNCComplete); 959 for (CXXRecordDecl::friend_iterator I = RD->friend_begin(), 960 E = RD->friend_end(); 961 I != E && Complete; ++I) { 962 // Check if friend classes and methods are complete. 963 if (TypeSourceInfo *TSI = (*I)->getFriendType()) { 964 // Friend classes are available as the TypeSourceInfo of the FriendDecl. 965 if (CXXRecordDecl *FriendD = TSI->getType()->getAsCXXRecordDecl()) 966 Complete = MethodsAndNestedClassesComplete(FriendD, MNCComplete); 967 else 968 Complete = false; 969 } else { 970 // Friend functions are available through the NamedDecl of FriendDecl. 971 if (const FunctionDecl *FD = 972 dyn_cast<FunctionDecl>((*I)->getFriendDecl())) 973 Complete = FD->isDefined(); 974 else 975 // This is a template friend, give up. 976 Complete = false; 977 } 978 } 979 RecordsComplete[RD] = Complete; 980 return Complete; 981 } 982 983 void Sema::emitAndClearUnusedLocalTypedefWarnings() { 984 if (ExternalSource) 985 ExternalSource->ReadUnusedLocalTypedefNameCandidates( 986 UnusedLocalTypedefNameCandidates); 987 for (const TypedefNameDecl *TD : UnusedLocalTypedefNameCandidates) { 988 if (TD->isReferenced()) 989 continue; 990 Diag(TD->getLocation(), diag::warn_unused_local_typedef) 991 << isa<TypeAliasDecl>(TD) << TD->getDeclName(); 992 } 993 UnusedLocalTypedefNameCandidates.clear(); 994 } 995 996 /// This is called before the very first declaration in the translation unit 997 /// is parsed. Note that the ASTContext may have already injected some 998 /// declarations. 999 void Sema::ActOnStartOfTranslationUnit() { 1000 if (getLangOpts().ModulesTS && 1001 (getLangOpts().getCompilingModule() == LangOptions::CMK_ModuleInterface || 1002 getLangOpts().getCompilingModule() == LangOptions::CMK_None)) { 1003 // We start in an implied global module fragment. 1004 SourceLocation StartOfTU = 1005 SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID()); 1006 ActOnGlobalModuleFragmentDecl(StartOfTU); 1007 ModuleScopes.back().ImplicitGlobalModuleFragment = true; 1008 } 1009 } 1010 1011 void Sema::ActOnEndOfTranslationUnitFragment(TUFragmentKind Kind) { 1012 // No explicit actions are required at the end of the global module fragment. 1013 if (Kind == TUFragmentKind::Global) 1014 return; 1015 1016 // Transfer late parsed template instantiations over to the pending template 1017 // instantiation list. During normal compilation, the late template parser 1018 // will be installed and instantiating these templates will succeed. 1019 // 1020 // If we are building a TU prefix for serialization, it is also safe to 1021 // transfer these over, even though they are not parsed. The end of the TU 1022 // should be outside of any eager template instantiation scope, so when this 1023 // AST is deserialized, these templates will not be parsed until the end of 1024 // the combined TU. 1025 PendingInstantiations.insert(PendingInstantiations.end(), 1026 LateParsedInstantiations.begin(), 1027 LateParsedInstantiations.end()); 1028 LateParsedInstantiations.clear(); 1029 1030 // If DefinedUsedVTables ends up marking any virtual member functions it 1031 // might lead to more pending template instantiations, which we then need 1032 // to instantiate. 1033 DefineUsedVTables(); 1034 1035 // C++: Perform implicit template instantiations. 1036 // 1037 // FIXME: When we perform these implicit instantiations, we do not 1038 // carefully keep track of the point of instantiation (C++ [temp.point]). 1039 // This means that name lookup that occurs within the template 1040 // instantiation will always happen at the end of the translation unit, 1041 // so it will find some names that are not required to be found. This is 1042 // valid, but we could do better by diagnosing if an instantiation uses a 1043 // name that was not visible at its first point of instantiation. 1044 if (ExternalSource) { 1045 // Load pending instantiations from the external source. 1046 SmallVector<PendingImplicitInstantiation, 4> Pending; 1047 ExternalSource->ReadPendingInstantiations(Pending); 1048 for (auto PII : Pending) 1049 if (auto Func = dyn_cast<FunctionDecl>(PII.first)) 1050 Func->setInstantiationIsPending(true); 1051 PendingInstantiations.insert(PendingInstantiations.begin(), 1052 Pending.begin(), Pending.end()); 1053 } 1054 1055 { 1056 llvm::TimeTraceScope TimeScope("PerformPendingInstantiations"); 1057 PerformPendingInstantiations(); 1058 } 1059 1060 emitDeferredDiags(); 1061 1062 assert(LateParsedInstantiations.empty() && 1063 "end of TU template instantiation should not create more " 1064 "late-parsed templates"); 1065 1066 // Report diagnostics for uncorrected delayed typos. Ideally all of them 1067 // should have been corrected by that time, but it is very hard to cover all 1068 // cases in practice. 1069 for (const auto &Typo : DelayedTypos) { 1070 // We pass an empty TypoCorrection to indicate no correction was performed. 1071 Typo.second.DiagHandler(TypoCorrection()); 1072 } 1073 DelayedTypos.clear(); 1074 } 1075 1076 /// ActOnEndOfTranslationUnit - This is called at the very end of the 1077 /// translation unit when EOF is reached and all but the top-level scope is 1078 /// popped. 1079 void Sema::ActOnEndOfTranslationUnit() { 1080 assert(DelayedDiagnostics.getCurrentPool() == nullptr 1081 && "reached end of translation unit with a pool attached?"); 1082 1083 // If code completion is enabled, don't perform any end-of-translation-unit 1084 // work. 1085 if (PP.isCodeCompletionEnabled()) 1086 return; 1087 1088 // Complete translation units and modules define vtables and perform implicit 1089 // instantiations. PCH files do not. 1090 if (TUKind != TU_Prefix) { 1091 DiagnoseUseOfUnimplementedSelectors(); 1092 1093 ActOnEndOfTranslationUnitFragment( 1094 !ModuleScopes.empty() && ModuleScopes.back().Module->Kind == 1095 Module::PrivateModuleFragment 1096 ? TUFragmentKind::Private 1097 : TUFragmentKind::Normal); 1098 1099 if (LateTemplateParserCleanup) 1100 LateTemplateParserCleanup(OpaqueParser); 1101 1102 CheckDelayedMemberExceptionSpecs(); 1103 } else { 1104 // If we are building a TU prefix for serialization, it is safe to transfer 1105 // these over, even though they are not parsed. The end of the TU should be 1106 // outside of any eager template instantiation scope, so when this AST is 1107 // deserialized, these templates will not be parsed until the end of the 1108 // combined TU. 1109 PendingInstantiations.insert(PendingInstantiations.end(), 1110 LateParsedInstantiations.begin(), 1111 LateParsedInstantiations.end()); 1112 LateParsedInstantiations.clear(); 1113 1114 if (LangOpts.PCHInstantiateTemplates) { 1115 llvm::TimeTraceScope TimeScope("PerformPendingInstantiations"); 1116 PerformPendingInstantiations(); 1117 } 1118 } 1119 1120 DiagnoseUnterminatedPragmaAlignPack(); 1121 DiagnoseUnterminatedPragmaAttribute(); 1122 1123 // All delayed member exception specs should be checked or we end up accepting 1124 // incompatible declarations. 1125 assert(DelayedOverridingExceptionSpecChecks.empty()); 1126 assert(DelayedEquivalentExceptionSpecChecks.empty()); 1127 1128 // All dllexport classes should have been processed already. 1129 assert(DelayedDllExportClasses.empty()); 1130 assert(DelayedDllExportMemberFunctions.empty()); 1131 1132 // Remove file scoped decls that turned out to be used. 1133 UnusedFileScopedDecls.erase( 1134 std::remove_if(UnusedFileScopedDecls.begin(nullptr, true), 1135 UnusedFileScopedDecls.end(), 1136 [this](const DeclaratorDecl *DD) { 1137 return ShouldRemoveFromUnused(this, DD); 1138 }), 1139 UnusedFileScopedDecls.end()); 1140 1141 if (TUKind == TU_Prefix) { 1142 // Translation unit prefixes don't need any of the checking below. 1143 if (!PP.isIncrementalProcessingEnabled()) 1144 TUScope = nullptr; 1145 return; 1146 } 1147 1148 // Check for #pragma weak identifiers that were never declared 1149 LoadExternalWeakUndeclaredIdentifiers(); 1150 for (auto WeakID : WeakUndeclaredIdentifiers) { 1151 if (WeakID.second.getUsed()) 1152 continue; 1153 1154 Decl *PrevDecl = LookupSingleName(TUScope, WeakID.first, SourceLocation(), 1155 LookupOrdinaryName); 1156 if (PrevDecl != nullptr && 1157 !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl))) 1158 Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type) 1159 << "'weak'" << ExpectedVariableOrFunction; 1160 else 1161 Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared) 1162 << WeakID.first; 1163 } 1164 1165 if (LangOpts.CPlusPlus11 && 1166 !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation())) 1167 CheckDelegatingCtorCycles(); 1168 1169 if (!Diags.hasErrorOccurred()) { 1170 if (ExternalSource) 1171 ExternalSource->ReadUndefinedButUsed(UndefinedButUsed); 1172 checkUndefinedButUsed(*this); 1173 } 1174 1175 // A global-module-fragment is only permitted within a module unit. 1176 bool DiagnosedMissingModuleDeclaration = false; 1177 if (!ModuleScopes.empty() && 1178 ModuleScopes.back().Module->Kind == Module::GlobalModuleFragment && 1179 !ModuleScopes.back().ImplicitGlobalModuleFragment) { 1180 Diag(ModuleScopes.back().BeginLoc, 1181 diag::err_module_declaration_missing_after_global_module_introducer); 1182 DiagnosedMissingModuleDeclaration = true; 1183 } 1184 1185 if (TUKind == TU_Module) { 1186 // If we are building a module interface unit, we need to have seen the 1187 // module declaration by now. 1188 if (getLangOpts().getCompilingModule() == 1189 LangOptions::CMK_ModuleInterface && 1190 (ModuleScopes.empty() || 1191 !ModuleScopes.back().Module->isModulePurview()) && 1192 !DiagnosedMissingModuleDeclaration) { 1193 // FIXME: Make a better guess as to where to put the module declaration. 1194 Diag(getSourceManager().getLocForStartOfFile( 1195 getSourceManager().getMainFileID()), 1196 diag::err_module_declaration_missing); 1197 } 1198 1199 // If we are building a module, resolve all of the exported declarations 1200 // now. 1201 if (Module *CurrentModule = PP.getCurrentModule()) { 1202 ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap(); 1203 1204 SmallVector<Module *, 2> Stack; 1205 Stack.push_back(CurrentModule); 1206 while (!Stack.empty()) { 1207 Module *Mod = Stack.pop_back_val(); 1208 1209 // Resolve the exported declarations and conflicts. 1210 // FIXME: Actually complain, once we figure out how to teach the 1211 // diagnostic client to deal with complaints in the module map at this 1212 // point. 1213 ModMap.resolveExports(Mod, /*Complain=*/false); 1214 ModMap.resolveUses(Mod, /*Complain=*/false); 1215 ModMap.resolveConflicts(Mod, /*Complain=*/false); 1216 1217 // Queue the submodules, so their exports will also be resolved. 1218 Stack.append(Mod->submodule_begin(), Mod->submodule_end()); 1219 } 1220 } 1221 1222 // Warnings emitted in ActOnEndOfTranslationUnit() should be emitted for 1223 // modules when they are built, not every time they are used. 1224 emitAndClearUnusedLocalTypedefWarnings(); 1225 } 1226 1227 // C99 6.9.2p2: 1228 // A declaration of an identifier for an object that has file 1229 // scope without an initializer, and without a storage-class 1230 // specifier or with the storage-class specifier static, 1231 // constitutes a tentative definition. If a translation unit 1232 // contains one or more tentative definitions for an identifier, 1233 // and the translation unit contains no external definition for 1234 // that identifier, then the behavior is exactly as if the 1235 // translation unit contains a file scope declaration of that 1236 // identifier, with the composite type as of the end of the 1237 // translation unit, with an initializer equal to 0. 1238 llvm::SmallSet<VarDecl *, 32> Seen; 1239 for (TentativeDefinitionsType::iterator 1240 T = TentativeDefinitions.begin(ExternalSource), 1241 TEnd = TentativeDefinitions.end(); 1242 T != TEnd; ++T) { 1243 VarDecl *VD = (*T)->getActingDefinition(); 1244 1245 // If the tentative definition was completed, getActingDefinition() returns 1246 // null. If we've already seen this variable before, insert()'s second 1247 // return value is false. 1248 if (!VD || VD->isInvalidDecl() || !Seen.insert(VD).second) 1249 continue; 1250 1251 if (const IncompleteArrayType *ArrayT 1252 = Context.getAsIncompleteArrayType(VD->getType())) { 1253 // Set the length of the array to 1 (C99 6.9.2p5). 1254 Diag(VD->getLocation(), diag::warn_tentative_incomplete_array); 1255 llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true); 1256 QualType T = Context.getConstantArrayType(ArrayT->getElementType(), One, 1257 nullptr, ArrayType::Normal, 0); 1258 VD->setType(T); 1259 } else if (RequireCompleteType(VD->getLocation(), VD->getType(), 1260 diag::err_tentative_def_incomplete_type)) 1261 VD->setInvalidDecl(); 1262 1263 // No initialization is performed for a tentative definition. 1264 CheckCompleteVariableDeclaration(VD); 1265 1266 // Notify the consumer that we've completed a tentative definition. 1267 if (!VD->isInvalidDecl()) 1268 Consumer.CompleteTentativeDefinition(VD); 1269 } 1270 1271 for (auto D : ExternalDeclarations) { 1272 if (!D || D->isInvalidDecl() || D->getPreviousDecl() || !D->isUsed()) 1273 continue; 1274 1275 Consumer.CompleteExternalDeclaration(D); 1276 } 1277 1278 // If there were errors, disable 'unused' warnings since they will mostly be 1279 // noise. Don't warn for a use from a module: either we should warn on all 1280 // file-scope declarations in modules or not at all, but whether the 1281 // declaration is used is immaterial. 1282 if (!Diags.hasErrorOccurred() && TUKind != TU_Module) { 1283 // Output warning for unused file scoped decls. 1284 for (UnusedFileScopedDeclsType::iterator 1285 I = UnusedFileScopedDecls.begin(ExternalSource), 1286 E = UnusedFileScopedDecls.end(); I != E; ++I) { 1287 if (ShouldRemoveFromUnused(this, *I)) 1288 continue; 1289 1290 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) { 1291 const FunctionDecl *DiagD; 1292 if (!FD->hasBody(DiagD)) 1293 DiagD = FD; 1294 if (DiagD->isDeleted()) 1295 continue; // Deleted functions are supposed to be unused. 1296 if (DiagD->isReferenced()) { 1297 if (isa<CXXMethodDecl>(DiagD)) 1298 Diag(DiagD->getLocation(), diag::warn_unneeded_member_function) 1299 << DiagD; 1300 else { 1301 if (FD->getStorageClass() == SC_Static && 1302 !FD->isInlineSpecified() && 1303 !SourceMgr.isInMainFile( 1304 SourceMgr.getExpansionLoc(FD->getLocation()))) 1305 Diag(DiagD->getLocation(), 1306 diag::warn_unneeded_static_internal_decl) 1307 << DiagD; 1308 else 1309 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) 1310 << /*function*/ 0 << DiagD; 1311 } 1312 } else { 1313 if (FD->getDescribedFunctionTemplate()) 1314 Diag(DiagD->getLocation(), diag::warn_unused_template) 1315 << /*function*/ 0 << DiagD; 1316 else 1317 Diag(DiagD->getLocation(), isa<CXXMethodDecl>(DiagD) 1318 ? diag::warn_unused_member_function 1319 : diag::warn_unused_function) 1320 << DiagD; 1321 } 1322 } else { 1323 const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition(); 1324 if (!DiagD) 1325 DiagD = cast<VarDecl>(*I); 1326 if (DiagD->isReferenced()) { 1327 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) 1328 << /*variable*/ 1 << DiagD; 1329 } else if (DiagD->getType().isConstQualified()) { 1330 const SourceManager &SM = SourceMgr; 1331 if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) || 1332 !PP.getLangOpts().IsHeaderFile) 1333 Diag(DiagD->getLocation(), diag::warn_unused_const_variable) 1334 << DiagD; 1335 } else { 1336 if (DiagD->getDescribedVarTemplate()) 1337 Diag(DiagD->getLocation(), diag::warn_unused_template) 1338 << /*variable*/ 1 << DiagD; 1339 else 1340 Diag(DiagD->getLocation(), diag::warn_unused_variable) << DiagD; 1341 } 1342 } 1343 } 1344 1345 emitAndClearUnusedLocalTypedefWarnings(); 1346 } 1347 1348 if (!Diags.isIgnored(diag::warn_unused_private_field, SourceLocation())) { 1349 // FIXME: Load additional unused private field candidates from the external 1350 // source. 1351 RecordCompleteMap RecordsComplete; 1352 RecordCompleteMap MNCComplete; 1353 for (NamedDeclSetType::iterator I = UnusedPrivateFields.begin(), 1354 E = UnusedPrivateFields.end(); I != E; ++I) { 1355 const NamedDecl *D = *I; 1356 const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D->getDeclContext()); 1357 if (RD && !RD->isUnion() && 1358 IsRecordFullyDefined(RD, RecordsComplete, MNCComplete)) { 1359 Diag(D->getLocation(), diag::warn_unused_private_field) 1360 << D->getDeclName(); 1361 } 1362 } 1363 } 1364 1365 if (!Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation())) { 1366 if (ExternalSource) 1367 ExternalSource->ReadMismatchingDeleteExpressions(DeleteExprs); 1368 for (const auto &DeletedFieldInfo : DeleteExprs) { 1369 for (const auto &DeleteExprLoc : DeletedFieldInfo.second) { 1370 AnalyzeDeleteExprMismatch(DeletedFieldInfo.first, DeleteExprLoc.first, 1371 DeleteExprLoc.second); 1372 } 1373 } 1374 } 1375 1376 // Check we've noticed that we're no longer parsing the initializer for every 1377 // variable. If we miss cases, then at best we have a performance issue and 1378 // at worst a rejects-valid bug. 1379 assert(ParsingInitForAutoVars.empty() && 1380 "Didn't unmark var as having its initializer parsed"); 1381 1382 if (!PP.isIncrementalProcessingEnabled()) 1383 TUScope = nullptr; 1384 } 1385 1386 1387 //===----------------------------------------------------------------------===// 1388 // Helper functions. 1389 //===----------------------------------------------------------------------===// 1390 1391 DeclContext *Sema::getFunctionLevelDeclContext() { 1392 DeclContext *DC = CurContext; 1393 1394 while (true) { 1395 if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC) || 1396 isa<RequiresExprBodyDecl>(DC)) { 1397 DC = DC->getParent(); 1398 } else if (isa<CXXMethodDecl>(DC) && 1399 cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call && 1400 cast<CXXRecordDecl>(DC->getParent())->isLambda()) { 1401 DC = DC->getParent()->getParent(); 1402 } 1403 else break; 1404 } 1405 1406 return DC; 1407 } 1408 1409 /// getCurFunctionDecl - If inside of a function body, this returns a pointer 1410 /// to the function decl for the function being parsed. If we're currently 1411 /// in a 'block', this returns the containing context. 1412 FunctionDecl *Sema::getCurFunctionDecl() { 1413 DeclContext *DC = getFunctionLevelDeclContext(); 1414 return dyn_cast<FunctionDecl>(DC); 1415 } 1416 1417 ObjCMethodDecl *Sema::getCurMethodDecl() { 1418 DeclContext *DC = getFunctionLevelDeclContext(); 1419 while (isa<RecordDecl>(DC)) 1420 DC = DC->getParent(); 1421 return dyn_cast<ObjCMethodDecl>(DC); 1422 } 1423 1424 NamedDecl *Sema::getCurFunctionOrMethodDecl() { 1425 DeclContext *DC = getFunctionLevelDeclContext(); 1426 if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC)) 1427 return cast<NamedDecl>(DC); 1428 return nullptr; 1429 } 1430 1431 LangAS Sema::getDefaultCXXMethodAddrSpace() const { 1432 if (getLangOpts().OpenCL) 1433 return LangAS::opencl_generic; 1434 return LangAS::Default; 1435 } 1436 1437 void Sema::EmitCurrentDiagnostic(unsigned DiagID) { 1438 // FIXME: It doesn't make sense to me that DiagID is an incoming argument here 1439 // and yet we also use the current diag ID on the DiagnosticsEngine. This has 1440 // been made more painfully obvious by the refactor that introduced this 1441 // function, but it is possible that the incoming argument can be 1442 // eliminated. If it truly cannot be (for example, there is some reentrancy 1443 // issue I am not seeing yet), then there should at least be a clarifying 1444 // comment somewhere. 1445 if (Optional<TemplateDeductionInfo*> Info = isSFINAEContext()) { 1446 switch (DiagnosticIDs::getDiagnosticSFINAEResponse( 1447 Diags.getCurrentDiagID())) { 1448 case DiagnosticIDs::SFINAE_Report: 1449 // We'll report the diagnostic below. 1450 break; 1451 1452 case DiagnosticIDs::SFINAE_SubstitutionFailure: 1453 // Count this failure so that we know that template argument deduction 1454 // has failed. 1455 ++NumSFINAEErrors; 1456 1457 // Make a copy of this suppressed diagnostic and store it with the 1458 // template-deduction information. 1459 if (*Info && !(*Info)->hasSFINAEDiagnostic()) { 1460 Diagnostic DiagInfo(&Diags); 1461 (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(), 1462 PartialDiagnostic(DiagInfo, Context.getDiagAllocator())); 1463 } 1464 1465 Diags.setLastDiagnosticIgnored(true); 1466 Diags.Clear(); 1467 return; 1468 1469 case DiagnosticIDs::SFINAE_AccessControl: { 1470 // Per C++ Core Issue 1170, access control is part of SFINAE. 1471 // Additionally, the AccessCheckingSFINAE flag can be used to temporarily 1472 // make access control a part of SFINAE for the purposes of checking 1473 // type traits. 1474 if (!AccessCheckingSFINAE && !getLangOpts().CPlusPlus11) 1475 break; 1476 1477 SourceLocation Loc = Diags.getCurrentDiagLoc(); 1478 1479 // Suppress this diagnostic. 1480 ++NumSFINAEErrors; 1481 1482 // Make a copy of this suppressed diagnostic and store it with the 1483 // template-deduction information. 1484 if (*Info && !(*Info)->hasSFINAEDiagnostic()) { 1485 Diagnostic DiagInfo(&Diags); 1486 (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(), 1487 PartialDiagnostic(DiagInfo, Context.getDiagAllocator())); 1488 } 1489 1490 Diags.setLastDiagnosticIgnored(true); 1491 Diags.Clear(); 1492 1493 // Now the diagnostic state is clear, produce a C++98 compatibility 1494 // warning. 1495 Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control); 1496 1497 // The last diagnostic which Sema produced was ignored. Suppress any 1498 // notes attached to it. 1499 Diags.setLastDiagnosticIgnored(true); 1500 return; 1501 } 1502 1503 case DiagnosticIDs::SFINAE_Suppress: 1504 // Make a copy of this suppressed diagnostic and store it with the 1505 // template-deduction information; 1506 if (*Info) { 1507 Diagnostic DiagInfo(&Diags); 1508 (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(), 1509 PartialDiagnostic(DiagInfo, Context.getDiagAllocator())); 1510 } 1511 1512 // Suppress this diagnostic. 1513 Diags.setLastDiagnosticIgnored(true); 1514 Diags.Clear(); 1515 return; 1516 } 1517 } 1518 1519 // Copy the diagnostic printing policy over the ASTContext printing policy. 1520 // TODO: Stop doing that. See: https://reviews.llvm.org/D45093#1090292 1521 Context.setPrintingPolicy(getPrintingPolicy()); 1522 1523 // Emit the diagnostic. 1524 if (!Diags.EmitCurrentDiagnostic()) 1525 return; 1526 1527 // If this is not a note, and we're in a template instantiation 1528 // that is different from the last template instantiation where 1529 // we emitted an error, print a template instantiation 1530 // backtrace. 1531 if (!DiagnosticIDs::isBuiltinNote(DiagID)) 1532 PrintContextStack(); 1533 } 1534 1535 Sema::SemaDiagnosticBuilder 1536 Sema::Diag(SourceLocation Loc, const PartialDiagnostic &PD, bool DeferHint) { 1537 return Diag(Loc, PD.getDiagID(), DeferHint) << PD; 1538 } 1539 1540 bool Sema::hasUncompilableErrorOccurred() const { 1541 if (getDiagnostics().hasUncompilableErrorOccurred()) 1542 return true; 1543 auto *FD = dyn_cast<FunctionDecl>(CurContext); 1544 if (!FD) 1545 return false; 1546 auto Loc = DeviceDeferredDiags.find(FD); 1547 if (Loc == DeviceDeferredDiags.end()) 1548 return false; 1549 for (auto PDAt : Loc->second) { 1550 if (DiagnosticIDs::isDefaultMappingAsError(PDAt.second.getDiagID())) 1551 return true; 1552 } 1553 return false; 1554 } 1555 1556 // Print notes showing how we can reach FD starting from an a priori 1557 // known-callable function. 1558 static void emitCallStackNotes(Sema &S, FunctionDecl *FD) { 1559 auto FnIt = S.DeviceKnownEmittedFns.find(FD); 1560 while (FnIt != S.DeviceKnownEmittedFns.end()) { 1561 // Respect error limit. 1562 if (S.Diags.hasFatalErrorOccurred()) 1563 return; 1564 DiagnosticBuilder Builder( 1565 S.Diags.Report(FnIt->second.Loc, diag::note_called_by)); 1566 Builder << FnIt->second.FD; 1567 FnIt = S.DeviceKnownEmittedFns.find(FnIt->second.FD); 1568 } 1569 } 1570 1571 namespace { 1572 1573 /// Helper class that emits deferred diagnostic messages if an entity directly 1574 /// or indirectly using the function that causes the deferred diagnostic 1575 /// messages is known to be emitted. 1576 /// 1577 /// During parsing of AST, certain diagnostic messages are recorded as deferred 1578 /// diagnostics since it is unknown whether the functions containing such 1579 /// diagnostics will be emitted. A list of potentially emitted functions and 1580 /// variables that may potentially trigger emission of functions are also 1581 /// recorded. DeferredDiagnosticsEmitter recursively visits used functions 1582 /// by each function to emit deferred diagnostics. 1583 /// 1584 /// During the visit, certain OpenMP directives or initializer of variables 1585 /// with certain OpenMP attributes will cause subsequent visiting of any 1586 /// functions enter a state which is called OpenMP device context in this 1587 /// implementation. The state is exited when the directive or initializer is 1588 /// exited. This state can change the emission states of subsequent uses 1589 /// of functions. 1590 /// 1591 /// Conceptually the functions or variables to be visited form a use graph 1592 /// where the parent node uses the child node. At any point of the visit, 1593 /// the tree nodes traversed from the tree root to the current node form a use 1594 /// stack. The emission state of the current node depends on two factors: 1595 /// 1. the emission state of the root node 1596 /// 2. whether the current node is in OpenMP device context 1597 /// If the function is decided to be emitted, its contained deferred diagnostics 1598 /// are emitted, together with the information about the use stack. 1599 /// 1600 class DeferredDiagnosticsEmitter 1601 : public UsedDeclVisitor<DeferredDiagnosticsEmitter> { 1602 public: 1603 typedef UsedDeclVisitor<DeferredDiagnosticsEmitter> Inherited; 1604 1605 // Whether the function is already in the current use-path. 1606 llvm::SmallPtrSet<CanonicalDeclPtr<Decl>, 4> InUsePath; 1607 1608 // The current use-path. 1609 llvm::SmallVector<CanonicalDeclPtr<FunctionDecl>, 4> UsePath; 1610 1611 // Whether the visiting of the function has been done. Done[0] is for the 1612 // case not in OpenMP device context. Done[1] is for the case in OpenMP 1613 // device context. We need two sets because diagnostics emission may be 1614 // different depending on whether it is in OpenMP device context. 1615 llvm::SmallPtrSet<CanonicalDeclPtr<Decl>, 4> DoneMap[2]; 1616 1617 // Emission state of the root node of the current use graph. 1618 bool ShouldEmitRootNode; 1619 1620 // Current OpenMP device context level. It is initialized to 0 and each 1621 // entering of device context increases it by 1 and each exit decreases 1622 // it by 1. Non-zero value indicates it is currently in device context. 1623 unsigned InOMPDeviceContext; 1624 1625 DeferredDiagnosticsEmitter(Sema &S) 1626 : Inherited(S), ShouldEmitRootNode(false), InOMPDeviceContext(0) {} 1627 1628 bool shouldVisitDiscardedStmt() const { return false; } 1629 1630 void VisitOMPTargetDirective(OMPTargetDirective *Node) { 1631 ++InOMPDeviceContext; 1632 Inherited::VisitOMPTargetDirective(Node); 1633 --InOMPDeviceContext; 1634 } 1635 1636 void visitUsedDecl(SourceLocation Loc, Decl *D) { 1637 if (isa<VarDecl>(D)) 1638 return; 1639 if (auto *FD = dyn_cast<FunctionDecl>(D)) 1640 checkFunc(Loc, FD); 1641 else 1642 Inherited::visitUsedDecl(Loc, D); 1643 } 1644 1645 void checkVar(VarDecl *VD) { 1646 assert(VD->isFileVarDecl() && 1647 "Should only check file-scope variables"); 1648 if (auto *Init = VD->getInit()) { 1649 auto DevTy = OMPDeclareTargetDeclAttr::getDeviceType(VD); 1650 bool IsDev = DevTy && (*DevTy == OMPDeclareTargetDeclAttr::DT_NoHost || 1651 *DevTy == OMPDeclareTargetDeclAttr::DT_Any); 1652 if (IsDev) 1653 ++InOMPDeviceContext; 1654 this->Visit(Init); 1655 if (IsDev) 1656 --InOMPDeviceContext; 1657 } 1658 } 1659 1660 void checkFunc(SourceLocation Loc, FunctionDecl *FD) { 1661 auto &Done = DoneMap[InOMPDeviceContext > 0 ? 1 : 0]; 1662 FunctionDecl *Caller = UsePath.empty() ? nullptr : UsePath.back(); 1663 if ((!ShouldEmitRootNode && !S.getLangOpts().OpenMP && !Caller) || 1664 S.shouldIgnoreInHostDeviceCheck(FD) || InUsePath.count(FD)) 1665 return; 1666 // Finalize analysis of OpenMP-specific constructs. 1667 if (Caller && S.LangOpts.OpenMP && UsePath.size() == 1 && 1668 (ShouldEmitRootNode || InOMPDeviceContext)) 1669 S.finalizeOpenMPDelayedAnalysis(Caller, FD, Loc); 1670 if (Caller) 1671 S.DeviceKnownEmittedFns[FD] = {Caller, Loc}; 1672 // Always emit deferred diagnostics for the direct users. This does not 1673 // lead to explosion of diagnostics since each user is visited at most 1674 // twice. 1675 if (ShouldEmitRootNode || InOMPDeviceContext) 1676 emitDeferredDiags(FD, Caller); 1677 // Do not revisit a function if the function body has been completely 1678 // visited before. 1679 if (!Done.insert(FD).second) 1680 return; 1681 InUsePath.insert(FD); 1682 UsePath.push_back(FD); 1683 if (auto *S = FD->getBody()) { 1684 this->Visit(S); 1685 } 1686 UsePath.pop_back(); 1687 InUsePath.erase(FD); 1688 } 1689 1690 void checkRecordedDecl(Decl *D) { 1691 if (auto *FD = dyn_cast<FunctionDecl>(D)) { 1692 ShouldEmitRootNode = S.getEmissionStatus(FD, /*Final=*/true) == 1693 Sema::FunctionEmissionStatus::Emitted; 1694 checkFunc(SourceLocation(), FD); 1695 } else 1696 checkVar(cast<VarDecl>(D)); 1697 } 1698 1699 // Emit any deferred diagnostics for FD 1700 void emitDeferredDiags(FunctionDecl *FD, bool ShowCallStack) { 1701 auto It = S.DeviceDeferredDiags.find(FD); 1702 if (It == S.DeviceDeferredDiags.end()) 1703 return; 1704 bool HasWarningOrError = false; 1705 bool FirstDiag = true; 1706 for (PartialDiagnosticAt &PDAt : It->second) { 1707 // Respect error limit. 1708 if (S.Diags.hasFatalErrorOccurred()) 1709 return; 1710 const SourceLocation &Loc = PDAt.first; 1711 const PartialDiagnostic &PD = PDAt.second; 1712 HasWarningOrError |= 1713 S.getDiagnostics().getDiagnosticLevel(PD.getDiagID(), Loc) >= 1714 DiagnosticsEngine::Warning; 1715 { 1716 DiagnosticBuilder Builder(S.Diags.Report(Loc, PD.getDiagID())); 1717 PD.Emit(Builder); 1718 } 1719 // Emit the note on the first diagnostic in case too many diagnostics 1720 // cause the note not emitted. 1721 if (FirstDiag && HasWarningOrError && ShowCallStack) { 1722 emitCallStackNotes(S, FD); 1723 FirstDiag = false; 1724 } 1725 } 1726 } 1727 }; 1728 } // namespace 1729 1730 void Sema::emitDeferredDiags() { 1731 if (ExternalSource) 1732 ExternalSource->ReadDeclsToCheckForDeferredDiags( 1733 DeclsToCheckForDeferredDiags); 1734 1735 if ((DeviceDeferredDiags.empty() && !LangOpts.OpenMP) || 1736 DeclsToCheckForDeferredDiags.empty()) 1737 return; 1738 1739 DeferredDiagnosticsEmitter DDE(*this); 1740 for (auto D : DeclsToCheckForDeferredDiags) 1741 DDE.checkRecordedDecl(D); 1742 } 1743 1744 // In CUDA, there are some constructs which may appear in semantically-valid 1745 // code, but trigger errors if we ever generate code for the function in which 1746 // they appear. Essentially every construct you're not allowed to use on the 1747 // device falls into this category, because you are allowed to use these 1748 // constructs in a __host__ __device__ function, but only if that function is 1749 // never codegen'ed on the device. 1750 // 1751 // To handle semantic checking for these constructs, we keep track of the set of 1752 // functions we know will be emitted, either because we could tell a priori that 1753 // they would be emitted, or because they were transitively called by a 1754 // known-emitted function. 1755 // 1756 // We also keep a partial call graph of which not-known-emitted functions call 1757 // which other not-known-emitted functions. 1758 // 1759 // When we see something which is illegal if the current function is emitted 1760 // (usually by way of CUDADiagIfDeviceCode, CUDADiagIfHostCode, or 1761 // CheckCUDACall), we first check if the current function is known-emitted. If 1762 // so, we immediately output the diagnostic. 1763 // 1764 // Otherwise, we "defer" the diagnostic. It sits in Sema::DeviceDeferredDiags 1765 // until we discover that the function is known-emitted, at which point we take 1766 // it out of this map and emit the diagnostic. 1767 1768 Sema::SemaDiagnosticBuilder::SemaDiagnosticBuilder(Kind K, SourceLocation Loc, 1769 unsigned DiagID, 1770 FunctionDecl *Fn, Sema &S) 1771 : S(S), Loc(Loc), DiagID(DiagID), Fn(Fn), 1772 ShowCallStack(K == K_ImmediateWithCallStack || K == K_Deferred) { 1773 switch (K) { 1774 case K_Nop: 1775 break; 1776 case K_Immediate: 1777 case K_ImmediateWithCallStack: 1778 ImmediateDiag.emplace( 1779 ImmediateDiagBuilder(S.Diags.Report(Loc, DiagID), S, DiagID)); 1780 break; 1781 case K_Deferred: 1782 assert(Fn && "Must have a function to attach the deferred diag to."); 1783 auto &Diags = S.DeviceDeferredDiags[Fn]; 1784 PartialDiagId.emplace(Diags.size()); 1785 Diags.emplace_back(Loc, S.PDiag(DiagID)); 1786 break; 1787 } 1788 } 1789 1790 Sema::SemaDiagnosticBuilder::SemaDiagnosticBuilder(SemaDiagnosticBuilder &&D) 1791 : S(D.S), Loc(D.Loc), DiagID(D.DiagID), Fn(D.Fn), 1792 ShowCallStack(D.ShowCallStack), ImmediateDiag(D.ImmediateDiag), 1793 PartialDiagId(D.PartialDiagId) { 1794 // Clean the previous diagnostics. 1795 D.ShowCallStack = false; 1796 D.ImmediateDiag.reset(); 1797 D.PartialDiagId.reset(); 1798 } 1799 1800 Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder() { 1801 if (ImmediateDiag) { 1802 // Emit our diagnostic and, if it was a warning or error, output a callstack 1803 // if Fn isn't a priori known-emitted. 1804 bool IsWarningOrError = S.getDiagnostics().getDiagnosticLevel( 1805 DiagID, Loc) >= DiagnosticsEngine::Warning; 1806 ImmediateDiag.reset(); // Emit the immediate diag. 1807 if (IsWarningOrError && ShowCallStack) 1808 emitCallStackNotes(S, Fn); 1809 } else { 1810 assert((!PartialDiagId || ShowCallStack) && 1811 "Must always show call stack for deferred diags."); 1812 } 1813 } 1814 1815 Sema::SemaDiagnosticBuilder 1816 Sema::targetDiag(SourceLocation Loc, unsigned DiagID, FunctionDecl *FD) { 1817 FD = FD ? FD : getCurFunctionDecl(); 1818 if (LangOpts.OpenMP) 1819 return LangOpts.OpenMPIsDevice ? diagIfOpenMPDeviceCode(Loc, DiagID, FD) 1820 : diagIfOpenMPHostCode(Loc, DiagID, FD); 1821 if (getLangOpts().CUDA) 1822 return getLangOpts().CUDAIsDevice ? CUDADiagIfDeviceCode(Loc, DiagID) 1823 : CUDADiagIfHostCode(Loc, DiagID); 1824 1825 if (getLangOpts().SYCLIsDevice) 1826 return SYCLDiagIfDeviceCode(Loc, DiagID); 1827 1828 return SemaDiagnosticBuilder(SemaDiagnosticBuilder::K_Immediate, Loc, DiagID, 1829 FD, *this); 1830 } 1831 1832 Sema::SemaDiagnosticBuilder Sema::Diag(SourceLocation Loc, unsigned DiagID, 1833 bool DeferHint) { 1834 bool IsError = Diags.getDiagnosticIDs()->isDefaultMappingAsError(DiagID); 1835 bool ShouldDefer = getLangOpts().CUDA && LangOpts.GPUDeferDiag && 1836 DiagnosticIDs::isDeferrable(DiagID) && 1837 (DeferHint || DeferDiags || !IsError); 1838 auto SetIsLastErrorImmediate = [&](bool Flag) { 1839 if (IsError) 1840 IsLastErrorImmediate = Flag; 1841 }; 1842 if (!ShouldDefer) { 1843 SetIsLastErrorImmediate(true); 1844 return SemaDiagnosticBuilder(SemaDiagnosticBuilder::K_Immediate, Loc, 1845 DiagID, getCurFunctionDecl(), *this); 1846 } 1847 1848 SemaDiagnosticBuilder DB = getLangOpts().CUDAIsDevice 1849 ? CUDADiagIfDeviceCode(Loc, DiagID) 1850 : CUDADiagIfHostCode(Loc, DiagID); 1851 SetIsLastErrorImmediate(DB.isImmediate()); 1852 return DB; 1853 } 1854 1855 void Sema::checkDeviceDecl(ValueDecl *D, SourceLocation Loc) { 1856 if (isUnevaluatedContext()) 1857 return; 1858 1859 Decl *C = cast<Decl>(getCurLexicalContext()); 1860 1861 // Memcpy operations for structs containing a member with unsupported type 1862 // are ok, though. 1863 if (const auto *MD = dyn_cast<CXXMethodDecl>(C)) { 1864 if ((MD->isCopyAssignmentOperator() || MD->isMoveAssignmentOperator()) && 1865 MD->isTrivial()) 1866 return; 1867 1868 if (const auto *Ctor = dyn_cast<CXXConstructorDecl>(MD)) 1869 if (Ctor->isCopyOrMoveConstructor() && Ctor->isTrivial()) 1870 return; 1871 } 1872 1873 // Try to associate errors with the lexical context, if that is a function, or 1874 // the value declaration otherwise. 1875 FunctionDecl *FD = 1876 isa<FunctionDecl>(C) ? cast<FunctionDecl>(C) : dyn_cast<FunctionDecl>(D); 1877 auto CheckType = [&](QualType Ty) { 1878 if (Ty->isDependentType()) 1879 return; 1880 1881 if (Ty->isExtIntType()) { 1882 if (!Context.getTargetInfo().hasExtIntType()) { 1883 targetDiag(Loc, diag::err_device_unsupported_type, FD) 1884 << D << false /*show bit size*/ << 0 /*bitsize*/ 1885 << Ty << Context.getTargetInfo().getTriple().str(); 1886 } 1887 return; 1888 } 1889 1890 if ((Ty->isFloat16Type() && !Context.getTargetInfo().hasFloat16Type()) || 1891 ((Ty->isFloat128Type() || 1892 (Ty->isRealFloatingType() && Context.getTypeSize(Ty) == 128)) && 1893 !Context.getTargetInfo().hasFloat128Type()) || 1894 (Ty->isIntegerType() && Context.getTypeSize(Ty) == 128 && 1895 !Context.getTargetInfo().hasInt128Type())) { 1896 if (targetDiag(Loc, diag::err_device_unsupported_type, FD) 1897 << D << true /*show bit size*/ 1898 << static_cast<unsigned>(Context.getTypeSize(Ty)) << Ty 1899 << Context.getTargetInfo().getTriple().str()) 1900 D->setInvalidDecl(); 1901 targetDiag(D->getLocation(), diag::note_defined_here, FD) << D; 1902 } 1903 }; 1904 1905 QualType Ty = D->getType(); 1906 CheckType(Ty); 1907 1908 if (const auto *FPTy = dyn_cast<FunctionProtoType>(Ty)) { 1909 for (const auto &ParamTy : FPTy->param_types()) 1910 CheckType(ParamTy); 1911 CheckType(FPTy->getReturnType()); 1912 } 1913 if (const auto *FNPTy = dyn_cast<FunctionNoProtoType>(Ty)) 1914 CheckType(FNPTy->getReturnType()); 1915 } 1916 1917 /// Looks through the macro-expansion chain for the given 1918 /// location, looking for a macro expansion with the given name. 1919 /// If one is found, returns true and sets the location to that 1920 /// expansion loc. 1921 bool Sema::findMacroSpelling(SourceLocation &locref, StringRef name) { 1922 SourceLocation loc = locref; 1923 if (!loc.isMacroID()) return false; 1924 1925 // There's no good way right now to look at the intermediate 1926 // expansions, so just jump to the expansion location. 1927 loc = getSourceManager().getExpansionLoc(loc); 1928 1929 // If that's written with the name, stop here. 1930 SmallString<16> buffer; 1931 if (getPreprocessor().getSpelling(loc, buffer) == name) { 1932 locref = loc; 1933 return true; 1934 } 1935 return false; 1936 } 1937 1938 /// Determines the active Scope associated with the given declaration 1939 /// context. 1940 /// 1941 /// This routine maps a declaration context to the active Scope object that 1942 /// represents that declaration context in the parser. It is typically used 1943 /// from "scope-less" code (e.g., template instantiation, lazy creation of 1944 /// declarations) that injects a name for name-lookup purposes and, therefore, 1945 /// must update the Scope. 1946 /// 1947 /// \returns The scope corresponding to the given declaraion context, or NULL 1948 /// if no such scope is open. 1949 Scope *Sema::getScopeForContext(DeclContext *Ctx) { 1950 1951 if (!Ctx) 1952 return nullptr; 1953 1954 Ctx = Ctx->getPrimaryContext(); 1955 for (Scope *S = getCurScope(); S; S = S->getParent()) { 1956 // Ignore scopes that cannot have declarations. This is important for 1957 // out-of-line definitions of static class members. 1958 if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope)) 1959 if (DeclContext *Entity = S->getEntity()) 1960 if (Ctx == Entity->getPrimaryContext()) 1961 return S; 1962 } 1963 1964 return nullptr; 1965 } 1966 1967 /// Enter a new function scope 1968 void Sema::PushFunctionScope() { 1969 if (FunctionScopes.empty() && CachedFunctionScope) { 1970 // Use CachedFunctionScope to avoid allocating memory when possible. 1971 CachedFunctionScope->Clear(); 1972 FunctionScopes.push_back(CachedFunctionScope.release()); 1973 } else { 1974 FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics())); 1975 } 1976 if (LangOpts.OpenMP) 1977 pushOpenMPFunctionRegion(); 1978 } 1979 1980 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) { 1981 FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(), 1982 BlockScope, Block)); 1983 } 1984 1985 LambdaScopeInfo *Sema::PushLambdaScope() { 1986 LambdaScopeInfo *const LSI = new LambdaScopeInfo(getDiagnostics()); 1987 FunctionScopes.push_back(LSI); 1988 return LSI; 1989 } 1990 1991 void Sema::RecordParsingTemplateParameterDepth(unsigned Depth) { 1992 if (LambdaScopeInfo *const LSI = getCurLambda()) { 1993 LSI->AutoTemplateParameterDepth = Depth; 1994 return; 1995 } 1996 llvm_unreachable( 1997 "Remove assertion if intentionally called in a non-lambda context."); 1998 } 1999 2000 // Check that the type of the VarDecl has an accessible copy constructor and 2001 // resolve its destructor's exception specification. 2002 // This also performs initialization of block variables when they are moved 2003 // to the heap. It uses the same rules as applicable for implicit moves 2004 // according to the C++ standard in effect ([class.copy.elision]p3). 2005 static void checkEscapingByref(VarDecl *VD, Sema &S) { 2006 QualType T = VD->getType(); 2007 EnterExpressionEvaluationContext scope( 2008 S, Sema::ExpressionEvaluationContext::PotentiallyEvaluated); 2009 SourceLocation Loc = VD->getLocation(); 2010 Expr *VarRef = 2011 new (S.Context) DeclRefExpr(S.Context, VD, false, T, VK_LValue, Loc); 2012 ExprResult Result; 2013 auto IE = InitializedEntity::InitializeBlock(Loc, T); 2014 if (S.getLangOpts().CPlusPlus2b) { 2015 auto *E = ImplicitCastExpr::Create(S.Context, T, CK_NoOp, VarRef, nullptr, 2016 VK_XValue, FPOptionsOverride()); 2017 Result = S.PerformCopyInitialization(IE, SourceLocation(), E); 2018 } else { 2019 Result = S.PerformMoveOrCopyInitialization( 2020 IE, Sema::NamedReturnInfo{VD, Sema::NamedReturnInfo::MoveEligible}, 2021 VarRef); 2022 } 2023 2024 if (!Result.isInvalid()) { 2025 Result = S.MaybeCreateExprWithCleanups(Result); 2026 Expr *Init = Result.getAs<Expr>(); 2027 S.Context.setBlockVarCopyInit(VD, Init, S.canThrow(Init)); 2028 } 2029 2030 // The destructor's exception specification is needed when IRGen generates 2031 // block copy/destroy functions. Resolve it here. 2032 if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) 2033 if (CXXDestructorDecl *DD = RD->getDestructor()) { 2034 auto *FPT = DD->getType()->getAs<FunctionProtoType>(); 2035 S.ResolveExceptionSpec(Loc, FPT); 2036 } 2037 } 2038 2039 static void markEscapingByrefs(const FunctionScopeInfo &FSI, Sema &S) { 2040 // Set the EscapingByref flag of __block variables captured by 2041 // escaping blocks. 2042 for (const BlockDecl *BD : FSI.Blocks) { 2043 for (const BlockDecl::Capture &BC : BD->captures()) { 2044 VarDecl *VD = BC.getVariable(); 2045 if (VD->hasAttr<BlocksAttr>()) { 2046 // Nothing to do if this is a __block variable captured by a 2047 // non-escaping block. 2048 if (BD->doesNotEscape()) 2049 continue; 2050 VD->setEscapingByref(); 2051 } 2052 // Check whether the captured variable is or contains an object of 2053 // non-trivial C union type. 2054 QualType CapType = BC.getVariable()->getType(); 2055 if (CapType.hasNonTrivialToPrimitiveDestructCUnion() || 2056 CapType.hasNonTrivialToPrimitiveCopyCUnion()) 2057 S.checkNonTrivialCUnion(BC.getVariable()->getType(), 2058 BD->getCaretLocation(), 2059 Sema::NTCUC_BlockCapture, 2060 Sema::NTCUK_Destruct|Sema::NTCUK_Copy); 2061 } 2062 } 2063 2064 for (VarDecl *VD : FSI.ByrefBlockVars) { 2065 // __block variables might require us to capture a copy-initializer. 2066 if (!VD->isEscapingByref()) 2067 continue; 2068 // It's currently invalid to ever have a __block variable with an 2069 // array type; should we diagnose that here? 2070 // Regardless, we don't want to ignore array nesting when 2071 // constructing this copy. 2072 if (VD->getType()->isStructureOrClassType()) 2073 checkEscapingByref(VD, S); 2074 } 2075 } 2076 2077 /// Pop a function (or block or lambda or captured region) scope from the stack. 2078 /// 2079 /// \param WP The warning policy to use for CFG-based warnings, or null if such 2080 /// warnings should not be produced. 2081 /// \param D The declaration corresponding to this function scope, if producing 2082 /// CFG-based warnings. 2083 /// \param BlockType The type of the block expression, if D is a BlockDecl. 2084 Sema::PoppedFunctionScopePtr 2085 Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP, 2086 const Decl *D, QualType BlockType) { 2087 assert(!FunctionScopes.empty() && "mismatched push/pop!"); 2088 2089 markEscapingByrefs(*FunctionScopes.back(), *this); 2090 2091 PoppedFunctionScopePtr Scope(FunctionScopes.pop_back_val(), 2092 PoppedFunctionScopeDeleter(this)); 2093 2094 if (LangOpts.OpenMP) 2095 popOpenMPFunctionRegion(Scope.get()); 2096 2097 // Issue any analysis-based warnings. 2098 if (WP && D) 2099 AnalysisWarnings.IssueWarnings(*WP, Scope.get(), D, BlockType); 2100 else 2101 for (const auto &PUD : Scope->PossiblyUnreachableDiags) 2102 Diag(PUD.Loc, PUD.PD); 2103 2104 return Scope; 2105 } 2106 2107 void Sema::PoppedFunctionScopeDeleter:: 2108 operator()(sema::FunctionScopeInfo *Scope) const { 2109 // Stash the function scope for later reuse if it's for a normal function. 2110 if (Scope->isPlainFunction() && !Self->CachedFunctionScope) 2111 Self->CachedFunctionScope.reset(Scope); 2112 else 2113 delete Scope; 2114 } 2115 2116 void Sema::PushCompoundScope(bool IsStmtExpr) { 2117 getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr)); 2118 } 2119 2120 void Sema::PopCompoundScope() { 2121 FunctionScopeInfo *CurFunction = getCurFunction(); 2122 assert(!CurFunction->CompoundScopes.empty() && "mismatched push/pop"); 2123 2124 CurFunction->CompoundScopes.pop_back(); 2125 } 2126 2127 /// Determine whether any errors occurred within this function/method/ 2128 /// block. 2129 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const { 2130 return getCurFunction()->hasUnrecoverableErrorOccurred(); 2131 } 2132 2133 void Sema::setFunctionHasBranchIntoScope() { 2134 if (!FunctionScopes.empty()) 2135 FunctionScopes.back()->setHasBranchIntoScope(); 2136 } 2137 2138 void Sema::setFunctionHasBranchProtectedScope() { 2139 if (!FunctionScopes.empty()) 2140 FunctionScopes.back()->setHasBranchProtectedScope(); 2141 } 2142 2143 void Sema::setFunctionHasIndirectGoto() { 2144 if (!FunctionScopes.empty()) 2145 FunctionScopes.back()->setHasIndirectGoto(); 2146 } 2147 2148 void Sema::setFunctionHasMustTail() { 2149 if (!FunctionScopes.empty()) 2150 FunctionScopes.back()->setHasMustTail(); 2151 } 2152 2153 BlockScopeInfo *Sema::getCurBlock() { 2154 if (FunctionScopes.empty()) 2155 return nullptr; 2156 2157 auto CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back()); 2158 if (CurBSI && CurBSI->TheDecl && 2159 !CurBSI->TheDecl->Encloses(CurContext)) { 2160 // We have switched contexts due to template instantiation. 2161 assert(!CodeSynthesisContexts.empty()); 2162 return nullptr; 2163 } 2164 2165 return CurBSI; 2166 } 2167 2168 FunctionScopeInfo *Sema::getEnclosingFunction() const { 2169 if (FunctionScopes.empty()) 2170 return nullptr; 2171 2172 for (int e = FunctionScopes.size() - 1; e >= 0; --e) { 2173 if (isa<sema::BlockScopeInfo>(FunctionScopes[e])) 2174 continue; 2175 return FunctionScopes[e]; 2176 } 2177 return nullptr; 2178 } 2179 2180 LambdaScopeInfo *Sema::getEnclosingLambda() const { 2181 for (auto *Scope : llvm::reverse(FunctionScopes)) { 2182 if (auto *LSI = dyn_cast<sema::LambdaScopeInfo>(Scope)) { 2183 if (LSI->Lambda && !LSI->Lambda->Encloses(CurContext)) { 2184 // We have switched contexts due to template instantiation. 2185 // FIXME: We should swap out the FunctionScopes during code synthesis 2186 // so that we don't need to check for this. 2187 assert(!CodeSynthesisContexts.empty()); 2188 return nullptr; 2189 } 2190 return LSI; 2191 } 2192 } 2193 return nullptr; 2194 } 2195 2196 LambdaScopeInfo *Sema::getCurLambda(bool IgnoreNonLambdaCapturingScope) { 2197 if (FunctionScopes.empty()) 2198 return nullptr; 2199 2200 auto I = FunctionScopes.rbegin(); 2201 if (IgnoreNonLambdaCapturingScope) { 2202 auto E = FunctionScopes.rend(); 2203 while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I)) 2204 ++I; 2205 if (I == E) 2206 return nullptr; 2207 } 2208 auto *CurLSI = dyn_cast<LambdaScopeInfo>(*I); 2209 if (CurLSI && CurLSI->Lambda && 2210 !CurLSI->Lambda->Encloses(CurContext)) { 2211 // We have switched contexts due to template instantiation. 2212 assert(!CodeSynthesisContexts.empty()); 2213 return nullptr; 2214 } 2215 2216 return CurLSI; 2217 } 2218 2219 // We have a generic lambda if we parsed auto parameters, or we have 2220 // an associated template parameter list. 2221 LambdaScopeInfo *Sema::getCurGenericLambda() { 2222 if (LambdaScopeInfo *LSI = getCurLambda()) { 2223 return (LSI->TemplateParams.size() || 2224 LSI->GLTemplateParameterList) ? LSI : nullptr; 2225 } 2226 return nullptr; 2227 } 2228 2229 2230 void Sema::ActOnComment(SourceRange Comment) { 2231 if (!LangOpts.RetainCommentsFromSystemHeaders && 2232 SourceMgr.isInSystemHeader(Comment.getBegin())) 2233 return; 2234 RawComment RC(SourceMgr, Comment, LangOpts.CommentOpts, false); 2235 if (RC.isAlmostTrailingComment()) { 2236 SourceRange MagicMarkerRange(Comment.getBegin(), 2237 Comment.getBegin().getLocWithOffset(3)); 2238 StringRef MagicMarkerText; 2239 switch (RC.getKind()) { 2240 case RawComment::RCK_OrdinaryBCPL: 2241 MagicMarkerText = "///<"; 2242 break; 2243 case RawComment::RCK_OrdinaryC: 2244 MagicMarkerText = "/**<"; 2245 break; 2246 default: 2247 llvm_unreachable("if this is an almost Doxygen comment, " 2248 "it should be ordinary"); 2249 } 2250 Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) << 2251 FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText); 2252 } 2253 Context.addComment(RC); 2254 } 2255 2256 // Pin this vtable to this file. 2257 ExternalSemaSource::~ExternalSemaSource() {} 2258 char ExternalSemaSource::ID; 2259 2260 void ExternalSemaSource::ReadMethodPool(Selector Sel) { } 2261 void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { } 2262 2263 void ExternalSemaSource::ReadKnownNamespaces( 2264 SmallVectorImpl<NamespaceDecl *> &Namespaces) { 2265 } 2266 2267 void ExternalSemaSource::ReadUndefinedButUsed( 2268 llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {} 2269 2270 void ExternalSemaSource::ReadMismatchingDeleteExpressions(llvm::MapVector< 2271 FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &) {} 2272 2273 /// Figure out if an expression could be turned into a call. 2274 /// 2275 /// Use this when trying to recover from an error where the programmer may have 2276 /// written just the name of a function instead of actually calling it. 2277 /// 2278 /// \param E - The expression to examine. 2279 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call 2280 /// with no arguments, this parameter is set to the type returned by such a 2281 /// call; otherwise, it is set to an empty QualType. 2282 /// \param OverloadSet - If the expression is an overloaded function 2283 /// name, this parameter is populated with the decls of the various overloads. 2284 bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy, 2285 UnresolvedSetImpl &OverloadSet) { 2286 ZeroArgCallReturnTy = QualType(); 2287 OverloadSet.clear(); 2288 2289 const OverloadExpr *Overloads = nullptr; 2290 bool IsMemExpr = false; 2291 if (E.getType() == Context.OverloadTy) { 2292 OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E)); 2293 2294 // Ignore overloads that are pointer-to-member constants. 2295 if (FR.HasFormOfMemberPointer) 2296 return false; 2297 2298 Overloads = FR.Expression; 2299 } else if (E.getType() == Context.BoundMemberTy) { 2300 Overloads = dyn_cast<UnresolvedMemberExpr>(E.IgnoreParens()); 2301 IsMemExpr = true; 2302 } 2303 2304 bool Ambiguous = false; 2305 bool IsMV = false; 2306 2307 if (Overloads) { 2308 for (OverloadExpr::decls_iterator it = Overloads->decls_begin(), 2309 DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) { 2310 OverloadSet.addDecl(*it); 2311 2312 // Check whether the function is a non-template, non-member which takes no 2313 // arguments. 2314 if (IsMemExpr) 2315 continue; 2316 if (const FunctionDecl *OverloadDecl 2317 = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) { 2318 if (OverloadDecl->getMinRequiredArguments() == 0) { 2319 if (!ZeroArgCallReturnTy.isNull() && !Ambiguous && 2320 (!IsMV || !(OverloadDecl->isCPUDispatchMultiVersion() || 2321 OverloadDecl->isCPUSpecificMultiVersion()))) { 2322 ZeroArgCallReturnTy = QualType(); 2323 Ambiguous = true; 2324 } else { 2325 ZeroArgCallReturnTy = OverloadDecl->getReturnType(); 2326 IsMV = OverloadDecl->isCPUDispatchMultiVersion() || 2327 OverloadDecl->isCPUSpecificMultiVersion(); 2328 } 2329 } 2330 } 2331 } 2332 2333 // If it's not a member, use better machinery to try to resolve the call 2334 if (!IsMemExpr) 2335 return !ZeroArgCallReturnTy.isNull(); 2336 } 2337 2338 // Attempt to call the member with no arguments - this will correctly handle 2339 // member templates with defaults/deduction of template arguments, overloads 2340 // with default arguments, etc. 2341 if (IsMemExpr && !E.isTypeDependent()) { 2342 Sema::TentativeAnalysisScope Trap(*this); 2343 ExprResult R = BuildCallToMemberFunction(nullptr, &E, SourceLocation(), 2344 None, SourceLocation()); 2345 if (R.isUsable()) { 2346 ZeroArgCallReturnTy = R.get()->getType(); 2347 return true; 2348 } 2349 return false; 2350 } 2351 2352 if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) { 2353 if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) { 2354 if (Fun->getMinRequiredArguments() == 0) 2355 ZeroArgCallReturnTy = Fun->getReturnType(); 2356 return true; 2357 } 2358 } 2359 2360 // We don't have an expression that's convenient to get a FunctionDecl from, 2361 // but we can at least check if the type is "function of 0 arguments". 2362 QualType ExprTy = E.getType(); 2363 const FunctionType *FunTy = nullptr; 2364 QualType PointeeTy = ExprTy->getPointeeType(); 2365 if (!PointeeTy.isNull()) 2366 FunTy = PointeeTy->getAs<FunctionType>(); 2367 if (!FunTy) 2368 FunTy = ExprTy->getAs<FunctionType>(); 2369 2370 if (const FunctionProtoType *FPT = 2371 dyn_cast_or_null<FunctionProtoType>(FunTy)) { 2372 if (FPT->getNumParams() == 0) 2373 ZeroArgCallReturnTy = FunTy->getReturnType(); 2374 return true; 2375 } 2376 return false; 2377 } 2378 2379 /// Give notes for a set of overloads. 2380 /// 2381 /// A companion to tryExprAsCall. In cases when the name that the programmer 2382 /// wrote was an overloaded function, we may be able to make some guesses about 2383 /// plausible overloads based on their return types; such guesses can be handed 2384 /// off to this method to be emitted as notes. 2385 /// 2386 /// \param Overloads - The overloads to note. 2387 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to 2388 /// -fshow-overloads=best, this is the location to attach to the note about too 2389 /// many candidates. Typically this will be the location of the original 2390 /// ill-formed expression. 2391 static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, 2392 const SourceLocation FinalNoteLoc) { 2393 unsigned ShownOverloads = 0; 2394 unsigned SuppressedOverloads = 0; 2395 for (UnresolvedSetImpl::iterator It = Overloads.begin(), 2396 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 2397 if (ShownOverloads >= S.Diags.getNumOverloadCandidatesToShow()) { 2398 ++SuppressedOverloads; 2399 continue; 2400 } 2401 2402 NamedDecl *Fn = (*It)->getUnderlyingDecl(); 2403 // Don't print overloads for non-default multiversioned functions. 2404 if (const auto *FD = Fn->getAsFunction()) { 2405 if (FD->isMultiVersion() && FD->hasAttr<TargetAttr>() && 2406 !FD->getAttr<TargetAttr>()->isDefaultVersion()) 2407 continue; 2408 } 2409 S.Diag(Fn->getLocation(), diag::note_possible_target_of_call); 2410 ++ShownOverloads; 2411 } 2412 2413 S.Diags.overloadCandidatesShown(ShownOverloads); 2414 2415 if (SuppressedOverloads) 2416 S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates) 2417 << SuppressedOverloads; 2418 } 2419 2420 static void notePlausibleOverloads(Sema &S, SourceLocation Loc, 2421 const UnresolvedSetImpl &Overloads, 2422 bool (*IsPlausibleResult)(QualType)) { 2423 if (!IsPlausibleResult) 2424 return noteOverloads(S, Overloads, Loc); 2425 2426 UnresolvedSet<2> PlausibleOverloads; 2427 for (OverloadExpr::decls_iterator It = Overloads.begin(), 2428 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 2429 const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It); 2430 QualType OverloadResultTy = OverloadDecl->getReturnType(); 2431 if (IsPlausibleResult(OverloadResultTy)) 2432 PlausibleOverloads.addDecl(It.getDecl()); 2433 } 2434 noteOverloads(S, PlausibleOverloads, Loc); 2435 } 2436 2437 /// Determine whether the given expression can be called by just 2438 /// putting parentheses after it. Notably, expressions with unary 2439 /// operators can't be because the unary operator will start parsing 2440 /// outside the call. 2441 static bool IsCallableWithAppend(Expr *E) { 2442 E = E->IgnoreImplicit(); 2443 return (!isa<CStyleCastExpr>(E) && 2444 !isa<UnaryOperator>(E) && 2445 !isa<BinaryOperator>(E) && 2446 !isa<CXXOperatorCallExpr>(E)); 2447 } 2448 2449 static bool IsCPUDispatchCPUSpecificMultiVersion(const Expr *E) { 2450 if (const auto *UO = dyn_cast<UnaryOperator>(E)) 2451 E = UO->getSubExpr(); 2452 2453 if (const auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) { 2454 if (ULE->getNumDecls() == 0) 2455 return false; 2456 2457 const NamedDecl *ND = *ULE->decls_begin(); 2458 if (const auto *FD = dyn_cast<FunctionDecl>(ND)) 2459 return FD->isCPUDispatchMultiVersion() || FD->isCPUSpecificMultiVersion(); 2460 } 2461 return false; 2462 } 2463 2464 bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD, 2465 bool ForceComplain, 2466 bool (*IsPlausibleResult)(QualType)) { 2467 SourceLocation Loc = E.get()->getExprLoc(); 2468 SourceRange Range = E.get()->getSourceRange(); 2469 2470 QualType ZeroArgCallTy; 2471 UnresolvedSet<4> Overloads; 2472 if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) && 2473 !ZeroArgCallTy.isNull() && 2474 (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) { 2475 // At this point, we know E is potentially callable with 0 2476 // arguments and that it returns something of a reasonable type, 2477 // so we can emit a fixit and carry on pretending that E was 2478 // actually a CallExpr. 2479 SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd()); 2480 bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get()); 2481 Diag(Loc, PD) << /*zero-arg*/ 1 << IsMV << Range 2482 << (IsCallableWithAppend(E.get()) 2483 ? FixItHint::CreateInsertion(ParenInsertionLoc, "()") 2484 : FixItHint()); 2485 if (!IsMV) 2486 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 2487 2488 // FIXME: Try this before emitting the fixit, and suppress diagnostics 2489 // while doing so. 2490 E = BuildCallExpr(nullptr, E.get(), Range.getEnd(), None, 2491 Range.getEnd().getLocWithOffset(1)); 2492 return true; 2493 } 2494 2495 if (!ForceComplain) return false; 2496 2497 bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get()); 2498 Diag(Loc, PD) << /*not zero-arg*/ 0 << IsMV << Range; 2499 if (!IsMV) 2500 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 2501 E = ExprError(); 2502 return true; 2503 } 2504 2505 IdentifierInfo *Sema::getSuperIdentifier() const { 2506 if (!Ident_super) 2507 Ident_super = &Context.Idents.get("super"); 2508 return Ident_super; 2509 } 2510 2511 IdentifierInfo *Sema::getFloat128Identifier() const { 2512 if (!Ident___float128) 2513 Ident___float128 = &Context.Idents.get("__float128"); 2514 return Ident___float128; 2515 } 2516 2517 void Sema::PushCapturedRegionScope(Scope *S, CapturedDecl *CD, RecordDecl *RD, 2518 CapturedRegionKind K, 2519 unsigned OpenMPCaptureLevel) { 2520 auto *CSI = new CapturedRegionScopeInfo( 2521 getDiagnostics(), S, CD, RD, CD->getContextParam(), K, 2522 (getLangOpts().OpenMP && K == CR_OpenMP) ? getOpenMPNestingLevel() : 0, 2523 OpenMPCaptureLevel); 2524 CSI->ReturnType = Context.VoidTy; 2525 FunctionScopes.push_back(CSI); 2526 } 2527 2528 CapturedRegionScopeInfo *Sema::getCurCapturedRegion() { 2529 if (FunctionScopes.empty()) 2530 return nullptr; 2531 2532 return dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back()); 2533 } 2534 2535 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> & 2536 Sema::getMismatchingDeleteExpressions() const { 2537 return DeleteExprs; 2538 } 2539