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