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