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 static void checkEscapingByref(VarDecl *VD, Sema &S) { 1959 QualType T = VD->getType(); 1960 EnterExpressionEvaluationContext scope( 1961 S, Sema::ExpressionEvaluationContext::PotentiallyEvaluated); 1962 SourceLocation Loc = VD->getLocation(); 1963 Expr *VarRef = 1964 new (S.Context) DeclRefExpr(S.Context, VD, false, T, VK_LValue, Loc); 1965 ExprResult Result = S.PerformCopyInitialization( 1966 InitializedEntity::InitializeBlock(Loc, T, false), SourceLocation(), 1967 VarRef); 1968 1969 if (!Result.isInvalid()) { 1970 Result = S.MaybeCreateExprWithCleanups(Result); 1971 Expr *Init = Result.getAs<Expr>(); 1972 S.Context.setBlockVarCopyInit(VD, Init, S.canThrow(Init)); 1973 } 1974 1975 // The destructor's exception specification is needed when IRGen generates 1976 // block copy/destroy functions. Resolve it here. 1977 if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) 1978 if (CXXDestructorDecl *DD = RD->getDestructor()) { 1979 auto *FPT = DD->getType()->getAs<FunctionProtoType>(); 1980 S.ResolveExceptionSpec(Loc, FPT); 1981 } 1982 } 1983 1984 static void markEscapingByrefs(const FunctionScopeInfo &FSI, Sema &S) { 1985 // Set the EscapingByref flag of __block variables captured by 1986 // escaping blocks. 1987 for (const BlockDecl *BD : FSI.Blocks) { 1988 for (const BlockDecl::Capture &BC : BD->captures()) { 1989 VarDecl *VD = BC.getVariable(); 1990 if (VD->hasAttr<BlocksAttr>()) { 1991 // Nothing to do if this is a __block variable captured by a 1992 // non-escaping block. 1993 if (BD->doesNotEscape()) 1994 continue; 1995 VD->setEscapingByref(); 1996 } 1997 // Check whether the captured variable is or contains an object of 1998 // non-trivial C union type. 1999 QualType CapType = BC.getVariable()->getType(); 2000 if (CapType.hasNonTrivialToPrimitiveDestructCUnion() || 2001 CapType.hasNonTrivialToPrimitiveCopyCUnion()) 2002 S.checkNonTrivialCUnion(BC.getVariable()->getType(), 2003 BD->getCaretLocation(), 2004 Sema::NTCUC_BlockCapture, 2005 Sema::NTCUK_Destruct|Sema::NTCUK_Copy); 2006 } 2007 } 2008 2009 for (VarDecl *VD : FSI.ByrefBlockVars) { 2010 // __block variables might require us to capture a copy-initializer. 2011 if (!VD->isEscapingByref()) 2012 continue; 2013 // It's currently invalid to ever have a __block variable with an 2014 // array type; should we diagnose that here? 2015 // Regardless, we don't want to ignore array nesting when 2016 // constructing this copy. 2017 if (VD->getType()->isStructureOrClassType()) 2018 checkEscapingByref(VD, S); 2019 } 2020 } 2021 2022 /// Pop a function (or block or lambda or captured region) scope from the stack. 2023 /// 2024 /// \param WP The warning policy to use for CFG-based warnings, or null if such 2025 /// warnings should not be produced. 2026 /// \param D The declaration corresponding to this function scope, if producing 2027 /// CFG-based warnings. 2028 /// \param BlockType The type of the block expression, if D is a BlockDecl. 2029 Sema::PoppedFunctionScopePtr 2030 Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP, 2031 const Decl *D, QualType BlockType) { 2032 assert(!FunctionScopes.empty() && "mismatched push/pop!"); 2033 2034 markEscapingByrefs(*FunctionScopes.back(), *this); 2035 2036 PoppedFunctionScopePtr Scope(FunctionScopes.pop_back_val(), 2037 PoppedFunctionScopeDeleter(this)); 2038 2039 if (LangOpts.OpenMP) 2040 popOpenMPFunctionRegion(Scope.get()); 2041 2042 // Issue any analysis-based warnings. 2043 if (WP && D) 2044 AnalysisWarnings.IssueWarnings(*WP, Scope.get(), D, BlockType); 2045 else 2046 for (const auto &PUD : Scope->PossiblyUnreachableDiags) 2047 Diag(PUD.Loc, PUD.PD); 2048 2049 return Scope; 2050 } 2051 2052 void Sema::PoppedFunctionScopeDeleter:: 2053 operator()(sema::FunctionScopeInfo *Scope) const { 2054 // Stash the function scope for later reuse if it's for a normal function. 2055 if (Scope->isPlainFunction() && !Self->CachedFunctionScope) 2056 Self->CachedFunctionScope.reset(Scope); 2057 else 2058 delete Scope; 2059 } 2060 2061 void Sema::PushCompoundScope(bool IsStmtExpr) { 2062 getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr)); 2063 } 2064 2065 void Sema::PopCompoundScope() { 2066 FunctionScopeInfo *CurFunction = getCurFunction(); 2067 assert(!CurFunction->CompoundScopes.empty() && "mismatched push/pop"); 2068 2069 CurFunction->CompoundScopes.pop_back(); 2070 } 2071 2072 /// Determine whether any errors occurred within this function/method/ 2073 /// block. 2074 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const { 2075 return getCurFunction()->hasUnrecoverableErrorOccurred(); 2076 } 2077 2078 void Sema::setFunctionHasBranchIntoScope() { 2079 if (!FunctionScopes.empty()) 2080 FunctionScopes.back()->setHasBranchIntoScope(); 2081 } 2082 2083 void Sema::setFunctionHasBranchProtectedScope() { 2084 if (!FunctionScopes.empty()) 2085 FunctionScopes.back()->setHasBranchProtectedScope(); 2086 } 2087 2088 void Sema::setFunctionHasIndirectGoto() { 2089 if (!FunctionScopes.empty()) 2090 FunctionScopes.back()->setHasIndirectGoto(); 2091 } 2092 2093 void Sema::setFunctionHasMustTail() { 2094 if (!FunctionScopes.empty()) 2095 FunctionScopes.back()->setHasMustTail(); 2096 } 2097 2098 BlockScopeInfo *Sema::getCurBlock() { 2099 if (FunctionScopes.empty()) 2100 return nullptr; 2101 2102 auto CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back()); 2103 if (CurBSI && CurBSI->TheDecl && 2104 !CurBSI->TheDecl->Encloses(CurContext)) { 2105 // We have switched contexts due to template instantiation. 2106 assert(!CodeSynthesisContexts.empty()); 2107 return nullptr; 2108 } 2109 2110 return CurBSI; 2111 } 2112 2113 FunctionScopeInfo *Sema::getEnclosingFunction() const { 2114 if (FunctionScopes.empty()) 2115 return nullptr; 2116 2117 for (int e = FunctionScopes.size() - 1; e >= 0; --e) { 2118 if (isa<sema::BlockScopeInfo>(FunctionScopes[e])) 2119 continue; 2120 return FunctionScopes[e]; 2121 } 2122 return nullptr; 2123 } 2124 2125 LambdaScopeInfo *Sema::getEnclosingLambda() const { 2126 for (auto *Scope : llvm::reverse(FunctionScopes)) { 2127 if (auto *LSI = dyn_cast<sema::LambdaScopeInfo>(Scope)) { 2128 if (LSI->Lambda && !LSI->Lambda->Encloses(CurContext)) { 2129 // We have switched contexts due to template instantiation. 2130 // FIXME: We should swap out the FunctionScopes during code synthesis 2131 // so that we don't need to check for this. 2132 assert(!CodeSynthesisContexts.empty()); 2133 return nullptr; 2134 } 2135 return LSI; 2136 } 2137 } 2138 return nullptr; 2139 } 2140 2141 LambdaScopeInfo *Sema::getCurLambda(bool IgnoreNonLambdaCapturingScope) { 2142 if (FunctionScopes.empty()) 2143 return nullptr; 2144 2145 auto I = FunctionScopes.rbegin(); 2146 if (IgnoreNonLambdaCapturingScope) { 2147 auto E = FunctionScopes.rend(); 2148 while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I)) 2149 ++I; 2150 if (I == E) 2151 return nullptr; 2152 } 2153 auto *CurLSI = dyn_cast<LambdaScopeInfo>(*I); 2154 if (CurLSI && CurLSI->Lambda && 2155 !CurLSI->Lambda->Encloses(CurContext)) { 2156 // We have switched contexts due to template instantiation. 2157 assert(!CodeSynthesisContexts.empty()); 2158 return nullptr; 2159 } 2160 2161 return CurLSI; 2162 } 2163 2164 // We have a generic lambda if we parsed auto parameters, or we have 2165 // an associated template parameter list. 2166 LambdaScopeInfo *Sema::getCurGenericLambda() { 2167 if (LambdaScopeInfo *LSI = getCurLambda()) { 2168 return (LSI->TemplateParams.size() || 2169 LSI->GLTemplateParameterList) ? LSI : nullptr; 2170 } 2171 return nullptr; 2172 } 2173 2174 2175 void Sema::ActOnComment(SourceRange Comment) { 2176 if (!LangOpts.RetainCommentsFromSystemHeaders && 2177 SourceMgr.isInSystemHeader(Comment.getBegin())) 2178 return; 2179 RawComment RC(SourceMgr, Comment, LangOpts.CommentOpts, false); 2180 if (RC.isAlmostTrailingComment()) { 2181 SourceRange MagicMarkerRange(Comment.getBegin(), 2182 Comment.getBegin().getLocWithOffset(3)); 2183 StringRef MagicMarkerText; 2184 switch (RC.getKind()) { 2185 case RawComment::RCK_OrdinaryBCPL: 2186 MagicMarkerText = "///<"; 2187 break; 2188 case RawComment::RCK_OrdinaryC: 2189 MagicMarkerText = "/**<"; 2190 break; 2191 default: 2192 llvm_unreachable("if this is an almost Doxygen comment, " 2193 "it should be ordinary"); 2194 } 2195 Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) << 2196 FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText); 2197 } 2198 Context.addComment(RC); 2199 } 2200 2201 // Pin this vtable to this file. 2202 ExternalSemaSource::~ExternalSemaSource() {} 2203 char ExternalSemaSource::ID; 2204 2205 void ExternalSemaSource::ReadMethodPool(Selector Sel) { } 2206 void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { } 2207 2208 void ExternalSemaSource::ReadKnownNamespaces( 2209 SmallVectorImpl<NamespaceDecl *> &Namespaces) { 2210 } 2211 2212 void ExternalSemaSource::ReadUndefinedButUsed( 2213 llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {} 2214 2215 void ExternalSemaSource::ReadMismatchingDeleteExpressions(llvm::MapVector< 2216 FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &) {} 2217 2218 /// Figure out if an expression could be turned into a call. 2219 /// 2220 /// Use this when trying to recover from an error where the programmer may have 2221 /// written just the name of a function instead of actually calling it. 2222 /// 2223 /// \param E - The expression to examine. 2224 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call 2225 /// with no arguments, this parameter is set to the type returned by such a 2226 /// call; otherwise, it is set to an empty QualType. 2227 /// \param OverloadSet - If the expression is an overloaded function 2228 /// name, this parameter is populated with the decls of the various overloads. 2229 bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy, 2230 UnresolvedSetImpl &OverloadSet) { 2231 ZeroArgCallReturnTy = QualType(); 2232 OverloadSet.clear(); 2233 2234 const OverloadExpr *Overloads = nullptr; 2235 bool IsMemExpr = false; 2236 if (E.getType() == Context.OverloadTy) { 2237 OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E)); 2238 2239 // Ignore overloads that are pointer-to-member constants. 2240 if (FR.HasFormOfMemberPointer) 2241 return false; 2242 2243 Overloads = FR.Expression; 2244 } else if (E.getType() == Context.BoundMemberTy) { 2245 Overloads = dyn_cast<UnresolvedMemberExpr>(E.IgnoreParens()); 2246 IsMemExpr = true; 2247 } 2248 2249 bool Ambiguous = false; 2250 bool IsMV = false; 2251 2252 if (Overloads) { 2253 for (OverloadExpr::decls_iterator it = Overloads->decls_begin(), 2254 DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) { 2255 OverloadSet.addDecl(*it); 2256 2257 // Check whether the function is a non-template, non-member which takes no 2258 // arguments. 2259 if (IsMemExpr) 2260 continue; 2261 if (const FunctionDecl *OverloadDecl 2262 = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) { 2263 if (OverloadDecl->getMinRequiredArguments() == 0) { 2264 if (!ZeroArgCallReturnTy.isNull() && !Ambiguous && 2265 (!IsMV || !(OverloadDecl->isCPUDispatchMultiVersion() || 2266 OverloadDecl->isCPUSpecificMultiVersion()))) { 2267 ZeroArgCallReturnTy = QualType(); 2268 Ambiguous = true; 2269 } else { 2270 ZeroArgCallReturnTy = OverloadDecl->getReturnType(); 2271 IsMV = OverloadDecl->isCPUDispatchMultiVersion() || 2272 OverloadDecl->isCPUSpecificMultiVersion(); 2273 } 2274 } 2275 } 2276 } 2277 2278 // If it's not a member, use better machinery to try to resolve the call 2279 if (!IsMemExpr) 2280 return !ZeroArgCallReturnTy.isNull(); 2281 } 2282 2283 // Attempt to call the member with no arguments - this will correctly handle 2284 // member templates with defaults/deduction of template arguments, overloads 2285 // with default arguments, etc. 2286 if (IsMemExpr && !E.isTypeDependent()) { 2287 Sema::TentativeAnalysisScope Trap(*this); 2288 ExprResult R = BuildCallToMemberFunction(nullptr, &E, SourceLocation(), 2289 None, SourceLocation()); 2290 if (R.isUsable()) { 2291 ZeroArgCallReturnTy = R.get()->getType(); 2292 return true; 2293 } 2294 return false; 2295 } 2296 2297 if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) { 2298 if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) { 2299 if (Fun->getMinRequiredArguments() == 0) 2300 ZeroArgCallReturnTy = Fun->getReturnType(); 2301 return true; 2302 } 2303 } 2304 2305 // We don't have an expression that's convenient to get a FunctionDecl from, 2306 // but we can at least check if the type is "function of 0 arguments". 2307 QualType ExprTy = E.getType(); 2308 const FunctionType *FunTy = nullptr; 2309 QualType PointeeTy = ExprTy->getPointeeType(); 2310 if (!PointeeTy.isNull()) 2311 FunTy = PointeeTy->getAs<FunctionType>(); 2312 if (!FunTy) 2313 FunTy = ExprTy->getAs<FunctionType>(); 2314 2315 if (const FunctionProtoType *FPT = 2316 dyn_cast_or_null<FunctionProtoType>(FunTy)) { 2317 if (FPT->getNumParams() == 0) 2318 ZeroArgCallReturnTy = FunTy->getReturnType(); 2319 return true; 2320 } 2321 return false; 2322 } 2323 2324 /// Give notes for a set of overloads. 2325 /// 2326 /// A companion to tryExprAsCall. In cases when the name that the programmer 2327 /// wrote was an overloaded function, we may be able to make some guesses about 2328 /// plausible overloads based on their return types; such guesses can be handed 2329 /// off to this method to be emitted as notes. 2330 /// 2331 /// \param Overloads - The overloads to note. 2332 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to 2333 /// -fshow-overloads=best, this is the location to attach to the note about too 2334 /// many candidates. Typically this will be the location of the original 2335 /// ill-formed expression. 2336 static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, 2337 const SourceLocation FinalNoteLoc) { 2338 unsigned ShownOverloads = 0; 2339 unsigned SuppressedOverloads = 0; 2340 for (UnresolvedSetImpl::iterator It = Overloads.begin(), 2341 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 2342 if (ShownOverloads >= S.Diags.getNumOverloadCandidatesToShow()) { 2343 ++SuppressedOverloads; 2344 continue; 2345 } 2346 2347 NamedDecl *Fn = (*It)->getUnderlyingDecl(); 2348 // Don't print overloads for non-default multiversioned functions. 2349 if (const auto *FD = Fn->getAsFunction()) { 2350 if (FD->isMultiVersion() && FD->hasAttr<TargetAttr>() && 2351 !FD->getAttr<TargetAttr>()->isDefaultVersion()) 2352 continue; 2353 } 2354 S.Diag(Fn->getLocation(), diag::note_possible_target_of_call); 2355 ++ShownOverloads; 2356 } 2357 2358 S.Diags.overloadCandidatesShown(ShownOverloads); 2359 2360 if (SuppressedOverloads) 2361 S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates) 2362 << SuppressedOverloads; 2363 } 2364 2365 static void notePlausibleOverloads(Sema &S, SourceLocation Loc, 2366 const UnresolvedSetImpl &Overloads, 2367 bool (*IsPlausibleResult)(QualType)) { 2368 if (!IsPlausibleResult) 2369 return noteOverloads(S, Overloads, Loc); 2370 2371 UnresolvedSet<2> PlausibleOverloads; 2372 for (OverloadExpr::decls_iterator It = Overloads.begin(), 2373 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 2374 const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It); 2375 QualType OverloadResultTy = OverloadDecl->getReturnType(); 2376 if (IsPlausibleResult(OverloadResultTy)) 2377 PlausibleOverloads.addDecl(It.getDecl()); 2378 } 2379 noteOverloads(S, PlausibleOverloads, Loc); 2380 } 2381 2382 /// Determine whether the given expression can be called by just 2383 /// putting parentheses after it. Notably, expressions with unary 2384 /// operators can't be because the unary operator will start parsing 2385 /// outside the call. 2386 static bool IsCallableWithAppend(Expr *E) { 2387 E = E->IgnoreImplicit(); 2388 return (!isa<CStyleCastExpr>(E) && 2389 !isa<UnaryOperator>(E) && 2390 !isa<BinaryOperator>(E) && 2391 !isa<CXXOperatorCallExpr>(E)); 2392 } 2393 2394 static bool IsCPUDispatchCPUSpecificMultiVersion(const Expr *E) { 2395 if (const auto *UO = dyn_cast<UnaryOperator>(E)) 2396 E = UO->getSubExpr(); 2397 2398 if (const auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) { 2399 if (ULE->getNumDecls() == 0) 2400 return false; 2401 2402 const NamedDecl *ND = *ULE->decls_begin(); 2403 if (const auto *FD = dyn_cast<FunctionDecl>(ND)) 2404 return FD->isCPUDispatchMultiVersion() || FD->isCPUSpecificMultiVersion(); 2405 } 2406 return false; 2407 } 2408 2409 bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD, 2410 bool ForceComplain, 2411 bool (*IsPlausibleResult)(QualType)) { 2412 SourceLocation Loc = E.get()->getExprLoc(); 2413 SourceRange Range = E.get()->getSourceRange(); 2414 2415 QualType ZeroArgCallTy; 2416 UnresolvedSet<4> Overloads; 2417 if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) && 2418 !ZeroArgCallTy.isNull() && 2419 (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) { 2420 // At this point, we know E is potentially callable with 0 2421 // arguments and that it returns something of a reasonable type, 2422 // so we can emit a fixit and carry on pretending that E was 2423 // actually a CallExpr. 2424 SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd()); 2425 bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get()); 2426 Diag(Loc, PD) << /*zero-arg*/ 1 << IsMV << Range 2427 << (IsCallableWithAppend(E.get()) 2428 ? FixItHint::CreateInsertion(ParenInsertionLoc, "()") 2429 : FixItHint()); 2430 if (!IsMV) 2431 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 2432 2433 // FIXME: Try this before emitting the fixit, and suppress diagnostics 2434 // while doing so. 2435 E = BuildCallExpr(nullptr, E.get(), Range.getEnd(), None, 2436 Range.getEnd().getLocWithOffset(1)); 2437 return true; 2438 } 2439 2440 if (!ForceComplain) return false; 2441 2442 bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get()); 2443 Diag(Loc, PD) << /*not zero-arg*/ 0 << IsMV << Range; 2444 if (!IsMV) 2445 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 2446 E = ExprError(); 2447 return true; 2448 } 2449 2450 IdentifierInfo *Sema::getSuperIdentifier() const { 2451 if (!Ident_super) 2452 Ident_super = &Context.Idents.get("super"); 2453 return Ident_super; 2454 } 2455 2456 IdentifierInfo *Sema::getFloat128Identifier() const { 2457 if (!Ident___float128) 2458 Ident___float128 = &Context.Idents.get("__float128"); 2459 return Ident___float128; 2460 } 2461 2462 void Sema::PushCapturedRegionScope(Scope *S, CapturedDecl *CD, RecordDecl *RD, 2463 CapturedRegionKind K, 2464 unsigned OpenMPCaptureLevel) { 2465 auto *CSI = new CapturedRegionScopeInfo( 2466 getDiagnostics(), S, CD, RD, CD->getContextParam(), K, 2467 (getLangOpts().OpenMP && K == CR_OpenMP) ? getOpenMPNestingLevel() : 0, 2468 OpenMPCaptureLevel); 2469 CSI->ReturnType = Context.VoidTy; 2470 FunctionScopes.push_back(CSI); 2471 } 2472 2473 CapturedRegionScopeInfo *Sema::getCurCapturedRegion() { 2474 if (FunctionScopes.empty()) 2475 return nullptr; 2476 2477 return dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back()); 2478 } 2479 2480 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> & 2481 Sema::getMismatchingDeleteExpressions() const { 2482 return DeleteExprs; 2483 } 2484