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