Sema.cpp revision 360784
1//===--- Sema.cpp - AST Builder and Semantic Analysis Implementation ------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file implements the actions class which performs semantic analysis and
10// builds an AST out of a parse stream.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/AST/ASTContext.h"
15#include "clang/AST/ASTDiagnostic.h"
16#include "clang/AST/DeclCXX.h"
17#include "clang/AST/DeclFriend.h"
18#include "clang/AST/DeclObjC.h"
19#include "clang/AST/Expr.h"
20#include "clang/AST/ExprCXX.h"
21#include "clang/AST/PrettyDeclStackTrace.h"
22#include "clang/AST/StmtCXX.h"
23#include "clang/Basic/DiagnosticOptions.h"
24#include "clang/Basic/PartialDiagnostic.h"
25#include "clang/Basic/Stack.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 "clang/Sema/TypoCorrection.h"
42#include "llvm/ADT/DenseMap.h"
43#include "llvm/ADT/SmallSet.h"
44#include "llvm/Support/TimeProfiler.h"
45
46using namespace clang;
47using namespace sema;
48
49SourceLocation Sema::getLocForEndOfToken(SourceLocation Loc, unsigned Offset) {
50  return Lexer::getLocForEndOfToken(Loc, Offset, SourceMgr, LangOpts);
51}
52
53ModuleLoader &Sema::getModuleLoader() const { return PP.getModuleLoader(); }
54
55IdentifierInfo *
56Sema::InventAbbreviatedTemplateParameterTypeName(IdentifierInfo *ParamName,
57                                                 unsigned int Index) {
58  std::string InventedName;
59  llvm::raw_string_ostream OS(InventedName);
60
61  if (!ParamName)
62    OS << "auto:" << Index + 1;
63  else
64    OS << ParamName->getName() << ":auto";
65
66  OS.flush();
67  return &Context.Idents.get(OS.str());
68}
69
70PrintingPolicy Sema::getPrintingPolicy(const ASTContext &Context,
71                                       const Preprocessor &PP) {
72  PrintingPolicy Policy = Context.getPrintingPolicy();
73  // In diagnostics, we print _Bool as bool if the latter is defined as the
74  // former.
75  Policy.Bool = Context.getLangOpts().Bool;
76  if (!Policy.Bool) {
77    if (const MacroInfo *BoolMacro = PP.getMacroInfo(Context.getBoolName())) {
78      Policy.Bool = BoolMacro->isObjectLike() &&
79                    BoolMacro->getNumTokens() == 1 &&
80                    BoolMacro->getReplacementToken(0).is(tok::kw__Bool);
81    }
82  }
83
84  return Policy;
85}
86
87void Sema::ActOnTranslationUnitScope(Scope *S) {
88  TUScope = S;
89  PushDeclContext(S, Context.getTranslationUnitDecl());
90}
91
92namespace clang {
93namespace sema {
94
95class SemaPPCallbacks : public PPCallbacks {
96  Sema *S = nullptr;
97  llvm::SmallVector<SourceLocation, 8> IncludeStack;
98
99public:
100  void set(Sema &S) { this->S = &S; }
101
102  void reset() { S = nullptr; }
103
104  virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason,
105                           SrcMgr::CharacteristicKind FileType,
106                           FileID PrevFID) override {
107    if (!S)
108      return;
109    switch (Reason) {
110    case EnterFile: {
111      SourceManager &SM = S->getSourceManager();
112      SourceLocation IncludeLoc = SM.getIncludeLoc(SM.getFileID(Loc));
113      if (IncludeLoc.isValid()) {
114        if (llvm::timeTraceProfilerEnabled()) {
115          const FileEntry *FE = SM.getFileEntryForID(SM.getFileID(Loc));
116          llvm::timeTraceProfilerBegin(
117              "Source", FE != nullptr ? FE->getName() : StringRef("<unknown>"));
118        }
119
120        IncludeStack.push_back(IncludeLoc);
121        S->DiagnoseNonDefaultPragmaPack(
122            Sema::PragmaPackDiagnoseKind::NonDefaultStateAtInclude, IncludeLoc);
123      }
124      break;
125    }
126    case ExitFile:
127      if (!IncludeStack.empty()) {
128        if (llvm::timeTraceProfilerEnabled())
129          llvm::timeTraceProfilerEnd();
130
131        S->DiagnoseNonDefaultPragmaPack(
132            Sema::PragmaPackDiagnoseKind::ChangedStateAtExit,
133            IncludeStack.pop_back_val());
134      }
135      break;
136    default:
137      break;
138    }
139  }
140};
141
142} // end namespace sema
143} // end namespace clang
144
145Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
146           TranslationUnitKind TUKind, CodeCompleteConsumer *CodeCompleter)
147    : ExternalSource(nullptr), isMultiplexExternalSource(false),
148      FPFeatures(pp.getLangOpts()), LangOpts(pp.getLangOpts()), PP(pp),
149      Context(ctxt), Consumer(consumer), Diags(PP.getDiagnostics()),
150      SourceMgr(PP.getSourceManager()), CollectStats(false),
151      CodeCompleter(CodeCompleter), CurContext(nullptr),
152      OriginalLexicalContext(nullptr), MSStructPragmaOn(false),
153      MSPointerToMemberRepresentationMethod(
154          LangOpts.getMSPointerToMemberRepresentationMethod()),
155      VtorDispStack(LangOpts.getVtorDispMode()), PackStack(0),
156      DataSegStack(nullptr), BSSSegStack(nullptr), ConstSegStack(nullptr),
157      CodeSegStack(nullptr), CurInitSeg(nullptr), VisContext(nullptr),
158      PragmaAttributeCurrentTargetDecl(nullptr),
159      IsBuildingRecoveryCallExpr(false), Cleanup{}, LateTemplateParser(nullptr),
160      LateTemplateParserCleanup(nullptr), OpaqueParser(nullptr), IdResolver(pp),
161      StdExperimentalNamespaceCache(nullptr), StdInitializerList(nullptr),
162      StdCoroutineTraitsCache(nullptr), CXXTypeInfoDecl(nullptr),
163      MSVCGuidDecl(nullptr), NSNumberDecl(nullptr), NSValueDecl(nullptr),
164      NSStringDecl(nullptr), StringWithUTF8StringMethod(nullptr),
165      ValueWithBytesObjCTypeMethod(nullptr), NSArrayDecl(nullptr),
166      ArrayWithObjectsMethod(nullptr), NSDictionaryDecl(nullptr),
167      DictionaryWithObjectsMethod(nullptr), GlobalNewDeleteDeclared(false),
168      TUKind(TUKind), NumSFINAEErrors(0),
169      FullyCheckedComparisonCategories(
170          static_cast<unsigned>(ComparisonCategoryType::Last) + 1),
171      SatisfactionCache(Context), AccessCheckingSFINAE(false),
172      InNonInstantiationSFINAEContext(false), NonInstantiationEntries(0),
173      ArgumentPackSubstitutionIndex(-1), CurrentInstantiationScope(nullptr),
174      DisableTypoCorrection(false), TyposCorrected(0), AnalysisWarnings(*this),
175      ThreadSafetyDeclCache(nullptr), VarDataSharingAttributesStack(nullptr),
176      CurScope(nullptr), Ident_super(nullptr), Ident___float128(nullptr) {
177  TUScope = nullptr;
178  isConstantEvaluatedOverride = false;
179
180  LoadedExternalKnownNamespaces = false;
181  for (unsigned I = 0; I != NSAPI::NumNSNumberLiteralMethods; ++I)
182    NSNumberLiteralMethods[I] = nullptr;
183
184  if (getLangOpts().ObjC)
185    NSAPIObj.reset(new NSAPI(Context));
186
187  if (getLangOpts().CPlusPlus)
188    FieldCollector.reset(new CXXFieldCollector());
189
190  // Tell diagnostics how to render things from the AST library.
191  Diags.SetArgToStringFn(&FormatASTNodeDiagnosticArgument, &Context);
192
193  ExprEvalContexts.emplace_back(
194      ExpressionEvaluationContext::PotentiallyEvaluated, 0, CleanupInfo{},
195      nullptr, ExpressionEvaluationContextRecord::EK_Other);
196
197  // Initialization of data sharing attributes stack for OpenMP
198  InitDataSharingAttributesStack();
199
200  std::unique_ptr<sema::SemaPPCallbacks> Callbacks =
201      std::make_unique<sema::SemaPPCallbacks>();
202  SemaPPCallbackHandler = Callbacks.get();
203  PP.addPPCallbacks(std::move(Callbacks));
204  SemaPPCallbackHandler->set(*this);
205}
206
207// Anchor Sema's type info to this TU.
208void Sema::anchor() {}
209
210void Sema::addImplicitTypedef(StringRef Name, QualType T) {
211  DeclarationName DN = &Context.Idents.get(Name);
212  if (IdResolver.begin(DN) == IdResolver.end())
213    PushOnScopeChains(Context.buildImplicitTypedef(T, Name), TUScope);
214}
215
216void Sema::Initialize() {
217  if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
218    SC->InitializeSema(*this);
219
220  // Tell the external Sema source about this Sema object.
221  if (ExternalSemaSource *ExternalSema
222      = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
223    ExternalSema->InitializeSema(*this);
224
225  // This needs to happen after ExternalSemaSource::InitializeSema(this) or we
226  // will not be able to merge any duplicate __va_list_tag decls correctly.
227  VAListTagName = PP.getIdentifierInfo("__va_list_tag");
228
229  if (!TUScope)
230    return;
231
232  // Initialize predefined 128-bit integer types, if needed.
233  if (Context.getTargetInfo().hasInt128Type()) {
234    // If either of the 128-bit integer types are unavailable to name lookup,
235    // define them now.
236    DeclarationName Int128 = &Context.Idents.get("__int128_t");
237    if (IdResolver.begin(Int128) == IdResolver.end())
238      PushOnScopeChains(Context.getInt128Decl(), TUScope);
239
240    DeclarationName UInt128 = &Context.Idents.get("__uint128_t");
241    if (IdResolver.begin(UInt128) == IdResolver.end())
242      PushOnScopeChains(Context.getUInt128Decl(), TUScope);
243  }
244
245
246  // Initialize predefined Objective-C types:
247  if (getLangOpts().ObjC) {
248    // If 'SEL' does not yet refer to any declarations, make it refer to the
249    // predefined 'SEL'.
250    DeclarationName SEL = &Context.Idents.get("SEL");
251    if (IdResolver.begin(SEL) == IdResolver.end())
252      PushOnScopeChains(Context.getObjCSelDecl(), TUScope);
253
254    // If 'id' does not yet refer to any declarations, make it refer to the
255    // predefined 'id'.
256    DeclarationName Id = &Context.Idents.get("id");
257    if (IdResolver.begin(Id) == IdResolver.end())
258      PushOnScopeChains(Context.getObjCIdDecl(), TUScope);
259
260    // Create the built-in typedef for 'Class'.
261    DeclarationName Class = &Context.Idents.get("Class");
262    if (IdResolver.begin(Class) == IdResolver.end())
263      PushOnScopeChains(Context.getObjCClassDecl(), TUScope);
264
265    // Create the built-in forward declaratino for 'Protocol'.
266    DeclarationName Protocol = &Context.Idents.get("Protocol");
267    if (IdResolver.begin(Protocol) == IdResolver.end())
268      PushOnScopeChains(Context.getObjCProtocolDecl(), TUScope);
269  }
270
271  // Create the internal type for the *StringMakeConstantString builtins.
272  DeclarationName ConstantString = &Context.Idents.get("__NSConstantString");
273  if (IdResolver.begin(ConstantString) == IdResolver.end())
274    PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope);
275
276  // Initialize Microsoft "predefined C++ types".
277  if (getLangOpts().MSVCCompat) {
278    if (getLangOpts().CPlusPlus &&
279        IdResolver.begin(&Context.Idents.get("type_info")) == IdResolver.end())
280      PushOnScopeChains(Context.buildImplicitRecord("type_info", TTK_Class),
281                        TUScope);
282
283    addImplicitTypedef("size_t", Context.getSizeType());
284  }
285
286  // Initialize predefined OpenCL types and supported extensions and (optional)
287  // core features.
288  if (getLangOpts().OpenCL) {
289    getOpenCLOptions().addSupport(
290        Context.getTargetInfo().getSupportedOpenCLOpts());
291    getOpenCLOptions().enableSupportedCore(getLangOpts());
292    addImplicitTypedef("sampler_t", Context.OCLSamplerTy);
293    addImplicitTypedef("event_t", Context.OCLEventTy);
294    if (getLangOpts().OpenCLCPlusPlus || getLangOpts().OpenCLVersion >= 200) {
295      addImplicitTypedef("clk_event_t", Context.OCLClkEventTy);
296      addImplicitTypedef("queue_t", Context.OCLQueueTy);
297      addImplicitTypedef("reserve_id_t", Context.OCLReserveIDTy);
298      addImplicitTypedef("atomic_int", Context.getAtomicType(Context.IntTy));
299      addImplicitTypedef("atomic_uint",
300                         Context.getAtomicType(Context.UnsignedIntTy));
301      auto AtomicLongT = Context.getAtomicType(Context.LongTy);
302      addImplicitTypedef("atomic_long", AtomicLongT);
303      auto AtomicULongT = Context.getAtomicType(Context.UnsignedLongTy);
304      addImplicitTypedef("atomic_ulong", AtomicULongT);
305      addImplicitTypedef("atomic_float",
306                         Context.getAtomicType(Context.FloatTy));
307      auto AtomicDoubleT = Context.getAtomicType(Context.DoubleTy);
308      addImplicitTypedef("atomic_double", AtomicDoubleT);
309      // OpenCLC v2.0, s6.13.11.6 requires that atomic_flag is implemented as
310      // 32-bit integer and OpenCLC v2.0, s6.1.1 int is always 32-bit wide.
311      addImplicitTypedef("atomic_flag", Context.getAtomicType(Context.IntTy));
312      auto AtomicIntPtrT = Context.getAtomicType(Context.getIntPtrType());
313      addImplicitTypedef("atomic_intptr_t", AtomicIntPtrT);
314      auto AtomicUIntPtrT = Context.getAtomicType(Context.getUIntPtrType());
315      addImplicitTypedef("atomic_uintptr_t", AtomicUIntPtrT);
316      auto AtomicSizeT = Context.getAtomicType(Context.getSizeType());
317      addImplicitTypedef("atomic_size_t", AtomicSizeT);
318      auto AtomicPtrDiffT = Context.getAtomicType(Context.getPointerDiffType());
319      addImplicitTypedef("atomic_ptrdiff_t", AtomicPtrDiffT);
320
321      // OpenCL v2.0 s6.13.11.6:
322      // - The atomic_long and atomic_ulong types are supported if the
323      //   cl_khr_int64_base_atomics and cl_khr_int64_extended_atomics
324      //   extensions are supported.
325      // - The atomic_double type is only supported if double precision
326      //   is supported and the cl_khr_int64_base_atomics and
327      //   cl_khr_int64_extended_atomics extensions are supported.
328      // - If the device address space is 64-bits, the data types
329      //   atomic_intptr_t, atomic_uintptr_t, atomic_size_t and
330      //   atomic_ptrdiff_t are supported if the cl_khr_int64_base_atomics and
331      //   cl_khr_int64_extended_atomics extensions are supported.
332      std::vector<QualType> Atomic64BitTypes;
333      Atomic64BitTypes.push_back(AtomicLongT);
334      Atomic64BitTypes.push_back(AtomicULongT);
335      Atomic64BitTypes.push_back(AtomicDoubleT);
336      if (Context.getTypeSize(AtomicSizeT) == 64) {
337        Atomic64BitTypes.push_back(AtomicSizeT);
338        Atomic64BitTypes.push_back(AtomicIntPtrT);
339        Atomic64BitTypes.push_back(AtomicUIntPtrT);
340        Atomic64BitTypes.push_back(AtomicPtrDiffT);
341      }
342      for (auto &I : Atomic64BitTypes)
343        setOpenCLExtensionForType(I,
344            "cl_khr_int64_base_atomics cl_khr_int64_extended_atomics");
345
346      setOpenCLExtensionForType(AtomicDoubleT, "cl_khr_fp64");
347    }
348
349    setOpenCLExtensionForType(Context.DoubleTy, "cl_khr_fp64");
350
351#define GENERIC_IMAGE_TYPE_EXT(Type, Id, Ext) \
352    setOpenCLExtensionForType(Context.Id, Ext);
353#include "clang/Basic/OpenCLImageTypes.def"
354#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
355    addImplicitTypedef(#ExtType, Context.Id##Ty); \
356    setOpenCLExtensionForType(Context.Id##Ty, #Ext);
357#include "clang/Basic/OpenCLExtensionTypes.def"
358  }
359
360  if (Context.getTargetInfo().hasAArch64SVETypes()) {
361#define SVE_TYPE(Name, Id, SingletonId) \
362    addImplicitTypedef(Name, Context.SingletonId);
363#include "clang/Basic/AArch64SVEACLETypes.def"
364  }
365
366  if (Context.getTargetInfo().hasBuiltinMSVaList()) {
367    DeclarationName MSVaList = &Context.Idents.get("__builtin_ms_va_list");
368    if (IdResolver.begin(MSVaList) == IdResolver.end())
369      PushOnScopeChains(Context.getBuiltinMSVaListDecl(), TUScope);
370  }
371
372  DeclarationName BuiltinVaList = &Context.Idents.get("__builtin_va_list");
373  if (IdResolver.begin(BuiltinVaList) == IdResolver.end())
374    PushOnScopeChains(Context.getBuiltinVaListDecl(), TUScope);
375}
376
377Sema::~Sema() {
378  if (VisContext) FreeVisContext();
379
380  // Kill all the active scopes.
381  for (sema::FunctionScopeInfo *FSI : FunctionScopes)
382    delete FSI;
383
384  // Tell the SemaConsumer to forget about us; we're going out of scope.
385  if (SemaConsumer *SC = dyn_cast<SemaConsumer>(&Consumer))
386    SC->ForgetSema();
387
388  // Detach from the external Sema source.
389  if (ExternalSemaSource *ExternalSema
390        = dyn_cast_or_null<ExternalSemaSource>(Context.getExternalSource()))
391    ExternalSema->ForgetSema();
392
393  // If Sema's ExternalSource is the multiplexer - we own it.
394  if (isMultiplexExternalSource)
395    delete ExternalSource;
396
397  // Delete cached satisfactions.
398  std::vector<ConstraintSatisfaction *> Satisfactions;
399  Satisfactions.reserve(Satisfactions.size());
400  for (auto &Node : SatisfactionCache)
401    Satisfactions.push_back(&Node);
402  for (auto *Node : Satisfactions)
403    delete Node;
404
405  threadSafety::threadSafetyCleanup(ThreadSafetyDeclCache);
406
407  // Destroys data sharing attributes stack for OpenMP
408  DestroyDataSharingAttributesStack();
409
410  // Detach from the PP callback handler which outlives Sema since it's owned
411  // by the preprocessor.
412  SemaPPCallbackHandler->reset();
413}
414
415void Sema::warnStackExhausted(SourceLocation Loc) {
416  // Only warn about this once.
417  if (!WarnedStackExhausted) {
418    Diag(Loc, diag::warn_stack_exhausted);
419    WarnedStackExhausted = true;
420  }
421}
422
423void Sema::runWithSufficientStackSpace(SourceLocation Loc,
424                                       llvm::function_ref<void()> Fn) {
425  clang::runWithSufficientStackSpace([&] { warnStackExhausted(Loc); }, Fn);
426}
427
428/// makeUnavailableInSystemHeader - There is an error in the current
429/// context.  If we're still in a system header, and we can plausibly
430/// make the relevant declaration unavailable instead of erroring, do
431/// so and return true.
432bool Sema::makeUnavailableInSystemHeader(SourceLocation loc,
433                                      UnavailableAttr::ImplicitReason reason) {
434  // If we're not in a function, it's an error.
435  FunctionDecl *fn = dyn_cast<FunctionDecl>(CurContext);
436  if (!fn) return false;
437
438  // If we're in template instantiation, it's an error.
439  if (inTemplateInstantiation())
440    return false;
441
442  // If that function's not in a system header, it's an error.
443  if (!Context.getSourceManager().isInSystemHeader(loc))
444    return false;
445
446  // If the function is already unavailable, it's not an error.
447  if (fn->hasAttr<UnavailableAttr>()) return true;
448
449  fn->addAttr(UnavailableAttr::CreateImplicit(Context, "", reason, loc));
450  return true;
451}
452
453ASTMutationListener *Sema::getASTMutationListener() const {
454  return getASTConsumer().GetASTMutationListener();
455}
456
457///Registers an external source. If an external source already exists,
458/// creates a multiplex external source and appends to it.
459///
460///\param[in] E - A non-null external sema source.
461///
462void Sema::addExternalSource(ExternalSemaSource *E) {
463  assert(E && "Cannot use with NULL ptr");
464
465  if (!ExternalSource) {
466    ExternalSource = E;
467    return;
468  }
469
470  if (isMultiplexExternalSource)
471    static_cast<MultiplexExternalSemaSource*>(ExternalSource)->addSource(*E);
472  else {
473    ExternalSource = new MultiplexExternalSemaSource(*ExternalSource, *E);
474    isMultiplexExternalSource = true;
475  }
476}
477
478/// Print out statistics about the semantic analysis.
479void Sema::PrintStats() const {
480  llvm::errs() << "\n*** Semantic Analysis Stats:\n";
481  llvm::errs() << NumSFINAEErrors << " SFINAE diagnostics trapped.\n";
482
483  BumpAlloc.PrintStats();
484  AnalysisWarnings.PrintStats();
485}
486
487void Sema::diagnoseNullableToNonnullConversion(QualType DstType,
488                                               QualType SrcType,
489                                               SourceLocation Loc) {
490  Optional<NullabilityKind> ExprNullability = SrcType->getNullability(Context);
491  if (!ExprNullability || *ExprNullability != NullabilityKind::Nullable)
492    return;
493
494  Optional<NullabilityKind> TypeNullability = DstType->getNullability(Context);
495  if (!TypeNullability || *TypeNullability != NullabilityKind::NonNull)
496    return;
497
498  Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType;
499}
500
501void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr* E) {
502  if (Diags.isIgnored(diag::warn_zero_as_null_pointer_constant,
503                      E->getBeginLoc()))
504    return;
505  // nullptr only exists from C++11 on, so don't warn on its absence earlier.
506  if (!getLangOpts().CPlusPlus11)
507    return;
508
509  if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer)
510    return;
511  if (E->IgnoreParenImpCasts()->getType()->isNullPtrType())
512    return;
513
514  // If it is a macro from system header, and if the macro name is not "NULL",
515  // do not warn.
516  SourceLocation MaybeMacroLoc = E->getBeginLoc();
517  if (Diags.getSuppressSystemWarnings() &&
518      SourceMgr.isInSystemMacro(MaybeMacroLoc) &&
519      !findMacroSpelling(MaybeMacroLoc, "NULL"))
520    return;
521
522  Diag(E->getBeginLoc(), diag::warn_zero_as_null_pointer_constant)
523      << FixItHint::CreateReplacement(E->getSourceRange(), "nullptr");
524}
525
526/// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast.
527/// If there is already an implicit cast, merge into the existing one.
528/// The result is of the given category.
529ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty,
530                                   CastKind Kind, ExprValueKind VK,
531                                   const CXXCastPath *BasePath,
532                                   CheckedConversionKind CCK) {
533#ifndef NDEBUG
534  if (VK == VK_RValue && !E->isRValue()) {
535    switch (Kind) {
536    default:
537      llvm_unreachable("can't implicitly cast lvalue to rvalue with this cast "
538                       "kind");
539    case CK_Dependent:
540    case CK_LValueToRValue:
541    case CK_ArrayToPointerDecay:
542    case CK_FunctionToPointerDecay:
543    case CK_ToVoid:
544    case CK_NonAtomicToAtomic:
545      break;
546    }
547  }
548  assert((VK == VK_RValue || Kind == CK_Dependent || !E->isRValue()) &&
549         "can't cast rvalue to lvalue");
550#endif
551
552  diagnoseNullableToNonnullConversion(Ty, E->getType(), E->getBeginLoc());
553  diagnoseZeroToNullptrConversion(Kind, E);
554
555  QualType ExprTy = Context.getCanonicalType(E->getType());
556  QualType TypeTy = Context.getCanonicalType(Ty);
557
558  if (ExprTy == TypeTy)
559    return E;
560
561  // C++1z [conv.array]: The temporary materialization conversion is applied.
562  // We also use this to fuel C++ DR1213, which applies to C++11 onwards.
563  if (Kind == CK_ArrayToPointerDecay && getLangOpts().CPlusPlus &&
564      E->getValueKind() == VK_RValue) {
565    // The temporary is an lvalue in C++98 and an xvalue otherwise.
566    ExprResult Materialized = CreateMaterializeTemporaryExpr(
567        E->getType(), E, !getLangOpts().CPlusPlus11);
568    if (Materialized.isInvalid())
569      return ExprError();
570    E = Materialized.get();
571  }
572
573  if (ImplicitCastExpr *ImpCast = dyn_cast<ImplicitCastExpr>(E)) {
574    if (ImpCast->getCastKind() == Kind && (!BasePath || BasePath->empty())) {
575      ImpCast->setType(Ty);
576      ImpCast->setValueKind(VK);
577      return E;
578    }
579  }
580
581  return ImplicitCastExpr::Create(Context, Ty, Kind, E, BasePath, VK);
582}
583
584/// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding
585/// to the conversion from scalar type ScalarTy to the Boolean type.
586CastKind Sema::ScalarTypeToBooleanCastKind(QualType ScalarTy) {
587  switch (ScalarTy->getScalarTypeKind()) {
588  case Type::STK_Bool: return CK_NoOp;
589  case Type::STK_CPointer: return CK_PointerToBoolean;
590  case Type::STK_BlockPointer: return CK_PointerToBoolean;
591  case Type::STK_ObjCObjectPointer: return CK_PointerToBoolean;
592  case Type::STK_MemberPointer: return CK_MemberPointerToBoolean;
593  case Type::STK_Integral: return CK_IntegralToBoolean;
594  case Type::STK_Floating: return CK_FloatingToBoolean;
595  case Type::STK_IntegralComplex: return CK_IntegralComplexToBoolean;
596  case Type::STK_FloatingComplex: return CK_FloatingComplexToBoolean;
597  case Type::STK_FixedPoint: return CK_FixedPointToBoolean;
598  }
599  llvm_unreachable("unknown scalar type kind");
600}
601
602/// Used to prune the decls of Sema's UnusedFileScopedDecls vector.
603static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D) {
604  if (D->getMostRecentDecl()->isUsed())
605    return true;
606
607  if (D->isExternallyVisible())
608    return true;
609
610  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
611    // If this is a function template and none of its specializations is used,
612    // we should warn.
613    if (FunctionTemplateDecl *Template = FD->getDescribedFunctionTemplate())
614      for (const auto *Spec : Template->specializations())
615        if (ShouldRemoveFromUnused(SemaRef, Spec))
616          return true;
617
618    // UnusedFileScopedDecls stores the first declaration.
619    // The declaration may have become definition so check again.
620    const FunctionDecl *DeclToCheck;
621    if (FD->hasBody(DeclToCheck))
622      return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
623
624    // Later redecls may add new information resulting in not having to warn,
625    // so check again.
626    DeclToCheck = FD->getMostRecentDecl();
627    if (DeclToCheck != FD)
628      return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
629  }
630
631  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
632    // If a variable usable in constant expressions is referenced,
633    // don't warn if it isn't used: if the value of a variable is required
634    // for the computation of a constant expression, it doesn't make sense to
635    // warn even if the variable isn't odr-used.  (isReferenced doesn't
636    // precisely reflect that, but it's a decent approximation.)
637    if (VD->isReferenced() &&
638        VD->mightBeUsableInConstantExpressions(SemaRef->Context))
639      return true;
640
641    if (VarTemplateDecl *Template = VD->getDescribedVarTemplate())
642      // If this is a variable template and none of its specializations is used,
643      // we should warn.
644      for (const auto *Spec : Template->specializations())
645        if (ShouldRemoveFromUnused(SemaRef, Spec))
646          return true;
647
648    // UnusedFileScopedDecls stores the first declaration.
649    // The declaration may have become definition so check again.
650    const VarDecl *DeclToCheck = VD->getDefinition();
651    if (DeclToCheck)
652      return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
653
654    // Later redecls may add new information resulting in not having to warn,
655    // so check again.
656    DeclToCheck = VD->getMostRecentDecl();
657    if (DeclToCheck != VD)
658      return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
659  }
660
661  return false;
662}
663
664static bool isFunctionOrVarDeclExternC(NamedDecl *ND) {
665  if (auto *FD = dyn_cast<FunctionDecl>(ND))
666    return FD->isExternC();
667  return cast<VarDecl>(ND)->isExternC();
668}
669
670/// Determine whether ND is an external-linkage function or variable whose
671/// type has no linkage.
672bool Sema::isExternalWithNoLinkageType(ValueDecl *VD) {
673  // Note: it's not quite enough to check whether VD has UniqueExternalLinkage,
674  // because we also want to catch the case where its type has VisibleNoLinkage,
675  // which does not affect the linkage of VD.
676  return getLangOpts().CPlusPlus && VD->hasExternalFormalLinkage() &&
677         !isExternalFormalLinkage(VD->getType()->getLinkage()) &&
678         !isFunctionOrVarDeclExternC(VD);
679}
680
681/// Obtains a sorted list of functions and variables that are undefined but
682/// ODR-used.
683void Sema::getUndefinedButUsed(
684    SmallVectorImpl<std::pair<NamedDecl *, SourceLocation> > &Undefined) {
685  for (const auto &UndefinedUse : UndefinedButUsed) {
686    NamedDecl *ND = UndefinedUse.first;
687
688    // Ignore attributes that have become invalid.
689    if (ND->isInvalidDecl()) continue;
690
691    // __attribute__((weakref)) is basically a definition.
692    if (ND->hasAttr<WeakRefAttr>()) continue;
693
694    if (isa<CXXDeductionGuideDecl>(ND))
695      continue;
696
697    if (ND->hasAttr<DLLImportAttr>() || ND->hasAttr<DLLExportAttr>()) {
698      // An exported function will always be emitted when defined, so even if
699      // the function is inline, it doesn't have to be emitted in this TU. An
700      // imported function implies that it has been exported somewhere else.
701      continue;
702    }
703
704    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) {
705      if (FD->isDefined())
706        continue;
707      if (FD->isExternallyVisible() &&
708          !isExternalWithNoLinkageType(FD) &&
709          !FD->getMostRecentDecl()->isInlined() &&
710          !FD->hasAttr<ExcludeFromExplicitInstantiationAttr>())
711        continue;
712      if (FD->getBuiltinID())
713        continue;
714    } else {
715      auto *VD = cast<VarDecl>(ND);
716      if (VD->hasDefinition() != VarDecl::DeclarationOnly)
717        continue;
718      if (VD->isExternallyVisible() &&
719          !isExternalWithNoLinkageType(VD) &&
720          !VD->getMostRecentDecl()->isInline() &&
721          !VD->hasAttr<ExcludeFromExplicitInstantiationAttr>())
722        continue;
723
724      // Skip VarDecls that lack formal definitions but which we know are in
725      // fact defined somewhere.
726      if (VD->isKnownToBeDefined())
727        continue;
728    }
729
730    Undefined.push_back(std::make_pair(ND, UndefinedUse.second));
731  }
732}
733
734/// checkUndefinedButUsed - Check for undefined objects with internal linkage
735/// or that are inline.
736static void checkUndefinedButUsed(Sema &S) {
737  if (S.UndefinedButUsed.empty()) return;
738
739  // Collect all the still-undefined entities with internal linkage.
740  SmallVector<std::pair<NamedDecl *, SourceLocation>, 16> Undefined;
741  S.getUndefinedButUsed(Undefined);
742  if (Undefined.empty()) return;
743
744  for (auto Undef : Undefined) {
745    ValueDecl *VD = cast<ValueDecl>(Undef.first);
746    SourceLocation UseLoc = Undef.second;
747
748    if (S.isExternalWithNoLinkageType(VD)) {
749      // C++ [basic.link]p8:
750      //   A type without linkage shall not be used as the type of a variable
751      //   or function with external linkage unless
752      //    -- the entity has C language linkage
753      //    -- the entity is not odr-used or is defined in the same TU
754      //
755      // As an extension, accept this in cases where the type is externally
756      // visible, since the function or variable actually can be defined in
757      // another translation unit in that case.
758      S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage())
759                                    ? diag::ext_undefined_internal_type
760                                    : diag::err_undefined_internal_type)
761        << isa<VarDecl>(VD) << VD;
762    } else if (!VD->isExternallyVisible()) {
763      // FIXME: We can promote this to an error. The function or variable can't
764      // be defined anywhere else, so the program must necessarily violate the
765      // one definition rule.
766      S.Diag(VD->getLocation(), diag::warn_undefined_internal)
767        << isa<VarDecl>(VD) << VD;
768    } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) {
769      (void)FD;
770      assert(FD->getMostRecentDecl()->isInlined() &&
771             "used object requires definition but isn't inline or internal?");
772      // FIXME: This is ill-formed; we should reject.
773      S.Diag(VD->getLocation(), diag::warn_undefined_inline) << VD;
774    } else {
775      assert(cast<VarDecl>(VD)->getMostRecentDecl()->isInline() &&
776             "used var requires definition but isn't inline or internal?");
777      S.Diag(VD->getLocation(), diag::err_undefined_inline_var) << VD;
778    }
779    if (UseLoc.isValid())
780      S.Diag(UseLoc, diag::note_used_here);
781  }
782
783  S.UndefinedButUsed.clear();
784}
785
786void Sema::LoadExternalWeakUndeclaredIdentifiers() {
787  if (!ExternalSource)
788    return;
789
790  SmallVector<std::pair<IdentifierInfo *, WeakInfo>, 4> WeakIDs;
791  ExternalSource->ReadWeakUndeclaredIdentifiers(WeakIDs);
792  for (auto &WeakID : WeakIDs)
793    WeakUndeclaredIdentifiers.insert(WeakID);
794}
795
796
797typedef llvm::DenseMap<const CXXRecordDecl*, bool> RecordCompleteMap;
798
799/// Returns true, if all methods and nested classes of the given
800/// CXXRecordDecl are defined in this translation unit.
801///
802/// Should only be called from ActOnEndOfTranslationUnit so that all
803/// definitions are actually read.
804static bool MethodsAndNestedClassesComplete(const CXXRecordDecl *RD,
805                                            RecordCompleteMap &MNCComplete) {
806  RecordCompleteMap::iterator Cache = MNCComplete.find(RD);
807  if (Cache != MNCComplete.end())
808    return Cache->second;
809  if (!RD->isCompleteDefinition())
810    return false;
811  bool Complete = true;
812  for (DeclContext::decl_iterator I = RD->decls_begin(),
813                                  E = RD->decls_end();
814       I != E && Complete; ++I) {
815    if (const CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(*I))
816      Complete = M->isDefined() || M->isDefaulted() ||
817                 (M->isPure() && !isa<CXXDestructorDecl>(M));
818    else if (const FunctionTemplateDecl *F = dyn_cast<FunctionTemplateDecl>(*I))
819      // If the template function is marked as late template parsed at this
820      // point, it has not been instantiated and therefore we have not
821      // performed semantic analysis on it yet, so we cannot know if the type
822      // can be considered complete.
823      Complete = !F->getTemplatedDecl()->isLateTemplateParsed() &&
824                  F->getTemplatedDecl()->isDefined();
825    else if (const CXXRecordDecl *R = dyn_cast<CXXRecordDecl>(*I)) {
826      if (R->isInjectedClassName())
827        continue;
828      if (R->hasDefinition())
829        Complete = MethodsAndNestedClassesComplete(R->getDefinition(),
830                                                   MNCComplete);
831      else
832        Complete = false;
833    }
834  }
835  MNCComplete[RD] = Complete;
836  return Complete;
837}
838
839/// Returns true, if the given CXXRecordDecl is fully defined in this
840/// translation unit, i.e. all methods are defined or pure virtual and all
841/// friends, friend functions and nested classes are fully defined in this
842/// translation unit.
843///
844/// Should only be called from ActOnEndOfTranslationUnit so that all
845/// definitions are actually read.
846static bool IsRecordFullyDefined(const CXXRecordDecl *RD,
847                                 RecordCompleteMap &RecordsComplete,
848                                 RecordCompleteMap &MNCComplete) {
849  RecordCompleteMap::iterator Cache = RecordsComplete.find(RD);
850  if (Cache != RecordsComplete.end())
851    return Cache->second;
852  bool Complete = MethodsAndNestedClassesComplete(RD, MNCComplete);
853  for (CXXRecordDecl::friend_iterator I = RD->friend_begin(),
854                                      E = RD->friend_end();
855       I != E && Complete; ++I) {
856    // Check if friend classes and methods are complete.
857    if (TypeSourceInfo *TSI = (*I)->getFriendType()) {
858      // Friend classes are available as the TypeSourceInfo of the FriendDecl.
859      if (CXXRecordDecl *FriendD = TSI->getType()->getAsCXXRecordDecl())
860        Complete = MethodsAndNestedClassesComplete(FriendD, MNCComplete);
861      else
862        Complete = false;
863    } else {
864      // Friend functions are available through the NamedDecl of FriendDecl.
865      if (const FunctionDecl *FD =
866          dyn_cast<FunctionDecl>((*I)->getFriendDecl()))
867        Complete = FD->isDefined();
868      else
869        // This is a template friend, give up.
870        Complete = false;
871    }
872  }
873  RecordsComplete[RD] = Complete;
874  return Complete;
875}
876
877void Sema::emitAndClearUnusedLocalTypedefWarnings() {
878  if (ExternalSource)
879    ExternalSource->ReadUnusedLocalTypedefNameCandidates(
880        UnusedLocalTypedefNameCandidates);
881  for (const TypedefNameDecl *TD : UnusedLocalTypedefNameCandidates) {
882    if (TD->isReferenced())
883      continue;
884    Diag(TD->getLocation(), diag::warn_unused_local_typedef)
885        << isa<TypeAliasDecl>(TD) << TD->getDeclName();
886  }
887  UnusedLocalTypedefNameCandidates.clear();
888}
889
890/// This is called before the very first declaration in the translation unit
891/// is parsed. Note that the ASTContext may have already injected some
892/// declarations.
893void Sema::ActOnStartOfTranslationUnit() {
894  if (getLangOpts().ModulesTS &&
895      (getLangOpts().getCompilingModule() == LangOptions::CMK_ModuleInterface ||
896       getLangOpts().getCompilingModule() == LangOptions::CMK_None)) {
897    // We start in an implied global module fragment.
898    SourceLocation StartOfTU =
899        SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
900    ActOnGlobalModuleFragmentDecl(StartOfTU);
901    ModuleScopes.back().ImplicitGlobalModuleFragment = true;
902  }
903}
904
905void Sema::ActOnEndOfTranslationUnitFragment(TUFragmentKind Kind) {
906  // No explicit actions are required at the end of the global module fragment.
907  if (Kind == TUFragmentKind::Global)
908    return;
909
910  // Transfer late parsed template instantiations over to the pending template
911  // instantiation list. During normal compilation, the late template parser
912  // will be installed and instantiating these templates will succeed.
913  //
914  // If we are building a TU prefix for serialization, it is also safe to
915  // transfer these over, even though they are not parsed. The end of the TU
916  // should be outside of any eager template instantiation scope, so when this
917  // AST is deserialized, these templates will not be parsed until the end of
918  // the combined TU.
919  PendingInstantiations.insert(PendingInstantiations.end(),
920                               LateParsedInstantiations.begin(),
921                               LateParsedInstantiations.end());
922  LateParsedInstantiations.clear();
923
924  // If DefinedUsedVTables ends up marking any virtual member functions it
925  // might lead to more pending template instantiations, which we then need
926  // to instantiate.
927  DefineUsedVTables();
928
929  // C++: Perform implicit template instantiations.
930  //
931  // FIXME: When we perform these implicit instantiations, we do not
932  // carefully keep track of the point of instantiation (C++ [temp.point]).
933  // This means that name lookup that occurs within the template
934  // instantiation will always happen at the end of the translation unit,
935  // so it will find some names that are not required to be found. This is
936  // valid, but we could do better by diagnosing if an instantiation uses a
937  // name that was not visible at its first point of instantiation.
938  if (ExternalSource) {
939    // Load pending instantiations from the external source.
940    SmallVector<PendingImplicitInstantiation, 4> Pending;
941    ExternalSource->ReadPendingInstantiations(Pending);
942    for (auto PII : Pending)
943      if (auto Func = dyn_cast<FunctionDecl>(PII.first))
944        Func->setInstantiationIsPending(true);
945    PendingInstantiations.insert(PendingInstantiations.begin(),
946                                 Pending.begin(), Pending.end());
947  }
948
949  {
950    llvm::TimeTraceScope TimeScope("PerformPendingInstantiations");
951    PerformPendingInstantiations();
952  }
953
954  // Finalize analysis of OpenMP-specific constructs.
955  if (LangOpts.OpenMP)
956    finalizeOpenMPDelayedAnalysis();
957
958  assert(LateParsedInstantiations.empty() &&
959         "end of TU template instantiation should not create more "
960         "late-parsed templates");
961
962  // Report diagnostics for uncorrected delayed typos. Ideally all of them
963  // should have been corrected by that time, but it is very hard to cover all
964  // cases in practice.
965  for (const auto &Typo : DelayedTypos) {
966    // We pass an empty TypoCorrection to indicate no correction was performed.
967    Typo.second.DiagHandler(TypoCorrection());
968  }
969  DelayedTypos.clear();
970}
971
972/// ActOnEndOfTranslationUnit - This is called at the very end of the
973/// translation unit when EOF is reached and all but the top-level scope is
974/// popped.
975void Sema::ActOnEndOfTranslationUnit() {
976  assert(DelayedDiagnostics.getCurrentPool() == nullptr
977         && "reached end of translation unit with a pool attached?");
978
979  // If code completion is enabled, don't perform any end-of-translation-unit
980  // work.
981  if (PP.isCodeCompletionEnabled())
982    return;
983
984  // Complete translation units and modules define vtables and perform implicit
985  // instantiations. PCH files do not.
986  if (TUKind != TU_Prefix) {
987    DiagnoseUseOfUnimplementedSelectors();
988
989    ActOnEndOfTranslationUnitFragment(
990        !ModuleScopes.empty() && ModuleScopes.back().Module->Kind ==
991                                     Module::PrivateModuleFragment
992            ? TUFragmentKind::Private
993            : TUFragmentKind::Normal);
994
995    if (LateTemplateParserCleanup)
996      LateTemplateParserCleanup(OpaqueParser);
997
998    CheckDelayedMemberExceptionSpecs();
999  } else {
1000    // If we are building a TU prefix for serialization, it is safe to transfer
1001    // these over, even though they are not parsed. The end of the TU should be
1002    // outside of any eager template instantiation scope, so when this AST is
1003    // deserialized, these templates will not be parsed until the end of the
1004    // combined TU.
1005    PendingInstantiations.insert(PendingInstantiations.end(),
1006                                 LateParsedInstantiations.begin(),
1007                                 LateParsedInstantiations.end());
1008    LateParsedInstantiations.clear();
1009  }
1010
1011  DiagnoseUnterminatedPragmaPack();
1012  DiagnoseUnterminatedPragmaAttribute();
1013
1014  // All delayed member exception specs should be checked or we end up accepting
1015  // incompatible declarations.
1016  assert(DelayedOverridingExceptionSpecChecks.empty());
1017  assert(DelayedEquivalentExceptionSpecChecks.empty());
1018
1019  // All dllexport classes should have been processed already.
1020  assert(DelayedDllExportClasses.empty());
1021  assert(DelayedDllExportMemberFunctions.empty());
1022
1023  // Remove file scoped decls that turned out to be used.
1024  UnusedFileScopedDecls.erase(
1025      std::remove_if(UnusedFileScopedDecls.begin(nullptr, true),
1026                     UnusedFileScopedDecls.end(),
1027                     [this](const DeclaratorDecl *DD) {
1028                       return ShouldRemoveFromUnused(this, DD);
1029                     }),
1030      UnusedFileScopedDecls.end());
1031
1032  if (TUKind == TU_Prefix) {
1033    // Translation unit prefixes don't need any of the checking below.
1034    if (!PP.isIncrementalProcessingEnabled())
1035      TUScope = nullptr;
1036    return;
1037  }
1038
1039  // Check for #pragma weak identifiers that were never declared
1040  LoadExternalWeakUndeclaredIdentifiers();
1041  for (auto WeakID : WeakUndeclaredIdentifiers) {
1042    if (WeakID.second.getUsed())
1043      continue;
1044
1045    Decl *PrevDecl = LookupSingleName(TUScope, WeakID.first, SourceLocation(),
1046                                      LookupOrdinaryName);
1047    if (PrevDecl != nullptr &&
1048        !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))
1049      Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type)
1050          << "'weak'" << ExpectedVariableOrFunction;
1051    else
1052      Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared)
1053          << WeakID.first;
1054  }
1055
1056  if (LangOpts.CPlusPlus11 &&
1057      !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation()))
1058    CheckDelegatingCtorCycles();
1059
1060  if (!Diags.hasErrorOccurred()) {
1061    if (ExternalSource)
1062      ExternalSource->ReadUndefinedButUsed(UndefinedButUsed);
1063    checkUndefinedButUsed(*this);
1064  }
1065
1066  // A global-module-fragment is only permitted within a module unit.
1067  bool DiagnosedMissingModuleDeclaration = false;
1068  if (!ModuleScopes.empty() &&
1069      ModuleScopes.back().Module->Kind == Module::GlobalModuleFragment &&
1070      !ModuleScopes.back().ImplicitGlobalModuleFragment) {
1071    Diag(ModuleScopes.back().BeginLoc,
1072         diag::err_module_declaration_missing_after_global_module_introducer);
1073    DiagnosedMissingModuleDeclaration = true;
1074  }
1075
1076  if (TUKind == TU_Module) {
1077    // If we are building a module interface unit, we need to have seen the
1078    // module declaration by now.
1079    if (getLangOpts().getCompilingModule() ==
1080            LangOptions::CMK_ModuleInterface &&
1081        (ModuleScopes.empty() ||
1082         !ModuleScopes.back().Module->isModulePurview()) &&
1083        !DiagnosedMissingModuleDeclaration) {
1084      // FIXME: Make a better guess as to where to put the module declaration.
1085      Diag(getSourceManager().getLocForStartOfFile(
1086               getSourceManager().getMainFileID()),
1087           diag::err_module_declaration_missing);
1088    }
1089
1090    // If we are building a module, resolve all of the exported declarations
1091    // now.
1092    if (Module *CurrentModule = PP.getCurrentModule()) {
1093      ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
1094
1095      SmallVector<Module *, 2> Stack;
1096      Stack.push_back(CurrentModule);
1097      while (!Stack.empty()) {
1098        Module *Mod = Stack.pop_back_val();
1099
1100        // Resolve the exported declarations and conflicts.
1101        // FIXME: Actually complain, once we figure out how to teach the
1102        // diagnostic client to deal with complaints in the module map at this
1103        // point.
1104        ModMap.resolveExports(Mod, /*Complain=*/false);
1105        ModMap.resolveUses(Mod, /*Complain=*/false);
1106        ModMap.resolveConflicts(Mod, /*Complain=*/false);
1107
1108        // Queue the submodules, so their exports will also be resolved.
1109        Stack.append(Mod->submodule_begin(), Mod->submodule_end());
1110      }
1111    }
1112
1113    // Warnings emitted in ActOnEndOfTranslationUnit() should be emitted for
1114    // modules when they are built, not every time they are used.
1115    emitAndClearUnusedLocalTypedefWarnings();
1116  }
1117
1118  // C99 6.9.2p2:
1119  //   A declaration of an identifier for an object that has file
1120  //   scope without an initializer, and without a storage-class
1121  //   specifier or with the storage-class specifier static,
1122  //   constitutes a tentative definition. If a translation unit
1123  //   contains one or more tentative definitions for an identifier,
1124  //   and the translation unit contains no external definition for
1125  //   that identifier, then the behavior is exactly as if the
1126  //   translation unit contains a file scope declaration of that
1127  //   identifier, with the composite type as of the end of the
1128  //   translation unit, with an initializer equal to 0.
1129  llvm::SmallSet<VarDecl *, 32> Seen;
1130  for (TentativeDefinitionsType::iterator
1131            T = TentativeDefinitions.begin(ExternalSource),
1132         TEnd = TentativeDefinitions.end();
1133       T != TEnd; ++T) {
1134    VarDecl *VD = (*T)->getActingDefinition();
1135
1136    // If the tentative definition was completed, getActingDefinition() returns
1137    // null. If we've already seen this variable before, insert()'s second
1138    // return value is false.
1139    if (!VD || VD->isInvalidDecl() || !Seen.insert(VD).second)
1140      continue;
1141
1142    if (const IncompleteArrayType *ArrayT
1143        = Context.getAsIncompleteArrayType(VD->getType())) {
1144      // Set the length of the array to 1 (C99 6.9.2p5).
1145      Diag(VD->getLocation(), diag::warn_tentative_incomplete_array);
1146      llvm::APInt One(Context.getTypeSize(Context.getSizeType()), true);
1147      QualType T = Context.getConstantArrayType(ArrayT->getElementType(), One,
1148                                                nullptr, ArrayType::Normal, 0);
1149      VD->setType(T);
1150    } else if (RequireCompleteType(VD->getLocation(), VD->getType(),
1151                                   diag::err_tentative_def_incomplete_type))
1152      VD->setInvalidDecl();
1153
1154    // No initialization is performed for a tentative definition.
1155    CheckCompleteVariableDeclaration(VD);
1156
1157    // Notify the consumer that we've completed a tentative definition.
1158    if (!VD->isInvalidDecl())
1159      Consumer.CompleteTentativeDefinition(VD);
1160  }
1161
1162  for (auto D : ExternalDeclarations) {
1163    if (!D || D->isInvalidDecl() || D->getPreviousDecl() || !D->isUsed())
1164      continue;
1165
1166    Consumer.CompleteExternalDeclaration(D);
1167  }
1168
1169  // If there were errors, disable 'unused' warnings since they will mostly be
1170  // noise. Don't warn for a use from a module: either we should warn on all
1171  // file-scope declarations in modules or not at all, but whether the
1172  // declaration is used is immaterial.
1173  if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {
1174    // Output warning for unused file scoped decls.
1175    for (UnusedFileScopedDeclsType::iterator
1176           I = UnusedFileScopedDecls.begin(ExternalSource),
1177           E = UnusedFileScopedDecls.end(); I != E; ++I) {
1178      if (ShouldRemoveFromUnused(this, *I))
1179        continue;
1180
1181      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
1182        const FunctionDecl *DiagD;
1183        if (!FD->hasBody(DiagD))
1184          DiagD = FD;
1185        if (DiagD->isDeleted())
1186          continue; // Deleted functions are supposed to be unused.
1187        if (DiagD->isReferenced()) {
1188          if (isa<CXXMethodDecl>(DiagD))
1189            Diag(DiagD->getLocation(), diag::warn_unneeded_member_function)
1190                  << DiagD->getDeclName();
1191          else {
1192            if (FD->getStorageClass() == SC_Static &&
1193                !FD->isInlineSpecified() &&
1194                !SourceMgr.isInMainFile(
1195                   SourceMgr.getExpansionLoc(FD->getLocation())))
1196              Diag(DiagD->getLocation(),
1197                   diag::warn_unneeded_static_internal_decl)
1198                  << DiagD->getDeclName();
1199            else
1200              Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
1201                   << /*function*/0 << DiagD->getDeclName();
1202          }
1203        } else {
1204          if (FD->getDescribedFunctionTemplate())
1205            Diag(DiagD->getLocation(), diag::warn_unused_template)
1206              << /*function*/0 << DiagD->getDeclName();
1207          else
1208            Diag(DiagD->getLocation(),
1209                 isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function
1210                                           : diag::warn_unused_function)
1211              << DiagD->getDeclName();
1212        }
1213      } else {
1214        const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition();
1215        if (!DiagD)
1216          DiagD = cast<VarDecl>(*I);
1217        if (DiagD->isReferenced()) {
1218          Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl)
1219                << /*variable*/1 << DiagD->getDeclName();
1220        } else if (DiagD->getType().isConstQualified()) {
1221          const SourceManager &SM = SourceMgr;
1222          if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) ||
1223              !PP.getLangOpts().IsHeaderFile)
1224            Diag(DiagD->getLocation(), diag::warn_unused_const_variable)
1225                << DiagD->getDeclName();
1226        } else {
1227          if (DiagD->getDescribedVarTemplate())
1228            Diag(DiagD->getLocation(), diag::warn_unused_template)
1229              << /*variable*/1 << DiagD->getDeclName();
1230          else
1231            Diag(DiagD->getLocation(), diag::warn_unused_variable)
1232              << DiagD->getDeclName();
1233        }
1234      }
1235    }
1236
1237    emitAndClearUnusedLocalTypedefWarnings();
1238  }
1239
1240  if (!Diags.isIgnored(diag::warn_unused_private_field, SourceLocation())) {
1241    // FIXME: Load additional unused private field candidates from the external
1242    // source.
1243    RecordCompleteMap RecordsComplete;
1244    RecordCompleteMap MNCComplete;
1245    for (NamedDeclSetType::iterator I = UnusedPrivateFields.begin(),
1246         E = UnusedPrivateFields.end(); I != E; ++I) {
1247      const NamedDecl *D = *I;
1248      const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D->getDeclContext());
1249      if (RD && !RD->isUnion() &&
1250          IsRecordFullyDefined(RD, RecordsComplete, MNCComplete)) {
1251        Diag(D->getLocation(), diag::warn_unused_private_field)
1252              << D->getDeclName();
1253      }
1254    }
1255  }
1256
1257  if (!Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation())) {
1258    if (ExternalSource)
1259      ExternalSource->ReadMismatchingDeleteExpressions(DeleteExprs);
1260    for (const auto &DeletedFieldInfo : DeleteExprs) {
1261      for (const auto &DeleteExprLoc : DeletedFieldInfo.second) {
1262        AnalyzeDeleteExprMismatch(DeletedFieldInfo.first, DeleteExprLoc.first,
1263                                  DeleteExprLoc.second);
1264      }
1265    }
1266  }
1267
1268  // Check we've noticed that we're no longer parsing the initializer for every
1269  // variable. If we miss cases, then at best we have a performance issue and
1270  // at worst a rejects-valid bug.
1271  assert(ParsingInitForAutoVars.empty() &&
1272         "Didn't unmark var as having its initializer parsed");
1273
1274  if (!PP.isIncrementalProcessingEnabled())
1275    TUScope = nullptr;
1276}
1277
1278
1279//===----------------------------------------------------------------------===//
1280// Helper functions.
1281//===----------------------------------------------------------------------===//
1282
1283DeclContext *Sema::getFunctionLevelDeclContext() {
1284  DeclContext *DC = CurContext;
1285
1286  while (true) {
1287    if (isa<BlockDecl>(DC) || isa<EnumDecl>(DC) || isa<CapturedDecl>(DC) ||
1288        isa<RequiresExprBodyDecl>(DC)) {
1289      DC = DC->getParent();
1290    } else if (isa<CXXMethodDecl>(DC) &&
1291               cast<CXXMethodDecl>(DC)->getOverloadedOperator() == OO_Call &&
1292               cast<CXXRecordDecl>(DC->getParent())->isLambda()) {
1293      DC = DC->getParent()->getParent();
1294    }
1295    else break;
1296  }
1297
1298  return DC;
1299}
1300
1301/// getCurFunctionDecl - If inside of a function body, this returns a pointer
1302/// to the function decl for the function being parsed.  If we're currently
1303/// in a 'block', this returns the containing context.
1304FunctionDecl *Sema::getCurFunctionDecl() {
1305  DeclContext *DC = getFunctionLevelDeclContext();
1306  return dyn_cast<FunctionDecl>(DC);
1307}
1308
1309ObjCMethodDecl *Sema::getCurMethodDecl() {
1310  DeclContext *DC = getFunctionLevelDeclContext();
1311  while (isa<RecordDecl>(DC))
1312    DC = DC->getParent();
1313  return dyn_cast<ObjCMethodDecl>(DC);
1314}
1315
1316NamedDecl *Sema::getCurFunctionOrMethodDecl() {
1317  DeclContext *DC = getFunctionLevelDeclContext();
1318  if (isa<ObjCMethodDecl>(DC) || isa<FunctionDecl>(DC))
1319    return cast<NamedDecl>(DC);
1320  return nullptr;
1321}
1322
1323LangAS Sema::getDefaultCXXMethodAddrSpace() const {
1324  if (getLangOpts().OpenCL)
1325    return LangAS::opencl_generic;
1326  return LangAS::Default;
1327}
1328
1329void Sema::EmitCurrentDiagnostic(unsigned DiagID) {
1330  // FIXME: It doesn't make sense to me that DiagID is an incoming argument here
1331  // and yet we also use the current diag ID on the DiagnosticsEngine. This has
1332  // been made more painfully obvious by the refactor that introduced this
1333  // function, but it is possible that the incoming argument can be
1334  // eliminated. If it truly cannot be (for example, there is some reentrancy
1335  // issue I am not seeing yet), then there should at least be a clarifying
1336  // comment somewhere.
1337  if (Optional<TemplateDeductionInfo*> Info = isSFINAEContext()) {
1338    switch (DiagnosticIDs::getDiagnosticSFINAEResponse(
1339              Diags.getCurrentDiagID())) {
1340    case DiagnosticIDs::SFINAE_Report:
1341      // We'll report the diagnostic below.
1342      break;
1343
1344    case DiagnosticIDs::SFINAE_SubstitutionFailure:
1345      // Count this failure so that we know that template argument deduction
1346      // has failed.
1347      ++NumSFINAEErrors;
1348
1349      // Make a copy of this suppressed diagnostic and store it with the
1350      // template-deduction information.
1351      if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1352        Diagnostic DiagInfo(&Diags);
1353        (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(),
1354                       PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1355      }
1356
1357      Diags.setLastDiagnosticIgnored(true);
1358      Diags.Clear();
1359      return;
1360
1361    case DiagnosticIDs::SFINAE_AccessControl: {
1362      // Per C++ Core Issue 1170, access control is part of SFINAE.
1363      // Additionally, the AccessCheckingSFINAE flag can be used to temporarily
1364      // make access control a part of SFINAE for the purposes of checking
1365      // type traits.
1366      if (!AccessCheckingSFINAE && !getLangOpts().CPlusPlus11)
1367        break;
1368
1369      SourceLocation Loc = Diags.getCurrentDiagLoc();
1370
1371      // Suppress this diagnostic.
1372      ++NumSFINAEErrors;
1373
1374      // Make a copy of this suppressed diagnostic and store it with the
1375      // template-deduction information.
1376      if (*Info && !(*Info)->hasSFINAEDiagnostic()) {
1377        Diagnostic DiagInfo(&Diags);
1378        (*Info)->addSFINAEDiagnostic(DiagInfo.getLocation(),
1379                       PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1380      }
1381
1382      Diags.setLastDiagnosticIgnored(true);
1383      Diags.Clear();
1384
1385      // Now the diagnostic state is clear, produce a C++98 compatibility
1386      // warning.
1387      Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control);
1388
1389      // The last diagnostic which Sema produced was ignored. Suppress any
1390      // notes attached to it.
1391      Diags.setLastDiagnosticIgnored(true);
1392      return;
1393    }
1394
1395    case DiagnosticIDs::SFINAE_Suppress:
1396      // Make a copy of this suppressed diagnostic and store it with the
1397      // template-deduction information;
1398      if (*Info) {
1399        Diagnostic DiagInfo(&Diags);
1400        (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(),
1401                       PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
1402      }
1403
1404      // Suppress this diagnostic.
1405      Diags.setLastDiagnosticIgnored(true);
1406      Diags.Clear();
1407      return;
1408    }
1409  }
1410
1411  // Copy the diagnostic printing policy over the ASTContext printing policy.
1412  // TODO: Stop doing that.  See: https://reviews.llvm.org/D45093#1090292
1413  Context.setPrintingPolicy(getPrintingPolicy());
1414
1415  // Emit the diagnostic.
1416  if (!Diags.EmitCurrentDiagnostic())
1417    return;
1418
1419  // If this is not a note, and we're in a template instantiation
1420  // that is different from the last template instantiation where
1421  // we emitted an error, print a template instantiation
1422  // backtrace.
1423  if (!DiagnosticIDs::isBuiltinNote(DiagID))
1424    PrintContextStack();
1425}
1426
1427Sema::SemaDiagnosticBuilder
1428Sema::Diag(SourceLocation Loc, const PartialDiagnostic& PD) {
1429  SemaDiagnosticBuilder Builder(Diag(Loc, PD.getDiagID()));
1430  PD.Emit(Builder);
1431
1432  return Builder;
1433}
1434
1435// Print notes showing how we can reach FD starting from an a priori
1436// known-callable function.
1437static void emitCallStackNotes(Sema &S, FunctionDecl *FD) {
1438  auto FnIt = S.DeviceKnownEmittedFns.find(FD);
1439  while (FnIt != S.DeviceKnownEmittedFns.end()) {
1440    DiagnosticBuilder Builder(
1441        S.Diags.Report(FnIt->second.Loc, diag::note_called_by));
1442    Builder << FnIt->second.FD;
1443    Builder.setForceEmit();
1444
1445    FnIt = S.DeviceKnownEmittedFns.find(FnIt->second.FD);
1446  }
1447}
1448
1449// Emit any deferred diagnostics for FD and erase them from the map in which
1450// they're stored.
1451static void emitDeferredDiags(Sema &S, FunctionDecl *FD, bool ShowCallStack) {
1452  auto It = S.DeviceDeferredDiags.find(FD);
1453  if (It == S.DeviceDeferredDiags.end())
1454    return;
1455  bool HasWarningOrError = false;
1456  for (PartialDiagnosticAt &PDAt : It->second) {
1457    const SourceLocation &Loc = PDAt.first;
1458    const PartialDiagnostic &PD = PDAt.second;
1459    HasWarningOrError |= S.getDiagnostics().getDiagnosticLevel(
1460                             PD.getDiagID(), Loc) >= DiagnosticsEngine::Warning;
1461    DiagnosticBuilder Builder(S.Diags.Report(Loc, PD.getDiagID()));
1462    Builder.setForceEmit();
1463    PD.Emit(Builder);
1464  }
1465  S.DeviceDeferredDiags.erase(It);
1466
1467  // FIXME: Should this be called after every warning/error emitted in the loop
1468  // above, instead of just once per function?  That would be consistent with
1469  // how we handle immediate errors, but it also seems like a bit much.
1470  if (HasWarningOrError && ShowCallStack)
1471    emitCallStackNotes(S, FD);
1472}
1473
1474// In CUDA, there are some constructs which may appear in semantically-valid
1475// code, but trigger errors if we ever generate code for the function in which
1476// they appear.  Essentially every construct you're not allowed to use on the
1477// device falls into this category, because you are allowed to use these
1478// constructs in a __host__ __device__ function, but only if that function is
1479// never codegen'ed on the device.
1480//
1481// To handle semantic checking for these constructs, we keep track of the set of
1482// functions we know will be emitted, either because we could tell a priori that
1483// they would be emitted, or because they were transitively called by a
1484// known-emitted function.
1485//
1486// We also keep a partial call graph of which not-known-emitted functions call
1487// which other not-known-emitted functions.
1488//
1489// When we see something which is illegal if the current function is emitted
1490// (usually by way of CUDADiagIfDeviceCode, CUDADiagIfHostCode, or
1491// CheckCUDACall), we first check if the current function is known-emitted.  If
1492// so, we immediately output the diagnostic.
1493//
1494// Otherwise, we "defer" the diagnostic.  It sits in Sema::DeviceDeferredDiags
1495// until we discover that the function is known-emitted, at which point we take
1496// it out of this map and emit the diagnostic.
1497
1498Sema::DeviceDiagBuilder::DeviceDiagBuilder(Kind K, SourceLocation Loc,
1499                                           unsigned DiagID, FunctionDecl *Fn,
1500                                           Sema &S)
1501    : S(S), Loc(Loc), DiagID(DiagID), Fn(Fn),
1502      ShowCallStack(K == K_ImmediateWithCallStack || K == K_Deferred) {
1503  switch (K) {
1504  case K_Nop:
1505    break;
1506  case K_Immediate:
1507  case K_ImmediateWithCallStack:
1508    ImmediateDiag.emplace(S.Diag(Loc, DiagID));
1509    break;
1510  case K_Deferred:
1511    assert(Fn && "Must have a function to attach the deferred diag to.");
1512    auto &Diags = S.DeviceDeferredDiags[Fn];
1513    PartialDiagId.emplace(Diags.size());
1514    Diags.emplace_back(Loc, S.PDiag(DiagID));
1515    break;
1516  }
1517}
1518
1519Sema::DeviceDiagBuilder::DeviceDiagBuilder(DeviceDiagBuilder &&D)
1520    : S(D.S), Loc(D.Loc), DiagID(D.DiagID), Fn(D.Fn),
1521      ShowCallStack(D.ShowCallStack), ImmediateDiag(D.ImmediateDiag),
1522      PartialDiagId(D.PartialDiagId) {
1523  // Clean the previous diagnostics.
1524  D.ShowCallStack = false;
1525  D.ImmediateDiag.reset();
1526  D.PartialDiagId.reset();
1527}
1528
1529Sema::DeviceDiagBuilder::~DeviceDiagBuilder() {
1530  if (ImmediateDiag) {
1531    // Emit our diagnostic and, if it was a warning or error, output a callstack
1532    // if Fn isn't a priori known-emitted.
1533    bool IsWarningOrError = S.getDiagnostics().getDiagnosticLevel(
1534                                DiagID, Loc) >= DiagnosticsEngine::Warning;
1535    ImmediateDiag.reset(); // Emit the immediate diag.
1536    if (IsWarningOrError && ShowCallStack)
1537      emitCallStackNotes(S, Fn);
1538  } else {
1539    assert((!PartialDiagId || ShowCallStack) &&
1540           "Must always show call stack for deferred diags.");
1541  }
1542}
1543
1544// Indicate that this function (and thus everything it transtively calls) will
1545// be codegen'ed, and emit any deferred diagnostics on this function and its
1546// (transitive) callees.
1547void Sema::markKnownEmitted(
1548    Sema &S, FunctionDecl *OrigCaller, FunctionDecl *OrigCallee,
1549    SourceLocation OrigLoc,
1550    const llvm::function_ref<bool(Sema &, FunctionDecl *)> IsKnownEmitted) {
1551  // Nothing to do if we already know that FD is emitted.
1552  if (IsKnownEmitted(S, OrigCallee)) {
1553    assert(!S.DeviceCallGraph.count(OrigCallee));
1554    return;
1555  }
1556
1557  // We've just discovered that OrigCallee is known-emitted.  Walk our call
1558  // graph to see what else we can now discover also must be emitted.
1559
1560  struct CallInfo {
1561    FunctionDecl *Caller;
1562    FunctionDecl *Callee;
1563    SourceLocation Loc;
1564  };
1565  llvm::SmallVector<CallInfo, 4> Worklist = {{OrigCaller, OrigCallee, OrigLoc}};
1566  llvm::SmallSet<CanonicalDeclPtr<FunctionDecl>, 4> Seen;
1567  Seen.insert(OrigCallee);
1568  while (!Worklist.empty()) {
1569    CallInfo C = Worklist.pop_back_val();
1570    assert(!IsKnownEmitted(S, C.Callee) &&
1571           "Worklist should not contain known-emitted functions.");
1572    S.DeviceKnownEmittedFns[C.Callee] = {C.Caller, C.Loc};
1573    emitDeferredDiags(S, C.Callee, C.Caller);
1574
1575    // If this is a template instantiation, explore its callgraph as well:
1576    // Non-dependent calls are part of the template's callgraph, while dependent
1577    // calls are part of to the instantiation's call graph.
1578    if (auto *Templ = C.Callee->getPrimaryTemplate()) {
1579      FunctionDecl *TemplFD = Templ->getAsFunction();
1580      if (!Seen.count(TemplFD) && !S.DeviceKnownEmittedFns.count(TemplFD)) {
1581        Seen.insert(TemplFD);
1582        Worklist.push_back(
1583            {/* Caller = */ C.Caller, /* Callee = */ TemplFD, C.Loc});
1584      }
1585    }
1586
1587    // Add all functions called by Callee to our worklist.
1588    auto CGIt = S.DeviceCallGraph.find(C.Callee);
1589    if (CGIt == S.DeviceCallGraph.end())
1590      continue;
1591
1592    for (std::pair<CanonicalDeclPtr<FunctionDecl>, SourceLocation> FDLoc :
1593         CGIt->second) {
1594      FunctionDecl *NewCallee = FDLoc.first;
1595      SourceLocation CallLoc = FDLoc.second;
1596      if (Seen.count(NewCallee) || IsKnownEmitted(S, NewCallee))
1597        continue;
1598      Seen.insert(NewCallee);
1599      Worklist.push_back(
1600          {/* Caller = */ C.Callee, /* Callee = */ NewCallee, CallLoc});
1601    }
1602
1603    // C.Callee is now known-emitted, so we no longer need to maintain its list
1604    // of callees in DeviceCallGraph.
1605    S.DeviceCallGraph.erase(CGIt);
1606  }
1607}
1608
1609Sema::DeviceDiagBuilder Sema::targetDiag(SourceLocation Loc, unsigned DiagID) {
1610  if (LangOpts.OpenMP)
1611    return LangOpts.OpenMPIsDevice ? diagIfOpenMPDeviceCode(Loc, DiagID)
1612                                   : diagIfOpenMPHostCode(Loc, DiagID);
1613  if (getLangOpts().CUDA)
1614    return getLangOpts().CUDAIsDevice ? CUDADiagIfDeviceCode(Loc, DiagID)
1615                                      : CUDADiagIfHostCode(Loc, DiagID);
1616  return DeviceDiagBuilder(DeviceDiagBuilder::K_Immediate, Loc, DiagID,
1617                           getCurFunctionDecl(), *this);
1618}
1619
1620/// Looks through the macro-expansion chain for the given
1621/// location, looking for a macro expansion with the given name.
1622/// If one is found, returns true and sets the location to that
1623/// expansion loc.
1624bool Sema::findMacroSpelling(SourceLocation &locref, StringRef name) {
1625  SourceLocation loc = locref;
1626  if (!loc.isMacroID()) return false;
1627
1628  // There's no good way right now to look at the intermediate
1629  // expansions, so just jump to the expansion location.
1630  loc = getSourceManager().getExpansionLoc(loc);
1631
1632  // If that's written with the name, stop here.
1633  SmallVector<char, 16> buffer;
1634  if (getPreprocessor().getSpelling(loc, buffer) == name) {
1635    locref = loc;
1636    return true;
1637  }
1638  return false;
1639}
1640
1641/// Determines the active Scope associated with the given declaration
1642/// context.
1643///
1644/// This routine maps a declaration context to the active Scope object that
1645/// represents that declaration context in the parser. It is typically used
1646/// from "scope-less" code (e.g., template instantiation, lazy creation of
1647/// declarations) that injects a name for name-lookup purposes and, therefore,
1648/// must update the Scope.
1649///
1650/// \returns The scope corresponding to the given declaraion context, or NULL
1651/// if no such scope is open.
1652Scope *Sema::getScopeForContext(DeclContext *Ctx) {
1653
1654  if (!Ctx)
1655    return nullptr;
1656
1657  Ctx = Ctx->getPrimaryContext();
1658  for (Scope *S = getCurScope(); S; S = S->getParent()) {
1659    // Ignore scopes that cannot have declarations. This is important for
1660    // out-of-line definitions of static class members.
1661    if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope))
1662      if (DeclContext *Entity = S->getEntity())
1663        if (Ctx == Entity->getPrimaryContext())
1664          return S;
1665  }
1666
1667  return nullptr;
1668}
1669
1670/// Enter a new function scope
1671void Sema::PushFunctionScope() {
1672  if (FunctionScopes.empty() && CachedFunctionScope) {
1673    // Use CachedFunctionScope to avoid allocating memory when possible.
1674    CachedFunctionScope->Clear();
1675    FunctionScopes.push_back(CachedFunctionScope.release());
1676  } else {
1677    FunctionScopes.push_back(new FunctionScopeInfo(getDiagnostics()));
1678  }
1679  if (LangOpts.OpenMP)
1680    pushOpenMPFunctionRegion();
1681}
1682
1683void Sema::PushBlockScope(Scope *BlockScope, BlockDecl *Block) {
1684  FunctionScopes.push_back(new BlockScopeInfo(getDiagnostics(),
1685                                              BlockScope, Block));
1686}
1687
1688LambdaScopeInfo *Sema::PushLambdaScope() {
1689  LambdaScopeInfo *const LSI = new LambdaScopeInfo(getDiagnostics());
1690  FunctionScopes.push_back(LSI);
1691  return LSI;
1692}
1693
1694void Sema::RecordParsingTemplateParameterDepth(unsigned Depth) {
1695  if (LambdaScopeInfo *const LSI = getCurLambda()) {
1696    LSI->AutoTemplateParameterDepth = Depth;
1697    return;
1698  }
1699  llvm_unreachable(
1700      "Remove assertion if intentionally called in a non-lambda context.");
1701}
1702
1703// Check that the type of the VarDecl has an accessible copy constructor and
1704// resolve its destructor's exception specification.
1705static void checkEscapingByref(VarDecl *VD, Sema &S) {
1706  QualType T = VD->getType();
1707  EnterExpressionEvaluationContext scope(
1708      S, Sema::ExpressionEvaluationContext::PotentiallyEvaluated);
1709  SourceLocation Loc = VD->getLocation();
1710  Expr *VarRef =
1711      new (S.Context) DeclRefExpr(S.Context, VD, false, T, VK_LValue, Loc);
1712  ExprResult Result = S.PerformMoveOrCopyInitialization(
1713      InitializedEntity::InitializeBlock(Loc, T, false), VD, VD->getType(),
1714      VarRef, /*AllowNRVO=*/true);
1715  if (!Result.isInvalid()) {
1716    Result = S.MaybeCreateExprWithCleanups(Result);
1717    Expr *Init = Result.getAs<Expr>();
1718    S.Context.setBlockVarCopyInit(VD, Init, S.canThrow(Init));
1719  }
1720
1721  // The destructor's exception specification is needed when IRGen generates
1722  // block copy/destroy functions. Resolve it here.
1723  if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
1724    if (CXXDestructorDecl *DD = RD->getDestructor()) {
1725      auto *FPT = DD->getType()->getAs<FunctionProtoType>();
1726      S.ResolveExceptionSpec(Loc, FPT);
1727    }
1728}
1729
1730static void markEscapingByrefs(const FunctionScopeInfo &FSI, Sema &S) {
1731  // Set the EscapingByref flag of __block variables captured by
1732  // escaping blocks.
1733  for (const BlockDecl *BD : FSI.Blocks) {
1734    for (const BlockDecl::Capture &BC : BD->captures()) {
1735      VarDecl *VD = BC.getVariable();
1736      if (VD->hasAttr<BlocksAttr>()) {
1737        // Nothing to do if this is a __block variable captured by a
1738        // non-escaping block.
1739        if (BD->doesNotEscape())
1740          continue;
1741        VD->setEscapingByref();
1742      }
1743      // Check whether the captured variable is or contains an object of
1744      // non-trivial C union type.
1745      QualType CapType = BC.getVariable()->getType();
1746      if (CapType.hasNonTrivialToPrimitiveDestructCUnion() ||
1747          CapType.hasNonTrivialToPrimitiveCopyCUnion())
1748        S.checkNonTrivialCUnion(BC.getVariable()->getType(),
1749                                BD->getCaretLocation(),
1750                                Sema::NTCUC_BlockCapture,
1751                                Sema::NTCUK_Destruct|Sema::NTCUK_Copy);
1752    }
1753  }
1754
1755  for (VarDecl *VD : FSI.ByrefBlockVars) {
1756    // __block variables might require us to capture a copy-initializer.
1757    if (!VD->isEscapingByref())
1758      continue;
1759    // It's currently invalid to ever have a __block variable with an
1760    // array type; should we diagnose that here?
1761    // Regardless, we don't want to ignore array nesting when
1762    // constructing this copy.
1763    if (VD->getType()->isStructureOrClassType())
1764      checkEscapingByref(VD, S);
1765  }
1766}
1767
1768/// Pop a function (or block or lambda or captured region) scope from the stack.
1769///
1770/// \param WP The warning policy to use for CFG-based warnings, or null if such
1771///        warnings should not be produced.
1772/// \param D The declaration corresponding to this function scope, if producing
1773///        CFG-based warnings.
1774/// \param BlockType The type of the block expression, if D is a BlockDecl.
1775Sema::PoppedFunctionScopePtr
1776Sema::PopFunctionScopeInfo(const AnalysisBasedWarnings::Policy *WP,
1777                           const Decl *D, QualType BlockType) {
1778  assert(!FunctionScopes.empty() && "mismatched push/pop!");
1779
1780  markEscapingByrefs(*FunctionScopes.back(), *this);
1781
1782  PoppedFunctionScopePtr Scope(FunctionScopes.pop_back_val(),
1783                               PoppedFunctionScopeDeleter(this));
1784
1785  if (LangOpts.OpenMP)
1786    popOpenMPFunctionRegion(Scope.get());
1787
1788  // Issue any analysis-based warnings.
1789  if (WP && D)
1790    AnalysisWarnings.IssueWarnings(*WP, Scope.get(), D, BlockType);
1791  else
1792    for (const auto &PUD : Scope->PossiblyUnreachableDiags)
1793      Diag(PUD.Loc, PUD.PD);
1794
1795  return Scope;
1796}
1797
1798void Sema::PoppedFunctionScopeDeleter::
1799operator()(sema::FunctionScopeInfo *Scope) const {
1800  // Stash the function scope for later reuse if it's for a normal function.
1801  if (Scope->isPlainFunction() && !Self->CachedFunctionScope)
1802    Self->CachedFunctionScope.reset(Scope);
1803  else
1804    delete Scope;
1805}
1806
1807void Sema::PushCompoundScope(bool IsStmtExpr) {
1808  getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr));
1809}
1810
1811void Sema::PopCompoundScope() {
1812  FunctionScopeInfo *CurFunction = getCurFunction();
1813  assert(!CurFunction->CompoundScopes.empty() && "mismatched push/pop");
1814
1815  CurFunction->CompoundScopes.pop_back();
1816}
1817
1818/// Determine whether any errors occurred within this function/method/
1819/// block.
1820bool Sema::hasAnyUnrecoverableErrorsInThisFunction() const {
1821  return getCurFunction()->ErrorTrap.hasUnrecoverableErrorOccurred();
1822}
1823
1824void Sema::setFunctionHasBranchIntoScope() {
1825  if (!FunctionScopes.empty())
1826    FunctionScopes.back()->setHasBranchIntoScope();
1827}
1828
1829void Sema::setFunctionHasBranchProtectedScope() {
1830  if (!FunctionScopes.empty())
1831    FunctionScopes.back()->setHasBranchProtectedScope();
1832}
1833
1834void Sema::setFunctionHasIndirectGoto() {
1835  if (!FunctionScopes.empty())
1836    FunctionScopes.back()->setHasIndirectGoto();
1837}
1838
1839BlockScopeInfo *Sema::getCurBlock() {
1840  if (FunctionScopes.empty())
1841    return nullptr;
1842
1843  auto CurBSI = dyn_cast<BlockScopeInfo>(FunctionScopes.back());
1844  if (CurBSI && CurBSI->TheDecl &&
1845      !CurBSI->TheDecl->Encloses(CurContext)) {
1846    // We have switched contexts due to template instantiation.
1847    assert(!CodeSynthesisContexts.empty());
1848    return nullptr;
1849  }
1850
1851  return CurBSI;
1852}
1853
1854FunctionScopeInfo *Sema::getEnclosingFunction() const {
1855  if (FunctionScopes.empty())
1856    return nullptr;
1857
1858  for (int e = FunctionScopes.size() - 1; e >= 0; --e) {
1859    if (isa<sema::BlockScopeInfo>(FunctionScopes[e]))
1860      continue;
1861    return FunctionScopes[e];
1862  }
1863  return nullptr;
1864}
1865
1866LambdaScopeInfo *Sema::getEnclosingLambda() const {
1867  for (auto *Scope : llvm::reverse(FunctionScopes)) {
1868    if (auto *LSI = dyn_cast<sema::LambdaScopeInfo>(Scope)) {
1869      if (LSI->Lambda && !LSI->Lambda->Encloses(CurContext)) {
1870        // We have switched contexts due to template instantiation.
1871        // FIXME: We should swap out the FunctionScopes during code synthesis
1872        // so that we don't need to check for this.
1873        assert(!CodeSynthesisContexts.empty());
1874        return nullptr;
1875      }
1876      return LSI;
1877    }
1878  }
1879  return nullptr;
1880}
1881
1882LambdaScopeInfo *Sema::getCurLambda(bool IgnoreNonLambdaCapturingScope) {
1883  if (FunctionScopes.empty())
1884    return nullptr;
1885
1886  auto I = FunctionScopes.rbegin();
1887  if (IgnoreNonLambdaCapturingScope) {
1888    auto E = FunctionScopes.rend();
1889    while (I != E && isa<CapturingScopeInfo>(*I) && !isa<LambdaScopeInfo>(*I))
1890      ++I;
1891    if (I == E)
1892      return nullptr;
1893  }
1894  auto *CurLSI = dyn_cast<LambdaScopeInfo>(*I);
1895  if (CurLSI && CurLSI->Lambda &&
1896      !CurLSI->Lambda->Encloses(CurContext)) {
1897    // We have switched contexts due to template instantiation.
1898    assert(!CodeSynthesisContexts.empty());
1899    return nullptr;
1900  }
1901
1902  return CurLSI;
1903}
1904
1905// We have a generic lambda if we parsed auto parameters, or we have
1906// an associated template parameter list.
1907LambdaScopeInfo *Sema::getCurGenericLambda() {
1908  if (LambdaScopeInfo *LSI =  getCurLambda()) {
1909    return (LSI->TemplateParams.size() ||
1910                    LSI->GLTemplateParameterList) ? LSI : nullptr;
1911  }
1912  return nullptr;
1913}
1914
1915
1916void Sema::ActOnComment(SourceRange Comment) {
1917  if (!LangOpts.RetainCommentsFromSystemHeaders &&
1918      SourceMgr.isInSystemHeader(Comment.getBegin()))
1919    return;
1920  RawComment RC(SourceMgr, Comment, LangOpts.CommentOpts, false);
1921  if (RC.isAlmostTrailingComment()) {
1922    SourceRange MagicMarkerRange(Comment.getBegin(),
1923                                 Comment.getBegin().getLocWithOffset(3));
1924    StringRef MagicMarkerText;
1925    switch (RC.getKind()) {
1926    case RawComment::RCK_OrdinaryBCPL:
1927      MagicMarkerText = "///<";
1928      break;
1929    case RawComment::RCK_OrdinaryC:
1930      MagicMarkerText = "/**<";
1931      break;
1932    default:
1933      llvm_unreachable("if this is an almost Doxygen comment, "
1934                       "it should be ordinary");
1935    }
1936    Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) <<
1937      FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText);
1938  }
1939  Context.addComment(RC);
1940}
1941
1942// Pin this vtable to this file.
1943ExternalSemaSource::~ExternalSemaSource() {}
1944char ExternalSemaSource::ID;
1945
1946void ExternalSemaSource::ReadMethodPool(Selector Sel) { }
1947void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { }
1948
1949void ExternalSemaSource::ReadKnownNamespaces(
1950                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
1951}
1952
1953void ExternalSemaSource::ReadUndefinedButUsed(
1954    llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {}
1955
1956void ExternalSemaSource::ReadMismatchingDeleteExpressions(llvm::MapVector<
1957    FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &) {}
1958
1959/// Figure out if an expression could be turned into a call.
1960///
1961/// Use this when trying to recover from an error where the programmer may have
1962/// written just the name of a function instead of actually calling it.
1963///
1964/// \param E - The expression to examine.
1965/// \param ZeroArgCallReturnTy - If the expression can be turned into a call
1966///  with no arguments, this parameter is set to the type returned by such a
1967///  call; otherwise, it is set to an empty QualType.
1968/// \param OverloadSet - If the expression is an overloaded function
1969///  name, this parameter is populated with the decls of the various overloads.
1970bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy,
1971                         UnresolvedSetImpl &OverloadSet) {
1972  ZeroArgCallReturnTy = QualType();
1973  OverloadSet.clear();
1974
1975  const OverloadExpr *Overloads = nullptr;
1976  bool IsMemExpr = false;
1977  if (E.getType() == Context.OverloadTy) {
1978    OverloadExpr::FindResult FR = OverloadExpr::find(const_cast<Expr*>(&E));
1979
1980    // Ignore overloads that are pointer-to-member constants.
1981    if (FR.HasFormOfMemberPointer)
1982      return false;
1983
1984    Overloads = FR.Expression;
1985  } else if (E.getType() == Context.BoundMemberTy) {
1986    Overloads = dyn_cast<UnresolvedMemberExpr>(E.IgnoreParens());
1987    IsMemExpr = true;
1988  }
1989
1990  bool Ambiguous = false;
1991  bool IsMV = false;
1992
1993  if (Overloads) {
1994    for (OverloadExpr::decls_iterator it = Overloads->decls_begin(),
1995         DeclsEnd = Overloads->decls_end(); it != DeclsEnd; ++it) {
1996      OverloadSet.addDecl(*it);
1997
1998      // Check whether the function is a non-template, non-member which takes no
1999      // arguments.
2000      if (IsMemExpr)
2001        continue;
2002      if (const FunctionDecl *OverloadDecl
2003            = dyn_cast<FunctionDecl>((*it)->getUnderlyingDecl())) {
2004        if (OverloadDecl->getMinRequiredArguments() == 0) {
2005          if (!ZeroArgCallReturnTy.isNull() && !Ambiguous &&
2006              (!IsMV || !(OverloadDecl->isCPUDispatchMultiVersion() ||
2007                          OverloadDecl->isCPUSpecificMultiVersion()))) {
2008            ZeroArgCallReturnTy = QualType();
2009            Ambiguous = true;
2010          } else {
2011            ZeroArgCallReturnTy = OverloadDecl->getReturnType();
2012            IsMV = OverloadDecl->isCPUDispatchMultiVersion() ||
2013                   OverloadDecl->isCPUSpecificMultiVersion();
2014          }
2015        }
2016      }
2017    }
2018
2019    // If it's not a member, use better machinery to try to resolve the call
2020    if (!IsMemExpr)
2021      return !ZeroArgCallReturnTy.isNull();
2022  }
2023
2024  // Attempt to call the member with no arguments - this will correctly handle
2025  // member templates with defaults/deduction of template arguments, overloads
2026  // with default arguments, etc.
2027  if (IsMemExpr && !E.isTypeDependent()) {
2028    Sema::TentativeAnalysisScope Trap(*this);
2029    ExprResult R = BuildCallToMemberFunction(nullptr, &E, SourceLocation(),
2030                                             None, SourceLocation());
2031    if (R.isUsable()) {
2032      ZeroArgCallReturnTy = R.get()->getType();
2033      return true;
2034    }
2035    return false;
2036  }
2037
2038  if (const DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E.IgnoreParens())) {
2039    if (const FunctionDecl *Fun = dyn_cast<FunctionDecl>(DeclRef->getDecl())) {
2040      if (Fun->getMinRequiredArguments() == 0)
2041        ZeroArgCallReturnTy = Fun->getReturnType();
2042      return true;
2043    }
2044  }
2045
2046  // We don't have an expression that's convenient to get a FunctionDecl from,
2047  // but we can at least check if the type is "function of 0 arguments".
2048  QualType ExprTy = E.getType();
2049  const FunctionType *FunTy = nullptr;
2050  QualType PointeeTy = ExprTy->getPointeeType();
2051  if (!PointeeTy.isNull())
2052    FunTy = PointeeTy->getAs<FunctionType>();
2053  if (!FunTy)
2054    FunTy = ExprTy->getAs<FunctionType>();
2055
2056  if (const FunctionProtoType *FPT =
2057      dyn_cast_or_null<FunctionProtoType>(FunTy)) {
2058    if (FPT->getNumParams() == 0)
2059      ZeroArgCallReturnTy = FunTy->getReturnType();
2060    return true;
2061  }
2062  return false;
2063}
2064
2065/// Give notes for a set of overloads.
2066///
2067/// A companion to tryExprAsCall. In cases when the name that the programmer
2068/// wrote was an overloaded function, we may be able to make some guesses about
2069/// plausible overloads based on their return types; such guesses can be handed
2070/// off to this method to be emitted as notes.
2071///
2072/// \param Overloads - The overloads to note.
2073/// \param FinalNoteLoc - If we've suppressed printing some overloads due to
2074///  -fshow-overloads=best, this is the location to attach to the note about too
2075///  many candidates. Typically this will be the location of the original
2076///  ill-formed expression.
2077static void noteOverloads(Sema &S, const UnresolvedSetImpl &Overloads,
2078                          const SourceLocation FinalNoteLoc) {
2079  int ShownOverloads = 0;
2080  int SuppressedOverloads = 0;
2081  for (UnresolvedSetImpl::iterator It = Overloads.begin(),
2082       DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
2083    // FIXME: Magic number for max shown overloads stolen from
2084    // OverloadCandidateSet::NoteCandidates.
2085    if (ShownOverloads >= 4 && S.Diags.getShowOverloads() == Ovl_Best) {
2086      ++SuppressedOverloads;
2087      continue;
2088    }
2089
2090    NamedDecl *Fn = (*It)->getUnderlyingDecl();
2091    // Don't print overloads for non-default multiversioned functions.
2092    if (const auto *FD = Fn->getAsFunction()) {
2093      if (FD->isMultiVersion() && FD->hasAttr<TargetAttr>() &&
2094          !FD->getAttr<TargetAttr>()->isDefaultVersion())
2095        continue;
2096    }
2097    S.Diag(Fn->getLocation(), diag::note_possible_target_of_call);
2098    ++ShownOverloads;
2099  }
2100
2101  if (SuppressedOverloads)
2102    S.Diag(FinalNoteLoc, diag::note_ovl_too_many_candidates)
2103      << SuppressedOverloads;
2104}
2105
2106static void notePlausibleOverloads(Sema &S, SourceLocation Loc,
2107                                   const UnresolvedSetImpl &Overloads,
2108                                   bool (*IsPlausibleResult)(QualType)) {
2109  if (!IsPlausibleResult)
2110    return noteOverloads(S, Overloads, Loc);
2111
2112  UnresolvedSet<2> PlausibleOverloads;
2113  for (OverloadExpr::decls_iterator It = Overloads.begin(),
2114         DeclsEnd = Overloads.end(); It != DeclsEnd; ++It) {
2115    const FunctionDecl *OverloadDecl = cast<FunctionDecl>(*It);
2116    QualType OverloadResultTy = OverloadDecl->getReturnType();
2117    if (IsPlausibleResult(OverloadResultTy))
2118      PlausibleOverloads.addDecl(It.getDecl());
2119  }
2120  noteOverloads(S, PlausibleOverloads, Loc);
2121}
2122
2123/// Determine whether the given expression can be called by just
2124/// putting parentheses after it.  Notably, expressions with unary
2125/// operators can't be because the unary operator will start parsing
2126/// outside the call.
2127static bool IsCallableWithAppend(Expr *E) {
2128  E = E->IgnoreImplicit();
2129  return (!isa<CStyleCastExpr>(E) &&
2130          !isa<UnaryOperator>(E) &&
2131          !isa<BinaryOperator>(E) &&
2132          !isa<CXXOperatorCallExpr>(E));
2133}
2134
2135static bool IsCPUDispatchCPUSpecificMultiVersion(const Expr *E) {
2136  if (const auto *UO = dyn_cast<UnaryOperator>(E))
2137    E = UO->getSubExpr();
2138
2139  if (const auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
2140    if (ULE->getNumDecls() == 0)
2141      return false;
2142
2143    const NamedDecl *ND = *ULE->decls_begin();
2144    if (const auto *FD = dyn_cast<FunctionDecl>(ND))
2145      return FD->isCPUDispatchMultiVersion() || FD->isCPUSpecificMultiVersion();
2146  }
2147  return false;
2148}
2149
2150bool Sema::tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD,
2151                                bool ForceComplain,
2152                                bool (*IsPlausibleResult)(QualType)) {
2153  SourceLocation Loc = E.get()->getExprLoc();
2154  SourceRange Range = E.get()->getSourceRange();
2155
2156  QualType ZeroArgCallTy;
2157  UnresolvedSet<4> Overloads;
2158  if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) &&
2159      !ZeroArgCallTy.isNull() &&
2160      (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) {
2161    // At this point, we know E is potentially callable with 0
2162    // arguments and that it returns something of a reasonable type,
2163    // so we can emit a fixit and carry on pretending that E was
2164    // actually a CallExpr.
2165    SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd());
2166    bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get());
2167    Diag(Loc, PD) << /*zero-arg*/ 1 << IsMV << Range
2168                  << (IsCallableWithAppend(E.get())
2169                          ? FixItHint::CreateInsertion(ParenInsertionLoc, "()")
2170                          : FixItHint());
2171    if (!IsMV)
2172      notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult);
2173
2174    // FIXME: Try this before emitting the fixit, and suppress diagnostics
2175    // while doing so.
2176    E = BuildCallExpr(nullptr, E.get(), Range.getEnd(), None,
2177                      Range.getEnd().getLocWithOffset(1));
2178    return true;
2179  }
2180
2181  if (!ForceComplain) return false;
2182
2183  bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get());
2184  Diag(Loc, PD) << /*not zero-arg*/ 0 << IsMV << Range;
2185  if (!IsMV)
2186    notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult);
2187  E = ExprError();
2188  return true;
2189}
2190
2191IdentifierInfo *Sema::getSuperIdentifier() const {
2192  if (!Ident_super)
2193    Ident_super = &Context.Idents.get("super");
2194  return Ident_super;
2195}
2196
2197IdentifierInfo *Sema::getFloat128Identifier() const {
2198  if (!Ident___float128)
2199    Ident___float128 = &Context.Idents.get("__float128");
2200  return Ident___float128;
2201}
2202
2203void Sema::PushCapturedRegionScope(Scope *S, CapturedDecl *CD, RecordDecl *RD,
2204                                   CapturedRegionKind K,
2205                                   unsigned OpenMPCaptureLevel) {
2206  auto *CSI = new CapturedRegionScopeInfo(
2207      getDiagnostics(), S, CD, RD, CD->getContextParam(), K,
2208      (getLangOpts().OpenMP && K == CR_OpenMP) ? getOpenMPNestingLevel() : 0,
2209      OpenMPCaptureLevel);
2210  CSI->ReturnType = Context.VoidTy;
2211  FunctionScopes.push_back(CSI);
2212}
2213
2214CapturedRegionScopeInfo *Sema::getCurCapturedRegion() {
2215  if (FunctionScopes.empty())
2216    return nullptr;
2217
2218  return dyn_cast<CapturedRegionScopeInfo>(FunctionScopes.back());
2219}
2220
2221const llvm::MapVector<FieldDecl *, Sema::DeleteLocs> &
2222Sema::getMismatchingDeleteExpressions() const {
2223  return DeleteExprs;
2224}
2225
2226void Sema::setOpenCLExtensionForType(QualType T, llvm::StringRef ExtStr) {
2227  if (ExtStr.empty())
2228    return;
2229  llvm::SmallVector<StringRef, 1> Exts;
2230  ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false);
2231  auto CanT = T.getCanonicalType().getTypePtr();
2232  for (auto &I : Exts)
2233    OpenCLTypeExtMap[CanT].insert(I.str());
2234}
2235
2236void Sema::setOpenCLExtensionForDecl(Decl *FD, StringRef ExtStr) {
2237  llvm::SmallVector<StringRef, 1> Exts;
2238  ExtStr.split(Exts, " ", /* limit */ -1, /* keep empty */ false);
2239  if (Exts.empty())
2240    return;
2241  for (auto &I : Exts)
2242    OpenCLDeclExtMap[FD].insert(I.str());
2243}
2244
2245void Sema::setCurrentOpenCLExtensionForType(QualType T) {
2246  if (CurrOpenCLExtension.empty())
2247    return;
2248  setOpenCLExtensionForType(T, CurrOpenCLExtension);
2249}
2250
2251void Sema::setCurrentOpenCLExtensionForDecl(Decl *D) {
2252  if (CurrOpenCLExtension.empty())
2253    return;
2254  setOpenCLExtensionForDecl(D, CurrOpenCLExtension);
2255}
2256
2257std::string Sema::getOpenCLExtensionsFromDeclExtMap(FunctionDecl *FD) {
2258  if (!OpenCLDeclExtMap.empty())
2259    return getOpenCLExtensionsFromExtMap(FD, OpenCLDeclExtMap);
2260
2261  return "";
2262}
2263
2264std::string Sema::getOpenCLExtensionsFromTypeExtMap(FunctionType *FT) {
2265  if (!OpenCLTypeExtMap.empty())
2266    return getOpenCLExtensionsFromExtMap(FT, OpenCLTypeExtMap);
2267
2268  return "";
2269}
2270
2271template <typename T, typename MapT>
2272std::string Sema::getOpenCLExtensionsFromExtMap(T *FDT, MapT &Map) {
2273  std::string ExtensionNames = "";
2274  auto Loc = Map.find(FDT);
2275
2276  for (auto const& I : Loc->second) {
2277    ExtensionNames += I;
2278    ExtensionNames += " ";
2279  }
2280  ExtensionNames.pop_back();
2281
2282  return ExtensionNames;
2283}
2284
2285bool Sema::isOpenCLDisabledDecl(Decl *FD) {
2286  auto Loc = OpenCLDeclExtMap.find(FD);
2287  if (Loc == OpenCLDeclExtMap.end())
2288    return false;
2289  for (auto &I : Loc->second) {
2290    if (!getOpenCLOptions().isEnabled(I))
2291      return true;
2292  }
2293  return false;
2294}
2295
2296template <typename T, typename DiagLocT, typename DiagInfoT, typename MapT>
2297bool Sema::checkOpenCLDisabledTypeOrDecl(T D, DiagLocT DiagLoc,
2298                                         DiagInfoT DiagInfo, MapT &Map,
2299                                         unsigned Selector,
2300                                         SourceRange SrcRange) {
2301  auto Loc = Map.find(D);
2302  if (Loc == Map.end())
2303    return false;
2304  bool Disabled = false;
2305  for (auto &I : Loc->second) {
2306    if (I != CurrOpenCLExtension && !getOpenCLOptions().isEnabled(I)) {
2307      Diag(DiagLoc, diag::err_opencl_requires_extension) << Selector << DiagInfo
2308                                                         << I << SrcRange;
2309      Disabled = true;
2310    }
2311  }
2312  return Disabled;
2313}
2314
2315bool Sema::checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType QT) {
2316  // Check extensions for declared types.
2317  Decl *Decl = nullptr;
2318  if (auto TypedefT = dyn_cast<TypedefType>(QT.getTypePtr()))
2319    Decl = TypedefT->getDecl();
2320  if (auto TagT = dyn_cast<TagType>(QT.getCanonicalType().getTypePtr()))
2321    Decl = TagT->getDecl();
2322  auto Loc = DS.getTypeSpecTypeLoc();
2323
2324  // Check extensions for vector types.
2325  // e.g. double4 is not allowed when cl_khr_fp64 is absent.
2326  if (QT->isExtVectorType()) {
2327    auto TypePtr = QT->castAs<ExtVectorType>()->getElementType().getTypePtr();
2328    return checkOpenCLDisabledTypeOrDecl(TypePtr, Loc, QT, OpenCLTypeExtMap);
2329  }
2330
2331  if (checkOpenCLDisabledTypeOrDecl(Decl, Loc, QT, OpenCLDeclExtMap))
2332    return true;
2333
2334  // Check extensions for builtin types.
2335  return checkOpenCLDisabledTypeOrDecl(QT.getCanonicalType().getTypePtr(), Loc,
2336                                       QT, OpenCLTypeExtMap);
2337}
2338
2339bool Sema::checkOpenCLDisabledDecl(const NamedDecl &D, const Expr &E) {
2340  IdentifierInfo *FnName = D.getIdentifier();
2341  return checkOpenCLDisabledTypeOrDecl(&D, E.getBeginLoc(), FnName,
2342                                       OpenCLDeclExtMap, 1, D.getSourceRange());
2343}
2344