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