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