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