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(FPOptionsOverride()), 163 CurInitSeg(nullptr), VisContext(nullptr), 164 PragmaAttributeCurrentTargetDecl(nullptr), 165 IsBuildingRecoveryCallExpr(false), Cleanup{}, LateTemplateParser(nullptr), 166 LateTemplateParserCleanup(nullptr), OpaqueParser(nullptr), IdResolver(pp), 167 StdExperimentalNamespaceCache(nullptr), StdInitializerList(nullptr), 168 StdCoroutineTraitsCache(nullptr), CXXTypeInfoDecl(nullptr), 169 MSVCGuidDecl(nullptr), NSNumberDecl(nullptr), NSValueDecl(nullptr), 170 NSStringDecl(nullptr), StringWithUTF8StringMethod(nullptr), 171 ValueWithBytesObjCTypeMethod(nullptr), NSArrayDecl(nullptr), 172 ArrayWithObjectsMethod(nullptr), NSDictionaryDecl(nullptr), 173 DictionaryWithObjectsMethod(nullptr), GlobalNewDeleteDeclared(false), 174 TUKind(TUKind), NumSFINAEErrors(0), 175 FullyCheckedComparisonCategories( 176 static_cast<unsigned>(ComparisonCategoryType::Last) + 1), 177 SatisfactionCache(Context), AccessCheckingSFINAE(false), 178 InNonInstantiationSFINAEContext(false), NonInstantiationEntries(0), 179 ArgumentPackSubstitutionIndex(-1), CurrentInstantiationScope(nullptr), 180 DisableTypoCorrection(false), TyposCorrected(0), AnalysisWarnings(*this), 181 ThreadSafetyDeclCache(nullptr), VarDataSharingAttributesStack(nullptr), 182 CurScope(nullptr), Ident_super(nullptr), Ident___float128(nullptr) { 183 TUScope = nullptr; 184 isConstantEvaluatedOverride = false; 185 186 LoadedExternalKnownNamespaces = false; 187 for (unsigned I = 0; I != NSAPI::NumNSNumberLiteralMethods; ++I) 188 NSNumberLiteralMethods[I] = nullptr; 189 190 if (getLangOpts().ObjC) 191 NSAPIObj.reset(new NSAPI(Context)); 192 193 if (getLangOpts().CPlusPlus) 194 FieldCollector.reset(new CXXFieldCollector()); 195 196 // Tell diagnostics how to render things from the AST library. 197 Diags.SetArgToStringFn(&FormatASTNodeDiagnosticArgument, &Context); 198 199 ExprEvalContexts.emplace_back( 200 ExpressionEvaluationContext::PotentiallyEvaluated, 0, CleanupInfo{}, 201 nullptr, ExpressionEvaluationContextRecord::EK_Other); 202 203 // Initialization of data sharing attributes stack for OpenMP 204 InitDataSharingAttributesStack(); 205 206 std::unique_ptr<sema::SemaPPCallbacks> Callbacks = 207 std::make_unique<sema::SemaPPCallbacks>(); 208 SemaPPCallbackHandler = Callbacks.get(); 209 PP.addPPCallbacks(std::move(Callbacks)); 210 SemaPPCallbackHandler->set(*this); 211 } 212 213 // Anchor Sema's type info to this TU. 214 void Sema::anchor() {} 215 216 void Sema::addImplicitTypedef(StringRef Name, QualType T) { 217 DeclarationName DN = &Context.Idents.get(Name); 218 if (IdResolver.begin(DN) == IdResolver.end()) 219 PushOnScopeChains(Context.buildImplicitTypedef(T, Name), TUScope); 220 } 221 222 void Sema::Initialize() { 223 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer)) 224 SC->InitializeSema(*this); 225 226 // Tell the external Sema source about this Sema object. 227 if (ExternalSemaSource *ExternalSema 228 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource())) 229 ExternalSema->InitializeSema(*this); 230 231 // This needs to happen after ExternalSemaSource::InitializeSema(this) or we 232 // will not be able to merge any duplicate __va_list_tag decls correctly. 233 VAListTagName = PP.getIdentifierInfo("__va_list_tag"); 234 235 if (!TUScope) 236 return; 237 238 // Initialize predefined 128-bit integer types, if needed. 239 if (Context.getTargetInfo().hasInt128Type()) { 240 // If either of the 128-bit integer types are unavailable to name lookup, 241 // define them now. 242 DeclarationName Int128 = &Context.Idents.get("__int128_t"); 243 if (IdResolver.begin(Int128) == IdResolver.end()) 244 PushOnScopeChains(Context.getInt128Decl(), TUScope); 245 246 DeclarationName UInt128 = &Context.Idents.get("__uint128_t"); 247 if (IdResolver.begin(UInt128) == IdResolver.end()) 248 PushOnScopeChains(Context.getUInt128Decl(), TUScope); 249 } 250 251 252 // Initialize predefined Objective-C types: 253 if (getLangOpts().ObjC) { 254 // If 'SEL' does not yet refer to any declarations, make it refer to the 255 // predefined 'SEL'. 256 DeclarationName SEL = &Context.Idents.get("SEL"); 257 if (IdResolver.begin(SEL) == IdResolver.end()) 258 PushOnScopeChains(Context.getObjCSelDecl(), TUScope); 259 260 // If 'id' does not yet refer to any declarations, make it refer to the 261 // predefined 'id'. 262 DeclarationName Id = &Context.Idents.get("id"); 263 if (IdResolver.begin(Id) == IdResolver.end()) 264 PushOnScopeChains(Context.getObjCIdDecl(), TUScope); 265 266 // Create the built-in typedef for 'Class'. 267 DeclarationName Class = &Context.Idents.get("Class"); 268 if (IdResolver.begin(Class) == IdResolver.end()) 269 PushOnScopeChains(Context.getObjCClassDecl(), TUScope); 270 271 // Create the built-in forward declaratino for 'Protocol'. 272 DeclarationName Protocol = &Context.Idents.get("Protocol"); 273 if (IdResolver.begin(Protocol) == IdResolver.end()) 274 PushOnScopeChains(Context.getObjCProtocolDecl(), TUScope); 275 } 276 277 // Create the internal type for the *StringMakeConstantString builtins. 278 DeclarationName ConstantString = &Context.Idents.get("__NSConstantString"); 279 if (IdResolver.begin(ConstantString) == IdResolver.end()) 280 PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope); 281 282 // Initialize Microsoft "predefined C++ types". 283 if (getLangOpts().MSVCCompat) { 284 if (getLangOpts().CPlusPlus && 285 IdResolver.begin(&Context.Idents.get("type_info")) == IdResolver.end()) 286 PushOnScopeChains(Context.buildImplicitRecord("type_info", TTK_Class), 287 TUScope); 288 289 addImplicitTypedef("size_t", Context.getSizeType()); 290 } 291 292 // Initialize predefined OpenCL types and supported extensions and (optional) 293 // core features. 294 if (getLangOpts().OpenCL) { 295 getOpenCLOptions().addSupport( 296 Context.getTargetInfo().getSupportedOpenCLOpts()); 297 getOpenCLOptions().enableSupportedCore(getLangOpts()); 298 addImplicitTypedef("sampler_t", Context.OCLSamplerTy); 299 addImplicitTypedef("event_t", Context.OCLEventTy); 300 if (getLangOpts().OpenCLCPlusPlus || getLangOpts().OpenCLVersion >= 200) { 301 addImplicitTypedef("clk_event_t", Context.OCLClkEventTy); 302 addImplicitTypedef("queue_t", Context.OCLQueueTy); 303 addImplicitTypedef("reserve_id_t", Context.OCLReserveIDTy); 304 addImplicitTypedef("atomic_int", Context.getAtomicType(Context.IntTy)); 305 addImplicitTypedef("atomic_uint", 306 Context.getAtomicType(Context.UnsignedIntTy)); 307 auto AtomicLongT = Context.getAtomicType(Context.LongTy); 308 addImplicitTypedef("atomic_long", AtomicLongT); 309 auto AtomicULongT = Context.getAtomicType(Context.UnsignedLongTy); 310 addImplicitTypedef("atomic_ulong", AtomicULongT); 311 addImplicitTypedef("atomic_float", 312 Context.getAtomicType(Context.FloatTy)); 313 auto AtomicDoubleT = Context.getAtomicType(Context.DoubleTy); 314 addImplicitTypedef("atomic_double", AtomicDoubleT); 315 // OpenCLC v2.0, s6.13.11.6 requires that atomic_flag is implemented as 316 // 32-bit integer and OpenCLC v2.0, s6.1.1 int is always 32-bit wide. 317 addImplicitTypedef("atomic_flag", Context.getAtomicType(Context.IntTy)); 318 auto AtomicIntPtrT = Context.getAtomicType(Context.getIntPtrType()); 319 addImplicitTypedef("atomic_intptr_t", AtomicIntPtrT); 320 auto AtomicUIntPtrT = Context.getAtomicType(Context.getUIntPtrType()); 321 addImplicitTypedef("atomic_uintptr_t", AtomicUIntPtrT); 322 auto AtomicSizeT = Context.getAtomicType(Context.getSizeType()); 323 addImplicitTypedef("atomic_size_t", AtomicSizeT); 324 auto AtomicPtrDiffT = Context.getAtomicType(Context.getPointerDiffType()); 325 addImplicitTypedef("atomic_ptrdiff_t", AtomicPtrDiffT); 326 327 // OpenCL v2.0 s6.13.11.6: 328 // - The atomic_long and atomic_ulong types are supported if the 329 // cl_khr_int64_base_atomics and cl_khr_int64_extended_atomics 330 // extensions are supported. 331 // - The atomic_double type is only supported if double precision 332 // is supported and the cl_khr_int64_base_atomics and 333 // cl_khr_int64_extended_atomics extensions are supported. 334 // - If the device address space is 64-bits, the data types 335 // atomic_intptr_t, atomic_uintptr_t, atomic_size_t and 336 // atomic_ptrdiff_t are supported if the cl_khr_int64_base_atomics and 337 // cl_khr_int64_extended_atomics extensions are supported. 338 std::vector<QualType> Atomic64BitTypes; 339 Atomic64BitTypes.push_back(AtomicLongT); 340 Atomic64BitTypes.push_back(AtomicULongT); 341 Atomic64BitTypes.push_back(AtomicDoubleT); 342 if (Context.getTypeSize(AtomicSizeT) == 64) { 343 Atomic64BitTypes.push_back(AtomicSizeT); 344 Atomic64BitTypes.push_back(AtomicIntPtrT); 345 Atomic64BitTypes.push_back(AtomicUIntPtrT); 346 Atomic64BitTypes.push_back(AtomicPtrDiffT); 347 } 348 for (auto &I : Atomic64BitTypes) 349 setOpenCLExtensionForType(I, 350 "cl_khr_int64_base_atomics cl_khr_int64_extended_atomics"); 351 352 setOpenCLExtensionForType(AtomicDoubleT, "cl_khr_fp64"); 353 } 354 355 setOpenCLExtensionForType(Context.DoubleTy, "cl_khr_fp64"); 356 357 #define GENERIC_IMAGE_TYPE_EXT(Type, Id, Ext) \ 358 setOpenCLExtensionForType(Context.Id, Ext); 359 #include "clang/Basic/OpenCLImageTypes.def" 360 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \ 361 addImplicitTypedef(#ExtType, Context.Id##Ty); \ 362 setOpenCLExtensionForType(Context.Id##Ty, #Ext); 363 #include "clang/Basic/OpenCLExtensionTypes.def" 364 } 365 366 if (Context.getTargetInfo().hasAArch64SVETypes()) { 367 #define SVE_TYPE(Name, Id, SingletonId) \ 368 addImplicitTypedef(Name, Context.SingletonId); 369 #include "clang/Basic/AArch64SVEACLETypes.def" 370 } 371 372 if (Context.getTargetInfo().hasBuiltinMSVaList()) { 373 DeclarationName MSVaList = &Context.Idents.get("__builtin_ms_va_list"); 374 if (IdResolver.begin(MSVaList) == IdResolver.end()) 375 PushOnScopeChains(Context.getBuiltinMSVaListDecl(), TUScope); 376 } 377 378 DeclarationName BuiltinVaList = &Context.Idents.get("__builtin_va_list"); 379 if (IdResolver.begin(BuiltinVaList) == IdResolver.end()) 380 PushOnScopeChains(Context.getBuiltinVaListDecl(), TUScope); 381 } 382 383 Sema::~Sema() { 384 if (VisContext) FreeVisContext(); 385 386 // Kill all the active scopes. 387 for (sema::FunctionScopeInfo *FSI : FunctionScopes) 388 delete FSI; 389 390 // Tell the SemaConsumer to forget about us; we're going out of scope. 391 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer)) 392 SC->ForgetSema(); 393 394 // Detach from the external Sema source. 395 if (ExternalSemaSource *ExternalSema 396 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource())) 397 ExternalSema->ForgetSema(); 398 399 // If Sema's ExternalSource is the multiplexer - we own it. 400 if (isMultiplexExternalSource) 401 delete ExternalSource; 402 403 // Delete cached satisfactions. 404 std::vector<ConstraintSatisfaction *> Satisfactions; 405 Satisfactions.reserve(Satisfactions.size()); 406 for (auto &Node : SatisfactionCache) 407 Satisfactions.push_back(&Node); 408 for (auto *Node : Satisfactions) 409 delete Node; 410 411 threadSafety::threadSafetyCleanup(ThreadSafetyDeclCache); 412 413 // Destroys data sharing attributes stack for OpenMP 414 DestroyDataSharingAttributesStack(); 415 416 // Detach from the PP callback handler which outlives Sema since it's owned 417 // by the preprocessor. 418 SemaPPCallbackHandler->reset(); 419 } 420 421 void Sema::warnStackExhausted(SourceLocation Loc) { 422 // Only warn about this once. 423 if (!WarnedStackExhausted) { 424 Diag(Loc, diag::warn_stack_exhausted); 425 WarnedStackExhausted = true; 426 } 427 } 428 429 void Sema::runWithSufficientStackSpace(SourceLocation Loc, 430 llvm::function_ref<void()> Fn) { 431 clang::runWithSufficientStackSpace([&] { warnStackExhausted(Loc); }, Fn); 432 } 433 434 /// makeUnavailableInSystemHeader - There is an error in the current 435 /// context. If we're still in a system header, and we can plausibly 436 /// make the relevant declaration unavailable instead of erroring, do 437 /// so and return true. 438 bool Sema::makeUnavailableInSystemHeader(SourceLocation loc, 439 UnavailableAttr::ImplicitReason reason) { 440 // If we're not in a function, it's an error. 441 FunctionDecl *fn = dyn_cast<FunctionDecl>(CurContext); 442 if (!fn) return false; 443 444 // If we're in template instantiation, it's an error. 445 if (inTemplateInstantiation()) 446 return false; 447 448 // If that function's not in a system header, it's an error. 449 if (!Context.getSourceManager().isInSystemHeader(loc)) 450 return false; 451 452 // If the function is already unavailable, it's not an error. 453 if (fn->hasAttr<UnavailableAttr>()) return true; 454 455 fn->addAttr(UnavailableAttr::CreateImplicit(Context, "", reason, loc)); 456 return true; 457 } 458 459 ASTMutationListener *Sema::getASTMutationListener() const { 460 return getASTConsumer().GetASTMutationListener(); 461 } 462 463 ///Registers an external source. If an external source already exists, 464 /// creates a multiplex external source and appends to it. 465 /// 466 ///\param[in] E - A non-null external sema source. 467 /// 468 void Sema::addExternalSource(ExternalSemaSource *E) { 469 assert(E && "Cannot use with NULL ptr"); 470 471 if (!ExternalSource) { 472 ExternalSource = E; 473 return; 474 } 475 476 if (isMultiplexExternalSource) 477 static_cast<MultiplexExternalSemaSource*>(ExternalSource)->addSource(*E); 478 else { 479 ExternalSource = new MultiplexExternalSemaSource(*ExternalSource, *E); 480 isMultiplexExternalSource = true; 481 } 482 } 483 484 /// Print out statistics about the semantic analysis. 485 void Sema::PrintStats() const { 486 llvm::errs() << "\n*** Semantic Analysis Stats:\n"; 487 llvm::errs() << NumSFINAEErrors << " SFINAE diagnostics trapped.\n"; 488 489 BumpAlloc.PrintStats(); 490 AnalysisWarnings.PrintStats(); 491 } 492 493 void Sema::diagnoseNullableToNonnullConversion(QualType DstType, 494 QualType SrcType, 495 SourceLocation Loc) { 496 Optional<NullabilityKind> ExprNullability = SrcType->getNullability(Context); 497 if (!ExprNullability || *ExprNullability != NullabilityKind::Nullable) 498 return; 499 500 Optional<NullabilityKind> TypeNullability = DstType->getNullability(Context); 501 if (!TypeNullability || *TypeNullability != NullabilityKind::NonNull) 502 return; 503 504 Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType; 505 } 506 507 void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr* E) { 508 if (Diags.isIgnored(diag::warn_zero_as_null_pointer_constant, 509 E->getBeginLoc())) 510 return; 511 // nullptr only exists from C++11 on, so don't warn on its absence earlier. 512 if (!getLangOpts().CPlusPlus11) 513 return; 514 515 if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer) 516 return; 517 if (E->IgnoreParenImpCasts()->getType()->isNullPtrType()) 518 return; 519 520 // If it is a macro from system header, and if the macro name is not "NULL", 521 // do not warn. 522 SourceLocation MaybeMacroLoc = E->getBeginLoc(); 523 if (Diags.getSuppressSystemWarnings() && 524 SourceMgr.isInSystemMacro(MaybeMacroLoc) && 525 !findMacroSpelling(MaybeMacroLoc, "NULL")) 526 return; 527 528 Diag(E->getBeginLoc(), diag::warn_zero_as_null_pointer_constant) 529 << FixItHint::CreateReplacement(E->getSourceRange(), "nullptr"); 530 } 531 532 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast. 533 /// If there is already an implicit cast, merge into the existing one. 534 /// The result is of the given category. 535 ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty, 536 CastKind Kind, ExprValueKind VK, 537 const CXXCastPath *BasePath, 538 CheckedConversionKind CCK) { 539 #ifndef NDEBUG 540 if (VK == VK_RValue && !E->isRValue()) { 541 switch (Kind) { 542 default: 543 llvm_unreachable(("can't implicitly cast lvalue to rvalue with this cast " 544 "kind: " + 545 std::string(CastExpr::getCastKindName(Kind))) 546 .c_str()); 547 case CK_Dependent: 548 case CK_LValueToRValue: 549 case CK_ArrayToPointerDecay: 550 case CK_FunctionToPointerDecay: 551 case CK_ToVoid: 552 case CK_NonAtomicToAtomic: 553 break; 554 } 555 } 556 assert((VK == VK_RValue || Kind == CK_Dependent || !E->isRValue()) && 557 "can't cast rvalue to lvalue"); 558 #endif 559 560 diagnoseNullableToNonnullConversion(Ty, E->getType(), E->getBeginLoc()); 561 diagnoseZeroToNullptrConversion(Kind, E); 562 563 QualType ExprTy = Context.getCanonicalType(E->getType()); 564 QualType TypeTy = Context.getCanonicalType(Ty); 565 566 if (ExprTy == TypeTy) 567 return E; 568 569 // C++1z [conv.array]: The temporary materialization conversion is applied. 570 // We also use this to fuel C++ DR1213, which applies to C++11 onwards. 571 if (Kind == CK_ArrayToPointerDecay && getLangOpts().CPlusPlus && 572 E->getValueKind() == VK_RValue) { 573 // The temporary is an lvalue in C++98 and an xvalue otherwise. 574 ExprResult Materialized = CreateMaterializeTemporaryExpr( 575 E->getType(), E, !getLangOpts().CPlusPlus11); 576 if (Materialized.isInvalid()) 577 return ExprError(); 578 E = Materialized.get(); 579 } 580 581 if (ImplicitCastExpr *ImpCast = dyn_cast<ImplicitCastExpr>(E)) { 582 if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) { 583 ImpCast->setType(Ty); 584 ImpCast->setValueKind(VK); 585 return E; 586 } 587 } 588 589 return ImplicitCastExpr::Create(Context, Ty, Kind, E, BasePath, VK); 590 } 591 592 /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding 593 /// to the conversion from scalar type ScalarTy to the Boolean type. 594 CastKind Sema::ScalarTypeToBooleanCastKind(QualType ScalarTy) { 595 switch (ScalarTy->getScalarTypeKind()) { 596 case Type::STK_Bool: return CK_NoOp; 597 case Type::STK_CPointer: return CK_PointerToBoolean; 598 case Type::STK_BlockPointer: return CK_PointerToBoolean; 599 case Type::STK_ObjCObjectPointer: return CK_PointerToBoolean; 600 case Type::STK_MemberPointer: return CK_MemberPointerToBoolean; 601 case Type::STK_Integral: return CK_IntegralToBoolean; 602 case Type::STK_Floating: return CK_FloatingToBoolean; 603 case Type::STK_IntegralComplex: return CK_IntegralComplexToBoolean; 604 case Type::STK_FloatingComplex: return CK_FloatingComplexToBoolean; 605 case Type::STK_FixedPoint: return CK_FixedPointToBoolean; 606 } 607 llvm_unreachable("unknown scalar type kind"); 608 } 609 610 /// Used to prune the decls of Sema's UnusedFileScopedDecls vector. 611 static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D) { 612 if (D->getMostRecentDecl()->isUsed()) 613 return true; 614 615 if (D->isExternallyVisible()) 616 return true; 617 618 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 619 // If this is a function template and none of its specializations is used, 620 // we should warn. 621 if (FunctionTemplateDecl *Template = FD->getDescribedFunctionTemplate()) 622 for (const auto *Spec : Template->specializations()) 623 if (ShouldRemoveFromUnused(SemaRef, Spec)) 624 return true; 625 626 // UnusedFileScopedDecls stores the first declaration. 627 // The declaration may have become definition so check again. 628 const FunctionDecl *DeclToCheck; 629 if (FD->hasBody(DeclToCheck)) 630 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 631 632 // Later redecls may add new information resulting in not having to warn, 633 // so check again. 634 DeclToCheck = FD->getMostRecentDecl(); 635 if (DeclToCheck != FD) 636 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 637 } 638 639 if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { 640 // If a variable usable in constant expressions is referenced, 641 // don't warn if it isn't used: if the value of a variable is required 642 // for the computation of a constant expression, it doesn't make sense to 643 // warn even if the variable isn't odr-used. (isReferenced doesn't 644 // precisely reflect that, but it's a decent approximation.) 645 if (VD->isReferenced() && 646 VD->mightBeUsableInConstantExpressions(SemaRef->Context)) 647 return true; 648 649 if (VarTemplateDecl *Template = VD->getDescribedVarTemplate()) 650 // If this is a variable template and none of its specializations is used, 651 // we should warn. 652 for (const auto *Spec : Template->specializations()) 653 if (ShouldRemoveFromUnused(SemaRef, Spec)) 654 return true; 655 656 // UnusedFileScopedDecls stores the first declaration. 657 // The declaration may have become definition so check again. 658 const VarDecl *DeclToCheck = VD->getDefinition(); 659 if (DeclToCheck) 660 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 661 662 // Later redecls may add new information resulting in not having to warn, 663 // so check again. 664 DeclToCheck = VD->getMostRecentDecl(); 665 if (DeclToCheck != VD) 666 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 667 } 668 669 return false; 670 } 671 672 static bool isFunctionOrVarDeclExternC(NamedDecl *ND) { 673 if (auto *FD = dyn_cast<FunctionDecl>(ND)) 674 return FD->isExternC(); 675 return cast<VarDecl>(ND)->isExternC(); 676 } 677 678 /// Determine whether ND is an external-linkage function or variable whose 679 /// type has no linkage. 680 bool Sema::isExternalWithNoLinkageType(ValueDecl *VD) { 681 // Note: it's not quite enough to check whether VD has UniqueExternalLinkage, 682 // because we also want to catch the case where its type has VisibleNoLinkage, 683 // which does not affect the linkage of VD. 684 return getLangOpts().CPlusPlus && VD->hasExternalFormalLinkage() && 685 !isExternalFormalLinkage(VD->getType()->getLinkage()) && 686 !isFunctionOrVarDeclExternC(VD); 687 } 688 689 /// Obtains a sorted list of functions and variables that are undefined but 690 /// ODR-used. 691 void Sema::getUndefinedButUsed( 692 SmallVectorImpl<std::pair<NamedDecl *, SourceLocation> > &Undefined) { 693 for (const auto &UndefinedUse : UndefinedButUsed) { 694 NamedDecl *ND = UndefinedUse.first; 695 696 // Ignore attributes that have become invalid. 697 if (ND->isInvalidDecl()) continue; 698 699 // __attribute__((weakref)) is basically a definition. 700 if (ND->hasAttr<WeakRefAttr>()) continue; 701 702 if (isa<CXXDeductionGuideDecl>(ND)) 703 continue; 704 705 if (ND->hasAttr<DLLImportAttr>() || ND->hasAttr<DLLExportAttr>()) { 706 // An exported function will always be emitted when defined, so even if 707 // the function is inline, it doesn't have to be emitted in this TU. An 708 // imported function implies that it has been exported somewhere else. 709 continue; 710 } 711 712 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) { 713 if (FD->isDefined()) 714 continue; 715 if (FD->isExternallyVisible() && 716 !isExternalWithNoLinkageType(FD) && 717 !FD->getMostRecentDecl()->isInlined() && 718 !FD->hasAttr<ExcludeFromExplicitInstantiationAttr>()) 719 continue; 720 if (FD->getBuiltinID()) 721 continue; 722 } else { 723 auto *VD = cast<VarDecl>(ND); 724 if (VD->hasDefinition() != VarDecl::DeclarationOnly) 725 continue; 726 if (VD->isExternallyVisible() && 727 !isExternalWithNoLinkageType(VD) && 728 !VD->getMostRecentDecl()->isInline() && 729 !VD->hasAttr<ExcludeFromExplicitInstantiationAttr>()) 730 continue; 731 732 // Skip VarDecls that lack formal definitions but which we know are in 733 // fact defined somewhere. 734 if (VD->isKnownToBeDefined()) 735 continue; 736 } 737 738 Undefined.push_back(std::make_pair(ND, UndefinedUse.second)); 739 } 740 } 741 742 /// checkUndefinedButUsed - Check for undefined objects with internal linkage 743 /// or that are inline. 744 static void checkUndefinedButUsed(Sema &S) { 745 if (S.UndefinedButUsed.empty()) return; 746 747 // Collect all the still-undefined entities with internal linkage. 748 SmallVector<std::pair<NamedDecl *, SourceLocation>, 16> Undefined; 749 S.getUndefinedButUsed(Undefined); 750 if (Undefined.empty()) return; 751 752 for (auto Undef : Undefined) { 753 ValueDecl *VD = cast<ValueDecl>(Undef.first); 754 SourceLocation UseLoc = Undef.second; 755 756 if (S.isExternalWithNoLinkageType(VD)) { 757 // C++ [basic.link]p8: 758 // A type without linkage shall not be used as the type of a variable 759 // or function with external linkage unless 760 // -- the entity has C language linkage 761 // -- the entity is not odr-used or is defined in the same TU 762 // 763 // As an extension, accept this in cases where the type is externally 764 // visible, since the function or variable actually can be defined in 765 // another translation unit in that case. 766 S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage()) 767 ? diag::ext_undefined_internal_type 768 : diag::err_undefined_internal_type) 769 << isa<VarDecl>(VD) << VD; 770 } else if (!VD->isExternallyVisible()) { 771 // FIXME: We can promote this to an error. The function or variable can't 772 // be defined anywhere else, so the program must necessarily violate the 773 // one definition rule. 774 S.Diag(VD->getLocation(), diag::warn_undefined_internal) 775 << isa<VarDecl>(VD) << VD; 776 } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) { 777 (void)FD; 778 assert(FD->getMostRecentDecl()->isInlined() && 779 "used object requires definition but isn't inline or internal?"); 780 // FIXME: This is ill-formed; we should reject. 781 S.Diag(VD->getLocation(), diag::warn_undefined_inline) << VD; 782 } else { 783 assert(cast<VarDecl>(VD)->getMostRecentDecl()->isInline() && 784 "used var requires definition but isn't inline or internal?"); 785 S.Diag(VD->getLocation(), diag::err_undefined_inline_var) << VD; 786 } 787 if (UseLoc.isValid()) 788 S.Diag(UseLoc, diag::note_used_here); 789 } 790 791 S.UndefinedButUsed.clear(); 792 } 793 794 void Sema::LoadExternalWeakUndeclaredIdentifiers() { 795 if (!ExternalSource) 796 return; 797 798 SmallVector<std::pair<IdentifierInfo *, WeakInfo>, 4> WeakIDs; 799 ExternalSource->ReadWeakUndeclaredIdentifiers(WeakIDs); 800 for (auto &WeakID : WeakIDs) 801 WeakUndeclaredIdentifiers.insert(WeakID); 802 } 803 804 805 typedef llvm::DenseMap<const CXXRecordDecl*, bool> RecordCompleteMap; 806 807 /// Returns true, if all methods and nested classes of the given 808 /// CXXRecordDecl are defined in this translation unit. 809 /// 810 /// Should only be called from ActOnEndOfTranslationUnit so that all 811 /// definitions are actually read. 812 static bool MethodsAndNestedClassesComplete(const CXXRecordDecl *RD, 813 RecordCompleteMap &MNCComplete) { 814 RecordCompleteMap::iterator Cache = MNCComplete.find(RD); 815 if (Cache != MNCComplete.end()) 816 return Cache->second; 817 if (!RD->isCompleteDefinition()) 818 return false; 819 bool Complete = true; 820 for (DeclContext::decl_iterator I = RD->decls_begin(), 821 E = RD->decls_end(); 822 I != E && Complete; ++I) { 823 if (const CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(*I)) 824 Complete = M->isDefined() || M->isDefaulted() || 825 (M->isPure() && !isa<CXXDestructorDecl>(M)); 826 else if (const FunctionTemplateDecl *F = dyn_cast<FunctionTemplateDecl>(*I)) 827 // If the template function is marked as late template parsed at this 828 // point, it has not been instantiated and therefore we have not 829 // performed semantic analysis on it yet, so we cannot know if the type 830 // can be considered complete. 831 Complete = !F->getTemplatedDecl()->isLateTemplateParsed() && 832 F->getTemplatedDecl()->isDefined(); 833 else if (const CXXRecordDecl *R = dyn_cast<CXXRecordDecl>(*I)) { 834 if (R->isInjectedClassName()) 835 continue; 836 if (R->hasDefinition()) 837 Complete = MethodsAndNestedClassesComplete(R->getDefinition(), 838 MNCComplete); 839 else 840 Complete = false; 841 } 842 } 843 MNCComplete[RD] = Complete; 844 return Complete; 845 } 846 847 /// Returns true, if the given CXXRecordDecl is fully defined in this 848 /// translation unit, i.e. all methods are defined or pure virtual and all 849 /// friends, friend functions and nested classes are fully defined in this 850 /// translation unit. 851 /// 852 /// Should only be called from ActOnEndOfTranslationUnit so that all 853 /// definitions are actually read. 854 static bool IsRecordFullyDefined(const CXXRecordDecl *RD, 855 RecordCompleteMap &RecordsComplete, 856 RecordCompleteMap &MNCComplete) { 857 RecordCompleteMap::iterator Cache = RecordsComplete.find(RD); 858 if (Cache != RecordsComplete.end()) 859 return Cache->second; 860 bool Complete = MethodsAndNestedClassesComplete(RD, MNCComplete); 861 for (CXXRecordDecl::friend_iterator I = RD->friend_begin(), 862 E = RD->friend_end(); 863 I != E && Complete; ++I) { 864 // Check if friend classes and methods are complete. 865 if (TypeSourceInfo *TSI = (*I)->getFriendType()) { 866 // Friend classes are available as the TypeSourceInfo of the FriendDecl. 867 if (CXXRecordDecl *FriendD = TSI->getType()->getAsCXXRecordDecl()) 868 Complete = MethodsAndNestedClassesComplete(FriendD, MNCComplete); 869 else 870 Complete = false; 871 } else { 872 // Friend functions are available through the NamedDecl of FriendDecl. 873 if (const FunctionDecl *FD = 874 dyn_cast<FunctionDecl>((*I)->getFriendDecl())) 875 Complete = FD->isDefined(); 876 else 877 // This is a template friend, give up. 878 Complete = false; 879 } 880 } 881 RecordsComplete[RD] = Complete; 882 return Complete; 883 } 884 885 void Sema::emitAndClearUnusedLocalTypedefWarnings() { 886 if (ExternalSource) 887 ExternalSource->ReadUnusedLocalTypedefNameCandidates( 888 UnusedLocalTypedefNameCandidates); 889 for (const TypedefNameDecl *TD : UnusedLocalTypedefNameCandidates) { 890 if (TD->isReferenced()) 891 continue; 892 Diag(TD->getLocation(), diag::warn_unused_local_typedef) 893 << isa<TypeAliasDecl>(TD) << TD->getDeclName(); 894 } 895 UnusedLocalTypedefNameCandidates.clear(); 896 } 897 898 /// This is called before the very first declaration in the translation unit 899 /// is parsed. Note that the ASTContext may have already injected some 900 /// declarations. 901 void Sema::ActOnStartOfTranslationUnit() { 902 if (getLangOpts().ModulesTS && 903 (getLangOpts().getCompilingModule() == LangOptions::CMK_ModuleInterface || 904 getLangOpts().getCompilingModule() == LangOptions::CMK_None)) { 905 // We start in an implied global module fragment. 906 SourceLocation StartOfTU = 907 SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID()); 908 ActOnGlobalModuleFragmentDecl(StartOfTU); 909 ModuleScopes.back().ImplicitGlobalModuleFragment = true; 910 } 911 } 912 913 void Sema::ActOnEndOfTranslationUnitFragment(TUFragmentKind Kind) { 914 // No explicit actions are required at the end of the global module fragment. 915 if (Kind == TUFragmentKind::Global) 916 return; 917 918 // Transfer late parsed template instantiations over to the pending template 919 // instantiation list. During normal compilation, the late template parser 920 // will be installed and instantiating these templates will succeed. 921 // 922 // If we are building a TU prefix for serialization, it is also safe to 923 // transfer these over, even though they are not parsed. The end of the TU 924 // should be outside of any eager template instantiation scope, so when this 925 // AST is deserialized, these templates will not be parsed until the end of 926 // the combined TU. 927 PendingInstantiations.insert(PendingInstantiations.end(), 928 LateParsedInstantiations.begin(), 929 LateParsedInstantiations.end()); 930 LateParsedInstantiations.clear(); 931 932 // If DefinedUsedVTables ends up marking any virtual member functions it 933 // might lead to more pending template instantiations, which we then need 934 // to instantiate. 935 DefineUsedVTables(); 936 937 // C++: Perform implicit template instantiations. 938 // 939 // FIXME: When we perform these implicit instantiations, we do not 940 // carefully keep track of the point of instantiation (C++ [temp.point]). 941 // This means that name lookup that occurs within the template 942 // instantiation will always happen at the end of the translation unit, 943 // so it will find some names that are not required to be found. This is 944 // valid, but we could do better by diagnosing if an instantiation uses a 945 // name that was not visible at its first point of instantiation. 946 if (ExternalSource) { 947 // Load pending instantiations from the external source. 948 SmallVector<PendingImplicitInstantiation, 4> Pending; 949 ExternalSource->ReadPendingInstantiations(Pending); 950 for (auto PII : Pending) 951 if (auto Func = dyn_cast<FunctionDecl>(PII.first)) 952 Func->setInstantiationIsPending(true); 953 PendingInstantiations.insert(PendingInstantiations.begin(), 954 Pending.begin(), Pending.end()); 955 } 956 957 { 958 llvm::TimeTraceScope TimeScope("PerformPendingInstantiations"); 959 PerformPendingInstantiations(); 960 } 961 962 emitDeferredDiags(); 963 964 assert(LateParsedInstantiations.empty() && 965 "end of TU template instantiation should not create more " 966 "late-parsed templates"); 967 968 // Report diagnostics for uncorrected delayed typos. Ideally all of them 969 // should have been corrected by that time, but it is very hard to cover all 970 // cases in practice. 971 for (const auto &Typo : DelayedTypos) { 972 // We pass an empty TypoCorrection to indicate no correction was performed. 973 Typo.second.DiagHandler(TypoCorrection()); 974 } 975 DelayedTypos.clear(); 976 } 977 978 /// ActOnEndOfTranslationUnit - This is called at the very end of the 979 /// translation unit when EOF is reached and all but the top-level scope is 980 /// popped. 981 void Sema::ActOnEndOfTranslationUnit() { 982 assert(DelayedDiagnostics.getCurrentPool() == nullptr 983 && "reached end of translation unit with a pool attached?"); 984 985 // If code completion is enabled, don't perform any end-of-translation-unit 986 // work. 987 if (PP.isCodeCompletionEnabled()) 988 return; 989 990 // Complete translation units and modules define vtables and perform implicit 991 // instantiations. PCH files do not. 992 if (TUKind != TU_Prefix) { 993 DiagnoseUseOfUnimplementedSelectors(); 994 995 ActOnEndOfTranslationUnitFragment( 996 !ModuleScopes.empty() && ModuleScopes.back().Module->Kind == 997 Module::PrivateModuleFragment 998 ? TUFragmentKind::Private 999 : TUFragmentKind::Normal); 1000 1001 if (LateTemplateParserCleanup) 1002 LateTemplateParserCleanup(OpaqueParser); 1003 1004 CheckDelayedMemberExceptionSpecs(); 1005 } else { 1006 // If we are building a TU prefix for serialization, it is safe to transfer 1007 // these over, even though they are not parsed. The end of the TU should be 1008 // outside of any eager template instantiation scope, so when this AST is 1009 // deserialized, these templates will not be parsed until the end of the 1010 // combined TU. 1011 PendingInstantiations.insert(PendingInstantiations.end(), 1012 LateParsedInstantiations.begin(), 1013 LateParsedInstantiations.end()); 1014 LateParsedInstantiations.clear(); 1015 1016 if (LangOpts.PCHInstantiateTemplates) { 1017 llvm::TimeTraceScope TimeScope("PerformPendingInstantiations"); 1018 PerformPendingInstantiations(); 1019 } 1020 } 1021 1022 DiagnoseUnterminatedPragmaPack(); 1023 DiagnoseUnterminatedPragmaAttribute(); 1024 1025 // All delayed member exception specs should be checked or we end up accepting 1026 // incompatible declarations. 1027 assert(DelayedOverridingExceptionSpecChecks.empty()); 1028 assert(DelayedEquivalentExceptionSpecChecks.empty()); 1029 1030 // All dllexport classes should have been processed already. 1031 assert(DelayedDllExportClasses.empty()); 1032 assert(DelayedDllExportMemberFunctions.empty()); 1033 1034 // Remove file scoped decls that turned out to be used. 1035 UnusedFileScopedDecls.erase( 1036 std::remove_if(UnusedFileScopedDecls.begin(nullptr, true), 1037 UnusedFileScopedDecls.end(), 1038 [this](const DeclaratorDecl *DD) { 1039 return ShouldRemoveFromUnused(this, DD); 1040 }), 1041 UnusedFileScopedDecls.end()); 1042 1043 if (TUKind == TU_Prefix) { 1044 // Translation unit prefixes don't need any of the checking below. 1045 if (!PP.isIncrementalProcessingEnabled()) 1046 TUScope = nullptr; 1047 return; 1048 } 1049 1050 // Check for #pragma weak identifiers that were never declared 1051 LoadExternalWeakUndeclaredIdentifiers(); 1052 for (auto WeakID : WeakUndeclaredIdentifiers) { 1053 if (WeakID.second.getUsed()) 1054 continue; 1055 1056 Decl *PrevDecl = LookupSingleName(TUScope, WeakID.first, SourceLocation(), 1057 LookupOrdinaryName); 1058 if (PrevDecl != nullptr && 1059 !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl))) 1060 Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type) 1061 << "'weak'" << ExpectedVariableOrFunction; 1062 else 1063 Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared) 1064 << WeakID.first; 1065 } 1066 1067 if (LangOpts.CPlusPlus11 && 1068 !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation())) 1069 CheckDelegatingCtorCycles(); 1070 1071 if (!Diags.hasErrorOccurred()) { 1072 if (ExternalSource) 1073 ExternalSource->ReadUndefinedButUsed(UndefinedButUsed); 1074 checkUndefinedButUsed(*this); 1075 } 1076 1077 // A global-module-fragment is only permitted within a module unit. 1078 bool DiagnosedMissingModuleDeclaration = false; 1079 if (!ModuleScopes.empty() && 1080 ModuleScopes.back().Module->Kind == Module::GlobalModuleFragment && 1081 !ModuleScopes.back().ImplicitGlobalModuleFragment) { 1082 Diag(ModuleScopes.back().BeginLoc, 1083 diag::err_module_declaration_missing_after_global_module_introducer); 1084 DiagnosedMissingModuleDeclaration = true; 1085 } 1086 1087 if (TUKind == TU_Module) { 1088 // If we are building a module interface unit, we need to have seen the 1089 // module declaration by now. 1090 if (getLangOpts().getCompilingModule() == 1091 LangOptions::CMK_ModuleInterface && 1092 (ModuleScopes.empty() || 1093 !ModuleScopes.back().Module->isModulePurview()) && 1094 !DiagnosedMissingModuleDeclaration) { 1095 // FIXME: Make a better guess as to where to put the module declaration. 1096 Diag(getSourceManager().getLocForStartOfFile( 1097 getSourceManager().getMainFileID()), 1098 diag::err_module_declaration_missing); 1099 } 1100 1101 // If we are building a module, resolve all of the exported declarations 1102 // now. 1103 if (Module *CurrentModule = PP.getCurrentModule()) { 1104 ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap(); 1105 1106 SmallVector<Module *, 2> Stack; 1107 Stack.push_back(CurrentModule); 1108 while (!Stack.empty()) { 1109 Module *Mod = Stack.pop_back_val(); 1110 1111 // Resolve the exported declarations and conflicts. 1112 // FIXME: Actually complain, once we figure out how to teach the 1113 // diagnostic client to deal with complaints in the module map at this 1114 // point. 1115 ModMap.resolveExports(Mod, /*Complain=*/false); 1116 ModMap.resolveUses(Mod, /*Complain=*/false); 1117 ModMap.resolveConflicts(Mod, /*Complain=*/false); 1118 1119 // Queue the submodules, so their exports will also be resolved. 1120 Stack.append(Mod->submodule_begin(), Mod->submodule_end()); 1121 } 1122 } 1123 1124 // Warnings emitted in ActOnEndOfTranslationUnit() should be emitted for 1125 // modules when they are built, not every time they are used. 1126 emitAndClearUnusedLocalTypedefWarnings(); 1127 } 1128 1129 // C99 6.9.2p2: 1130 // A declaration of an identifier for an object that has file 1131 // scope without an initializer, and without a storage-class 1132 // specifier or with the storage-class specifier static, 1133 // constitutes a tentative definition. If a translation unit 1134 // contains one or more tentative definitions for an identifier, 1135 // and the translation unit contains no external definition for 1136 // that identifier, then the behavior is exactly as if the 1137 // translation unit contains a file scope declaration of that 1138 // identifier, with the composite type as of the end of the 1139 // translation unit, with an initializer equal to 0. 1140 llvm::SmallSet<VarDecl *, 32> Seen; 1141 for (TentativeDefinitionsType::iterator 1142 T = TentativeDefinitions.begin(ExternalSource), 1143 TEnd = TentativeDefinitions.end(); 1144 T != TEnd; ++T) { 1145 VarDecl *VD = (*T)->getActingDefinition(); 1146 1147 // If the tentative definition was completed, getActingDefinition() returns 1148 // null. If we've already seen this variable before, insert()'s second 1149 // return value is false. 1150 if (!VD || VD->isInvalidDecl() || !Seen.insert(VD).second) 1151 continue; 1152 1153 if (const IncompleteArrayType *ArrayT 1154 = Context.getAsIncompleteArrayType(VD->getType())) { 1155 // Set the length of the array to 1 (C99 6.9.2p5). 1156 Diag(VD->getLocation(), diag::warn_tentative_incomplete_array); 1157 llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true); 1158 QualType T = Context.getConstantArrayType(ArrayT->getElementType(), One, 1159 nullptr, ArrayType::Normal, 0); 1160 VD->setType(T); 1161 } else if (RequireCompleteType(VD->getLocation(), VD->getType(), 1162 diag::err_tentative_def_incomplete_type)) 1163 VD->setInvalidDecl(); 1164 1165 // No initialization is performed for a tentative definition. 1166 CheckCompleteVariableDeclaration(VD); 1167 1168 // Notify the consumer that we've completed a tentative definition. 1169 if (!VD->isInvalidDecl()) 1170 Consumer.CompleteTentativeDefinition(VD); 1171 } 1172 1173 for (auto D : ExternalDeclarations) { 1174 if (!D || D->isInvalidDecl() || D->getPreviousDecl() || !D->isUsed()) 1175 continue; 1176 1177 Consumer.CompleteExternalDeclaration(D); 1178 } 1179 1180 // If there were errors, disable 'unused' warnings since they will mostly be 1181 // noise. Don't warn for a use from a module: either we should warn on all 1182 // file-scope declarations in modules or not at all, but whether the 1183 // declaration is used is immaterial. 1184 if (!Diags.hasErrorOccurred() && TUKind != TU_Module) { 1185 // Output warning for unused file scoped decls. 1186 for (UnusedFileScopedDeclsType::iterator 1187 I = UnusedFileScopedDecls.begin(ExternalSource), 1188 E = UnusedFileScopedDecls.end(); I != E; ++I) { 1189 if (ShouldRemoveFromUnused(this, *I)) 1190 continue; 1191 1192 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) { 1193 const FunctionDecl *DiagD; 1194 if (!FD->hasBody(DiagD)) 1195 DiagD = FD; 1196 if (DiagD->isDeleted()) 1197 continue; // Deleted functions are supposed to be unused. 1198 if (DiagD->isReferenced()) { 1199 if (isa<CXXMethodDecl>(DiagD)) 1200 Diag(DiagD->getLocation(), diag::warn_unneeded_member_function) 1201 << DiagD; 1202 else { 1203 if (FD->getStorageClass() == SC_Static && 1204 !FD->isInlineSpecified() && 1205 !SourceMgr.isInMainFile( 1206 SourceMgr.getExpansionLoc(FD->getLocation()))) 1207 Diag(DiagD->getLocation(), 1208 diag::warn_unneeded_static_internal_decl) 1209 << DiagD; 1210 else 1211 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) 1212 << /*function*/ 0 << DiagD; 1213 } 1214 } else { 1215 if (FD->getDescribedFunctionTemplate()) 1216 Diag(DiagD->getLocation(), diag::warn_unused_template) 1217 << /*function*/ 0 << DiagD; 1218 else 1219 Diag(DiagD->getLocation(), isa<CXXMethodDecl>(DiagD) 1220 ? diag::warn_unused_member_function 1221 : diag::warn_unused_function) 1222 << DiagD; 1223 } 1224 } else { 1225 const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition(); 1226 if (!DiagD) 1227 DiagD = cast<VarDecl>(*I); 1228 if (DiagD->isReferenced()) { 1229 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) 1230 << /*variable*/ 1 << DiagD; 1231 } else if (DiagD->getType().isConstQualified()) { 1232 const SourceManager &SM = SourceMgr; 1233 if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) || 1234 !PP.getLangOpts().IsHeaderFile) 1235 Diag(DiagD->getLocation(), diag::warn_unused_const_variable) 1236 << DiagD; 1237 } else { 1238 if (DiagD->getDescribedVarTemplate()) 1239 Diag(DiagD->getLocation(), diag::warn_unused_template) 1240 << /*variable*/ 1 << DiagD; 1241 else 1242 Diag(DiagD->getLocation(), diag::warn_unused_variable) << DiagD; 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