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