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