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