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