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