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