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