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), 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 // Transfer late parsed template instantiations over to the pending template 854 // instantiation list. During normal compliation, the late template parser 855 // will be installed and instantiating these templates will succeed. 856 // 857 // If we are building a TU prefix for serialization, it is also safe to 858 // transfer these over, even though they are not parsed. The end of the TU 859 // should be outside of any eager template instantiation scope, so when this 860 // AST is deserialized, these templates will not be parsed until the end of 861 // the combined TU. 862 PendingInstantiations.insert(PendingInstantiations.end(), 863 LateParsedInstantiations.begin(), 864 LateParsedInstantiations.end()); 865 LateParsedInstantiations.clear(); 866 867 // Complete translation units and modules define vtables and perform implicit 868 // instantiations. PCH files do not. 869 if (TUKind != TU_Prefix) { 870 DiagnoseUseOfUnimplementedSelectors(); 871 872 // If DefinedUsedVTables ends up marking any virtual member functions it 873 // might lead to more pending template instantiations, which we then need 874 // to instantiate. 875 DefineUsedVTables(); 876 877 // C++: Perform implicit template instantiations. 878 // 879 // FIXME: When we perform these implicit instantiations, we do not 880 // carefully keep track of the point of instantiation (C++ [temp.point]). 881 // This means that name lookup that occurs within the template 882 // instantiation will always happen at the end of the translation unit, 883 // so it will find some names that are not required to be found. This is 884 // valid, but we could do better by diagnosing if an instantiation uses a 885 // name that was not visible at its first point of instantiation. 886 if (ExternalSource) { 887 // Load pending instantiations from the external source. 888 SmallVector<PendingImplicitInstantiation, 4> Pending; 889 ExternalSource->ReadPendingInstantiations(Pending); 890 for (auto PII : Pending) 891 if (auto Func = dyn_cast<FunctionDecl>(PII.first)) 892 Func->setInstantiationIsPending(true); 893 PendingInstantiations.insert(PendingInstantiations.begin(), 894 Pending.begin(), Pending.end()); 895 } 896 897 PerformPendingInstantiations(); 898 899 assert(LateParsedInstantiations.empty() && 900 "end of TU template instantiation should not create more " 901 "late-parsed templates"); 902 903 if (LateTemplateParserCleanup) 904 LateTemplateParserCleanup(OpaqueParser); 905 906 CheckDelayedMemberExceptionSpecs(); 907 } 908 909 DiagnoseUnterminatedPragmaPack(); 910 DiagnoseUnterminatedPragmaAttribute(); 911 912 // All delayed member exception specs should be checked or we end up accepting 913 // incompatible declarations. 914 // FIXME: This is wrong for TUKind == TU_Prefix. In that case, we need to 915 // write out the lists to the AST file (if any). 916 assert(DelayedDefaultedMemberExceptionSpecs.empty()); 917 assert(DelayedExceptionSpecChecks.empty()); 918 919 // All dllexport classes should have been processed already. 920 assert(DelayedDllExportClasses.empty()); 921 922 // Remove file scoped decls that turned out to be used. 923 UnusedFileScopedDecls.erase( 924 std::remove_if(UnusedFileScopedDecls.begin(nullptr, true), 925 UnusedFileScopedDecls.end(), 926 [this](const DeclaratorDecl *DD) { 927 return ShouldRemoveFromUnused(this, DD); 928 }), 929 UnusedFileScopedDecls.end()); 930 931 if (TUKind == TU_Prefix) { 932 // Translation unit prefixes don't need any of the checking below. 933 if (!PP.isIncrementalProcessingEnabled()) 934 TUScope = nullptr; 935 return; 936 } 937 938 // Check for #pragma weak identifiers that were never declared 939 LoadExternalWeakUndeclaredIdentifiers(); 940 for (auto WeakID : WeakUndeclaredIdentifiers) { 941 if (WeakID.second.getUsed()) 942 continue; 943 944 Decl *PrevDecl = LookupSingleName(TUScope, WeakID.first, SourceLocation(), 945 LookupOrdinaryName); 946 if (PrevDecl != nullptr && 947 !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl))) 948 Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type) 949 << "'weak'" << ExpectedVariableOrFunction; 950 else 951 Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared) 952 << WeakID.first; 953 } 954 955 if (LangOpts.CPlusPlus11 && 956 !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation())) 957 CheckDelegatingCtorCycles(); 958 959 if (!Diags.hasErrorOccurred()) { 960 if (ExternalSource) 961 ExternalSource->ReadUndefinedButUsed(UndefinedButUsed); 962 checkUndefinedButUsed(*this); 963 } 964 965 if (TUKind == TU_Module) { 966 // If we are building a module interface unit, we need to have seen the 967 // module declaration by now. 968 if (getLangOpts().getCompilingModule() == 969 LangOptions::CMK_ModuleInterface && 970 ModuleScopes.back().Module->Kind != Module::ModuleInterfaceUnit) { 971 // FIXME: Make a better guess as to where to put the module declaration. 972 Diag(getSourceManager().getLocForStartOfFile( 973 getSourceManager().getMainFileID()), 974 diag::err_module_declaration_missing); 975 } 976 977 // If we are building a module, resolve all of the exported declarations 978 // now. 979 if (Module *CurrentModule = PP.getCurrentModule()) { 980 ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap(); 981 982 SmallVector<Module *, 2> Stack; 983 Stack.push_back(CurrentModule); 984 while (!Stack.empty()) { 985 Module *Mod = Stack.pop_back_val(); 986 987 // Resolve the exported declarations and conflicts. 988 // FIXME: Actually complain, once we figure out how to teach the 989 // diagnostic client to deal with complaints in the module map at this 990 // point. 991 ModMap.resolveExports(Mod, /*Complain=*/false); 992 ModMap.resolveUses(Mod, /*Complain=*/false); 993 ModMap.resolveConflicts(Mod, /*Complain=*/false); 994 995 // Queue the submodules, so their exports will also be resolved. 996 Stack.append(Mod->submodule_begin(), Mod->submodule_end()); 997 } 998 } 999 1000 // Warnings emitted in ActOnEndOfTranslationUnit() should be emitted for 1001 // modules when they are built, not every time they are used. 1002 emitAndClearUnusedLocalTypedefWarnings(); 1003 1004 // Modules don't need any of the checking below. 1005 if (!PP.isIncrementalProcessingEnabled()) 1006 TUScope = nullptr; 1007 return; 1008 } 1009 1010 // C99 6.9.2p2: 1011 // A declaration of an identifier for an object that has file 1012 // scope without an initializer, and without a storage-class 1013 // specifier or with the storage-class specifier static, 1014 // constitutes a tentative definition. If a translation unit 1015 // contains one or more tentative definitions for an identifier, 1016 // and the translation unit contains no external definition for 1017 // that identifier, then the behavior is exactly as if the 1018 // translation unit contains a file scope declaration of that 1019 // identifier, with the composite type as of the end of the 1020 // translation unit, with an initializer equal to 0. 1021 llvm::SmallSet<VarDecl *, 32> Seen; 1022 for (TentativeDefinitionsType::iterator 1023 T = TentativeDefinitions.begin(ExternalSource), 1024 TEnd = TentativeDefinitions.end(); 1025 T != TEnd; ++T) 1026 { 1027 VarDecl *VD = (*T)->getActingDefinition(); 1028 1029 // If the tentative definition was completed, getActingDefinition() returns 1030 // null. If we've already seen this variable before, insert()'s second 1031 // return value is false. 1032 if (!VD || VD->isInvalidDecl() || !Seen.insert(VD).second) 1033 continue; 1034 1035 if (const IncompleteArrayType *ArrayT 1036 = Context.getAsIncompleteArrayType(VD->getType())) { 1037 // Set the length of the array to 1 (C99 6.9.2p5). 1038 Diag(VD->getLocation(), diag::warn_tentative_incomplete_array); 1039 llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true); 1040 QualType T = Context.getConstantArrayType(ArrayT->getElementType(), 1041 One, ArrayType::Normal, 0); 1042 VD->setType(T); 1043 } else if (RequireCompleteType(VD->getLocation(), VD->getType(), 1044 diag::err_tentative_def_incomplete_type)) 1045 VD->setInvalidDecl(); 1046 1047 // No initialization is performed for a tentative definition. 1048 CheckCompleteVariableDeclaration(VD); 1049 1050 // Notify the consumer that we've completed a tentative definition. 1051 if (!VD->isInvalidDecl()) 1052 Consumer.CompleteTentativeDefinition(VD); 1053 1054 } 1055 1056 // If there were errors, disable 'unused' warnings since they will mostly be 1057 // noise. 1058 if (!Diags.hasErrorOccurred()) { 1059 // Output warning for unused file scoped decls. 1060 for (UnusedFileScopedDeclsType::iterator 1061 I = UnusedFileScopedDecls.begin(ExternalSource), 1062 E = UnusedFileScopedDecls.end(); I != E; ++I) { 1063 if (ShouldRemoveFromUnused(this, *I)) 1064 continue; 1065 1066 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) { 1067 const FunctionDecl *DiagD; 1068 if (!FD->hasBody(DiagD)) 1069 DiagD = FD; 1070 if (DiagD->isDeleted()) 1071 continue; // Deleted functions are supposed to be unused. 1072 if (DiagD->isReferenced()) { 1073 if (isa<CXXMethodDecl>(DiagD)) 1074 Diag(DiagD->getLocation(), diag::warn_unneeded_member_function) 1075 << DiagD->getDeclName(); 1076 else { 1077 if (FD->getStorageClass() == SC_Static && 1078 !FD->isInlineSpecified() && 1079 !SourceMgr.isInMainFile( 1080 SourceMgr.getExpansionLoc(FD->getLocation()))) 1081 Diag(DiagD->getLocation(), 1082 diag::warn_unneeded_static_internal_decl) 1083 << DiagD->getDeclName(); 1084 else 1085 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) 1086 << /*function*/0 << DiagD->getDeclName(); 1087 } 1088 } else { 1089 if (FD->getDescribedFunctionTemplate()) 1090 Diag(DiagD->getLocation(), diag::warn_unused_template) 1091 << /*function*/0 << DiagD->getDeclName(); 1092 else 1093 Diag(DiagD->getLocation(), 1094 isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function 1095 : diag::warn_unused_function) 1096 << DiagD->getDeclName(); 1097 } 1098 } else { 1099 const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition(); 1100 if (!DiagD) 1101 DiagD = cast<VarDecl>(*I); 1102 if (DiagD->isReferenced()) { 1103 Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) 1104 << /*variable*/1 << DiagD->getDeclName(); 1105 } else if (DiagD->getType().isConstQualified()) { 1106 const SourceManager &SM = SourceMgr; 1107 if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) || 1108 !PP.getLangOpts().IsHeaderFile) 1109 Diag(DiagD->getLocation(), diag::warn_unused_const_variable) 1110 << DiagD->getDeclName(); 1111 } else { 1112 if (DiagD->getDescribedVarTemplate()) 1113 Diag(DiagD->getLocation(), diag::warn_unused_template) 1114 << /*variable*/1 << DiagD->getDeclName(); 1115 else 1116 Diag(DiagD->getLocation(), diag::warn_unused_variable) 1117 << DiagD->getDeclName(); 1118 } 1119 } 1120 } 1121 1122 emitAndClearUnusedLocalTypedefWarnings(); 1123 } 1124 1125 if (!Diags.isIgnored(diag::warn_unused_private_field, SourceLocation())) { 1126 RecordCompleteMap RecordsComplete; 1127 RecordCompleteMap MNCComplete; 1128 for (NamedDeclSetType::iterator I = UnusedPrivateFields.begin(), 1129 E = UnusedPrivateFields.end(); I != E; ++I) { 1130 const NamedDecl *D = *I; 1131 const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D->getDeclContext()); 1132 if (RD && !RD->isUnion() && 1133 IsRecordFullyDefined(RD, RecordsComplete, MNCComplete)) { 1134 Diag(D->getLocation(), diag::warn_unused_private_field) 1135 << D->getDeclName(); 1136 } 1137 } 1138 } 1139 1140 if (!Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation())) { 1141 if (ExternalSource) 1142 ExternalSource->ReadMismatchingDeleteExpressions(DeleteExprs); 1143 for (const auto &DeletedFieldInfo : DeleteExprs) { 1144 for (const auto &DeleteExprLoc : DeletedFieldInfo.second) { 1145 AnalyzeDeleteExprMismatch(DeletedFieldInfo.first, DeleteExprLoc.first, 1146 DeleteExprLoc.second); 1147 } 1148 } 1149 } 1150 1151 // Check we've noticed that we're no longer parsing the initializer for every 1152 // variable. If we miss cases, then at best we have a performance issue and 1153 // at worst a rejects-valid bug. 1154 assert(ParsingInitForAutoVars.empty() && 1155 "Didn't unmark var as having its initializer parsed"); 1156 1157 if (!PP.isIncrementalProcessingEnabled()) 1158 TUScope = nullptr; 1159 } 1160 1161 1162 //===----------------------------------------------------------------------===// 1163 // Helper functions. 1164 //===----------------------------------------------------------------------===// 1165 1166 DeclContext *Sema::getFunctionLevelDeclContext() { 1167 DeclContext *DC = CurContext; 1168 1169 while (true) { 1170 if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC)) { 1171 DC = DC->getParent(); 1172 } else if (isa<CXXMethodDecl>(DC) && 1173 cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call && 1174 cast<CXXRecordDecl>(DC->getParent())->isLambda()) { 1175 DC = DC->getParent()->getParent(); 1176 } 1177 else break; 1178 } 1179 1180 return DC; 1181 } 1182 1183 /// getCurFunctionDecl - If inside of a function body, this returns a pointer 1184 /// to the function decl for the function being parsed. If we're currently 1185 /// in a 'block', this returns the containing context. 1186 FunctionDecl *Sema::getCurFunctionDecl() { 1187 DeclContext *DC = getFunctionLevelDeclContext(); 1188 return dyn_cast<FunctionDecl>(DC); 1189 } 1190 1191 ObjCMethodDecl *Sema::getCurMethodDecl() { 1192 DeclContext *DC = getFunctionLevelDeclContext(); 1193 while (isa<RecordDecl>(DC)) 1194 DC = DC->getParent(); 1195 return dyn_cast<ObjCMethodDecl>(DC); 1196 } 1197 1198 NamedDecl *Sema::getCurFunctionOrMethodDecl() { 1199 DeclContext *DC = getFunctionLevelDeclContext(); 1200 if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC)) 1201 return cast<NamedDecl>(DC); 1202 return nullptr; 1203 } 1204 1205 void Sema::EmitCurrentDiagnostic(unsigned DiagID) { 1206 // FIXME: It doesn't make sense to me that DiagID is an incoming argument here 1207 // and yet we also use the current diag ID on the DiagnosticsEngine. This has 1208 // been made more painfully obvious by the refactor that introduced this 1209 // function, but it is possible that the incoming argument can be 1210 // eliminated. If it truly cannot be (for example, there is some reentrancy 1211 // issue I am not seeing yet), then there should at least be a clarifying 1212 // comment somewhere. 1213 if (Optional<TemplateDeductionInfo*> Info = isSFINAEContext()) { 1214 switch (DiagnosticIDs::getDiagnosticSFINAEResponse( 1215 Diags.getCurrentDiagID())) { 1216 case DiagnosticIDs::SFINAE_Report: 1217 // We'll report the diagnostic below. 1218 break; 1219 1220 case DiagnosticIDs::SFINAE_SubstitutionFailure: 1221 // Count this failure so that we know that template argument deduction 1222 // has failed. 1223 ++NumSFINAEErrors; 1224 1225 // Make a copy of this suppressed diagnostic and store it with the 1226 // template-deduction information. 1227 if (*Info && !(*Info)->hasSFINAEDiagnostic()) { 1228 Diagnostic DiagInfo(&Diags); 1229 (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(), 1230 PartialDiagnostic(DiagInfo, Context.getDiagAllocator())); 1231 } 1232 1233 Diags.setLastDiagnosticIgnored(); 1234 Diags.Clear(); 1235 return; 1236 1237 case DiagnosticIDs::SFINAE_AccessControl: { 1238 // Per C++ Core Issue 1170, access control is part of SFINAE. 1239 // Additionally, the AccessCheckingSFINAE flag can be used to temporarily 1240 // make access control a part of SFINAE for the purposes of checking 1241 // type traits. 1242 if (!AccessCheckingSFINAE && !getLangOpts().CPlusPlus11) 1243 break; 1244 1245 SourceLocation Loc = Diags.getCurrentDiagLoc(); 1246 1247 // Suppress this diagnostic. 1248 ++NumSFINAEErrors; 1249 1250 // Make a copy of this suppressed diagnostic and store it with the 1251 // template-deduction information. 1252 if (*Info && !(*Info)->hasSFINAEDiagnostic()) { 1253 Diagnostic DiagInfo(&Diags); 1254 (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(), 1255 PartialDiagnostic(DiagInfo, Context.getDiagAllocator())); 1256 } 1257 1258 Diags.setLastDiagnosticIgnored(); 1259 Diags.Clear(); 1260 1261 // Now the diagnostic state is clear, produce a C++98 compatibility 1262 // warning. 1263 Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control); 1264 1265 // The last diagnostic which Sema produced was ignored. Suppress any 1266 // notes attached to it. 1267 Diags.setLastDiagnosticIgnored(); 1268 return; 1269 } 1270 1271 case DiagnosticIDs::SFINAE_Suppress: 1272 // Make a copy of this suppressed diagnostic and store it with the 1273 // template-deduction information; 1274 if (*Info) { 1275 Diagnostic DiagInfo(&Diags); 1276 (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(), 1277 PartialDiagnostic(DiagInfo, Context.getDiagAllocator())); 1278 } 1279 1280 // Suppress this diagnostic. 1281 Diags.setLastDiagnosticIgnored(); 1282 Diags.Clear(); 1283 return; 1284 } 1285 } 1286 1287 // Set up the context's printing policy based on our current state. 1288 Context.setPrintingPolicy(getPrintingPolicy()); 1289 1290 // Emit the diagnostic. 1291 if (!Diags.EmitCurrentDiagnostic()) 1292 return; 1293 1294 // If this is not a note, and we're in a template instantiation 1295 // that is different from the last template instantiation where 1296 // we emitted an error, print a template instantiation 1297 // backtrace. 1298 if (!DiagnosticIDs::isBuiltinNote(DiagID)) 1299 PrintContextStack(); 1300 } 1301 1302 Sema::SemaDiagnosticBuilder 1303 Sema::Diag(SourceLocation Loc, const PartialDiagnostic& PD) { 1304 SemaDiagnosticBuilder Builder(Diag(Loc, PD.getDiagID())); 1305 PD.Emit(Builder); 1306 1307 return Builder; 1308 } 1309 1310 /// \brief Looks through the macro-expansion chain for the given 1311 /// location, looking for a macro expansion with the given name. 1312 /// If one is found, returns true and sets the location to that 1313 /// expansion loc. 1314 bool Sema::findMacroSpelling(SourceLocation &locref, StringRef name) { 1315 SourceLocation loc = locref; 1316 if (!loc.isMacroID()) return false; 1317 1318 // There's no good way right now to look at the intermediate 1319 // expansions, so just jump to the expansion location. 1320 loc = getSourceManager().getExpansionLoc(loc); 1321 1322 // If that's written with the name, stop here. 1323 SmallVector<char, 16> buffer; 1324 if (getPreprocessor().getSpelling(loc, buffer) == name) { 1325 locref = loc; 1326 return true; 1327 } 1328 return false; 1329 } 1330 1331 /// \brief Determines the active Scope associated with the given declaration 1332 /// context. 1333 /// 1334 /// This routine maps a declaration context to the active Scope object that 1335 /// represents that declaration context in the parser. It is typically used 1336 /// from "scope-less" code (e.g., template instantiation, lazy creation of 1337 /// declarations) that injects a name for name-lookup purposes and, therefore, 1338 /// must update the Scope. 1339 /// 1340 /// \returns The scope corresponding to the given declaraion context, or NULL 1341 /// if no such scope is open. 1342 Scope *Sema::getScopeForContext(DeclContext *Ctx) { 1343 1344 if (!Ctx) 1345 return nullptr; 1346 1347 Ctx = Ctx->getPrimaryContext(); 1348 for (Scope *S = getCurScope(); S; S = S->getParent()) { 1349 // Ignore scopes that cannot have declarations. This is important for 1350 // out-of-line definitions of static class members. 1351 if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope)) 1352 if (DeclContext *Entity = S->getEntity()) 1353 if (Ctx == Entity->getPrimaryContext()) 1354 return S; 1355 } 1356 1357 return nullptr; 1358 } 1359 1360 /// \brief Enter a new function scope 1361 void Sema::PushFunctionScope() { 1362 if (FunctionScopes.empty()) { 1363 // Use PreallocatedFunctionScope to avoid allocating memory when possible. 1364 PreallocatedFunctionScope->Clear(); 1365 FunctionScopes.push_back(PreallocatedFunctionScope.get()); 1366 } else { 1367 FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics())); 1368 } 1369 if (LangOpts.OpenMP) 1370 pushOpenMPFunctionRegion(); 1371 } 1372 1373 void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) { 1374 FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(), 1375 BlockScope, Block)); 1376 } 1377 1378 LambdaScopeInfo *Sema::PushLambdaScope() { 1379 LambdaScopeInfo *const LSI = new LambdaScopeInfo(getDiagnostics()); 1380 FunctionScopes.push_back(LSI); 1381 return LSI; 1382 } 1383 1384 void Sema::RecordParsingTemplateParameterDepth(unsigned Depth) { 1385 if (LambdaScopeInfo *const LSI = getCurLambda()) { 1386 LSI->AutoTemplateParameterDepth = Depth; 1387 return; 1388 } 1389 llvm_unreachable( 1390 "Remove assertion if intentionally called in a non-lambda context."); 1391 } 1392 1393 void Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP, 1394 const Decl *D, const BlockExpr *blkExpr) { 1395 assert(!FunctionScopes.empty() && "mismatched push/pop!"); 1396 FunctionScopeInfo *Scope = FunctionScopes.pop_back_val(); 1397 1398 if (LangOpts.OpenMP) 1399 popOpenMPFunctionRegion(Scope); 1400 1401 // Issue any analysis-based warnings. 1402 if (WP && D) 1403 AnalysisWarnings.IssueWarnings(*WP, Scope, D, blkExpr); 1404 else 1405 for (const auto &PUD : Scope->PossiblyUnreachableDiags) 1406 Diag(PUD.Loc, PUD.PD); 1407 1408 // Delete the scope unless its our preallocated scope. 1409 if (Scope != PreallocatedFunctionScope.get()) 1410 delete Scope; 1411 } 1412 1413 void Sema::PushCompoundScope(bool IsStmtExpr) { 1414 getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr)); 1415 } 1416 1417 void Sema::PopCompoundScope() { 1418 FunctionScopeInfo *CurFunction = getCurFunction(); 1419 assert(!CurFunction->CompoundScopes.empty() && "mismatched push/pop"); 1420 1421 CurFunction->CompoundScopes.pop_back(); 1422 } 1423 1424 /// \brief Determine whether any errors occurred within this function/method/ 1425 /// block. 1426 bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const { 1427 return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred(); 1428 } 1429 1430 void Sema::setFunctionHasBranchIntoScope() { 1431 if (!FunctionScopes.empty()) 1432 FunctionScopes.back()->setHasBranchIntoScope(); 1433 } 1434 1435 void Sema::setFunctionHasBranchProtectedScope() { 1436 if (!FunctionScopes.empty()) 1437 FunctionScopes.back()->setHasBranchProtectedScope(); 1438 } 1439 1440 void Sema::setFunctionHasIndirectGoto() { 1441 if (!FunctionScopes.empty()) 1442 FunctionScopes.back()->setHasIndirectGoto(); 1443 } 1444 1445 BlockScopeInfo *Sema::getCurBlock() { 1446 if (FunctionScopes.empty()) 1447 return nullptr; 1448 1449 auto CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back()); 1450 if (CurBSI && CurBSI->TheDecl && 1451 !CurBSI->TheDecl->Encloses(CurContext)) { 1452 // We have switched contexts due to template instantiation. 1453 assert(!CodeSynthesisContexts.empty()); 1454 return nullptr; 1455 } 1456 1457 return CurBSI; 1458 } 1459 1460 FunctionScopeInfo *Sema::getEnclosingFunction() const { 1461 if (FunctionScopes.empty()) 1462 return nullptr; 1463 1464 for (int e = FunctionScopes.size() - 1; e >= 0; --e) { 1465 if (isa<sema::BlockScopeInfo>(FunctionScopes[e])) 1466 continue; 1467 return FunctionScopes[e]; 1468 } 1469 return nullptr; 1470 } 1471 1472 LambdaScopeInfo *Sema::getCurLambda(bool IgnoreNonLambdaCapturingScope) { 1473 if (FunctionScopes.empty()) 1474 return nullptr; 1475 1476 auto I = FunctionScopes.rbegin(); 1477 if (IgnoreNonLambdaCapturingScope) { 1478 auto E = FunctionScopes.rend(); 1479 while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I)) 1480 ++I; 1481 if (I == E) 1482 return nullptr; 1483 } 1484 auto *CurLSI = dyn_cast<LambdaScopeInfo>(*I); 1485 if (CurLSI && CurLSI->Lambda && 1486 !CurLSI->Lambda->Encloses(CurContext)) { 1487 // We have switched contexts due to template instantiation. 1488 assert(!CodeSynthesisContexts.empty()); 1489 return nullptr; 1490 } 1491 1492 return CurLSI; 1493 } 1494 // We have a generic lambda if we parsed auto parameters, or we have 1495 // an associated template parameter list. 1496 LambdaScopeInfo *Sema::getCurGenericLambda() { 1497 if (LambdaScopeInfo *LSI = getCurLambda()) { 1498 return (LSI->AutoTemplateParams.size() || 1499 LSI->GLTemplateParameterList) ? LSI : nullptr; 1500 } 1501 return nullptr; 1502 } 1503 1504 1505 void Sema::ActOnComment(SourceRange Comment) { 1506 if (!LangOpts.RetainCommentsFromSystemHeaders && 1507 SourceMgr.isInSystemHeader(Comment.getBegin())) 1508 return; 1509 RawComment RC(SourceMgr, Comment, LangOpts.CommentOpts, false); 1510 if (RC.isAlmostTrailingComment()) { 1511 SourceRange MagicMarkerRange(Comment.getBegin(), 1512 Comment.getBegin().getLocWithOffset(3)); 1513 StringRef MagicMarkerText; 1514 switch (RC.getKind()) { 1515 case RawComment::RCK_OrdinaryBCPL: 1516 MagicMarkerText = "///<"; 1517 break; 1518 case RawComment::RCK_OrdinaryC: 1519 MagicMarkerText = "/**<"; 1520 break; 1521 default: 1522 llvm_unreachable("if this is an almost Doxygen comment, " 1523 "it should be ordinary"); 1524 } 1525 Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) << 1526 FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText); 1527 } 1528 Context.addComment(RC); 1529 } 1530 1531 // Pin this vtable to this file. 1532 ExternalSemaSource::~ExternalSemaSource() {} 1533 1534 void ExternalSemaSource::ReadMethodPool(Selector Sel) { } 1535 void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { } 1536 1537 void ExternalSemaSource::ReadKnownNamespaces( 1538 SmallVectorImpl<NamespaceDecl *> &Namespaces) { 1539 } 1540 1541 void ExternalSemaSource::ReadUndefinedButUsed( 1542 llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {} 1543 1544 void ExternalSemaSource::ReadMismatchingDeleteExpressions(llvm::MapVector< 1545 FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &) {} 1546 1547 /// \brief Figure out if an expression could be turned into a call. 1548 /// 1549 /// Use this when trying to recover from an error where the programmer may have 1550 /// written just the name of a function instead of actually calling it. 1551 /// 1552 /// \param E - The expression to examine. 1553 /// \param ZeroArgCallReturnTy - If the expression can be turned into a call 1554 /// with no arguments, this parameter is set to the type returned by such a 1555 /// call; otherwise, it is set to an empty QualType. 1556 /// \param OverloadSet - If the expression is an overloaded function 1557 /// name, this parameter is populated with the decls of the various overloads. 1558 bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy, 1559 UnresolvedSetImpl &OverloadSet) { 1560 ZeroArgCallReturnTy = QualType(); 1561 OverloadSet.clear(); 1562 1563 const OverloadExpr *Overloads = nullptr; 1564 bool IsMemExpr = false; 1565 if (E.getType() == Context.OverloadTy) { 1566 OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E)); 1567 1568 // Ignore overloads that are pointer-to-member constants. 1569 if (FR.HasFormOfMemberPointer) 1570 return false; 1571 1572 Overloads = FR.Expression; 1573 } else if (E.getType() == Context.BoundMemberTy) { 1574 Overloads = dyn_cast<UnresolvedMemberExpr>(E.IgnoreParens()); 1575 IsMemExpr = true; 1576 } 1577 1578 bool Ambiguous = false; 1579 1580 if (Overloads) { 1581 for (OverloadExpr::decls_iterator it = Overloads->decls_begin(), 1582 DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) { 1583 OverloadSet.addDecl(*it); 1584 1585 // Check whether the function is a non-template, non-member which takes no 1586 // arguments. 1587 if (IsMemExpr) 1588 continue; 1589 if (const FunctionDecl *OverloadDecl 1590 = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) { 1591 if (OverloadDecl->getMinRequiredArguments() == 0) { 1592 if (!ZeroArgCallReturnTy.isNull() && !Ambiguous) { 1593 ZeroArgCallReturnTy = QualType(); 1594 Ambiguous = true; 1595 } else 1596 ZeroArgCallReturnTy = OverloadDecl->getReturnType(); 1597 } 1598 } 1599 } 1600 1601 // If it's not a member, use better machinery to try to resolve the call 1602 if (!IsMemExpr) 1603 return !ZeroArgCallReturnTy.isNull(); 1604 } 1605 1606 // Attempt to call the member with no arguments - this will correctly handle 1607 // member templates with defaults/deduction of template arguments, overloads 1608 // with default arguments, etc. 1609 if (IsMemExpr && !E.isTypeDependent()) { 1610 bool Suppress = getDiagnostics().getSuppressAllDiagnostics(); 1611 getDiagnostics().setSuppressAllDiagnostics(true); 1612 ExprResult R = BuildCallToMemberFunction(nullptr, &E, SourceLocation(), 1613 None, SourceLocation()); 1614 getDiagnostics().setSuppressAllDiagnostics(Suppress); 1615 if (R.isUsable()) { 1616 ZeroArgCallReturnTy = R.get()->getType(); 1617 return true; 1618 } 1619 return false; 1620 } 1621 1622 if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) { 1623 if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) { 1624 if (Fun->getMinRequiredArguments() == 0) 1625 ZeroArgCallReturnTy = Fun->getReturnType(); 1626 return true; 1627 } 1628 } 1629 1630 // We don't have an expression that's convenient to get a FunctionDecl from, 1631 // but we can at least check if the type is "function of 0 arguments". 1632 QualType ExprTy = E.getType(); 1633 const FunctionType *FunTy = nullptr; 1634 QualType PointeeTy = ExprTy->getPointeeType(); 1635 if (!PointeeTy.isNull()) 1636 FunTy = PointeeTy->getAs<FunctionType>(); 1637 if (!FunTy) 1638 FunTy = ExprTy->getAs<FunctionType>(); 1639 1640 if (const FunctionProtoType *FPT = 1641 dyn_cast_or_null<FunctionProtoType>(FunTy)) { 1642 if (FPT->getNumParams() == 0) 1643 ZeroArgCallReturnTy = FunTy->getReturnType(); 1644 return true; 1645 } 1646 return false; 1647 } 1648 1649 /// \brief Give notes for a set of overloads. 1650 /// 1651 /// A companion to tryExprAsCall. In cases when the name that the programmer 1652 /// wrote was an overloaded function, we may be able to make some guesses about 1653 /// plausible overloads based on their return types; such guesses can be handed 1654 /// off to this method to be emitted as notes. 1655 /// 1656 /// \param Overloads - The overloads to note. 1657 /// \param FinalNoteLoc - If we've suppressed printing some overloads due to 1658 /// -fshow-overloads=best, this is the location to attach to the note about too 1659 /// many candidates. Typically this will be the location of the original 1660 /// ill-formed expression. 1661 static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads, 1662 const SourceLocation FinalNoteLoc) { 1663 int ShownOverloads = 0; 1664 int SuppressedOverloads = 0; 1665 for (UnresolvedSetImpl::iterator It = Overloads.begin(), 1666 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 1667 // FIXME: Magic number for max shown overloads stolen from 1668 // OverloadCandidateSet::NoteCandidates. 1669 if (ShownOverloads >= 4 && S.Diags.getShowOverloads() == Ovl_Best) { 1670 ++SuppressedOverloads; 1671 continue; 1672 } 1673 1674 NamedDecl *Fn = (*It)->getUnderlyingDecl(); 1675 // Don't print overloads for non-default multiversioned functions. 1676 if (const auto *FD = Fn->getAsFunction()) { 1677 if (FD->isMultiVersion() && 1678 !FD->getAttr<TargetAttr>()->isDefaultVersion()) 1679 continue; 1680 } 1681 S.Diag(Fn->getLocation(), diag::note_possible_target_of_call); 1682 ++ShownOverloads; 1683 } 1684 1685 if (SuppressedOverloads) 1686 S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates) 1687 << SuppressedOverloads; 1688 } 1689 1690 static void notePlausibleOverloads(Sema &S, SourceLocation Loc, 1691 const UnresolvedSetImpl &Overloads, 1692 bool (*IsPlausibleResult)(QualType)) { 1693 if (!IsPlausibleResult) 1694 return noteOverloads(S, Overloads, Loc); 1695 1696 UnresolvedSet<2> PlausibleOverloads; 1697 for (OverloadExpr::decls_iterator It = Overloads.begin(), 1698 DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) { 1699 const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It); 1700 QualType OverloadResultTy = OverloadDecl->getReturnType(); 1701 if (IsPlausibleResult(OverloadResultTy)) 1702 PlausibleOverloads.addDecl(It.getDecl()); 1703 } 1704 noteOverloads(S, PlausibleOverloads, Loc); 1705 } 1706 1707 /// Determine whether the given expression can be called by just 1708 /// putting parentheses after it. Notably, expressions with unary 1709 /// operators can't be because the unary operator will start parsing 1710 /// outside the call. 1711 static bool IsCallableWithAppend(Expr *E) { 1712 E = E->IgnoreImplicit(); 1713 return (!isa<CStyleCastExpr>(E) && 1714 !isa<UnaryOperator>(E) && 1715 !isa<BinaryOperator>(E) && 1716 !isa<CXXOperatorCallExpr>(E)); 1717 } 1718 1719 bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD, 1720 bool ForceComplain, 1721 bool (*IsPlausibleResult)(QualType)) { 1722 SourceLocation Loc = E.get()->getExprLoc(); 1723 SourceRange Range = E.get()->getSourceRange(); 1724 1725 QualType ZeroArgCallTy; 1726 UnresolvedSet<4> Overloads; 1727 if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) && 1728 !ZeroArgCallTy.isNull() && 1729 (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) { 1730 // At this point, we know E is potentially callable with 0 1731 // arguments and that it returns something of a reasonable type, 1732 // so we can emit a fixit and carry on pretending that E was 1733 // actually a CallExpr. 1734 SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd()); 1735 Diag(Loc, PD) 1736 << /*zero-arg*/ 1 << Range 1737 << (IsCallableWithAppend(E.get()) 1738 ? FixItHint::CreateInsertion(ParenInsertionLoc, "()") 1739 : FixItHint()); 1740 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 1741 1742 // FIXME: Try this before emitting the fixit, and suppress diagnostics 1743 // while doing so. 1744 E = ActOnCallExpr(nullptr, E.get(), Range.getEnd(), None, 1745 Range.getEnd().getLocWithOffset(1)); 1746 return true; 1747 } 1748 1749 if (!ForceComplain) return false; 1750 1751 Diag(Loc, PD) << /*not zero-arg*/ 0 << Range; 1752 notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult); 1753 E = ExprError(); 1754 return true; 1755 } 1756 1757 IdentifierInfo *Sema::getSuperIdentifier() const { 1758 if (!Ident_super) 1759 Ident_super = &Context.Idents.get("super"); 1760 return Ident_super; 1761 } 1762 1763 IdentifierInfo *Sema::getFloat128Identifier() const { 1764 if (!Ident___float128) 1765 Ident___float128 = &Context.Idents.get("__float128"); 1766 return Ident___float128; 1767 } 1768 1769 void Sema::PushCapturedRegionScope(Scope *S, CapturedDecl *CD, RecordDecl *RD, 1770 CapturedRegionKind K) { 1771 CapturingScopeInfo *CSI = new CapturedRegionScopeInfo( 1772 getDiagnostics(), S, CD, RD, CD->getContextParam(), K, 1773 (getLangOpts().OpenMP && K == CR_OpenMP) ? getOpenMPNestingLevel() : 0); 1774 CSI->ReturnType = Context.VoidTy; 1775 FunctionScopes.push_back(CSI); 1776 } 1777 1778 CapturedRegionScopeInfo *Sema::getCurCapturedRegion() { 1779 if (FunctionScopes.empty()) 1780 return nullptr; 1781 1782 return dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back()); 1783 } 1784 1785 const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> & 1786 Sema::getMismatchingDeleteExpressions() const { 1787 return DeleteExprs; 1788 } 1789 1790 void Sema::setOpenCLExtensionForType(QualType T, llvm::StringRef ExtStr) { 1791 if (ExtStr.empty()) 1792 return; 1793 llvm::SmallVector<StringRef, 1> Exts; 1794 ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false); 1795 auto CanT = T.getCanonicalType().getTypePtr(); 1796 for (auto &I : Exts) 1797 OpenCLTypeExtMap[CanT].insert(I.str()); 1798 } 1799 1800 void Sema::setOpenCLExtensionForDecl(Decl *FD, StringRef ExtStr) { 1801 llvm::SmallVector<StringRef, 1> Exts; 1802 ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false); 1803 if (Exts.empty()) 1804 return; 1805 for (auto &I : Exts) 1806 OpenCLDeclExtMap[FD].insert(I.str()); 1807 } 1808 1809 void Sema::setCurrentOpenCLExtensionForType(QualType T) { 1810 if (CurrOpenCLExtension.empty()) 1811 return; 1812 setOpenCLExtensionForType(T, CurrOpenCLExtension); 1813 } 1814 1815 void Sema::setCurrentOpenCLExtensionForDecl(Decl *D) { 1816 if (CurrOpenCLExtension.empty()) 1817 return; 1818 setOpenCLExtensionForDecl(D, CurrOpenCLExtension); 1819 } 1820 1821 bool Sema::isOpenCLDisabledDecl(Decl *FD) { 1822 auto Loc = OpenCLDeclExtMap.find(FD); 1823 if (Loc == OpenCLDeclExtMap.end()) 1824 return false; 1825 for (auto &I : Loc->second) { 1826 if (!getOpenCLOptions().isEnabled(I)) 1827 return true; 1828 } 1829 return false; 1830 } 1831 1832 template <typename T, typename DiagLocT, typename DiagInfoT, typename MapT> 1833 bool Sema::checkOpenCLDisabledTypeOrDecl(T D, DiagLocT DiagLoc, 1834 DiagInfoT DiagInfo, MapT &Map, 1835 unsigned Selector, 1836 SourceRange SrcRange) { 1837 auto Loc = Map.find(D); 1838 if (Loc == Map.end()) 1839 return false; 1840 bool Disabled = false; 1841 for (auto &I : Loc->second) { 1842 if (I != CurrOpenCLExtension && !getOpenCLOptions().isEnabled(I)) { 1843 Diag(DiagLoc, diag::err_opencl_requires_extension) << Selector << DiagInfo 1844 << I << SrcRange; 1845 Disabled = true; 1846 } 1847 } 1848 return Disabled; 1849 } 1850 1851 bool Sema::checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType QT) { 1852 // Check extensions for declared types. 1853 Decl *Decl = nullptr; 1854 if (auto TypedefT = dyn_cast<TypedefType>(QT.getTypePtr())) 1855 Decl = TypedefT->getDecl(); 1856 if (auto TagT = dyn_cast<TagType>(QT.getCanonicalType().getTypePtr())) 1857 Decl = TagT->getDecl(); 1858 auto Loc = DS.getTypeSpecTypeLoc(); 1859 if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap)) 1860 return true; 1861 1862 // Check extensions for builtin types. 1863 return checkOpenCLDisabledTypeOrDecl(QT.getCanonicalType().getTypePtr(), Loc, 1864 QT, OpenCLTypeExtMap); 1865 } 1866 1867 bool Sema::checkOpenCLDisabledDecl(const NamedDecl &D, const Expr &E) { 1868 IdentifierInfo *FnName = D.getIdentifier(); 1869 return checkOpenCLDisabledTypeOrDecl(&D, E.getLocStart(), FnName, 1870 OpenCLDeclExtMap, 1, D.getSourceRange()); 1871 } 1872