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