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