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