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.count(FD)) 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 Done.insert(FD); 1568 } 1569 1570 void checkRecordedDecl(Decl *D) { 1571 if (auto *FD = dyn_cast<FunctionDecl>(D)) { 1572 ShouldEmitRootNode = S.getEmissionStatus(FD, /*Final=*/true) == 1573 Sema::FunctionEmissionStatus::Emitted; 1574 checkFunc(SourceLocation(), FD); 1575 } else 1576 checkVar(cast<VarDecl>(D)); 1577 } 1578 1579 // Emit any deferred diagnostics for FD 1580 void emitDeferredDiags(FunctionDecl *FD, bool ShowCallStack) { 1581 auto It = S.DeviceDeferredDiags.find(FD); 1582 if (It == S.DeviceDeferredDiags.end()) 1583 return; 1584 bool HasWarningOrError = false; 1585 bool FirstDiag = true; 1586 for (PartialDiagnosticAt &PDAt : It->second) { 1587 // Respect error limit. 1588 if (S.Diags.hasFatalErrorOccurred()) 1589 return; 1590 const SourceLocation &Loc = PDAt.first; 1591 const PartialDiagnostic &PD = PDAt.second; 1592 HasWarningOrError |= 1593 S.getDiagnostics().getDiagnosticLevel(PD.getDiagID(), Loc) >= 1594 DiagnosticsEngine::Warning; 1595 { 1596 DiagnosticBuilder Builder(S.Diags.Report(Loc, PD.getDiagID())); 1597 PD.Emit(Builder); 1598 } 1599 // Emit the note on the first diagnostic in case too many diagnostics 1600 // cause the note not emitted. 1601 if (FirstDiag && HasWarningOrError && ShowCallStack) { 1602 emitCallStackNotes(S, FD); 1603 FirstDiag = false; 1604 } 1605 } 1606 } 1607 }; 1608 } // namespace 1609 1610 void Sema::emitDeferredDiags() { 1611 if (ExternalSource) 1612 ExternalSource->ReadDeclsToCheckForDeferredDiags( 1613 DeclsToCheckForDeferredDiags); 1614 1615 if ((DeviceDeferredDiags.empty() && !LangOpts.OpenMP) || 1616 DeclsToCheckForDeferredDiags.empty()) 1617 return; 1618 1619 DeferredDiagnosticsEmitter DDE(*this); 1620 for (auto D : DeclsToCheckForDeferredDiags) 1621 DDE.checkRecordedDecl(D); 1622 } 1623 1624 // In CUDA, there are some constructs which may appear in semantically-valid 1625 // code, but trigger errors if we ever generate code for the function in which 1626 // they appear. Essentially every construct you're not allowed to use on the 1627 // device falls into this category, because you are allowed to use these 1628 // constructs in a __host__ __device__ function, but only if that function is 1629 // never codegen'ed on the device. 1630 // 1631 // To handle semantic checking for these constructs, we keep track of the set of 1632 // functions we know will be emitted, either because we could tell a priori that 1633 // they would be emitted, or because they were transitively called by a 1634 // known-emitted function. 1635 // 1636 // We also keep a partial call graph of which not-known-emitted functions call 1637 // which other not-known-emitted functions. 1638 // 1639 // When we see something which is illegal if the current function is emitted 1640 // (usually by way of CUDADiagIfDeviceCode, CUDADiagIfHostCode, or 1641 // CheckCUDACall), we first check if the current function is known-emitted. If 1642 // so, we immediately output the diagnostic. 1643 // 1644 // Otherwise, we "defer" the diagnostic. It sits in Sema::DeviceDeferredDiags 1645 // until we discover that the function is known-emitted, at which point we take 1646 // it out of this map and emit the diagnostic. 1647 1648 Sema::DeviceDiagBuilder::DeviceDiagBuilder(Kind K, SourceLocation Loc, 1649 unsigned DiagID, FunctionDecl *Fn, 1650 Sema &S) 1651 : S(S), Loc(Loc), DiagID(DiagID), Fn(Fn), 1652 ShowCallStack(K == K_ImmediateWithCallStack || K == K_Deferred) { 1653 switch (K) { 1654 case K_Nop: 1655 break; 1656 case K_Immediate: 1657 case K_ImmediateWithCallStack: 1658 ImmediateDiag.emplace(S.Diag(Loc, DiagID)); 1659 break; 1660 case K_Deferred: 1661 assert(Fn && "Must have a function to attach the deferred diag to."); 1662 auto &Diags = S.DeviceDeferredDiags[Fn]; 1663 PartialDiagId.emplace(Diags.size()); 1664 Diags.emplace_back(Loc, S.PDiag(DiagID)); 1665 break; 1666 } 1667 } 1668 1669 Sema::DeviceDiagBuilder::DeviceDiagBuilder(DeviceDiagBuilder &&D) 1670 : S(D.S), Loc(D.Loc), DiagID(D.DiagID), Fn(D.Fn), 1671 ShowCallStack(D.ShowCallStack), ImmediateDiag(D.ImmediateDiag), 1672 PartialDiagId(D.PartialDiagId) { 1673 // Clean the previous diagnostics. 1674 D.ShowCallStack = false; 1675 D.ImmediateDiag.reset(); 1676 D.PartialDiagId.reset(); 1677 } 1678 1679 Sema::DeviceDiagBuilder::~DeviceDiagBuilder() { 1680 if (ImmediateDiag) { 1681 // Emit our diagnostic and, if it was a warning or error, output a callstack 1682 // if Fn isn't a priori known-emitted. 1683 bool IsWarningOrError = S.getDiagnostics().getDiagnosticLevel( 1684 DiagID, Loc) >= DiagnosticsEngine::Warning; 1685 ImmediateDiag.reset(); // Emit the immediate diag. 1686 if (IsWarningOrError && ShowCallStack) 1687 emitCallStackNotes(S, Fn); 1688 } else { 1689 assert((!PartialDiagId || ShowCallStack) && 1690 "Must always show call stack for deferred diags."); 1691 } 1692 } 1693 1694 Sema::DeviceDiagBuilder Sema::targetDiag(SourceLocation Loc, unsigned DiagID) { 1695 if (LangOpts.OpenMP) 1696 return LangOpts.OpenMPIsDevice ? diagIfOpenMPDeviceCode(Loc, DiagID) 1697 : diagIfOpenMPHostCode(Loc, DiagID); 1698 if (getLangOpts().CUDA) 1699 return getLangOpts().CUDAIsDevice ? CUDADiagIfDeviceCode(Loc, DiagID) 1700 : CUDADiagIfHostCode(Loc, DiagID); 1701 return DeviceDiagBuilder(DeviceDiagBuilder::K_Immediate, Loc, DiagID, 1702 getCurFunctionDecl(), *this); 1703 } 1704 1705 /// Looks through the macro-expansion chain for the given 1706 /// location, looking for a macro expansion with the given name. 1707 /// If one is found, returns true and sets the location to that 1708 /// expansion loc. 1709 bool Sema::findMacroSpelling(SourceLocation &locref, StringRef name) { 1710 SourceLocation loc = locref; 1711 if (!loc.isMacroID()) return false; 1712 1713 // There's no good way right now to look at the intermediate 1714 // expansions, so just jump to the expansion location. 1715 loc = getSourceManager().getExpansionLoc(loc); 1716 1717 // If that's written with the name, stop here. 1718 SmallVector<char, 16> buffer; 1719 if (getPreprocessor().getSpelling(loc, buffer) == name) { 1720 locref = loc; 1721 return true; 1722 } 1723 return false; 1724 } 1725 1726 /// Determines the active Scope associated with the given declaration 1727 /// context. 1728 /// 1729 /// This routine maps a declaration context to the active Scope object that 1730 /// represents that declaration context in the parser. It is typically used 1731 /// from "scope-less" code (e.g., template instantiation, lazy creation of 1732 /// declarations) that injects a name for name-lookup purposes and, therefore, 1733 /// must update the Scope. 1734 /// 1735 /// \returns The scope corresponding to the given declaraion context, or NULL 1736 /// if no such scope is open. 1737 Scope *Sema::getScopeForContext(DeclContext *Ctx) { 1738 1739 if (!Ctx) 1740 return nullptr; 1741 1742 Ctx = Ctx->getPrimaryContext(); 1743 for (Scope *S = getCurScope(); S; S = S->getParent()) { 1744 // Ignore scopes that cannot have declarations. This is important for 1745 // out-of-line definitions of static class members. 1746 if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope)) 1747 if (DeclContext *Entity = S->getEntity()) 1748 if (Ctx == Entity->getPrimaryContext()) 1749 return S; 1750 } 1751 1752 return nullptr; 1753 } 1754 1755 /// Enter a new function scope 1756 void Sema::PushFunctionScope() { 1757 if (FunctionScopes.empty() && CachedFunctionScope) { 1758 // Use CachedFunctionScope to avoid allocating memory when possible. 1759 CachedFunctionScope->Clear(); 1760 FunctionScopes.push_back(CachedFunctionScope.release()); 1761 } else { 1762 FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics())); 1763 } 1764 if (LangOpts.OpenMP) 1765 pushOpenMPFunctionRegion(); 1766 } 1767 1768 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) { 1769 FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(), 1770 BlockScope, Block)); 1771 } 1772 1773 LambdaScopeInfo *Sema::PushLambdaScope() { 1774 LambdaScopeInfo *const LSI = new LambdaScopeInfo(getDiagnostics()); 1775 FunctionScopes.push_back(LSI); 1776 return LSI; 1777 } 1778 1779 void Sema::RecordParsingTemplateParameterDepth(unsigned Depth) { 1780 if (LambdaScopeInfo *const LSI = getCurLambda()) { 1781 LSI->AutoTemplateParameterDepth = Depth; 1782 return; 1783 } 1784 llvm_unreachable( 1785 "Remove assertion if intentionally called in a non-lambda context."); 1786 } 1787 1788 // Check that the type of the VarDecl has an accessible copy constructor and 1789 // resolve its destructor's exception specification. 1790 static void checkEscapingByref(VarDecl *VD, Sema &S) { 1791 QualType T = VD->getType(); 1792 EnterExpressionEvaluationContext scope( 1793 S, Sema::ExpressionEvaluationContext::PotentiallyEvaluated); 1794 SourceLocation Loc = VD->getLocation(); 1795 Expr *VarRef = 1796 new (S.Context) DeclRefExpr(S.Context, VD, false, T, VK_LValue, Loc); 1797 ExprResult Result = S.PerformMoveOrCopyInitialization( 1798 InitializedEntity::InitializeBlock(Loc, T, false), VD, VD->getType(), 1799 VarRef, /*AllowNRVO=*/true); 1800 if (!Result.isInvalid()) { 1801 Result = S.MaybeCreateExprWithCleanups(Result); 1802 Expr *Init = Result.getAs<Expr>(); 1803 S.Context.setBlockVarCopyInit(VD, Init, S.canThrow(Init)); 1804 } 1805 1806 // The destructor's exception specification is needed when IRGen generates 1807 // block copy/destroy functions. Resolve it here. 1808 if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) 1809 if (CXXDestructorDecl *DD = RD->getDestructor()) { 1810 auto *FPT = DD->getType()->getAs<FunctionProtoType>(); 1811 S.ResolveExceptionSpec(Loc, FPT); 1812 } 1813 } 1814 1815 static void markEscapingByrefs(const FunctionScopeInfo &FSI, Sema &S) { 1816 // Set the EscapingByref flag of __block variables captured by 1817 // escaping blocks. 1818 for (const BlockDecl *BD : FSI.Blocks) { 1819 for (const BlockDecl::Capture &BC : BD->captures()) { 1820 VarDecl *VD = BC.getVariable(); 1821 if (VD->hasAttr<BlocksAttr>()) { 1822 // Nothing to do if this is a __block variable captured by a 1823 // non-escaping block. 1824 if (BD->doesNotEscape()) 1825 continue; 1826 VD->setEscapingByref(); 1827 } 1828 // Check whether the captured variable is or contains an object of 1829 // non-trivial C union type. 1830 QualType CapType = BC.getVariable()->getType(); 1831 if (CapType.hasNonTrivialToPrimitiveDestructCUnion() || 1832 CapType.hasNonTrivialToPrimitiveCopyCUnion()) 1833 S.checkNonTrivialCUnion(BC.getVariable()->getType(), 1834 BD->getCaretLocation(), 1835 Sema::NTCUC_BlockCapture, 1836 Sema::NTCUK_Destruct|Sema::NTCUK_Copy); 1837 } 1838 } 1839 1840 for (VarDecl *VD : FSI.ByrefBlockVars) { 1841 // __block variables might require us to capture a copy-initializer. 1842 if (!VD->isEscapingByref()) 1843 continue; 1844 // It's currently invalid to ever have a __block variable with an 1845 // array type; should we diagnose that here? 1846 // Regardless, we don't want to ignore array nesting when 1847 // constructing this copy. 1848 if (VD->getType()->isStructureOrClassType()) 1849 checkEscapingByref(VD, S); 1850 } 1851 } 1852 1853 /// Pop a function (or block or lambda or captured region) scope from the stack. 1854 /// 1855 /// \param WP The warning policy to use for CFG-based warnings, or null if such 1856 /// warnings should not be produced. 1857 /// \param D The declaration corresponding to this function scope, if producing 1858 /// CFG-based warnings. 1859 /// \param BlockType The type of the block expression, if D is a BlockDecl. 1860 Sema::PoppedFunctionScopePtr 1861 Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP, 1862 const Decl *D, QualType BlockType) { 1863 assert(!FunctionScopes.empty() && "mismatched push/pop!"); 1864 1865 markEscapingByrefs(*FunctionScopes.back(), *this); 1866 1867 PoppedFunctionScopePtr Scope(FunctionScopes.pop_back_val(), 1868 PoppedFunctionScopeDeleter(this)); 1869 1870 if (LangOpts.OpenMP) 1871 popOpenMPFunctionRegion(Scope.get()); 1872 1873 // Issue any analysis-based warnings. 1874 if (WP && D) 1875 AnalysisWarnings.IssueWarnings(*WP, Scope.get(), D, BlockType); 1876 else 1877 for (const auto &PUD : Scope->PossiblyUnreachableDiags) 1878 Diag(PUD.Loc, PUD.PD); 1879 1880 return Scope; 1881 } 1882 1883 void Sema::PoppedFunctionScopeDeleter:: 1884 operator()(sema::FunctionScopeInfo *Scope) const { 1885 // Stash the function scope for later reuse if it's for a normal function. 1886 if (Scope->isPlainFunction() && !Self->CachedFunctionScope) 1887 Self->CachedFunctionScope.reset(Scope); 1888 else 1889 delete Scope; 1890 } 1891 1892 void Sema::PushCompoundScope(bool IsStmtExpr) { 1893 getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr)); 1894 } 1895 1896 void Sema::PopCompoundScope() { 1897 FunctionScopeInfo *CurFunction = getCurFunction(); 1898 assert(!CurFunction->CompoundScopes.empty() && "mismatched push/pop"); 1899 1900 CurFunction->CompoundScopes.pop_back(); 1901 } 1902 1903 /// Determine whether any errors occurred within this function/method/ 1904 /// block. 1905 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const { 1906 return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred(); 1907 } 1908 1909 void Sema::setFunctionHasBranchIntoScope() { 1910 if (!FunctionScopes.empty()) 1911 FunctionScopes.back()->setHasBranchIntoScope(); 1912 } 1913 1914 void Sema::setFunctionHasBranchProtectedScope() { 1915 if (!FunctionScopes.empty()) 1916 FunctionScopes.back()->setHasBranchProtectedScope(); 1917 } 1918 1919 void Sema::setFunctionHasIndirectGoto() { 1920 if (!FunctionScopes.empty()) 1921 FunctionScopes.back()->setHasIndirectGoto(); 1922 } 1923 1924 BlockScopeInfo *Sema::getCurBlock() { 1925 if (FunctionScopes.empty()) 1926 return nullptr; 1927 1928 auto CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back()); 1929 if (CurBSI && CurBSI->TheDecl && 1930 !CurBSI->TheDecl->Encloses(CurContext)) { 1931 // We have switched contexts due to template instantiation. 1932 assert(!CodeSynthesisContexts.empty()); 1933 return nullptr; 1934 } 1935 1936 return CurBSI; 1937 } 1938 1939 FunctionScopeInfo *Sema::getEnclosingFunction() const { 1940 if (FunctionScopes.empty()) 1941 return nullptr; 1942 1943 for (int e = FunctionScopes.size() - 1; e >= 0; --e) { 1944 if (isa<sema::BlockScopeInfo>(FunctionScopes[e])) 1945 continue; 1946 return FunctionScopes[e]; 1947 } 1948 return nullptr; 1949 } 1950 1951 LambdaScopeInfo *Sema::getEnclosingLambda() const { 1952 for (auto *Scope : llvm::reverse(FunctionScopes)) { 1953 if (auto *LSI = dyn_cast<sema::LambdaScopeInfo>(Scope)) { 1954 if (LSI->Lambda && !LSI->Lambda->Encloses(CurContext)) { 1955 // We have switched contexts due to template instantiation. 1956 // FIXME: We should swap out the FunctionScopes during code synthesis 1957 // so that we don't need to check for this. 1958 assert(!CodeSynthesisContexts.empty()); 1959 return nullptr; 1960 } 1961 return LSI; 1962 } 1963 } 1964 return nullptr; 1965 } 1966 1967 LambdaScopeInfo *Sema::getCurLambda(bool IgnoreNonLambdaCapturingScope) { 1968 if (FunctionScopes.empty()) 1969 return nullptr; 1970 1971 auto I = FunctionScopes.rbegin(); 1972 if (IgnoreNonLambdaCapturingScope) { 1973 auto E = FunctionScopes.rend(); 1974 while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I)) 1975 ++I; 1976 if (I == E) 1977 return nullptr; 1978 } 1979 auto *CurLSI = dyn_cast<LambdaScopeInfo>(*I); 1980 if (CurLSI && CurLSI->Lambda && 1981 !CurLSI->Lambda->Encloses(CurContext)) { 1982 // We have switched contexts due to template instantiation. 1983 assert(!CodeSynthesisContexts.empty()); 1984 return nullptr; 1985 } 1986 1987 return CurLSI; 1988 } 1989 1990 // We have a generic lambda if we parsed auto parameters, or we have 1991 // an associated template parameter list. 1992 LambdaScopeInfo *Sema::getCurGenericLambda() { 1993 if (LambdaScopeInfo *LSI = getCurLambda()) { 1994 return (LSI->TemplateParams.size() || 1995 LSI->GLTemplateParameterList) ? LSI : nullptr; 1996 } 1997 return nullptr; 1998 } 1999 2000 2001 void Sema::ActOnComment(SourceRange Comment) { 2002 if (!LangOpts.RetainCommentsFromSystemHeaders && 2003 SourceMgr.isInSystemHeader(Comment.getBegin())) 2004 return; 2005 RawComment RC(SourceMgr, Comment, LangOpts.CommentOpts, false); 2006 if (RC.isAlmostTrailingComment()) { 2007 SourceRange MagicMarkerRange(Comment.getBegin(), 2008 Comment.getBegin().getLocWithOffset(3)); 2009 StringRef MagicMarkerText; 2010 switch (RC.getKind()) { 2011 case RawComment::RCK_OrdinaryBCPL: 2012 MagicMarkerText = "///<"; 2013 break; 2014 case RawComment::RCK_OrdinaryC: 2015 MagicMarkerText = "/**<"; 2016 break; 2017 default: 2018 llvm_unreachable("if this is an almost Doxygen comment, " 2019 "it should be ordinary"); 2020 } 2021 Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) << 2022 FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText); 2023 } 2024 Context.addComment(RC); 2025 } 2026 2027 // Pin this vtable to this file. 2028 ExternalSemaSource::~ExternalSemaSource() {} 2029 char ExternalSemaSource::ID; 2030 2031 void ExternalSemaSource::ReadMethodPool(Selector Sel) { } 2032 void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { } 2033 2034 void ExternalSemaSource::ReadKnownNamespaces( 2035 SmallVectorImpl<NamespaceDecl *> &Namespaces) { 2036 } 2037 2038 void ExternalSemaSource::ReadUndefinedButUsed( 2039 llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {} 2040 2041 void ExternalSemaSource::ReadMismatchingDeleteExpressions(llvm::MapVector< 2042 FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &) {} 2043 2044 /// Figure out if an expression could be turned into a call. 2045 /// 2046 /// Use this when trying to recover from an error where the programmer may have 2047 /// written just the name of a function instead of actually calling it. 2048 /// 2049 /// \param E - The expression to examine. 2050 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call 2051 /// with no arguments, this parameter is set to the type returned by such a 2052 /// call; otherwise, it is set to an empty QualType. 2053 /// \param OverloadSet - If the expression is an overloaded function 2054 /// name, this parameter is populated with the decls of the various overloads. 2055 bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy, 2056 UnresolvedSetImpl &OverloadSet) { 2057 ZeroArgCallReturnTy = QualType(); 2058 OverloadSet.clear(); 2059 2060 const OverloadExpr *Overloads = nullptr; 2061 bool IsMemExpr = false; 2062 if (E.getType() == Context.OverloadTy) { 2063 OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E)); 2064 2065 // Ignore overloads that are pointer-to-member constants. 2066 if (FR.HasFormOfMemberPointer) 2067 return false; 2068 2069 Overloads = FR.Expression; 2070 } else if (E.getType() == Context.BoundMemberTy) { 2071 Overloads = dyn_cast<UnresolvedMemberExpr>(E.IgnoreParens()); 2072 IsMemExpr = true; 2073 } 2074 2075 bool Ambiguous = false; 2076 bool IsMV = false; 2077 2078 if (Overloads) { 2079 for (OverloadExpr::decls_iterator it = Overloads->decls_begin(), 2080 DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) { 2081 OverloadSet.addDecl(*it); 2082 2083 // Check whether the function is a non-template, non-member which takes no 2084 // arguments. 2085 if (IsMemExpr) 2086 continue; 2087 if (const FunctionDecl *OverloadDecl 2088 = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) { 2089 if (OverloadDecl->getMinRequiredArguments() == 0) { 2090 if (!ZeroArgCallReturnTy.isNull() && !Ambiguous && 2091 (!IsMV || !(OverloadDecl->isCPUDispatchMultiVersion() || 2092 OverloadDecl->isCPUSpecificMultiVersion()))) { 2093 ZeroArgCallReturnTy = QualType(); 2094 Ambiguous = true; 2095 } else { 2096 ZeroArgCallReturnTy = OverloadDecl->getReturnType(); 2097 IsMV = OverloadDecl->isCPUDispatchMultiVersion() || 2098 OverloadDecl->isCPUSpecificMultiVersion(); 2099 } 2100 } 2101 } 2102 } 2103 2104 // If it's not a member, use better machinery to try to resolve the call 2105 if (!IsMemExpr) 2106 return !ZeroArgCallReturnTy.isNull(); 2107 } 2108 2109 // Attempt to call the member with no arguments - this will correctly handle 2110 // member templates with defaults/deduction of template arguments, overloads 2111 // with default arguments, etc. 2112 if (IsMemExpr && !E.isTypeDependent()) { 2113 Sema::TentativeAnalysisScope Trap(*this); 2114 ExprResult R = BuildCallToMemberFunction(nullptr, &E, SourceLocation(), 2115 None, SourceLocation()); 2116 if (R.isUsable()) { 2117 ZeroArgCallReturnTy = R.get()->getType(); 2118 return true; 2119 } 2120 return false; 2121 } 2122 2123 if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) { 2124 if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) { 2125 if (Fun->getMinRequiredArguments() == 0) 2126 ZeroArgCallReturnTy = Fun->getReturnType(); 2127 return true; 2128 } 2129 } 2130 2131 // We don't have an expression that's convenient to get a FunctionDecl from, 2132 // but we can at least check if the type is "function of 0 arguments". 2133 QualType ExprTy = E.getType(); 2134 const FunctionType *FunTy = nullptr; 2135 QualType PointeeTy = ExprTy->getPointeeType(); 2136 if (!PointeeTy.isNull()) 2137 FunTy = PointeeTy->getAs<FunctionType>(); 2138 if (!FunTy) 2139 FunTy = ExprTy->getAs<FunctionType>(); 2140 2141 if (const FunctionProtoType *FPT = 2142 dyn_cast_or_null<FunctionProtoType>(FunTy)) { 2143 if (FPT->getNumParams() == 0) 2144 ZeroArgCallReturnTy = FunTy->getReturnType(); 2145 return true; 2146 } 2147 return false; 2148 } 2149 2150 /// Give notes for a set of overloads. 2151 /// 2152 /// A companion to tryExprAsCall. In cases when the name that the programmer 2153 /// wrote was an overloaded function, we may be able to make some guesses about 2154 /// plausible overloads based on their return types; such guesses can be handed 2155 /// off to this method to be emitted as notes. 2156 /// 2157 /// \param Overloads - The overloads to note. 2158 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to 2159 /// -fshow-overloads=best, this is the location to attach to the note about too 2160 /// many candidates. Typically this will be the location of the original 2161 /// ill-formed expression. 2162 static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, 2163 const SourceLocation FinalNoteLoc) { 2164 int ShownOverloads = 0; 2165 int SuppressedOverloads = 0; 2166 for (UnresolvedSetImpl::iterator It = Overloads.begin(), 2167 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 2168 // FIXME: Magic number for max shown overloads stolen from 2169 // OverloadCandidateSet::NoteCandidates. 2170 if (ShownOverloads >= 4 && S.Diags.getShowOverloads() == Ovl_Best) { 2171 ++SuppressedOverloads; 2172 continue; 2173 } 2174 2175 NamedDecl *Fn = (*It)->getUnderlyingDecl(); 2176 // Don't print overloads for non-default multiversioned functions. 2177 if (const auto *FD = Fn->getAsFunction()) { 2178 if (FD->isMultiVersion() && FD->hasAttr<TargetAttr>() && 2179 !FD->getAttr<TargetAttr>()->isDefaultVersion()) 2180 continue; 2181 } 2182 S.Diag(Fn->getLocation(), diag::note_possible_target_of_call); 2183 ++ShownOverloads; 2184 } 2185 2186 if (SuppressedOverloads) 2187 S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates) 2188 << SuppressedOverloads; 2189 } 2190 2191 static void notePlausibleOverloads(Sema &S, SourceLocation Loc, 2192 const UnresolvedSetImpl &Overloads, 2193 bool (*IsPlausibleResult)(QualType)) { 2194 if (!IsPlausibleResult) 2195 return noteOverloads(S, Overloads, Loc); 2196 2197 UnresolvedSet<2> PlausibleOverloads; 2198 for (OverloadExpr::decls_iterator It = Overloads.begin(), 2199 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 2200 const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It); 2201 QualType OverloadResultTy = OverloadDecl->getReturnType(); 2202 if (IsPlausibleResult(OverloadResultTy)) 2203 PlausibleOverloads.addDecl(It.getDecl()); 2204 } 2205 noteOverloads(S, PlausibleOverloads, Loc); 2206 } 2207 2208 /// Determine whether the given expression can be called by just 2209 /// putting parentheses after it. Notably, expressions with unary 2210 /// operators can't be because the unary operator will start parsing 2211 /// outside the call. 2212 static bool IsCallableWithAppend(Expr *E) { 2213 E = E->IgnoreImplicit(); 2214 return (!isa<CStyleCastExpr>(E) && 2215 !isa<UnaryOperator>(E) && 2216 !isa<BinaryOperator>(E) && 2217 !isa<CXXOperatorCallExpr>(E)); 2218 } 2219 2220 static bool IsCPUDispatchCPUSpecificMultiVersion(const Expr *E) { 2221 if (const auto *UO = dyn_cast<UnaryOperator>(E)) 2222 E = UO->getSubExpr(); 2223 2224 if (const auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) { 2225 if (ULE->getNumDecls() == 0) 2226 return false; 2227 2228 const NamedDecl *ND = *ULE->decls_begin(); 2229 if (const auto *FD = dyn_cast<FunctionDecl>(ND)) 2230 return FD->isCPUDispatchMultiVersion() || FD->isCPUSpecificMultiVersion(); 2231 } 2232 return false; 2233 } 2234 2235 bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD, 2236 bool ForceComplain, 2237 bool (*IsPlausibleResult)(QualType)) { 2238 SourceLocation Loc = E.get()->getExprLoc(); 2239 SourceRange Range = E.get()->getSourceRange(); 2240 2241 QualType ZeroArgCallTy; 2242 UnresolvedSet<4> Overloads; 2243 if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) && 2244 !ZeroArgCallTy.isNull() && 2245 (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) { 2246 // At this point, we know E is potentially callable with 0 2247 // arguments and that it returns something of a reasonable type, 2248 // so we can emit a fixit and carry on pretending that E was 2249 // actually a CallExpr. 2250 SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd()); 2251 bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get()); 2252 Diag(Loc, PD) << /*zero-arg*/ 1 << IsMV << Range 2253 << (IsCallableWithAppend(E.get()) 2254 ? FixItHint::CreateInsertion(ParenInsertionLoc, "()") 2255 : FixItHint()); 2256 if (!IsMV) 2257 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 2258 2259 // FIXME: Try this before emitting the fixit, and suppress diagnostics 2260 // while doing so. 2261 E = BuildCallExpr(nullptr, E.get(), Range.getEnd(), None, 2262 Range.getEnd().getLocWithOffset(1)); 2263 return true; 2264 } 2265 2266 if (!ForceComplain) return false; 2267 2268 bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get()); 2269 Diag(Loc, PD) << /*not zero-arg*/ 0 << IsMV << Range; 2270 if (!IsMV) 2271 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 2272 E = ExprError(); 2273 return true; 2274 } 2275 2276 IdentifierInfo *Sema::getSuperIdentifier() const { 2277 if (!Ident_super) 2278 Ident_super = &Context.Idents.get("super"); 2279 return Ident_super; 2280 } 2281 2282 IdentifierInfo *Sema::getFloat128Identifier() const { 2283 if (!Ident___float128) 2284 Ident___float128 = &Context.Idents.get("__float128"); 2285 return Ident___float128; 2286 } 2287 2288 void Sema::PushCapturedRegionScope(Scope *S, CapturedDecl *CD, RecordDecl *RD, 2289 CapturedRegionKind K, 2290 unsigned OpenMPCaptureLevel) { 2291 auto *CSI = new CapturedRegionScopeInfo( 2292 getDiagnostics(), S, CD, RD, CD->getContextParam(), K, 2293 (getLangOpts().OpenMP && K == CR_OpenMP) ? getOpenMPNestingLevel() : 0, 2294 OpenMPCaptureLevel); 2295 CSI->ReturnType = Context.VoidTy; 2296 FunctionScopes.push_back(CSI); 2297 } 2298 2299 CapturedRegionScopeInfo *Sema::getCurCapturedRegion() { 2300 if (FunctionScopes.empty()) 2301 return nullptr; 2302 2303 return dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back()); 2304 } 2305 2306 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> & 2307 Sema::getMismatchingDeleteExpressions() const { 2308 return DeleteExprs; 2309 } 2310 2311 void Sema::setOpenCLExtensionForType(QualType T, llvm::StringRef ExtStr) { 2312 if (ExtStr.empty()) 2313 return; 2314 llvm::SmallVector<StringRef, 1> Exts; 2315 ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false); 2316 auto CanT = T.getCanonicalType().getTypePtr(); 2317 for (auto &I : Exts) 2318 OpenCLTypeExtMap[CanT].insert(I.str()); 2319 } 2320 2321 void Sema::setOpenCLExtensionForDecl(Decl *FD, StringRef ExtStr) { 2322 llvm::SmallVector<StringRef, 1> Exts; 2323 ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false); 2324 if (Exts.empty()) 2325 return; 2326 for (auto &I : Exts) 2327 OpenCLDeclExtMap[FD].insert(I.str()); 2328 } 2329 2330 void Sema::setCurrentOpenCLExtensionForType(QualType T) { 2331 if (CurrOpenCLExtension.empty()) 2332 return; 2333 setOpenCLExtensionForType(T, CurrOpenCLExtension); 2334 } 2335 2336 void Sema::setCurrentOpenCLExtensionForDecl(Decl *D) { 2337 if (CurrOpenCLExtension.empty()) 2338 return; 2339 setOpenCLExtensionForDecl(D, CurrOpenCLExtension); 2340 } 2341 2342 std::string Sema::getOpenCLExtensionsFromDeclExtMap(FunctionDecl *FD) { 2343 if (!OpenCLDeclExtMap.empty()) 2344 return getOpenCLExtensionsFromExtMap(FD, OpenCLDeclExtMap); 2345 2346 return ""; 2347 } 2348 2349 std::string Sema::getOpenCLExtensionsFromTypeExtMap(FunctionType *FT) { 2350 if (!OpenCLTypeExtMap.empty()) 2351 return getOpenCLExtensionsFromExtMap(FT, OpenCLTypeExtMap); 2352 2353 return ""; 2354 } 2355 2356 template <typename T, typename MapT> 2357 std::string Sema::getOpenCLExtensionsFromExtMap(T *FDT, MapT &Map) { 2358 std::string ExtensionNames = ""; 2359 auto Loc = Map.find(FDT); 2360 2361 for (auto const& I : Loc->second) { 2362 ExtensionNames += I; 2363 ExtensionNames += " "; 2364 } 2365 ExtensionNames.pop_back(); 2366 2367 return ExtensionNames; 2368 } 2369 2370 bool Sema::isOpenCLDisabledDecl(Decl *FD) { 2371 auto Loc = OpenCLDeclExtMap.find(FD); 2372 if (Loc == OpenCLDeclExtMap.end()) 2373 return false; 2374 for (auto &I : Loc->second) { 2375 if (!getOpenCLOptions().isEnabled(I)) 2376 return true; 2377 } 2378 return false; 2379 } 2380 2381 template <typename T, typename DiagLocT, typename DiagInfoT, typename MapT> 2382 bool Sema::checkOpenCLDisabledTypeOrDecl(T D, DiagLocT DiagLoc, 2383 DiagInfoT DiagInfo, MapT &Map, 2384 unsigned Selector, 2385 SourceRange SrcRange) { 2386 auto Loc = Map.find(D); 2387 if (Loc == Map.end()) 2388 return false; 2389 bool Disabled = false; 2390 for (auto &I : Loc->second) { 2391 if (I != CurrOpenCLExtension && !getOpenCLOptions().isEnabled(I)) { 2392 Diag(DiagLoc, diag::err_opencl_requires_extension) << Selector << DiagInfo 2393 << I << SrcRange; 2394 Disabled = true; 2395 } 2396 } 2397 return Disabled; 2398 } 2399 2400 bool Sema::checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType QT) { 2401 // Check extensions for declared types. 2402 Decl *Decl = nullptr; 2403 if (auto TypedefT = dyn_cast<TypedefType>(QT.getTypePtr())) 2404 Decl = TypedefT->getDecl(); 2405 if (auto TagT = dyn_cast<TagType>(QT.getCanonicalType().getTypePtr())) 2406 Decl = TagT->getDecl(); 2407 auto Loc = DS.getTypeSpecTypeLoc(); 2408 2409 // Check extensions for vector types. 2410 // e.g. double4 is not allowed when cl_khr_fp64 is absent. 2411 if (QT->isExtVectorType()) { 2412 auto TypePtr = QT->castAs<ExtVectorType>()->getElementType().getTypePtr(); 2413 return checkOpenCLDisabledTypeOrDecl(TypePtr, Loc, QT, OpenCLTypeExtMap); 2414 } 2415 2416 if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap)) 2417 return true; 2418 2419 // Check extensions for builtin types. 2420 return checkOpenCLDisabledTypeOrDecl(QT.getCanonicalType().getTypePtr(), Loc, 2421 QT, OpenCLTypeExtMap); 2422 } 2423 2424 bool Sema::checkOpenCLDisabledDecl(const NamedDecl &D, const Expr &E) { 2425 IdentifierInfo *FnName = D.getIdentifier(); 2426 return checkOpenCLDisabledTypeOrDecl(&D, E.getBeginLoc(), FnName, 2427 OpenCLDeclExtMap, 1, D.getSourceRange()); 2428 } 2429