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().getOpenCLCompatibleVersion() >= 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 getASTContext().getDefaultOpenCLPointeeAddrSpace(); 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 // Check if we are dealing with two 'long double' but with different 1891 // semantics. 1892 bool LongDoubleMismatched = false; 1893 if (Ty->isRealFloatingType() && Context.getTypeSize(Ty) == 128) { 1894 const llvm::fltSemantics &Sem = Context.getFloatTypeSemantics(Ty); 1895 if ((&Sem != &llvm::APFloat::PPCDoubleDouble() && 1896 !Context.getTargetInfo().hasFloat128Type()) || 1897 (&Sem == &llvm::APFloat::PPCDoubleDouble() && 1898 !Context.getTargetInfo().hasIbm128Type())) 1899 LongDoubleMismatched = true; 1900 } 1901 1902 if ((Ty->isFloat16Type() && !Context.getTargetInfo().hasFloat16Type()) || 1903 (Ty->isFloat128Type() && !Context.getTargetInfo().hasFloat128Type()) || 1904 (Ty->isIbm128Type() && !Context.getTargetInfo().hasIbm128Type()) || 1905 (Ty->isIntegerType() && Context.getTypeSize(Ty) == 128 && 1906 !Context.getTargetInfo().hasInt128Type()) || 1907 LongDoubleMismatched) { 1908 if (targetDiag(Loc, diag::err_device_unsupported_type, FD) 1909 << D << true /*show bit size*/ 1910 << static_cast<unsigned>(Context.getTypeSize(Ty)) << Ty 1911 << Context.getTargetInfo().getTriple().str()) 1912 D->setInvalidDecl(); 1913 targetDiag(D->getLocation(), diag::note_defined_here, FD) << D; 1914 } 1915 }; 1916 1917 QualType Ty = D->getType(); 1918 CheckType(Ty); 1919 1920 if (const auto *FPTy = dyn_cast<FunctionProtoType>(Ty)) { 1921 for (const auto &ParamTy : FPTy->param_types()) 1922 CheckType(ParamTy); 1923 CheckType(FPTy->getReturnType()); 1924 } 1925 if (const auto *FNPTy = dyn_cast<FunctionNoProtoType>(Ty)) 1926 CheckType(FNPTy->getReturnType()); 1927 } 1928 1929 /// Looks through the macro-expansion chain for the given 1930 /// location, looking for a macro expansion with the given name. 1931 /// If one is found, returns true and sets the location to that 1932 /// expansion loc. 1933 bool Sema::findMacroSpelling(SourceLocation &locref, StringRef name) { 1934 SourceLocation loc = locref; 1935 if (!loc.isMacroID()) return false; 1936 1937 // There's no good way right now to look at the intermediate 1938 // expansions, so just jump to the expansion location. 1939 loc = getSourceManager().getExpansionLoc(loc); 1940 1941 // If that's written with the name, stop here. 1942 SmallString<16> buffer; 1943 if (getPreprocessor().getSpelling(loc, buffer) == name) { 1944 locref = loc; 1945 return true; 1946 } 1947 return false; 1948 } 1949 1950 /// Determines the active Scope associated with the given declaration 1951 /// context. 1952 /// 1953 /// This routine maps a declaration context to the active Scope object that 1954 /// represents that declaration context in the parser. It is typically used 1955 /// from "scope-less" code (e.g., template instantiation, lazy creation of 1956 /// declarations) that injects a name for name-lookup purposes and, therefore, 1957 /// must update the Scope. 1958 /// 1959 /// \returns The scope corresponding to the given declaraion context, or NULL 1960 /// if no such scope is open. 1961 Scope *Sema::getScopeForContext(DeclContext *Ctx) { 1962 1963 if (!Ctx) 1964 return nullptr; 1965 1966 Ctx = Ctx->getPrimaryContext(); 1967 for (Scope *S = getCurScope(); S; S = S->getParent()) { 1968 // Ignore scopes that cannot have declarations. This is important for 1969 // out-of-line definitions of static class members. 1970 if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope)) 1971 if (DeclContext *Entity = S->getEntity()) 1972 if (Ctx == Entity->getPrimaryContext()) 1973 return S; 1974 } 1975 1976 return nullptr; 1977 } 1978 1979 /// Enter a new function scope 1980 void Sema::PushFunctionScope() { 1981 if (FunctionScopes.empty() && CachedFunctionScope) { 1982 // Use CachedFunctionScope to avoid allocating memory when possible. 1983 CachedFunctionScope->Clear(); 1984 FunctionScopes.push_back(CachedFunctionScope.release()); 1985 } else { 1986 FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics())); 1987 } 1988 if (LangOpts.OpenMP) 1989 pushOpenMPFunctionRegion(); 1990 } 1991 1992 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) { 1993 FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(), 1994 BlockScope, Block)); 1995 } 1996 1997 LambdaScopeInfo *Sema::PushLambdaScope() { 1998 LambdaScopeInfo *const LSI = new LambdaScopeInfo(getDiagnostics()); 1999 FunctionScopes.push_back(LSI); 2000 return LSI; 2001 } 2002 2003 void Sema::RecordParsingTemplateParameterDepth(unsigned Depth) { 2004 if (LambdaScopeInfo *const LSI = getCurLambda()) { 2005 LSI->AutoTemplateParameterDepth = Depth; 2006 return; 2007 } 2008 llvm_unreachable( 2009 "Remove assertion if intentionally called in a non-lambda context."); 2010 } 2011 2012 // Check that the type of the VarDecl has an accessible copy constructor and 2013 // resolve its destructor's exception specification. 2014 // This also performs initialization of block variables when they are moved 2015 // to the heap. It uses the same rules as applicable for implicit moves 2016 // according to the C++ standard in effect ([class.copy.elision]p3). 2017 static void checkEscapingByref(VarDecl *VD, Sema &S) { 2018 QualType T = VD->getType(); 2019 EnterExpressionEvaluationContext scope( 2020 S, Sema::ExpressionEvaluationContext::PotentiallyEvaluated); 2021 SourceLocation Loc = VD->getLocation(); 2022 Expr *VarRef = 2023 new (S.Context) DeclRefExpr(S.Context, VD, false, T, VK_LValue, Loc); 2024 ExprResult Result; 2025 auto IE = InitializedEntity::InitializeBlock(Loc, T); 2026 if (S.getLangOpts().CPlusPlus2b) { 2027 auto *E = ImplicitCastExpr::Create(S.Context, T, CK_NoOp, VarRef, nullptr, 2028 VK_XValue, FPOptionsOverride()); 2029 Result = S.PerformCopyInitialization(IE, SourceLocation(), E); 2030 } else { 2031 Result = S.PerformMoveOrCopyInitialization( 2032 IE, Sema::NamedReturnInfo{VD, Sema::NamedReturnInfo::MoveEligible}, 2033 VarRef); 2034 } 2035 2036 if (!Result.isInvalid()) { 2037 Result = S.MaybeCreateExprWithCleanups(Result); 2038 Expr *Init = Result.getAs<Expr>(); 2039 S.Context.setBlockVarCopyInit(VD, Init, S.canThrow(Init)); 2040 } 2041 2042 // The destructor's exception specification is needed when IRGen generates 2043 // block copy/destroy functions. Resolve it here. 2044 if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) 2045 if (CXXDestructorDecl *DD = RD->getDestructor()) { 2046 auto *FPT = DD->getType()->getAs<FunctionProtoType>(); 2047 S.ResolveExceptionSpec(Loc, FPT); 2048 } 2049 } 2050 2051 static void markEscapingByrefs(const FunctionScopeInfo &FSI, Sema &S) { 2052 // Set the EscapingByref flag of __block variables captured by 2053 // escaping blocks. 2054 for (const BlockDecl *BD : FSI.Blocks) { 2055 for (const BlockDecl::Capture &BC : BD->captures()) { 2056 VarDecl *VD = BC.getVariable(); 2057 if (VD->hasAttr<BlocksAttr>()) { 2058 // Nothing to do if this is a __block variable captured by a 2059 // non-escaping block. 2060 if (BD->doesNotEscape()) 2061 continue; 2062 VD->setEscapingByref(); 2063 } 2064 // Check whether the captured variable is or contains an object of 2065 // non-trivial C union type. 2066 QualType CapType = BC.getVariable()->getType(); 2067 if (CapType.hasNonTrivialToPrimitiveDestructCUnion() || 2068 CapType.hasNonTrivialToPrimitiveCopyCUnion()) 2069 S.checkNonTrivialCUnion(BC.getVariable()->getType(), 2070 BD->getCaretLocation(), 2071 Sema::NTCUC_BlockCapture, 2072 Sema::NTCUK_Destruct|Sema::NTCUK_Copy); 2073 } 2074 } 2075 2076 for (VarDecl *VD : FSI.ByrefBlockVars) { 2077 // __block variables might require us to capture a copy-initializer. 2078 if (!VD->isEscapingByref()) 2079 continue; 2080 // It's currently invalid to ever have a __block variable with an 2081 // array type; should we diagnose that here? 2082 // Regardless, we don't want to ignore array nesting when 2083 // constructing this copy. 2084 if (VD->getType()->isStructureOrClassType()) 2085 checkEscapingByref(VD, S); 2086 } 2087 } 2088 2089 /// Pop a function (or block or lambda or captured region) scope from the stack. 2090 /// 2091 /// \param WP The warning policy to use for CFG-based warnings, or null if such 2092 /// warnings should not be produced. 2093 /// \param D The declaration corresponding to this function scope, if producing 2094 /// CFG-based warnings. 2095 /// \param BlockType The type of the block expression, if D is a BlockDecl. 2096 Sema::PoppedFunctionScopePtr 2097 Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP, 2098 const Decl *D, QualType BlockType) { 2099 assert(!FunctionScopes.empty() && "mismatched push/pop!"); 2100 2101 markEscapingByrefs(*FunctionScopes.back(), *this); 2102 2103 PoppedFunctionScopePtr Scope(FunctionScopes.pop_back_val(), 2104 PoppedFunctionScopeDeleter(this)); 2105 2106 if (LangOpts.OpenMP) 2107 popOpenMPFunctionRegion(Scope.get()); 2108 2109 // Issue any analysis-based warnings. 2110 if (WP && D) 2111 AnalysisWarnings.IssueWarnings(*WP, Scope.get(), D, BlockType); 2112 else 2113 for (const auto &PUD : Scope->PossiblyUnreachableDiags) 2114 Diag(PUD.Loc, PUD.PD); 2115 2116 return Scope; 2117 } 2118 2119 void Sema::PoppedFunctionScopeDeleter:: 2120 operator()(sema::FunctionScopeInfo *Scope) const { 2121 // Stash the function scope for later reuse if it's for a normal function. 2122 if (Scope->isPlainFunction() && !Self->CachedFunctionScope) 2123 Self->CachedFunctionScope.reset(Scope); 2124 else 2125 delete Scope; 2126 } 2127 2128 void Sema::PushCompoundScope(bool IsStmtExpr) { 2129 getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr)); 2130 } 2131 2132 void Sema::PopCompoundScope() { 2133 FunctionScopeInfo *CurFunction = getCurFunction(); 2134 assert(!CurFunction->CompoundScopes.empty() && "mismatched push/pop"); 2135 2136 CurFunction->CompoundScopes.pop_back(); 2137 } 2138 2139 /// Determine whether any errors occurred within this function/method/ 2140 /// block. 2141 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const { 2142 return getCurFunction()->hasUnrecoverableErrorOccurred(); 2143 } 2144 2145 void Sema::setFunctionHasBranchIntoScope() { 2146 if (!FunctionScopes.empty()) 2147 FunctionScopes.back()->setHasBranchIntoScope(); 2148 } 2149 2150 void Sema::setFunctionHasBranchProtectedScope() { 2151 if (!FunctionScopes.empty()) 2152 FunctionScopes.back()->setHasBranchProtectedScope(); 2153 } 2154 2155 void Sema::setFunctionHasIndirectGoto() { 2156 if (!FunctionScopes.empty()) 2157 FunctionScopes.back()->setHasIndirectGoto(); 2158 } 2159 2160 void Sema::setFunctionHasMustTail() { 2161 if (!FunctionScopes.empty()) 2162 FunctionScopes.back()->setHasMustTail(); 2163 } 2164 2165 BlockScopeInfo *Sema::getCurBlock() { 2166 if (FunctionScopes.empty()) 2167 return nullptr; 2168 2169 auto CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back()); 2170 if (CurBSI && CurBSI->TheDecl && 2171 !CurBSI->TheDecl->Encloses(CurContext)) { 2172 // We have switched contexts due to template instantiation. 2173 assert(!CodeSynthesisContexts.empty()); 2174 return nullptr; 2175 } 2176 2177 return CurBSI; 2178 } 2179 2180 FunctionScopeInfo *Sema::getEnclosingFunction() const { 2181 if (FunctionScopes.empty()) 2182 return nullptr; 2183 2184 for (int e = FunctionScopes.size() - 1; e >= 0; --e) { 2185 if (isa<sema::BlockScopeInfo>(FunctionScopes[e])) 2186 continue; 2187 return FunctionScopes[e]; 2188 } 2189 return nullptr; 2190 } 2191 2192 LambdaScopeInfo *Sema::getEnclosingLambda() const { 2193 for (auto *Scope : llvm::reverse(FunctionScopes)) { 2194 if (auto *LSI = dyn_cast<sema::LambdaScopeInfo>(Scope)) { 2195 if (LSI->Lambda && !LSI->Lambda->Encloses(CurContext)) { 2196 // We have switched contexts due to template instantiation. 2197 // FIXME: We should swap out the FunctionScopes during code synthesis 2198 // so that we don't need to check for this. 2199 assert(!CodeSynthesisContexts.empty()); 2200 return nullptr; 2201 } 2202 return LSI; 2203 } 2204 } 2205 return nullptr; 2206 } 2207 2208 LambdaScopeInfo *Sema::getCurLambda(bool IgnoreNonLambdaCapturingScope) { 2209 if (FunctionScopes.empty()) 2210 return nullptr; 2211 2212 auto I = FunctionScopes.rbegin(); 2213 if (IgnoreNonLambdaCapturingScope) { 2214 auto E = FunctionScopes.rend(); 2215 while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I)) 2216 ++I; 2217 if (I == E) 2218 return nullptr; 2219 } 2220 auto *CurLSI = dyn_cast<LambdaScopeInfo>(*I); 2221 if (CurLSI && CurLSI->Lambda && 2222 !CurLSI->Lambda->Encloses(CurContext)) { 2223 // We have switched contexts due to template instantiation. 2224 assert(!CodeSynthesisContexts.empty()); 2225 return nullptr; 2226 } 2227 2228 return CurLSI; 2229 } 2230 2231 // We have a generic lambda if we parsed auto parameters, or we have 2232 // an associated template parameter list. 2233 LambdaScopeInfo *Sema::getCurGenericLambda() { 2234 if (LambdaScopeInfo *LSI = getCurLambda()) { 2235 return (LSI->TemplateParams.size() || 2236 LSI->GLTemplateParameterList) ? LSI : nullptr; 2237 } 2238 return nullptr; 2239 } 2240 2241 2242 void Sema::ActOnComment(SourceRange Comment) { 2243 if (!LangOpts.RetainCommentsFromSystemHeaders && 2244 SourceMgr.isInSystemHeader(Comment.getBegin())) 2245 return; 2246 RawComment RC(SourceMgr, Comment, LangOpts.CommentOpts, false); 2247 if (RC.isAlmostTrailingComment()) { 2248 SourceRange MagicMarkerRange(Comment.getBegin(), 2249 Comment.getBegin().getLocWithOffset(3)); 2250 StringRef MagicMarkerText; 2251 switch (RC.getKind()) { 2252 case RawComment::RCK_OrdinaryBCPL: 2253 MagicMarkerText = "///<"; 2254 break; 2255 case RawComment::RCK_OrdinaryC: 2256 MagicMarkerText = "/**<"; 2257 break; 2258 default: 2259 llvm_unreachable("if this is an almost Doxygen comment, " 2260 "it should be ordinary"); 2261 } 2262 Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) << 2263 FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText); 2264 } 2265 Context.addComment(RC); 2266 } 2267 2268 // Pin this vtable to this file. 2269 ExternalSemaSource::~ExternalSemaSource() {} 2270 char ExternalSemaSource::ID; 2271 2272 void ExternalSemaSource::ReadMethodPool(Selector Sel) { } 2273 void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { } 2274 2275 void ExternalSemaSource::ReadKnownNamespaces( 2276 SmallVectorImpl<NamespaceDecl *> &Namespaces) { 2277 } 2278 2279 void ExternalSemaSource::ReadUndefinedButUsed( 2280 llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {} 2281 2282 void ExternalSemaSource::ReadMismatchingDeleteExpressions(llvm::MapVector< 2283 FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &) {} 2284 2285 /// Figure out if an expression could be turned into a call. 2286 /// 2287 /// Use this when trying to recover from an error where the programmer may have 2288 /// written just the name of a function instead of actually calling it. 2289 /// 2290 /// \param E - The expression to examine. 2291 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call 2292 /// with no arguments, this parameter is set to the type returned by such a 2293 /// call; otherwise, it is set to an empty QualType. 2294 /// \param OverloadSet - If the expression is an overloaded function 2295 /// name, this parameter is populated with the decls of the various overloads. 2296 bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy, 2297 UnresolvedSetImpl &OverloadSet) { 2298 ZeroArgCallReturnTy = QualType(); 2299 OverloadSet.clear(); 2300 2301 const OverloadExpr *Overloads = nullptr; 2302 bool IsMemExpr = false; 2303 if (E.getType() == Context.OverloadTy) { 2304 OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E)); 2305 2306 // Ignore overloads that are pointer-to-member constants. 2307 if (FR.HasFormOfMemberPointer) 2308 return false; 2309 2310 Overloads = FR.Expression; 2311 } else if (E.getType() == Context.BoundMemberTy) { 2312 Overloads = dyn_cast<UnresolvedMemberExpr>(E.IgnoreParens()); 2313 IsMemExpr = true; 2314 } 2315 2316 bool Ambiguous = false; 2317 bool IsMV = false; 2318 2319 if (Overloads) { 2320 for (OverloadExpr::decls_iterator it = Overloads->decls_begin(), 2321 DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) { 2322 OverloadSet.addDecl(*it); 2323 2324 // Check whether the function is a non-template, non-member which takes no 2325 // arguments. 2326 if (IsMemExpr) 2327 continue; 2328 if (const FunctionDecl *OverloadDecl 2329 = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) { 2330 if (OverloadDecl->getMinRequiredArguments() == 0) { 2331 if (!ZeroArgCallReturnTy.isNull() && !Ambiguous && 2332 (!IsMV || !(OverloadDecl->isCPUDispatchMultiVersion() || 2333 OverloadDecl->isCPUSpecificMultiVersion()))) { 2334 ZeroArgCallReturnTy = QualType(); 2335 Ambiguous = true; 2336 } else { 2337 ZeroArgCallReturnTy = OverloadDecl->getReturnType(); 2338 IsMV = OverloadDecl->isCPUDispatchMultiVersion() || 2339 OverloadDecl->isCPUSpecificMultiVersion(); 2340 } 2341 } 2342 } 2343 } 2344 2345 // If it's not a member, use better machinery to try to resolve the call 2346 if (!IsMemExpr) 2347 return !ZeroArgCallReturnTy.isNull(); 2348 } 2349 2350 // Attempt to call the member with no arguments - this will correctly handle 2351 // member templates with defaults/deduction of template arguments, overloads 2352 // with default arguments, etc. 2353 if (IsMemExpr && !E.isTypeDependent()) { 2354 Sema::TentativeAnalysisScope Trap(*this); 2355 ExprResult R = BuildCallToMemberFunction(nullptr, &E, SourceLocation(), 2356 None, SourceLocation()); 2357 if (R.isUsable()) { 2358 ZeroArgCallReturnTy = R.get()->getType(); 2359 return true; 2360 } 2361 return false; 2362 } 2363 2364 if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) { 2365 if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) { 2366 if (Fun->getMinRequiredArguments() == 0) 2367 ZeroArgCallReturnTy = Fun->getReturnType(); 2368 return true; 2369 } 2370 } 2371 2372 // We don't have an expression that's convenient to get a FunctionDecl from, 2373 // but we can at least check if the type is "function of 0 arguments". 2374 QualType ExprTy = E.getType(); 2375 const FunctionType *FunTy = nullptr; 2376 QualType PointeeTy = ExprTy->getPointeeType(); 2377 if (!PointeeTy.isNull()) 2378 FunTy = PointeeTy->getAs<FunctionType>(); 2379 if (!FunTy) 2380 FunTy = ExprTy->getAs<FunctionType>(); 2381 2382 if (const FunctionProtoType *FPT = 2383 dyn_cast_or_null<FunctionProtoType>(FunTy)) { 2384 if (FPT->getNumParams() == 0) 2385 ZeroArgCallReturnTy = FunTy->getReturnType(); 2386 return true; 2387 } 2388 return false; 2389 } 2390 2391 /// Give notes for a set of overloads. 2392 /// 2393 /// A companion to tryExprAsCall. In cases when the name that the programmer 2394 /// wrote was an overloaded function, we may be able to make some guesses about 2395 /// plausible overloads based on their return types; such guesses can be handed 2396 /// off to this method to be emitted as notes. 2397 /// 2398 /// \param Overloads - The overloads to note. 2399 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to 2400 /// -fshow-overloads=best, this is the location to attach to the note about too 2401 /// many candidates. Typically this will be the location of the original 2402 /// ill-formed expression. 2403 static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, 2404 const SourceLocation FinalNoteLoc) { 2405 unsigned ShownOverloads = 0; 2406 unsigned SuppressedOverloads = 0; 2407 for (UnresolvedSetImpl::iterator It = Overloads.begin(), 2408 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 2409 if (ShownOverloads >= S.Diags.getNumOverloadCandidatesToShow()) { 2410 ++SuppressedOverloads; 2411 continue; 2412 } 2413 2414 NamedDecl *Fn = (*It)->getUnderlyingDecl(); 2415 // Don't print overloads for non-default multiversioned functions. 2416 if (const auto *FD = Fn->getAsFunction()) { 2417 if (FD->isMultiVersion() && FD->hasAttr<TargetAttr>() && 2418 !FD->getAttr<TargetAttr>()->isDefaultVersion()) 2419 continue; 2420 } 2421 S.Diag(Fn->getLocation(), diag::note_possible_target_of_call); 2422 ++ShownOverloads; 2423 } 2424 2425 S.Diags.overloadCandidatesShown(ShownOverloads); 2426 2427 if (SuppressedOverloads) 2428 S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates) 2429 << SuppressedOverloads; 2430 } 2431 2432 static void notePlausibleOverloads(Sema &S, SourceLocation Loc, 2433 const UnresolvedSetImpl &Overloads, 2434 bool (*IsPlausibleResult)(QualType)) { 2435 if (!IsPlausibleResult) 2436 return noteOverloads(S, Overloads, Loc); 2437 2438 UnresolvedSet<2> PlausibleOverloads; 2439 for (OverloadExpr::decls_iterator It = Overloads.begin(), 2440 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 2441 const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It); 2442 QualType OverloadResultTy = OverloadDecl->getReturnType(); 2443 if (IsPlausibleResult(OverloadResultTy)) 2444 PlausibleOverloads.addDecl(It.getDecl()); 2445 } 2446 noteOverloads(S, PlausibleOverloads, Loc); 2447 } 2448 2449 /// Determine whether the given expression can be called by just 2450 /// putting parentheses after it. Notably, expressions with unary 2451 /// operators can't be because the unary operator will start parsing 2452 /// outside the call. 2453 static bool IsCallableWithAppend(Expr *E) { 2454 E = E->IgnoreImplicit(); 2455 return (!isa<CStyleCastExpr>(E) && 2456 !isa<UnaryOperator>(E) && 2457 !isa<BinaryOperator>(E) && 2458 !isa<CXXOperatorCallExpr>(E)); 2459 } 2460 2461 static bool IsCPUDispatchCPUSpecificMultiVersion(const Expr *E) { 2462 if (const auto *UO = dyn_cast<UnaryOperator>(E)) 2463 E = UO->getSubExpr(); 2464 2465 if (const auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) { 2466 if (ULE->getNumDecls() == 0) 2467 return false; 2468 2469 const NamedDecl *ND = *ULE->decls_begin(); 2470 if (const auto *FD = dyn_cast<FunctionDecl>(ND)) 2471 return FD->isCPUDispatchMultiVersion() || FD->isCPUSpecificMultiVersion(); 2472 } 2473 return false; 2474 } 2475 2476 bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD, 2477 bool ForceComplain, 2478 bool (*IsPlausibleResult)(QualType)) { 2479 SourceLocation Loc = E.get()->getExprLoc(); 2480 SourceRange Range = E.get()->getSourceRange(); 2481 2482 QualType ZeroArgCallTy; 2483 UnresolvedSet<4> Overloads; 2484 if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) && 2485 !ZeroArgCallTy.isNull() && 2486 (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) { 2487 // At this point, we know E is potentially callable with 0 2488 // arguments and that it returns something of a reasonable type, 2489 // so we can emit a fixit and carry on pretending that E was 2490 // actually a CallExpr. 2491 SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd()); 2492 bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get()); 2493 Diag(Loc, PD) << /*zero-arg*/ 1 << IsMV << Range 2494 << (IsCallableWithAppend(E.get()) 2495 ? FixItHint::CreateInsertion(ParenInsertionLoc, "()") 2496 : FixItHint()); 2497 if (!IsMV) 2498 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 2499 2500 // FIXME: Try this before emitting the fixit, and suppress diagnostics 2501 // while doing so. 2502 E = BuildCallExpr(nullptr, E.get(), Range.getEnd(), None, 2503 Range.getEnd().getLocWithOffset(1)); 2504 return true; 2505 } 2506 2507 if (!ForceComplain) return false; 2508 2509 bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get()); 2510 Diag(Loc, PD) << /*not zero-arg*/ 0 << IsMV << Range; 2511 if (!IsMV) 2512 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 2513 E = ExprError(); 2514 return true; 2515 } 2516 2517 IdentifierInfo *Sema::getSuperIdentifier() const { 2518 if (!Ident_super) 2519 Ident_super = &Context.Idents.get("super"); 2520 return Ident_super; 2521 } 2522 2523 IdentifierInfo *Sema::getFloat128Identifier() const { 2524 if (!Ident___float128) 2525 Ident___float128 = &Context.Idents.get("__float128"); 2526 return Ident___float128; 2527 } 2528 2529 void Sema::PushCapturedRegionScope(Scope *S, CapturedDecl *CD, RecordDecl *RD, 2530 CapturedRegionKind K, 2531 unsigned OpenMPCaptureLevel) { 2532 auto *CSI = new CapturedRegionScopeInfo( 2533 getDiagnostics(), S, CD, RD, CD->getContextParam(), K, 2534 (getLangOpts().OpenMP && K == CR_OpenMP) ? getOpenMPNestingLevel() : 0, 2535 OpenMPCaptureLevel); 2536 CSI->ReturnType = Context.VoidTy; 2537 FunctionScopes.push_back(CSI); 2538 } 2539 2540 CapturedRegionScopeInfo *Sema::getCurCapturedRegion() { 2541 if (FunctionScopes.empty()) 2542 return nullptr; 2543 2544 return dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back()); 2545 } 2546 2547 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> & 2548 Sema::getMismatchingDeleteExpressions() const { 2549 return DeleteExprs; 2550 } 2551