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