1 //===--- Sema.cpp - AST Builder and Semantic Analysis Implementation ------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements the actions class which performs semantic analysis and 11 // builds an AST out of a parse stream. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "clang/AST/ASTContext.h" 16 #include "clang/AST/ASTDiagnostic.h" 17 #include "clang/AST/DeclCXX.h" 18 #include "clang/AST/DeclFriend.h" 19 #include "clang/AST/DeclObjC.h" 20 #include "clang/AST/Expr.h" 21 #include "clang/AST/ExprCXX.h" 22 #include "clang/AST/StmtCXX.h" 23 #include "clang/Basic/DiagnosticOptions.h" 24 #include "clang/Basic/PartialDiagnostic.h" 25 #include "clang/Basic/TargetInfo.h" 26 #include "clang/Lex/HeaderSearch.h" 27 #include "clang/Lex/Preprocessor.h" 28 #include "clang/Sema/CXXFieldCollector.h" 29 #include "clang/Sema/DelayedDiagnostic.h" 30 #include "clang/Sema/ExternalSemaSource.h" 31 #include "clang/Sema/Initialization.h" 32 #include "clang/Sema/MultiplexExternalSemaSource.h" 33 #include "clang/Sema/ObjCMethodList.h" 34 #include "clang/Sema/PrettyDeclStackTrace.h" 35 #include "clang/Sema/Scope.h" 36 #include "clang/Sema/ScopeInfo.h" 37 #include "clang/Sema/SemaConsumer.h" 38 #include "clang/Sema/SemaInternal.h" 39 #include "clang/Sema/TemplateDeduction.h" 40 #include "clang/Sema/TemplateInstCallback.h" 41 #include "llvm/ADT/DenseMap.h" 42 #include "llvm/ADT/SmallSet.h" 43 using namespace clang; 44 using namespace sema; 45 46 SourceLocation Sema::getLocForEndOfToken(SourceLocation Loc, unsigned Offset) { 47 return Lexer::getLocForEndOfToken(Loc, Offset, SourceMgr, LangOpts); 48 } 49 50 ModuleLoader &Sema::getModuleLoader() const { return PP.getModuleLoader(); } 51 52 PrintingPolicy Sema::getPrintingPolicy(const ASTContext &Context, 53 const Preprocessor &PP) { 54 PrintingPolicy Policy = Context.getPrintingPolicy(); 55 // Our printing policy is copied over the ASTContext printing policy whenever 56 // a diagnostic is emitted, so recompute it. 57 Policy.Bool = Context.getLangOpts().Bool; 58 if (!Policy.Bool) { 59 if (const MacroInfo *BoolMacro = PP.getMacroInfo(Context.getBoolName())) { 60 Policy.Bool = BoolMacro->isObjectLike() && 61 BoolMacro->getNumTokens() == 1 && 62 BoolMacro->getReplacementToken(0).is(tok::kw__Bool); 63 } 64 } 65 66 return Policy; 67 } 68 69 void Sema::ActOnTranslationUnitScope(Scope *S) { 70 TUScope = S; 71 PushDeclContext(S, Context.getTranslationUnitDecl()); 72 } 73 74 namespace clang { 75 namespace sema { 76 77 class SemaPPCallbacks : public PPCallbacks { 78 Sema *S = nullptr; 79 llvm::SmallVector<SourceLocation, 8> IncludeStack; 80 81 public: 82 void set(Sema &S) { this->S = &S; } 83 84 void reset() { S = nullptr; } 85 86 virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason, 87 SrcMgr::CharacteristicKind FileType, 88 FileID PrevFID) override { 89 if (!S) 90 return; 91 switch (Reason) { 92 case EnterFile: { 93 SourceManager &SM = S->getSourceManager(); 94 SourceLocation IncludeLoc = SM.getIncludeLoc(SM.getFileID(Loc)); 95 if (IncludeLoc.isValid()) { 96 IncludeStack.push_back(IncludeLoc); 97 S->DiagnoseNonDefaultPragmaPack( 98 Sema::PragmaPackDiagnoseKind::NonDefaultStateAtInclude, IncludeLoc); 99 } 100 break; 101 } 102 case ExitFile: 103 if (!IncludeStack.empty()) 104 S->DiagnoseNonDefaultPragmaPack( 105 Sema::PragmaPackDiagnoseKind::ChangedStateAtExit, 106 IncludeStack.pop_back_val()); 107 break; 108 default: 109 break; 110 } 111 } 112 }; 113 114 } // end namespace sema 115 } // end namespace clang 116 117 Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer, 118 TranslationUnitKind TUKind, CodeCompleteConsumer *CodeCompleter) 119 : ExternalSource(nullptr), isMultiplexExternalSource(false), 120 FPFeatures(pp.getLangOpts()), LangOpts(pp.getLangOpts()), PP(pp), 121 Context(ctxt), Consumer(consumer), Diags(PP.getDiagnostics()), 122 SourceMgr(PP.getSourceManager()), CollectStats(false), 123 CodeCompleter(CodeCompleter), CurContext(nullptr), 124 OriginalLexicalContext(nullptr), MSStructPragmaOn(false), 125 MSPointerToMemberRepresentationMethod( 126 LangOpts.getMSPointerToMemberRepresentationMethod()), 127 VtorDispStack(MSVtorDispAttr::Mode(LangOpts.VtorDispMode)), PackStack(0), 128 DataSegStack(nullptr), BSSSegStack(nullptr), ConstSegStack(nullptr), 129 CodeSegStack(nullptr), CurInitSeg(nullptr), VisContext(nullptr), 130 PragmaAttributeCurrentTargetDecl(nullptr), 131 IsBuildingRecoveryCallExpr(false), Cleanup{}, LateTemplateParser(nullptr), 132 LateTemplateParserCleanup(nullptr), OpaqueParser(nullptr), IdResolver(pp), 133 StdExperimentalNamespaceCache(nullptr), StdInitializerList(nullptr), 134 CXXTypeInfoDecl(nullptr), MSVCGuidDecl(nullptr), NSNumberDecl(nullptr), 135 NSValueDecl(nullptr), NSStringDecl(nullptr), 136 StringWithUTF8StringMethod(nullptr), 137 ValueWithBytesObjCTypeMethod(nullptr), NSArrayDecl(nullptr), 138 ArrayWithObjectsMethod(nullptr), NSDictionaryDecl(nullptr), 139 DictionaryWithObjectsMethod(nullptr), GlobalNewDeleteDeclared(false), 140 TUKind(TUKind), NumSFINAEErrors(0), AccessCheckingSFINAE(false), 141 InNonInstantiationSFINAEContext(false), NonInstantiationEntries(0), 142 ArgumentPackSubstitutionIndex(-1), CurrentInstantiationScope(nullptr), 143 DisableTypoCorrection(false), TyposCorrected(0), AnalysisWarnings(*this), 144 ThreadSafetyDeclCache(nullptr), VarDataSharingAttributesStack(nullptr), 145 CurScope(nullptr), Ident_super(nullptr), Ident___float128(nullptr) { 146 TUScope = nullptr; 147 148 LoadedExternalKnownNamespaces = false; 149 for (unsigned I = 0; I != NSAPI::NumNSNumberLiteralMethods; ++I) 150 NSNumberLiteralMethods[I] = nullptr; 151 152 if (getLangOpts().ObjC1) 153 NSAPIObj.reset(new NSAPI(Context)); 154 155 if (getLangOpts().CPlusPlus) 156 FieldCollector.reset(new CXXFieldCollector()); 157 158 // Tell diagnostics how to render things from the AST library. 159 Diags.SetArgToStringFn(&FormatASTNodeDiagnosticArgument, &Context); 160 161 ExprEvalContexts.emplace_back( 162 ExpressionEvaluationContext::PotentiallyEvaluated, 0, CleanupInfo{}, 163 nullptr, false); 164 165 FunctionScopes.push_back(new FunctionScopeInfo(Diags)); 166 167 // Initilization of data sharing attributes stack for OpenMP 168 InitDataSharingAttributesStack(); 169 170 std::unique_ptr<sema::SemaPPCallbacks> Callbacks = 171 llvm::make_unique<sema::SemaPPCallbacks>(); 172 SemaPPCallbackHandler = Callbacks.get(); 173 PP.addPPCallbacks(std::move(Callbacks)); 174 SemaPPCallbackHandler->set(*this); 175 } 176 177 void Sema::addImplicitTypedef(StringRef Name, QualType T) { 178 DeclarationName DN = &Context.Idents.get(Name); 179 if (IdResolver.begin(DN) == IdResolver.end()) 180 PushOnScopeChains(Context.buildImplicitTypedef(T, Name), TUScope); 181 } 182 183 void Sema::Initialize() { 184 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer)) 185 SC->InitializeSema(*this); 186 187 // Tell the external Sema source about this Sema object. 188 if (ExternalSemaSource *ExternalSema 189 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource())) 190 ExternalSema->InitializeSema(*this); 191 192 // This needs to happen after ExternalSemaSource::InitializeSema(this) or we 193 // will not be able to merge any duplicate __va_list_tag decls correctly. 194 VAListTagName = PP.getIdentifierInfo("__va_list_tag"); 195 196 if (!TUScope) 197 return; 198 199 // Initialize predefined 128-bit integer types, if needed. 200 if (Context.getTargetInfo().hasInt128Type()) { 201 // If either of the 128-bit integer types are unavailable to name lookup, 202 // define them now. 203 DeclarationName Int128 = &Context.Idents.get("__int128_t"); 204 if (IdResolver.begin(Int128) == IdResolver.end()) 205 PushOnScopeChains(Context.getInt128Decl(), TUScope); 206 207 DeclarationName UInt128 = &Context.Idents.get("__uint128_t"); 208 if (IdResolver.begin(UInt128) == IdResolver.end()) 209 PushOnScopeChains(Context.getUInt128Decl(), TUScope); 210 } 211 212 213 // Initialize predefined Objective-C types: 214 if (getLangOpts().ObjC1) { 215 // If 'SEL' does not yet refer to any declarations, make it refer to the 216 // predefined 'SEL'. 217 DeclarationName SEL = &Context.Idents.get("SEL"); 218 if (IdResolver.begin(SEL) == IdResolver.end()) 219 PushOnScopeChains(Context.getObjCSelDecl(), TUScope); 220 221 // If 'id' does not yet refer to any declarations, make it refer to the 222 // predefined 'id'. 223 DeclarationName Id = &Context.Idents.get("id"); 224 if (IdResolver.begin(Id) == IdResolver.end()) 225 PushOnScopeChains(Context.getObjCIdDecl(), TUScope); 226 227 // Create the built-in typedef for 'Class'. 228 DeclarationName Class = &Context.Idents.get("Class"); 229 if (IdResolver.begin(Class) == IdResolver.end()) 230 PushOnScopeChains(Context.getObjCClassDecl(), TUScope); 231 232 // Create the built-in forward declaratino for 'Protocol'. 233 DeclarationName Protocol = &Context.Idents.get("Protocol"); 234 if (IdResolver.begin(Protocol) == IdResolver.end()) 235 PushOnScopeChains(Context.getObjCProtocolDecl(), TUScope); 236 } 237 238 // Create the internal type for the *StringMakeConstantString builtins. 239 DeclarationName ConstantString = &Context.Idents.get("__NSConstantString"); 240 if (IdResolver.begin(ConstantString) == IdResolver.end()) 241 PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope); 242 243 // Initialize Microsoft "predefined C++ types". 244 if (getLangOpts().MSVCCompat) { 245 if (getLangOpts().CPlusPlus && 246 IdResolver.begin(&Context.Idents.get("type_info")) == IdResolver.end()) 247 PushOnScopeChains(Context.buildImplicitRecord("type_info", TTK_Class), 248 TUScope); 249 250 addImplicitTypedef("size_t", Context.getSizeType()); 251 } 252 253 // Initialize predefined OpenCL types and supported extensions and (optional) 254 // core features. 255 if (getLangOpts().OpenCL) { 256 getOpenCLOptions().addSupport(Context.getTargetInfo().getSupportedOpenCLOpts()); 257 getOpenCLOptions().enableSupportedCore(getLangOpts().OpenCLVersion); 258 addImplicitTypedef("sampler_t", Context.OCLSamplerTy); 259 addImplicitTypedef("event_t", Context.OCLEventTy); 260 if (getLangOpts().OpenCLVersion >= 200) { 261 addImplicitTypedef("clk_event_t", Context.OCLClkEventTy); 262 addImplicitTypedef("queue_t", Context.OCLQueueTy); 263 addImplicitTypedef("reserve_id_t", Context.OCLReserveIDTy); 264 addImplicitTypedef("atomic_int", Context.getAtomicType(Context.IntTy)); 265 addImplicitTypedef("atomic_uint", 266 Context.getAtomicType(Context.UnsignedIntTy)); 267 auto AtomicLongT = Context.getAtomicType(Context.LongTy); 268 addImplicitTypedef("atomic_long", AtomicLongT); 269 auto AtomicULongT = Context.getAtomicType(Context.UnsignedLongTy); 270 addImplicitTypedef("atomic_ulong", AtomicULongT); 271 addImplicitTypedef("atomic_float", 272 Context.getAtomicType(Context.FloatTy)); 273 auto AtomicDoubleT = Context.getAtomicType(Context.DoubleTy); 274 addImplicitTypedef("atomic_double", AtomicDoubleT); 275 // OpenCLC v2.0, s6.13.11.6 requires that atomic_flag is implemented as 276 // 32-bit integer and OpenCLC v2.0, s6.1.1 int is always 32-bit wide. 277 addImplicitTypedef("atomic_flag", Context.getAtomicType(Context.IntTy)); 278 auto AtomicIntPtrT = Context.getAtomicType(Context.getIntPtrType()); 279 addImplicitTypedef("atomic_intptr_t", AtomicIntPtrT); 280 auto AtomicUIntPtrT = Context.getAtomicType(Context.getUIntPtrType()); 281 addImplicitTypedef("atomic_uintptr_t", AtomicUIntPtrT); 282 auto AtomicSizeT = Context.getAtomicType(Context.getSizeType()); 283 addImplicitTypedef("atomic_size_t", AtomicSizeT); 284 auto AtomicPtrDiffT = Context.getAtomicType(Context.getPointerDiffType()); 285 addImplicitTypedef("atomic_ptrdiff_t", AtomicPtrDiffT); 286 287 // OpenCL v2.0 s6.13.11.6: 288 // - The atomic_long and atomic_ulong types are supported if the 289 // cl_khr_int64_base_atomics and cl_khr_int64_extended_atomics 290 // extensions are supported. 291 // - The atomic_double type is only supported if double precision 292 // is supported and the cl_khr_int64_base_atomics and 293 // cl_khr_int64_extended_atomics extensions are supported. 294 // - If the device address space is 64-bits, the data types 295 // atomic_intptr_t, atomic_uintptr_t, atomic_size_t and 296 // atomic_ptrdiff_t are supported if the cl_khr_int64_base_atomics and 297 // cl_khr_int64_extended_atomics extensions are supported. 298 std::vector<QualType> Atomic64BitTypes; 299 Atomic64BitTypes.push_back(AtomicLongT); 300 Atomic64BitTypes.push_back(AtomicULongT); 301 Atomic64BitTypes.push_back(AtomicDoubleT); 302 if (Context.getTypeSize(AtomicSizeT) == 64) { 303 Atomic64BitTypes.push_back(AtomicSizeT); 304 Atomic64BitTypes.push_back(AtomicIntPtrT); 305 Atomic64BitTypes.push_back(AtomicUIntPtrT); 306 Atomic64BitTypes.push_back(AtomicPtrDiffT); 307 } 308 for (auto &I : Atomic64BitTypes) 309 setOpenCLExtensionForType(I, 310 "cl_khr_int64_base_atomics cl_khr_int64_extended_atomics"); 311 312 setOpenCLExtensionForType(AtomicDoubleT, "cl_khr_fp64"); 313 } 314 315 setOpenCLExtensionForType(Context.DoubleTy, "cl_khr_fp64"); 316 317 #define GENERIC_IMAGE_TYPE_EXT(Type, Id, Ext) \ 318 setOpenCLExtensionForType(Context.Id, Ext); 319 #include "clang/Basic/OpenCLImageTypes.def" 320 }; 321 322 if (Context.getTargetInfo().hasBuiltinMSVaList()) { 323 DeclarationName MSVaList = &Context.Idents.get("__builtin_ms_va_list"); 324 if (IdResolver.begin(MSVaList) == IdResolver.end()) 325 PushOnScopeChains(Context.getBuiltinMSVaListDecl(), TUScope); 326 } 327 328 DeclarationName BuiltinVaList = &Context.Idents.get("__builtin_va_list"); 329 if (IdResolver.begin(BuiltinVaList) == IdResolver.end()) 330 PushOnScopeChains(Context.getBuiltinVaListDecl(), TUScope); 331 } 332 333 Sema::~Sema() { 334 if (VisContext) FreeVisContext(); 335 // Kill all the active scopes. 336 for (unsigned I = 1, E = FunctionScopes.size(); I != E; ++I) 337 delete FunctionScopes[I]; 338 if (FunctionScopes.size() == 1) 339 delete FunctionScopes[0]; 340 341 // Tell the SemaConsumer to forget about us; we're going out of scope. 342 if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer)) 343 SC->ForgetSema(); 344 345 // Detach from the external Sema source. 346 if (ExternalSemaSource *ExternalSema 347 = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource())) 348 ExternalSema->ForgetSema(); 349 350 // If Sema's ExternalSource is the multiplexer - we own it. 351 if (isMultiplexExternalSource) 352 delete ExternalSource; 353 354 threadSafety::threadSafetyCleanup(ThreadSafetyDeclCache); 355 356 // Destroys data sharing attributes stack for OpenMP 357 DestroyDataSharingAttributesStack(); 358 359 // Detach from the PP callback handler which outlives Sema since it's owned 360 // by the preprocessor. 361 SemaPPCallbackHandler->reset(); 362 363 assert(DelayedTypos.empty() && "Uncorrected typos!"); 364 } 365 366 /// makeUnavailableInSystemHeader - There is an error in the current 367 /// context. If we're still in a system header, and we can plausibly 368 /// make the relevant declaration unavailable instead of erroring, do 369 /// so and return true. 370 bool Sema::makeUnavailableInSystemHeader(SourceLocation loc, 371 UnavailableAttr::ImplicitReason reason) { 372 // If we're not in a function, it's an error. 373 FunctionDecl *fn = dyn_cast<FunctionDecl>(CurContext); 374 if (!fn) return false; 375 376 // If we're in template instantiation, it's an error. 377 if (inTemplateInstantiation()) 378 return false; 379 380 // If that function's not in a system header, it's an error. 381 if (!Context.getSourceManager().isInSystemHeader(loc)) 382 return false; 383 384 // If the function is already unavailable, it's not an error. 385 if (fn->hasAttr<UnavailableAttr>()) return true; 386 387 fn->addAttr(UnavailableAttr::CreateImplicit(Context, "", reason, loc)); 388 return true; 389 } 390 391 ASTMutationListener *Sema::getASTMutationListener() const { 392 return getASTConsumer().GetASTMutationListener(); 393 } 394 395 ///\brief Registers an external source. If an external source already exists, 396 /// creates a multiplex external source and appends to it. 397 /// 398 ///\param[in] E - A non-null external sema source. 399 /// 400 void Sema::addExternalSource(ExternalSemaSource *E) { 401 assert(E && "Cannot use with NULL ptr"); 402 403 if (!ExternalSource) { 404 ExternalSource = E; 405 return; 406 } 407 408 if (isMultiplexExternalSource) 409 static_cast<MultiplexExternalSemaSource*>(ExternalSource)->addSource(*E); 410 else { 411 ExternalSource = new MultiplexExternalSemaSource(*ExternalSource, *E); 412 isMultiplexExternalSource = true; 413 } 414 } 415 416 /// \brief Print out statistics about the semantic analysis. 417 void Sema::PrintStats() const { 418 llvm::errs() << "\n*** Semantic Analysis Stats:\n"; 419 llvm::errs() << NumSFINAEErrors << " SFINAE diagnostics trapped.\n"; 420 421 BumpAlloc.PrintStats(); 422 AnalysisWarnings.PrintStats(); 423 } 424 425 void Sema::diagnoseNullableToNonnullConversion(QualType DstType, 426 QualType SrcType, 427 SourceLocation Loc) { 428 Optional<NullabilityKind> ExprNullability = SrcType->getNullability(Context); 429 if (!ExprNullability || *ExprNullability != NullabilityKind::Nullable) 430 return; 431 432 Optional<NullabilityKind> TypeNullability = DstType->getNullability(Context); 433 if (!TypeNullability || *TypeNullability != NullabilityKind::NonNull) 434 return; 435 436 Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType; 437 } 438 439 void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr* E) { 440 if (Diags.isIgnored(diag::warn_zero_as_null_pointer_constant, 441 E->getLocStart())) 442 return; 443 // nullptr only exists from C++11 on, so don't warn on its absence earlier. 444 if (!getLangOpts().CPlusPlus11) 445 return; 446 447 if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer) 448 return; 449 if (E->IgnoreParenImpCasts()->getType()->isNullPtrType()) 450 return; 451 452 // If it is a macro from system header, and if the macro name is not "NULL", 453 // do not warn. 454 SourceLocation MaybeMacroLoc = E->getLocStart(); 455 if (Diags.getSuppressSystemWarnings() && 456 SourceMgr.isInSystemMacro(MaybeMacroLoc) && 457 !findMacroSpelling(MaybeMacroLoc, "NULL")) 458 return; 459 460 Diag(E->getLocStart(), diag::warn_zero_as_null_pointer_constant) 461 << FixItHint::CreateReplacement(E->getSourceRange(), "nullptr"); 462 } 463 464 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast. 465 /// If there is already an implicit cast, merge into the existing one. 466 /// The result is of the given category. 467 ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty, 468 CastKind Kind, ExprValueKind VK, 469 const CXXCastPath *BasePath, 470 CheckedConversionKind CCK) { 471 #ifndef NDEBUG 472 if (VK == VK_RValue && !E->isRValue()) { 473 switch (Kind) { 474 default: 475 llvm_unreachable("can't implicitly cast lvalue to rvalue with this cast " 476 "kind"); 477 case CK_LValueToRValue: 478 case CK_ArrayToPointerDecay: 479 case CK_FunctionToPointerDecay: 480 case CK_ToVoid: 481 break; 482 } 483 } 484 assert((VK == VK_RValue || !E->isRValue()) && "can't cast rvalue to lvalue"); 485 #endif 486 487 diagnoseNullableToNonnullConversion(Ty, E->getType(), E->getLocStart()); 488 diagnoseZeroToNullptrConversion(Kind, E); 489 490 QualType ExprTy = Context.getCanonicalType(E->getType()); 491 QualType TypeTy = Context.getCanonicalType(Ty); 492 493 if (ExprTy == TypeTy) 494 return E; 495 496 // C++1z [conv.array]: The temporary materialization conversion is applied. 497 // We also use this to fuel C++ DR1213, which applies to C++11 onwards. 498 if (Kind == CK_ArrayToPointerDecay && getLangOpts().CPlusPlus && 499 E->getValueKind() == VK_RValue) { 500 // The temporary is an lvalue in C++98 and an xvalue otherwise. 501 ExprResult Materialized = CreateMaterializeTemporaryExpr( 502 E->getType(), E, !getLangOpts().CPlusPlus11); 503 if (Materialized.isInvalid()) 504 return ExprError(); 505 E = Materialized.get(); 506 } 507 508 if (ImplicitCastExpr *ImpCast = dyn_cast<ImplicitCastExpr>(E)) { 509 if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) { 510 ImpCast->setType(Ty); 511 ImpCast->setValueKind(VK); 512 return E; 513 } 514 } 515 516 return ImplicitCastExpr::Create(Context, Ty, Kind, E, BasePath, VK); 517 } 518 519 /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding 520 /// to the conversion from scalar type ScalarTy to the Boolean type. 521 CastKind Sema::ScalarTypeToBooleanCastKind(QualType ScalarTy) { 522 switch (ScalarTy->getScalarTypeKind()) { 523 case Type::STK_Bool: return CK_NoOp; 524 case Type::STK_CPointer: return CK_PointerToBoolean; 525 case Type::STK_BlockPointer: return CK_PointerToBoolean; 526 case Type::STK_ObjCObjectPointer: return CK_PointerToBoolean; 527 case Type::STK_MemberPointer: return CK_MemberPointerToBoolean; 528 case Type::STK_Integral: return CK_IntegralToBoolean; 529 case Type::STK_Floating: return CK_FloatingToBoolean; 530 case Type::STK_IntegralComplex: return CK_IntegralComplexToBoolean; 531 case Type::STK_FloatingComplex: return CK_FloatingComplexToBoolean; 532 } 533 llvm_unreachable("unknown scalar type kind"); 534 } 535 536 /// \brief Used to prune the decls of Sema's UnusedFileScopedDecls vector. 537 static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D) { 538 if (D->getMostRecentDecl()->isUsed()) 539 return true; 540 541 if (D->isExternallyVisible()) 542 return true; 543 544 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 545 // If this is a function template and none of its specializations is used, 546 // we should warn. 547 if (FunctionTemplateDecl *Template = FD->getDescribedFunctionTemplate()) 548 for (const auto *Spec : Template->specializations()) 549 if (ShouldRemoveFromUnused(SemaRef, Spec)) 550 return true; 551 552 // UnusedFileScopedDecls stores the first declaration. 553 // The declaration may have become definition so check again. 554 const FunctionDecl *DeclToCheck; 555 if (FD->hasBody(DeclToCheck)) 556 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 557 558 // Later redecls may add new information resulting in not having to warn, 559 // so check again. 560 DeclToCheck = FD->getMostRecentDecl(); 561 if (DeclToCheck != FD) 562 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 563 } 564 565 if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { 566 // If a variable usable in constant expressions is referenced, 567 // don't warn if it isn't used: if the value of a variable is required 568 // for the computation of a constant expression, it doesn't make sense to 569 // warn even if the variable isn't odr-used. (isReferenced doesn't 570 // precisely reflect that, but it's a decent approximation.) 571 if (VD->isReferenced() && 572 VD->isUsableInConstantExpressions(SemaRef->Context)) 573 return true; 574 575 if (VarTemplateDecl *Template = VD->getDescribedVarTemplate()) 576 // If this is a variable template and none of its specializations is used, 577 // we should warn. 578 for (const auto *Spec : Template->specializations()) 579 if (ShouldRemoveFromUnused(SemaRef, Spec)) 580 return true; 581 582 // UnusedFileScopedDecls stores the first declaration. 583 // The declaration may have become definition so check again. 584 const VarDecl *DeclToCheck = VD->getDefinition(); 585 if (DeclToCheck) 586 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 587 588 // Later redecls may add new information resulting in not having to warn, 589 // so check again. 590 DeclToCheck = VD->getMostRecentDecl(); 591 if (DeclToCheck != VD) 592 return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); 593 } 594 595 return false; 596 } 597 598 static bool isFunctionOrVarDeclExternC(NamedDecl *ND) { 599 if (auto *FD = dyn_cast<FunctionDecl>(ND)) 600 return FD->isExternC(); 601 return cast<VarDecl>(ND)->isExternC(); 602 } 603 604 /// Determine whether ND is an external-linkage function or variable whose 605 /// type has no linkage. 606 bool Sema::isExternalWithNoLinkageType(ValueDecl *VD) { 607 // Note: it's not quite enough to check whether VD has UniqueExternalLinkage, 608 // because we also want to catch the case where its type has VisibleNoLinkage, 609 // which does not affect the linkage of VD. 610 return getLangOpts().CPlusPlus && VD->hasExternalFormalLinkage() && 611 !isExternalFormalLinkage(VD->getType()->getLinkage()) && 612 !isFunctionOrVarDeclExternC(VD); 613 } 614 615 /// Obtains a sorted list of functions and variables that are undefined but 616 /// ODR-used. 617 void Sema::getUndefinedButUsed( 618 SmallVectorImpl<std::pair<NamedDecl *, SourceLocation> > &Undefined) { 619 for (const auto &UndefinedUse : UndefinedButUsed) { 620 NamedDecl *ND = UndefinedUse.first; 621 622 // Ignore attributes that have become invalid. 623 if (ND->isInvalidDecl()) continue; 624 625 // __attribute__((weakref)) is basically a definition. 626 if (ND->hasAttr<WeakRefAttr>()) continue; 627 628 if (isa<CXXDeductionGuideDecl>(ND)) 629 continue; 630 631 if (ND->hasAttr<DLLImportAttr>() || ND->hasAttr<DLLExportAttr>()) { 632 // An exported function will always be emitted when defined, so even if 633 // the function is inline, it doesn't have to be emitted in this TU. An 634 // imported function implies that it has been exported somewhere else. 635 continue; 636 } 637 638 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) { 639 if (FD->isDefined()) 640 continue; 641 if (FD->isExternallyVisible() && 642 !isExternalWithNoLinkageType(FD) && 643 !FD->getMostRecentDecl()->isInlined()) 644 continue; 645 } else { 646 auto *VD = cast<VarDecl>(ND); 647 if (VD->hasDefinition() != VarDecl::DeclarationOnly) 648 continue; 649 if (VD->isExternallyVisible() && 650 !isExternalWithNoLinkageType(VD) && 651 !VD->getMostRecentDecl()->isInline()) 652 continue; 653 } 654 655 Undefined.push_back(std::make_pair(ND, UndefinedUse.second)); 656 } 657 } 658 659 /// checkUndefinedButUsed - Check for undefined objects with internal linkage 660 /// or that are inline. 661 static void checkUndefinedButUsed(Sema &S) { 662 if (S.UndefinedButUsed.empty()) return; 663 664 // Collect all the still-undefined entities with internal linkage. 665 SmallVector<std::pair<NamedDecl *, SourceLocation>, 16> Undefined; 666 S.getUndefinedButUsed(Undefined); 667 if (Undefined.empty()) return; 668 669 for (auto Undef : Undefined) { 670 ValueDecl *VD = cast<ValueDecl>(Undef.first); 671 SourceLocation UseLoc = Undef.second; 672 673 if (S.isExternalWithNoLinkageType(VD)) { 674 // C++ [basic.link]p8: 675 // A type without linkage shall not be used as the type of a variable 676 // or function with external linkage unless 677 // -- the entity has C language linkage 678 // -- the entity is not odr-used or is defined in the same TU 679 // 680 // As an extension, accept this in cases where the type is externally 681 // visible, since the function or variable actually can be defined in 682 // another translation unit in that case. 683 S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage()) 684 ? diag::ext_undefined_internal_type 685 : diag::err_undefined_internal_type) 686 << isa<VarDecl>(VD) << VD; 687 } else if (!VD->isExternallyVisible()) { 688 // FIXME: We can promote this to an error. The function or variable can't 689 // be defined anywhere else, so the program must necessarily violate the 690 // one definition rule. 691 S.Diag(VD->getLocation(), diag::warn_undefined_internal) 692 << isa<VarDecl>(VD) << VD; 693 } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) { 694 (void)FD; 695 assert(FD->getMostRecentDecl()->isInlined() && 696 "used object requires definition but isn't inline or internal?"); 697 // FIXME: This is ill-formed; we should reject. 698 S.Diag(VD->getLocation(), diag::warn_undefined_inline) << VD; 699 } else { 700 assert(cast<VarDecl>(VD)->getMostRecentDecl()->isInline() && 701 "used var requires definition but isn't inline or internal?"); 702 S.Diag(VD->getLocation(), diag::err_undefined_inline_var) << VD; 703 } 704 if (UseLoc.isValid()) 705 S.Diag(UseLoc, diag::note_used_here); 706 } 707 708 S.UndefinedButUsed.clear(); 709 } 710 711 void Sema::LoadExternalWeakUndeclaredIdentifiers() { 712 if (!ExternalSource) 713 return; 714 715 SmallVector<std::pair<IdentifierInfo *, WeakInfo>, 4> WeakIDs; 716 ExternalSource->ReadWeakUndeclaredIdentifiers(WeakIDs); 717 for (auto &WeakID : WeakIDs) 718 WeakUndeclaredIdentifiers.insert(WeakID); 719 } 720 721 722 typedef llvm::DenseMap<const CXXRecordDecl*, bool> RecordCompleteMap; 723 724 /// \brief Returns true, if all methods and nested classes of the given 725 /// CXXRecordDecl are defined in this translation unit. 726 /// 727 /// Should only be called from ActOnEndOfTranslationUnit so that all 728 /// definitions are actually read. 729 static bool MethodsAndNestedClassesComplete(const CXXRecordDecl *RD, 730 RecordCompleteMap &MNCComplete) { 731 RecordCompleteMap::iterator Cache = MNCComplete.find(RD); 732 if (Cache != MNCComplete.end()) 733 return Cache->second; 734 if (!RD->isCompleteDefinition()) 735 return false; 736 bool Complete = true; 737 for (DeclContext::decl_iterator I = RD->decls_begin(), 738 E = RD->decls_end(); 739 I != E && Complete; ++I) { 740 if (const CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(*I)) 741 Complete = M->isDefined() || M->isDefaulted() || 742 (M->isPure() && !isa<CXXDestructorDecl>(M)); 743 else if (const FunctionTemplateDecl *F = dyn_cast<FunctionTemplateDecl>(*I)) 744 // If the template function is marked as late template parsed at this 745 // point, it has not been instantiated and therefore we have not 746 // performed semantic analysis on it yet, so we cannot know if the type 747 // can be considered complete. 748 Complete = !F->getTemplatedDecl()->isLateTemplateParsed() && 749 F->getTemplatedDecl()->isDefined(); 750 else if (const CXXRecordDecl *R = dyn_cast<CXXRecordDecl>(*I)) { 751 if (R->isInjectedClassName()) 752 continue; 753 if (R->hasDefinition()) 754 Complete = MethodsAndNestedClassesComplete(R->getDefinition(), 755 MNCComplete); 756 else 757 Complete = false; 758 } 759 } 760 MNCComplete[RD] = Complete; 761 return Complete; 762 } 763 764 /// \brief Returns true, if the given CXXRecordDecl is fully defined in this 765 /// translation unit, i.e. all methods are defined or pure virtual and all 766 /// friends, friend functions and nested classes are fully defined in this 767 /// translation unit. 768 /// 769 /// Should only be called from ActOnEndOfTranslationUnit so that all 770 /// definitions are actually read. 771 static bool IsRecordFullyDefined(const CXXRecordDecl *RD, 772 RecordCompleteMap &RecordsComplete, 773 RecordCompleteMap &MNCComplete) { 774 RecordCompleteMap::iterator Cache = RecordsComplete.find(RD); 775 if (Cache != RecordsComplete.end()) 776 return Cache->second; 777 bool Complete = MethodsAndNestedClassesComplete(RD, MNCComplete); 778 for (CXXRecordDecl::friend_iterator I = RD->friend_begin(), 779 E = RD->friend_end(); 780 I != E && Complete; ++I) { 781 // Check if friend classes and methods are complete. 782 if (TypeSourceInfo *TSI = (*I)->getFriendType()) { 783 // Friend classes are available as the TypeSourceInfo of the FriendDecl. 784 if (CXXRecordDecl *FriendD = TSI->getType()->getAsCXXRecordDecl()) 785 Complete = MethodsAndNestedClassesComplete(FriendD, MNCComplete); 786 else 787 Complete = false; 788 } else { 789 // Friend functions are available through the NamedDecl of FriendDecl. 790 if (const FunctionDecl *FD = 791 dyn_cast<FunctionDecl>((*I)->getFriendDecl())) 792 Complete = FD->isDefined(); 793 else 794 // This is a template friend, give up. 795 Complete = false; 796 } 797 } 798 RecordsComplete[RD] = Complete; 799 return Complete; 800 } 801 802 void Sema::emitAndClearUnusedLocalTypedefWarnings() { 803 if (ExternalSource) 804 ExternalSource->ReadUnusedLocalTypedefNameCandidates( 805 UnusedLocalTypedefNameCandidates); 806 for (const TypedefNameDecl *TD : UnusedLocalTypedefNameCandidates) { 807 if (TD->isReferenced()) 808 continue; 809 Diag(TD->getLocation(), diag::warn_unused_local_typedef) 810 << isa<TypeAliasDecl>(TD) << TD->getDeclName(); 811 } 812 UnusedLocalTypedefNameCandidates.clear(); 813 } 814 815 /// This is called before the very first declaration in the translation unit 816 /// is parsed. Note that the ASTContext may have already injected some 817 /// declarations. 818 void Sema::ActOnStartOfTranslationUnit() { 819 if (getLangOpts().ModulesTS) { 820 SourceLocation StartOfTU = 821 SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID()); 822 823 // We start in the global module; all those declarations are implicitly 824 // module-private (though they do not have module linkage). 825 auto &Map = PP.getHeaderSearchInfo().getModuleMap(); 826 auto *GlobalModule = Map.createGlobalModuleForInterfaceUnit(StartOfTU); 827 assert(GlobalModule && "module creation should not fail"); 828 829 // Enter the scope of the global module. 830 ModuleScopes.push_back({}); 831 ModuleScopes.back().Module = GlobalModule; 832 VisibleModules.setVisible(GlobalModule, StartOfTU); 833 834 // All declarations created from now on are owned by the global module. 835 auto *TU = Context.getTranslationUnitDecl(); 836 TU->setModuleOwnershipKind(Decl::ModuleOwnershipKind::Visible); 837 TU->setLocalOwningModule(GlobalModule); 838 } 839 } 840 841 /// ActOnEndOfTranslationUnit - This is called at the very end of the 842 /// translation unit when EOF is reached and all but the top-level scope is 843 /// popped. 844 void Sema::ActOnEndOfTranslationUnit() { 845 assert(DelayedDiagnostics.getCurrentPool() == nullptr 846 && "reached end of translation unit with a pool attached?"); 847 848 // If code completion is enabled, don't perform any end-of-translation-unit 849 // work. 850 if (PP.isCodeCompletionEnabled()) 851 return; 852 853 // Complete translation units and modules define vtables and perform implicit 854 // instantiations. PCH files do not. 855 if (TUKind != TU_Prefix) { 856 DiagnoseUseOfUnimplementedSelectors(); 857 858 // If DefinedUsedVTables ends up marking any virtual member functions it 859 // might lead to more pending template instantiations, which we then need 860 // to instantiate. 861 DefineUsedVTables(); 862 863 // C++: Perform implicit template instantiations. 864 // 865 // FIXME: When we perform these implicit instantiations, we do not 866 // carefully keep track of the point of instantiation (C++ [temp.point]). 867 // This means that name lookup that occurs within the template 868 // instantiation will always happen at the end of the translation unit, 869 // so it will find some names that are not required to be found. This is 870 // valid, but we could do better by diagnosing if an instantiation uses a 871 // name that was not visible at its first point of instantiation. 872 if (ExternalSource) { 873 // Load pending instantiations from the external source. 874 SmallVector<PendingImplicitInstantiation, 4> Pending; 875 ExternalSource->ReadPendingInstantiations(Pending); 876 for (auto PII : Pending) 877 if (auto Func = dyn_cast<FunctionDecl>(PII.first)) 878 Func->setInstantiationIsPending(true); 879 PendingInstantiations.insert(PendingInstantiations.begin(), 880 Pending.begin(), Pending.end()); 881 } 882 PerformPendingInstantiations(); 883 884 if (LateTemplateParserCleanup) 885 LateTemplateParserCleanup(OpaqueParser); 886 887 CheckDelayedMemberExceptionSpecs(); 888 } 889 890 DiagnoseUnterminatedPragmaPack(); 891 DiagnoseUnterminatedPragmaAttribute(); 892 893 // All delayed member exception specs should be checked or we end up accepting 894 // incompatible declarations. 895 // FIXME: This is wrong for TUKind == TU_Prefix. In that case, we need to 896 // write out the lists to the AST file (if any). 897 assert(DelayedDefaultedMemberExceptionSpecs.empty()); 898 assert(DelayedExceptionSpecChecks.empty()); 899 900 // All dllexport classes should have been processed already. 901 assert(DelayedDllExportClasses.empty()); 902 903 // Remove file scoped decls that turned out to be used. 904 UnusedFileScopedDecls.erase( 905 std::remove_if(UnusedFileScopedDecls.begin(nullptr, true), 906 UnusedFileScopedDecls.end(), 907 [this](const DeclaratorDecl *DD) { 908 return ShouldRemoveFromUnused(this, DD); 909 }), 910 UnusedFileScopedDecls.end()); 911 912 if (TUKind == TU_Prefix) { 913 // Translation unit prefixes don't need any of the checking below. 914 if (!PP.isIncrementalProcessingEnabled()) 915 TUScope = nullptr; 916 return; 917 } 918 919 // Check for #pragma weak identifiers that were never declared 920 LoadExternalWeakUndeclaredIdentifiers(); 921 for (auto WeakID : WeakUndeclaredIdentifiers) { 922 if (WeakID.second.getUsed()) 923 continue; 924 925 Decl *PrevDecl = LookupSingleName(TUScope, WeakID.first, SourceLocation(), 926 LookupOrdinaryName); 927 if (PrevDecl != nullptr && 928 !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl))) 929 Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type) 930 << "'weak'" << ExpectedVariableOrFunction; 931 else 932 Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared) 933 << WeakID.first; 934 } 935 936 if (LangOpts.CPlusPlus11 && 937 !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation())) 938 CheckDelegatingCtorCycles(); 939 940 if (!Diags.hasErrorOccurred()) { 941 if (ExternalSource) 942 ExternalSource->ReadUndefinedButUsed(UndefinedButUsed); 943 checkUndefinedButUsed(*this); 944 } 945 946 if (TUKind == TU_Module) { 947 // If we are building a module interface unit, we need to have seen the 948 // module declaration by now. 949 if (getLangOpts().getCompilingModule() == 950 LangOptions::CMK_ModuleInterface && 951 ModuleScopes.back().Module->Kind != Module::ModuleInterfaceUnit) { 952 // FIXME: Make a better guess as to where to put the module declaration. 953 Diag(getSourceManager().getLocForStartOfFile( 954 getSourceManager().getMainFileID()), 955 diag::err_module_declaration_missing); 956 } 957 958 // If we are building a module, resolve all of the exported declarations 959 // now. 960 if (Module *CurrentModule = PP.getCurrentModule()) { 961 ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap(); 962 963 SmallVector<Module *, 2> Stack; 964 Stack.push_back(CurrentModule); 965 while (!Stack.empty()) { 966 Module *Mod = Stack.pop_back_val(); 967 968 // Resolve the exported declarations and conflicts. 969 // FIXME: Actually complain, once we figure out how to teach the 970 // diagnostic client to deal with complaints in the module map at this 971 // point. 972 ModMap.resolveExports(Mod, /*Complain=*/false); 973 ModMap.resolveUses(Mod, /*Complain=*/false); 974 ModMap.resolveConflicts(Mod, /*Complain=*/false); 975 976 // Queue the submodules, so their exports will also be resolved. 977 Stack.append(Mod->submodule_begin(), Mod->submodule_end()); 978 } 979 } 980 981 // Warnings emitted in ActOnEndOfTranslationUnit() should be emitted for 982 // modules when they are built, not every time they are used. 983 emitAndClearUnusedLocalTypedefWarnings(); 984 985 // Modules don't need any of the checking below. 986 if (!PP.isIncrementalProcessingEnabled()) 987 TUScope = nullptr; 988 return; 989 } 990 991 // C99 6.9.2p2: 992 // A declaration of an identifier for an object that has file 993 // scope without an initializer, and without a storage-class 994 // specifier or with the storage-class specifier static, 995 // constitutes a tentative definition. If a translation unit 996 // contains one or more tentative definitions for an identifier, 997 // and the translation unit contains no external definition for 998 // that identifier, then the behavior is exactly as if the 999 // translation unit contains a file scope declaration of that 1000 // identifier, with the composite type as of the end of the 1001 // translation unit, with an initializer equal to 0. 1002 llvm::SmallSet<VarDecl *, 32> Seen; 1003 for (TentativeDefinitionsType::iterator 1004 T = TentativeDefinitions.begin(ExternalSource), 1005 TEnd = TentativeDefinitions.end(); 1006 T != TEnd; ++T) 1007 { 1008 VarDecl *VD = (*T)->getActingDefinition(); 1009 1010 // If the tentative definition was completed, getActingDefinition() returns 1011 // null. If we've already seen this variable before, insert()'s second 1012 // return value is false. 1013 if (!VD || VD->isInvalidDecl() || !Seen.insert(VD).second) 1014 continue; 1015 1016 if (const IncompleteArrayType *ArrayT 1017 = Context.getAsIncompleteArrayType(VD->getType())) { 1018 // Set the length of the array to 1 (C99 6.9.2p5). 1019 Diag(VD->getLocation(), diag::warn_tentative_incomplete_array); 1020 llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true); 1021 QualType T = Context.getConstantArrayType(ArrayT->getElementType(), 1022 One, ArrayType::Normal, 0); 1023 VD->setType(T); 1024 } else if (RequireCompleteType(VD->getLocation(), VD->getType(), 1025 diag::err_tentative_def_incomplete_type)) 1026 VD->setInvalidDecl(); 1027 1028 // No initialization is performed for a tentative definition. 1029 CheckCompleteVariableDeclaration(VD); 1030 1031 // Notify the consumer that we've completed a tentative definition. 1032 if (!VD->isInvalidDecl()) 1033 Consumer.CompleteTentativeDefinition(VD); 1034 1035 } 1036 1037 // If there were errors, disable 'unused' warnings since they will mostly be 1038 // noise. 1039 if (!Diags.hasErrorOccurred()) { 1040 // Output warning for unused file scoped decls. 1041 for (UnusedFileScopedDeclsType::iterator 1042 I = UnusedFileScopedDecls.begin(ExternalSource), 1043 E = UnusedFileScopedDecls.end(); I != E; ++I) { 1044 if (ShouldRemoveFromUnused(this, *I)) 1045 continue; 1046 1047 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) { 1048 const FunctionDecl *DiagD; 1049 if (!FD->hasBody(DiagD)) 1050 DiagD = FD; 1051 if (DiagD->isDeleted()) 1052 continue; // Deleted functions are supposed to be unused. 1053 if (DiagD->isReferenced()) { 1054 if (isa<CXXMethodDecl>(DiagD)) 1055 Diag(DiagD->getLocation(), diag::warn_unneeded_member_function) 1056 << DiagD->getDeclName(); 1057 else { 1058 if (FD->getStorageClass() == SC_Static && 1059 !FD->isInlineSpecified() && 1060 !SourceMgr.isInMainFile( 1061 SourceMgr.getExpansionLoc(FD->getLocation()))) 1062 Diag(DiagD->getLocation(), 1063 diag::warn_unneeded_static_internal_decl) 1064 << DiagD->getDeclName(); 1065 else 1066 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) 1067 << /*function*/0 << DiagD->getDeclName(); 1068 } 1069 } else { 1070 if (FD->getDescribedFunctionTemplate()) 1071 Diag(DiagD->getLocation(), diag::warn_unused_template) 1072 << /*function*/0 << DiagD->getDeclName(); 1073 else 1074 Diag(DiagD->getLocation(), 1075 isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function 1076 : diag::warn_unused_function) 1077 << DiagD->getDeclName(); 1078 } 1079 } else { 1080 const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition(); 1081 if (!DiagD) 1082 DiagD = cast<VarDecl>(*I); 1083 if (DiagD->isReferenced()) { 1084 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) 1085 << /*variable*/1 << DiagD->getDeclName(); 1086 } else if (DiagD->getType().isConstQualified()) { 1087 const SourceManager &SM = SourceMgr; 1088 if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) || 1089 !PP.getLangOpts().IsHeaderFile) 1090 Diag(DiagD->getLocation(), diag::warn_unused_const_variable) 1091 << DiagD->getDeclName(); 1092 } else { 1093 if (DiagD->getDescribedVarTemplate()) 1094 Diag(DiagD->getLocation(), diag::warn_unused_template) 1095 << /*variable*/1 << DiagD->getDeclName(); 1096 else 1097 Diag(DiagD->getLocation(), diag::warn_unused_variable) 1098 << DiagD->getDeclName(); 1099 } 1100 } 1101 } 1102 1103 emitAndClearUnusedLocalTypedefWarnings(); 1104 } 1105 1106 if (!Diags.isIgnored(diag::warn_unused_private_field, SourceLocation())) { 1107 RecordCompleteMap RecordsComplete; 1108 RecordCompleteMap MNCComplete; 1109 for (NamedDeclSetType::iterator I = UnusedPrivateFields.begin(), 1110 E = UnusedPrivateFields.end(); I != E; ++I) { 1111 const NamedDecl *D = *I; 1112 const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D->getDeclContext()); 1113 if (RD && !RD->isUnion() && 1114 IsRecordFullyDefined(RD, RecordsComplete, MNCComplete)) { 1115 Diag(D->getLocation(), diag::warn_unused_private_field) 1116 << D->getDeclName(); 1117 } 1118 } 1119 } 1120 1121 if (!Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation())) { 1122 if (ExternalSource) 1123 ExternalSource->ReadMismatchingDeleteExpressions(DeleteExprs); 1124 for (const auto &DeletedFieldInfo : DeleteExprs) { 1125 for (const auto &DeleteExprLoc : DeletedFieldInfo.second) { 1126 AnalyzeDeleteExprMismatch(DeletedFieldInfo.first, DeleteExprLoc.first, 1127 DeleteExprLoc.second); 1128 } 1129 } 1130 } 1131 1132 // Check we've noticed that we're no longer parsing the initializer for every 1133 // variable. If we miss cases, then at best we have a performance issue and 1134 // at worst a rejects-valid bug. 1135 assert(ParsingInitForAutoVars.empty() && 1136 "Didn't unmark var as having its initializer parsed"); 1137 1138 if (!PP.isIncrementalProcessingEnabled()) 1139 TUScope = nullptr; 1140 } 1141 1142 1143 //===----------------------------------------------------------------------===// 1144 // Helper functions. 1145 //===----------------------------------------------------------------------===// 1146 1147 DeclContext *Sema::getFunctionLevelDeclContext() { 1148 DeclContext *DC = CurContext; 1149 1150 while (true) { 1151 if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC)) { 1152 DC = DC->getParent(); 1153 } else if (isa<CXXMethodDecl>(DC) && 1154 cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call && 1155 cast<CXXRecordDecl>(DC->getParent())->isLambda()) { 1156 DC = DC->getParent()->getParent(); 1157 } 1158 else break; 1159 } 1160 1161 return DC; 1162 } 1163 1164 /// getCurFunctionDecl - If inside of a function body, this returns a pointer 1165 /// to the function decl for the function being parsed. If we're currently 1166 /// in a 'block', this returns the containing context. 1167 FunctionDecl *Sema::getCurFunctionDecl() { 1168 DeclContext *DC = getFunctionLevelDeclContext(); 1169 return dyn_cast<FunctionDecl>(DC); 1170 } 1171 1172 ObjCMethodDecl *Sema::getCurMethodDecl() { 1173 DeclContext *DC = getFunctionLevelDeclContext(); 1174 while (isa<RecordDecl>(DC)) 1175 DC = DC->getParent(); 1176 return dyn_cast<ObjCMethodDecl>(DC); 1177 } 1178 1179 NamedDecl *Sema::getCurFunctionOrMethodDecl() { 1180 DeclContext *DC = getFunctionLevelDeclContext(); 1181 if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC)) 1182 return cast<NamedDecl>(DC); 1183 return nullptr; 1184 } 1185 1186 void Sema::EmitCurrentDiagnostic(unsigned DiagID) { 1187 // FIXME: It doesn't make sense to me that DiagID is an incoming argument here 1188 // and yet we also use the current diag ID on the DiagnosticsEngine. This has 1189 // been made more painfully obvious by the refactor that introduced this 1190 // function, but it is possible that the incoming argument can be 1191 // eliminated. If it truly cannot be (for example, there is some reentrancy 1192 // issue I am not seeing yet), then there should at least be a clarifying 1193 // comment somewhere. 1194 if (Optional<TemplateDeductionInfo*> Info = isSFINAEContext()) { 1195 switch (DiagnosticIDs::getDiagnosticSFINAEResponse( 1196 Diags.getCurrentDiagID())) { 1197 case DiagnosticIDs::SFINAE_Report: 1198 // We'll report the diagnostic below. 1199 break; 1200 1201 case DiagnosticIDs::SFINAE_SubstitutionFailure: 1202 // Count this failure so that we know that template argument deduction 1203 // has failed. 1204 ++NumSFINAEErrors; 1205 1206 // Make a copy of this suppressed diagnostic and store it with the 1207 // template-deduction information. 1208 if (*Info && !(*Info)->hasSFINAEDiagnostic()) { 1209 Diagnostic DiagInfo(&Diags); 1210 (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(), 1211 PartialDiagnostic(DiagInfo, Context.getDiagAllocator())); 1212 } 1213 1214 Diags.setLastDiagnosticIgnored(); 1215 Diags.Clear(); 1216 return; 1217 1218 case DiagnosticIDs::SFINAE_AccessControl: { 1219 // Per C++ Core Issue 1170, access control is part of SFINAE. 1220 // Additionally, the AccessCheckingSFINAE flag can be used to temporarily 1221 // make access control a part of SFINAE for the purposes of checking 1222 // type traits. 1223 if (!AccessCheckingSFINAE && !getLangOpts().CPlusPlus11) 1224 break; 1225 1226 SourceLocation Loc = Diags.getCurrentDiagLoc(); 1227 1228 // Suppress this diagnostic. 1229 ++NumSFINAEErrors; 1230 1231 // Make a copy of this suppressed diagnostic and store it with the 1232 // template-deduction information. 1233 if (*Info && !(*Info)->hasSFINAEDiagnostic()) { 1234 Diagnostic DiagInfo(&Diags); 1235 (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(), 1236 PartialDiagnostic(DiagInfo, Context.getDiagAllocator())); 1237 } 1238 1239 Diags.setLastDiagnosticIgnored(); 1240 Diags.Clear(); 1241 1242 // Now the diagnostic state is clear, produce a C++98 compatibility 1243 // warning. 1244 Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control); 1245 1246 // The last diagnostic which Sema produced was ignored. Suppress any 1247 // notes attached to it. 1248 Diags.setLastDiagnosticIgnored(); 1249 return; 1250 } 1251 1252 case DiagnosticIDs::SFINAE_Suppress: 1253 // Make a copy of this suppressed diagnostic and store it with the 1254 // template-deduction information; 1255 if (*Info) { 1256 Diagnostic DiagInfo(&Diags); 1257 (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(), 1258 PartialDiagnostic(DiagInfo, Context.getDiagAllocator())); 1259 } 1260 1261 // Suppress this diagnostic. 1262 Diags.setLastDiagnosticIgnored(); 1263 Diags.Clear(); 1264 return; 1265 } 1266 } 1267 1268 // Set up the context's printing policy based on our current state. 1269 Context.setPrintingPolicy(getPrintingPolicy()); 1270 1271 // Emit the diagnostic. 1272 if (!Diags.EmitCurrentDiagnostic()) 1273 return; 1274 1275 // If this is not a note, and we're in a template instantiation 1276 // that is different from the last template instantiation where 1277 // we emitted an error, print a template instantiation 1278 // backtrace. 1279 if (!DiagnosticIDs::isBuiltinNote(DiagID)) 1280 PrintContextStack(); 1281 } 1282 1283 Sema::SemaDiagnosticBuilder 1284 Sema::Diag(SourceLocation Loc, const PartialDiagnostic& PD) { 1285 SemaDiagnosticBuilder Builder(Diag(Loc, PD.getDiagID())); 1286 PD.Emit(Builder); 1287 1288 return Builder; 1289 } 1290 1291 /// \brief Looks through the macro-expansion chain for the given 1292 /// location, looking for a macro expansion with the given name. 1293 /// If one is found, returns true and sets the location to that 1294 /// expansion loc. 1295 bool Sema::findMacroSpelling(SourceLocation &locref, StringRef name) { 1296 SourceLocation loc = locref; 1297 if (!loc.isMacroID()) return false; 1298 1299 // There's no good way right now to look at the intermediate 1300 // expansions, so just jump to the expansion location. 1301 loc = getSourceManager().getExpansionLoc(loc); 1302 1303 // If that's written with the name, stop here. 1304 SmallVector<char, 16> buffer; 1305 if (getPreprocessor().getSpelling(loc, buffer) == name) { 1306 locref = loc; 1307 return true; 1308 } 1309 return false; 1310 } 1311 1312 /// \brief Determines the active Scope associated with the given declaration 1313 /// context. 1314 /// 1315 /// This routine maps a declaration context to the active Scope object that 1316 /// represents that declaration context in the parser. It is typically used 1317 /// from "scope-less" code (e.g., template instantiation, lazy creation of 1318 /// declarations) that injects a name for name-lookup purposes and, therefore, 1319 /// must update the Scope. 1320 /// 1321 /// \returns The scope corresponding to the given declaraion context, or NULL 1322 /// if no such scope is open. 1323 Scope *Sema::getScopeForContext(DeclContext *Ctx) { 1324 1325 if (!Ctx) 1326 return nullptr; 1327 1328 Ctx = Ctx->getPrimaryContext(); 1329 for (Scope *S = getCurScope(); S; S = S->getParent()) { 1330 // Ignore scopes that cannot have declarations. This is important for 1331 // out-of-line definitions of static class members. 1332 if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope)) 1333 if (DeclContext *Entity = S->getEntity()) 1334 if (Ctx == Entity->getPrimaryContext()) 1335 return S; 1336 } 1337 1338 return nullptr; 1339 } 1340 1341 /// \brief Enter a new function scope 1342 void Sema::PushFunctionScope() { 1343 if (FunctionScopes.size() == 1) { 1344 // Use the "top" function scope rather than having to allocate 1345 // memory for a new scope. 1346 FunctionScopes.back()->Clear(); 1347 FunctionScopes.push_back(FunctionScopes.back()); 1348 if (LangOpts.OpenMP) 1349 pushOpenMPFunctionRegion(); 1350 return; 1351 } 1352 1353 FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics())); 1354 if (LangOpts.OpenMP) 1355 pushOpenMPFunctionRegion(); 1356 } 1357 1358 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) { 1359 FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(), 1360 BlockScope, Block)); 1361 } 1362 1363 LambdaScopeInfo *Sema::PushLambdaScope() { 1364 LambdaScopeInfo *const LSI = new LambdaScopeInfo(getDiagnostics()); 1365 FunctionScopes.push_back(LSI); 1366 return LSI; 1367 } 1368 1369 void Sema::RecordParsingTemplateParameterDepth(unsigned Depth) { 1370 if (LambdaScopeInfo *const LSI = getCurLambda()) { 1371 LSI->AutoTemplateParameterDepth = Depth; 1372 return; 1373 } 1374 llvm_unreachable( 1375 "Remove assertion if intentionally called in a non-lambda context."); 1376 } 1377 1378 void Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP, 1379 const Decl *D, const BlockExpr *blkExpr) { 1380 FunctionScopeInfo *Scope = FunctionScopes.pop_back_val(); 1381 assert(!FunctionScopes.empty() && "mismatched push/pop!"); 1382 1383 if (LangOpts.OpenMP) 1384 popOpenMPFunctionRegion(Scope); 1385 1386 // Issue any analysis-based warnings. 1387 if (WP && D) 1388 AnalysisWarnings.IssueWarnings(*WP, Scope, D, blkExpr); 1389 else 1390 for (const auto &PUD : Scope->PossiblyUnreachableDiags) 1391 Diag(PUD.Loc, PUD.PD); 1392 1393 if (FunctionScopes.back() != Scope) 1394 delete Scope; 1395 } 1396 1397 void Sema::PushCompoundScope(bool IsStmtExpr) { 1398 getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr)); 1399 } 1400 1401 void Sema::PopCompoundScope() { 1402 FunctionScopeInfo *CurFunction = getCurFunction(); 1403 assert(!CurFunction->CompoundScopes.empty() && "mismatched push/pop"); 1404 1405 CurFunction->CompoundScopes.pop_back(); 1406 } 1407 1408 /// \brief Determine whether any errors occurred within this function/method/ 1409 /// block. 1410 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const { 1411 return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred(); 1412 } 1413 1414 BlockScopeInfo *Sema::getCurBlock() { 1415 if (FunctionScopes.empty()) 1416 return nullptr; 1417 1418 auto CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back()); 1419 if (CurBSI && CurBSI->TheDecl && 1420 !CurBSI->TheDecl->Encloses(CurContext)) { 1421 // We have switched contexts due to template instantiation. 1422 assert(!CodeSynthesisContexts.empty()); 1423 return nullptr; 1424 } 1425 1426 return CurBSI; 1427 } 1428 1429 LambdaScopeInfo *Sema::getCurLambda(bool IgnoreNonLambdaCapturingScope) { 1430 if (FunctionScopes.empty()) 1431 return nullptr; 1432 1433 auto I = FunctionScopes.rbegin(); 1434 if (IgnoreNonLambdaCapturingScope) { 1435 auto E = FunctionScopes.rend(); 1436 while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I)) 1437 ++I; 1438 if (I == E) 1439 return nullptr; 1440 } 1441 auto *CurLSI = dyn_cast<LambdaScopeInfo>(*I); 1442 if (CurLSI && CurLSI->Lambda && 1443 !CurLSI->Lambda->Encloses(CurContext)) { 1444 // We have switched contexts due to template instantiation. 1445 assert(!CodeSynthesisContexts.empty()); 1446 return nullptr; 1447 } 1448 1449 return CurLSI; 1450 } 1451 // We have a generic lambda if we parsed auto parameters, or we have 1452 // an associated template parameter list. 1453 LambdaScopeInfo *Sema::getCurGenericLambda() { 1454 if (LambdaScopeInfo *LSI = getCurLambda()) { 1455 return (LSI->AutoTemplateParams.size() || 1456 LSI->GLTemplateParameterList) ? LSI : nullptr; 1457 } 1458 return nullptr; 1459 } 1460 1461 1462 void Sema::ActOnComment(SourceRange Comment) { 1463 if (!LangOpts.RetainCommentsFromSystemHeaders && 1464 SourceMgr.isInSystemHeader(Comment.getBegin())) 1465 return; 1466 RawComment RC(SourceMgr, Comment, false, 1467 LangOpts.CommentOpts.ParseAllComments); 1468 if (RC.isAlmostTrailingComment()) { 1469 SourceRange MagicMarkerRange(Comment.getBegin(), 1470 Comment.getBegin().getLocWithOffset(3)); 1471 StringRef MagicMarkerText; 1472 switch (RC.getKind()) { 1473 case RawComment::RCK_OrdinaryBCPL: 1474 MagicMarkerText = "///<"; 1475 break; 1476 case RawComment::RCK_OrdinaryC: 1477 MagicMarkerText = "/**<"; 1478 break; 1479 default: 1480 llvm_unreachable("if this is an almost Doxygen comment, " 1481 "it should be ordinary"); 1482 } 1483 Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) << 1484 FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText); 1485 } 1486 Context.addComment(RC); 1487 } 1488 1489 // Pin this vtable to this file. 1490 ExternalSemaSource::~ExternalSemaSource() {} 1491 1492 void ExternalSemaSource::ReadMethodPool(Selector Sel) { } 1493 void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { } 1494 1495 void ExternalSemaSource::ReadKnownNamespaces( 1496 SmallVectorImpl<NamespaceDecl *> &Namespaces) { 1497 } 1498 1499 void ExternalSemaSource::ReadUndefinedButUsed( 1500 llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {} 1501 1502 void ExternalSemaSource::ReadMismatchingDeleteExpressions(llvm::MapVector< 1503 FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &) {} 1504 1505 void PrettyDeclStackTraceEntry::print(raw_ostream &OS) const { 1506 SourceLocation Loc = this->Loc; 1507 if (!Loc.isValid() && TheDecl) Loc = TheDecl->getLocation(); 1508 if (Loc.isValid()) { 1509 Loc.print(OS, S.getSourceManager()); 1510 OS << ": "; 1511 } 1512 OS << Message; 1513 1514 if (auto *ND = dyn_cast_or_null<NamedDecl>(TheDecl)) { 1515 OS << " '"; 1516 ND->getNameForDiagnostic(OS, ND->getASTContext().getPrintingPolicy(), true); 1517 OS << "'"; 1518 } 1519 1520 OS << '\n'; 1521 } 1522 1523 /// \brief Figure out if an expression could be turned into a call. 1524 /// 1525 /// Use this when trying to recover from an error where the programmer may have 1526 /// written just the name of a function instead of actually calling it. 1527 /// 1528 /// \param E - The expression to examine. 1529 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call 1530 /// with no arguments, this parameter is set to the type returned by such a 1531 /// call; otherwise, it is set to an empty QualType. 1532 /// \param OverloadSet - If the expression is an overloaded function 1533 /// name, this parameter is populated with the decls of the various overloads. 1534 bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy, 1535 UnresolvedSetImpl &OverloadSet) { 1536 ZeroArgCallReturnTy = QualType(); 1537 OverloadSet.clear(); 1538 1539 const OverloadExpr *Overloads = nullptr; 1540 bool IsMemExpr = false; 1541 if (E.getType() == Context.OverloadTy) { 1542 OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E)); 1543 1544 // Ignore overloads that are pointer-to-member constants. 1545 if (FR.HasFormOfMemberPointer) 1546 return false; 1547 1548 Overloads = FR.Expression; 1549 } else if (E.getType() == Context.BoundMemberTy) { 1550 Overloads = dyn_cast<UnresolvedMemberExpr>(E.IgnoreParens()); 1551 IsMemExpr = true; 1552 } 1553 1554 bool Ambiguous = false; 1555 1556 if (Overloads) { 1557 for (OverloadExpr::decls_iterator it = Overloads->decls_begin(), 1558 DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) { 1559 OverloadSet.addDecl(*it); 1560 1561 // Check whether the function is a non-template, non-member which takes no 1562 // arguments. 1563 if (IsMemExpr) 1564 continue; 1565 if (const FunctionDecl *OverloadDecl 1566 = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) { 1567 if (OverloadDecl->getMinRequiredArguments() == 0) { 1568 if (!ZeroArgCallReturnTy.isNull() && !Ambiguous) { 1569 ZeroArgCallReturnTy = QualType(); 1570 Ambiguous = true; 1571 } else 1572 ZeroArgCallReturnTy = OverloadDecl->getReturnType(); 1573 } 1574 } 1575 } 1576 1577 // If it's not a member, use better machinery to try to resolve the call 1578 if (!IsMemExpr) 1579 return !ZeroArgCallReturnTy.isNull(); 1580 } 1581 1582 // Attempt to call the member with no arguments - this will correctly handle 1583 // member templates with defaults/deduction of template arguments, overloads 1584 // with default arguments, etc. 1585 if (IsMemExpr && !E.isTypeDependent()) { 1586 bool Suppress = getDiagnostics().getSuppressAllDiagnostics(); 1587 getDiagnostics().setSuppressAllDiagnostics(true); 1588 ExprResult R = BuildCallToMemberFunction(nullptr, &E, SourceLocation(), 1589 None, SourceLocation()); 1590 getDiagnostics().setSuppressAllDiagnostics(Suppress); 1591 if (R.isUsable()) { 1592 ZeroArgCallReturnTy = R.get()->getType(); 1593 return true; 1594 } 1595 return false; 1596 } 1597 1598 if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) { 1599 if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) { 1600 if (Fun->getMinRequiredArguments() == 0) 1601 ZeroArgCallReturnTy = Fun->getReturnType(); 1602 return true; 1603 } 1604 } 1605 1606 // We don't have an expression that's convenient to get a FunctionDecl from, 1607 // but we can at least check if the type is "function of 0 arguments". 1608 QualType ExprTy = E.getType(); 1609 const FunctionType *FunTy = nullptr; 1610 QualType PointeeTy = ExprTy->getPointeeType(); 1611 if (!PointeeTy.isNull()) 1612 FunTy = PointeeTy->getAs<FunctionType>(); 1613 if (!FunTy) 1614 FunTy = ExprTy->getAs<FunctionType>(); 1615 1616 if (const FunctionProtoType *FPT = 1617 dyn_cast_or_null<FunctionProtoType>(FunTy)) { 1618 if (FPT->getNumParams() == 0) 1619 ZeroArgCallReturnTy = FunTy->getReturnType(); 1620 return true; 1621 } 1622 return false; 1623 } 1624 1625 /// \brief Give notes for a set of overloads. 1626 /// 1627 /// A companion to tryExprAsCall. In cases when the name that the programmer 1628 /// wrote was an overloaded function, we may be able to make some guesses about 1629 /// plausible overloads based on their return types; such guesses can be handed 1630 /// off to this method to be emitted as notes. 1631 /// 1632 /// \param Overloads - The overloads to note. 1633 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to 1634 /// -fshow-overloads=best, this is the location to attach to the note about too 1635 /// many candidates. Typically this will be the location of the original 1636 /// ill-formed expression. 1637 static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, 1638 const SourceLocation FinalNoteLoc) { 1639 int ShownOverloads = 0; 1640 int SuppressedOverloads = 0; 1641 for (UnresolvedSetImpl::iterator It = Overloads.begin(), 1642 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 1643 // FIXME: Magic number for max shown overloads stolen from 1644 // OverloadCandidateSet::NoteCandidates. 1645 if (ShownOverloads >= 4 && S.Diags.getShowOverloads() == Ovl_Best) { 1646 ++SuppressedOverloads; 1647 continue; 1648 } 1649 1650 NamedDecl *Fn = (*It)->getUnderlyingDecl(); 1651 // Don't print overloads for non-default multiversioned functions. 1652 if (const auto *FD = Fn->getAsFunction()) { 1653 if (FD->isMultiVersion() && 1654 !FD->getAttr<TargetAttr>()->isDefaultVersion()) 1655 continue; 1656 } 1657 S.Diag(Fn->getLocation(), diag::note_possible_target_of_call); 1658 ++ShownOverloads; 1659 } 1660 1661 if (SuppressedOverloads) 1662 S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates) 1663 << SuppressedOverloads; 1664 } 1665 1666 static void notePlausibleOverloads(Sema &S, SourceLocation Loc, 1667 const UnresolvedSetImpl &Overloads, 1668 bool (*IsPlausibleResult)(QualType)) { 1669 if (!IsPlausibleResult) 1670 return noteOverloads(S, Overloads, Loc); 1671 1672 UnresolvedSet<2> PlausibleOverloads; 1673 for (OverloadExpr::decls_iterator It = Overloads.begin(), 1674 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 1675 const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It); 1676 QualType OverloadResultTy = OverloadDecl->getReturnType(); 1677 if (IsPlausibleResult(OverloadResultTy)) 1678 PlausibleOverloads.addDecl(It.getDecl()); 1679 } 1680 noteOverloads(S, PlausibleOverloads, Loc); 1681 } 1682 1683 /// Determine whether the given expression can be called by just 1684 /// putting parentheses after it. Notably, expressions with unary 1685 /// operators can't be because the unary operator will start parsing 1686 /// outside the call. 1687 static bool IsCallableWithAppend(Expr *E) { 1688 E = E->IgnoreImplicit(); 1689 return (!isa<CStyleCastExpr>(E) && 1690 !isa<UnaryOperator>(E) && 1691 !isa<BinaryOperator>(E) && 1692 !isa<CXXOperatorCallExpr>(E)); 1693 } 1694 1695 bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD, 1696 bool ForceComplain, 1697 bool (*IsPlausibleResult)(QualType)) { 1698 SourceLocation Loc = E.get()->getExprLoc(); 1699 SourceRange Range = E.get()->getSourceRange(); 1700 1701 QualType ZeroArgCallTy; 1702 UnresolvedSet<4> Overloads; 1703 if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) && 1704 !ZeroArgCallTy.isNull() && 1705 (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) { 1706 // At this point, we know E is potentially callable with 0 1707 // arguments and that it returns something of a reasonable type, 1708 // so we can emit a fixit and carry on pretending that E was 1709 // actually a CallExpr. 1710 SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd()); 1711 Diag(Loc, PD) 1712 << /*zero-arg*/ 1 << Range 1713 << (IsCallableWithAppend(E.get()) 1714 ? FixItHint::CreateInsertion(ParenInsertionLoc, "()") 1715 : FixItHint()); 1716 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 1717 1718 // FIXME: Try this before emitting the fixit, and suppress diagnostics 1719 // while doing so. 1720 E = ActOnCallExpr(nullptr, E.get(), Range.getEnd(), None, 1721 Range.getEnd().getLocWithOffset(1)); 1722 return true; 1723 } 1724 1725 if (!ForceComplain) return false; 1726 1727 Diag(Loc, PD) << /*not zero-arg*/ 0 << Range; 1728 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 1729 E = ExprError(); 1730 return true; 1731 } 1732 1733 IdentifierInfo *Sema::getSuperIdentifier() const { 1734 if (!Ident_super) 1735 Ident_super = &Context.Idents.get("super"); 1736 return Ident_super; 1737 } 1738 1739 IdentifierInfo *Sema::getFloat128Identifier() const { 1740 if (!Ident___float128) 1741 Ident___float128 = &Context.Idents.get("__float128"); 1742 return Ident___float128; 1743 } 1744 1745 void Sema::PushCapturedRegionScope(Scope *S, CapturedDecl *CD, RecordDecl *RD, 1746 CapturedRegionKind K) { 1747 CapturingScopeInfo *CSI = new CapturedRegionScopeInfo( 1748 getDiagnostics(), S, CD, RD, CD->getContextParam(), K, 1749 (getLangOpts().OpenMP && K == CR_OpenMP) ? getOpenMPNestingLevel() : 0); 1750 CSI->ReturnType = Context.VoidTy; 1751 FunctionScopes.push_back(CSI); 1752 } 1753 1754 CapturedRegionScopeInfo *Sema::getCurCapturedRegion() { 1755 if (FunctionScopes.empty()) 1756 return nullptr; 1757 1758 return dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back()); 1759 } 1760 1761 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> & 1762 Sema::getMismatchingDeleteExpressions() const { 1763 return DeleteExprs; 1764 } 1765 1766 void Sema::setOpenCLExtensionForType(QualType T, llvm::StringRef ExtStr) { 1767 if (ExtStr.empty()) 1768 return; 1769 llvm::SmallVector<StringRef, 1> Exts; 1770 ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false); 1771 auto CanT = T.getCanonicalType().getTypePtr(); 1772 for (auto &I : Exts) 1773 OpenCLTypeExtMap[CanT].insert(I.str()); 1774 } 1775 1776 void Sema::setOpenCLExtensionForDecl(Decl *FD, StringRef ExtStr) { 1777 llvm::SmallVector<StringRef, 1> Exts; 1778 ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false); 1779 if (Exts.empty()) 1780 return; 1781 for (auto &I : Exts) 1782 OpenCLDeclExtMap[FD].insert(I.str()); 1783 } 1784 1785 void Sema::setCurrentOpenCLExtensionForType(QualType T) { 1786 if (CurrOpenCLExtension.empty()) 1787 return; 1788 setOpenCLExtensionForType(T, CurrOpenCLExtension); 1789 } 1790 1791 void Sema::setCurrentOpenCLExtensionForDecl(Decl *D) { 1792 if (CurrOpenCLExtension.empty()) 1793 return; 1794 setOpenCLExtensionForDecl(D, CurrOpenCLExtension); 1795 } 1796 1797 bool Sema::isOpenCLDisabledDecl(Decl *FD) { 1798 auto Loc = OpenCLDeclExtMap.find(FD); 1799 if (Loc == OpenCLDeclExtMap.end()) 1800 return false; 1801 for (auto &I : Loc->second) { 1802 if (!getOpenCLOptions().isEnabled(I)) 1803 return true; 1804 } 1805 return false; 1806 } 1807 1808 template <typename T, typename DiagLocT, typename DiagInfoT, typename MapT> 1809 bool Sema::checkOpenCLDisabledTypeOrDecl(T D, DiagLocT DiagLoc, 1810 DiagInfoT DiagInfo, MapT &Map, 1811 unsigned Selector, 1812 SourceRange SrcRange) { 1813 auto Loc = Map.find(D); 1814 if (Loc == Map.end()) 1815 return false; 1816 bool Disabled = false; 1817 for (auto &I : Loc->second) { 1818 if (I != CurrOpenCLExtension && !getOpenCLOptions().isEnabled(I)) { 1819 Diag(DiagLoc, diag::err_opencl_requires_extension) << Selector << DiagInfo 1820 << I << SrcRange; 1821 Disabled = true; 1822 } 1823 } 1824 return Disabled; 1825 } 1826 1827 bool Sema::checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType QT) { 1828 // Check extensions for declared types. 1829 Decl *Decl = nullptr; 1830 if (auto TypedefT = dyn_cast<TypedefType>(QT.getTypePtr())) 1831 Decl = TypedefT->getDecl(); 1832 if (auto TagT = dyn_cast<TagType>(QT.getCanonicalType().getTypePtr())) 1833 Decl = TagT->getDecl(); 1834 auto Loc = DS.getTypeSpecTypeLoc(); 1835 if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap)) 1836 return true; 1837 1838 // Check extensions for builtin types. 1839 return checkOpenCLDisabledTypeOrDecl(QT.getCanonicalType().getTypePtr(), Loc, 1840 QT, OpenCLTypeExtMap); 1841 } 1842 1843 bool Sema::checkOpenCLDisabledDecl(const NamedDecl &D, const Expr &E) { 1844 IdentifierInfo *FnName = D.getIdentifier(); 1845 return checkOpenCLDisabledTypeOrDecl(&D, E.getLocStart(), FnName, 1846 OpenCLDeclExtMap, 1, D.getSourceRange()); 1847 } 1848