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