Bug Summary

File:tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
Warning:line 4415, column 7
Called C++ object pointer is null

Annotated Source Code

/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp

1//===--- SemaTemplateInstantiateDecl.cpp - C++ Template Decl Instantiation ===/
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//===----------------------------------------------------------------------===/
8//
9// This file implements C++ template instantiation for declarations.
10//
11//===----------------------------------------------------------------------===/
12#include "clang/Sema/SemaInternal.h"
13#include "clang/AST/ASTConsumer.h"
14#include "clang/AST/ASTContext.h"
15#include "clang/AST/ASTMutationListener.h"
16#include "clang/AST/DeclTemplate.h"
17#include "clang/AST/DeclVisitor.h"
18#include "clang/AST/DependentDiagnostic.h"
19#include "clang/AST/Expr.h"
20#include "clang/AST/ExprCXX.h"
21#include "clang/AST/TypeLoc.h"
22#include "clang/Sema/Initialization.h"
23#include "clang/Sema/Lookup.h"
24#include "clang/Sema/PrettyDeclStackTrace.h"
25#include "clang/Sema/Template.h"
26
27using namespace clang;
28
29static bool isDeclWithinFunction(const Decl *D) {
30 const DeclContext *DC = D->getDeclContext();
31 if (DC->isFunctionOrMethod())
32 return true;
33
34 if (DC->isRecord())
35 return cast<CXXRecordDecl>(DC)->isLocalClass();
36
37 return false;
38}
39
40template<typename DeclT>
41static bool SubstQualifier(Sema &SemaRef, const DeclT *OldDecl, DeclT *NewDecl,
42 const MultiLevelTemplateArgumentList &TemplateArgs) {
43 if (!OldDecl->getQualifierLoc())
44 return false;
45
46 assert((NewDecl->getFriendObjectKind() ||(static_cast <bool> ((NewDecl->getFriendObjectKind()
|| !OldDecl->getLexicalDeclContext()->isDependentContext
()) && "non-friend with qualified name defined in dependent context"
) ? void (0) : __assert_fail ("(NewDecl->getFriendObjectKind() || !OldDecl->getLexicalDeclContext()->isDependentContext()) && \"non-friend with qualified name defined in dependent context\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 48, __extension__ __PRETTY_FUNCTION__))
47 !OldDecl->getLexicalDeclContext()->isDependentContext()) &&(static_cast <bool> ((NewDecl->getFriendObjectKind()
|| !OldDecl->getLexicalDeclContext()->isDependentContext
()) && "non-friend with qualified name defined in dependent context"
) ? void (0) : __assert_fail ("(NewDecl->getFriendObjectKind() || !OldDecl->getLexicalDeclContext()->isDependentContext()) && \"non-friend with qualified name defined in dependent context\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 48, __extension__ __PRETTY_FUNCTION__))
48 "non-friend with qualified name defined in dependent context")(static_cast <bool> ((NewDecl->getFriendObjectKind()
|| !OldDecl->getLexicalDeclContext()->isDependentContext
()) && "non-friend with qualified name defined in dependent context"
) ? void (0) : __assert_fail ("(NewDecl->getFriendObjectKind() || !OldDecl->getLexicalDeclContext()->isDependentContext()) && \"non-friend with qualified name defined in dependent context\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 48, __extension__ __PRETTY_FUNCTION__))
;
49 Sema::ContextRAII SavedContext(
50 SemaRef,
51 const_cast<DeclContext *>(NewDecl->getFriendObjectKind()
52 ? NewDecl->getLexicalDeclContext()
53 : OldDecl->getLexicalDeclContext()));
54
55 NestedNameSpecifierLoc NewQualifierLoc
56 = SemaRef.SubstNestedNameSpecifierLoc(OldDecl->getQualifierLoc(),
57 TemplateArgs);
58
59 if (!NewQualifierLoc)
60 return true;
61
62 NewDecl->setQualifierInfo(NewQualifierLoc);
63 return false;
64}
65
66bool TemplateDeclInstantiator::SubstQualifier(const DeclaratorDecl *OldDecl,
67 DeclaratorDecl *NewDecl) {
68 return ::SubstQualifier(SemaRef, OldDecl, NewDecl, TemplateArgs);
69}
70
71bool TemplateDeclInstantiator::SubstQualifier(const TagDecl *OldDecl,
72 TagDecl *NewDecl) {
73 return ::SubstQualifier(SemaRef, OldDecl, NewDecl, TemplateArgs);
74}
75
76// Include attribute instantiation code.
77#include "clang/Sema/AttrTemplateInstantiate.inc"
78
79static void instantiateDependentAlignedAttr(
80 Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
81 const AlignedAttr *Aligned, Decl *New, bool IsPackExpansion) {
82 if (Aligned->isAlignmentExpr()) {
83 // The alignment expression is a constant expression.
84 EnterExpressionEvaluationContext Unevaluated(
85 S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
86 ExprResult Result = S.SubstExpr(Aligned->getAlignmentExpr(), TemplateArgs);
87 if (!Result.isInvalid())
88 S.AddAlignedAttr(Aligned->getLocation(), New, Result.getAs<Expr>(),
89 Aligned->getSpellingListIndex(), IsPackExpansion);
90 } else {
91 TypeSourceInfo *Result = S.SubstType(Aligned->getAlignmentType(),
92 TemplateArgs, Aligned->getLocation(),
93 DeclarationName());
94 if (Result)
95 S.AddAlignedAttr(Aligned->getLocation(), New, Result,
96 Aligned->getSpellingListIndex(), IsPackExpansion);
97 }
98}
99
100static void instantiateDependentAlignedAttr(
101 Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
102 const AlignedAttr *Aligned, Decl *New) {
103 if (!Aligned->isPackExpansion()) {
104 instantiateDependentAlignedAttr(S, TemplateArgs, Aligned, New, false);
105 return;
106 }
107
108 SmallVector<UnexpandedParameterPack, 2> Unexpanded;
109 if (Aligned->isAlignmentExpr())
110 S.collectUnexpandedParameterPacks(Aligned->getAlignmentExpr(),
111 Unexpanded);
112 else
113 S.collectUnexpandedParameterPacks(Aligned->getAlignmentType()->getTypeLoc(),
114 Unexpanded);
115 assert(!Unexpanded.empty() && "Pack expansion without parameter packs?")(static_cast <bool> (!Unexpanded.empty() && "Pack expansion without parameter packs?"
) ? void (0) : __assert_fail ("!Unexpanded.empty() && \"Pack expansion without parameter packs?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 115, __extension__ __PRETTY_FUNCTION__))
;
116
117 // Determine whether we can expand this attribute pack yet.
118 bool Expand = true, RetainExpansion = false;
119 Optional<unsigned> NumExpansions;
120 // FIXME: Use the actual location of the ellipsis.
121 SourceLocation EllipsisLoc = Aligned->getLocation();
122 if (S.CheckParameterPacksForExpansion(EllipsisLoc, Aligned->getRange(),
123 Unexpanded, TemplateArgs, Expand,
124 RetainExpansion, NumExpansions))
125 return;
126
127 if (!Expand) {
128 Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(S, -1);
129 instantiateDependentAlignedAttr(S, TemplateArgs, Aligned, New, true);
130 } else {
131 for (unsigned I = 0; I != *NumExpansions; ++I) {
132 Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(S, I);
133 instantiateDependentAlignedAttr(S, TemplateArgs, Aligned, New, false);
134 }
135 }
136}
137
138static void instantiateDependentAssumeAlignedAttr(
139 Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
140 const AssumeAlignedAttr *Aligned, Decl *New) {
141 // The alignment expression is a constant expression.
142 EnterExpressionEvaluationContext Unevaluated(
143 S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
144
145 Expr *E, *OE = nullptr;
146 ExprResult Result = S.SubstExpr(Aligned->getAlignment(), TemplateArgs);
147 if (Result.isInvalid())
148 return;
149 E = Result.getAs<Expr>();
150
151 if (Aligned->getOffset()) {
152 Result = S.SubstExpr(Aligned->getOffset(), TemplateArgs);
153 if (Result.isInvalid())
154 return;
155 OE = Result.getAs<Expr>();
156 }
157
158 S.AddAssumeAlignedAttr(Aligned->getLocation(), New, E, OE,
159 Aligned->getSpellingListIndex());
160}
161
162static void instantiateDependentAlignValueAttr(
163 Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
164 const AlignValueAttr *Aligned, Decl *New) {
165 // The alignment expression is a constant expression.
166 EnterExpressionEvaluationContext Unevaluated(
167 S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
168 ExprResult Result = S.SubstExpr(Aligned->getAlignment(), TemplateArgs);
169 if (!Result.isInvalid())
170 S.AddAlignValueAttr(Aligned->getLocation(), New, Result.getAs<Expr>(),
171 Aligned->getSpellingListIndex());
172}
173
174static void instantiateDependentAllocAlignAttr(
175 Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
176 const AllocAlignAttr *Align, Decl *New) {
177 Expr *Param = IntegerLiteral::Create(
178 S.getASTContext(), llvm::APInt(64, Align->getParamIndex()),
179 S.getASTContext().UnsignedLongLongTy, Align->getLocation());
180 S.AddAllocAlignAttr(Align->getLocation(), New, Param,
181 Align->getSpellingListIndex());
182}
183
184static Expr *instantiateDependentFunctionAttrCondition(
185 Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
186 const Attr *A, Expr *OldCond, const Decl *Tmpl, FunctionDecl *New) {
187 Expr *Cond = nullptr;
188 {
189 Sema::ContextRAII SwitchContext(S, New);
190 EnterExpressionEvaluationContext Unevaluated(
191 S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
192 ExprResult Result = S.SubstExpr(OldCond, TemplateArgs);
193 if (Result.isInvalid())
194 return nullptr;
195 Cond = Result.getAs<Expr>();
196 }
197 if (!Cond->isTypeDependent()) {
198 ExprResult Converted = S.PerformContextuallyConvertToBool(Cond);
199 if (Converted.isInvalid())
200 return nullptr;
201 Cond = Converted.get();
202 }
203
204 SmallVector<PartialDiagnosticAt, 8> Diags;
205 if (OldCond->isValueDependent() && !Cond->isValueDependent() &&
206 !Expr::isPotentialConstantExprUnevaluated(Cond, New, Diags)) {
207 S.Diag(A->getLocation(), diag::err_attr_cond_never_constant_expr) << A;
208 for (const auto &P : Diags)
209 S.Diag(P.first, P.second);
210 return nullptr;
211 }
212 return Cond;
213}
214
215static void instantiateDependentEnableIfAttr(
216 Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
217 const EnableIfAttr *EIA, const Decl *Tmpl, FunctionDecl *New) {
218 Expr *Cond = instantiateDependentFunctionAttrCondition(
219 S, TemplateArgs, EIA, EIA->getCond(), Tmpl, New);
220
221 if (Cond)
222 New->addAttr(new (S.getASTContext()) EnableIfAttr(
223 EIA->getLocation(), S.getASTContext(), Cond, EIA->getMessage(),
224 EIA->getSpellingListIndex()));
225}
226
227static void instantiateDependentDiagnoseIfAttr(
228 Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
229 const DiagnoseIfAttr *DIA, const Decl *Tmpl, FunctionDecl *New) {
230 Expr *Cond = instantiateDependentFunctionAttrCondition(
231 S, TemplateArgs, DIA, DIA->getCond(), Tmpl, New);
232
233 if (Cond)
234 New->addAttr(new (S.getASTContext()) DiagnoseIfAttr(
235 DIA->getLocation(), S.getASTContext(), Cond, DIA->getMessage(),
236 DIA->getDiagnosticType(), DIA->getArgDependent(), New,
237 DIA->getSpellingListIndex()));
238}
239
240// Constructs and adds to New a new instance of CUDALaunchBoundsAttr using
241// template A as the base and arguments from TemplateArgs.
242static void instantiateDependentCUDALaunchBoundsAttr(
243 Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
244 const CUDALaunchBoundsAttr &Attr, Decl *New) {
245 // The alignment expression is a constant expression.
246 EnterExpressionEvaluationContext Unevaluated(
247 S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
248
249 ExprResult Result = S.SubstExpr(Attr.getMaxThreads(), TemplateArgs);
250 if (Result.isInvalid())
251 return;
252 Expr *MaxThreads = Result.getAs<Expr>();
253
254 Expr *MinBlocks = nullptr;
255 if (Attr.getMinBlocks()) {
256 Result = S.SubstExpr(Attr.getMinBlocks(), TemplateArgs);
257 if (Result.isInvalid())
258 return;
259 MinBlocks = Result.getAs<Expr>();
260 }
261
262 S.AddLaunchBoundsAttr(Attr.getLocation(), New, MaxThreads, MinBlocks,
263 Attr.getSpellingListIndex());
264}
265
266static void
267instantiateDependentModeAttr(Sema &S,
268 const MultiLevelTemplateArgumentList &TemplateArgs,
269 const ModeAttr &Attr, Decl *New) {
270 S.AddModeAttr(Attr.getRange(), New, Attr.getMode(),
271 Attr.getSpellingListIndex(), /*InInstantiation=*/true);
272}
273
274/// Instantiation of 'declare simd' attribute and its arguments.
275static void instantiateOMPDeclareSimdDeclAttr(
276 Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
277 const OMPDeclareSimdDeclAttr &Attr, Decl *New) {
278 // Allow 'this' in clauses with varlists.
279 if (auto *FTD = dyn_cast<FunctionTemplateDecl>(New))
280 New = FTD->getTemplatedDecl();
281 auto *FD = cast<FunctionDecl>(New);
282 auto *ThisContext = dyn_cast_or_null<CXXRecordDecl>(FD->getDeclContext());
283 SmallVector<Expr *, 4> Uniforms, Aligneds, Alignments, Linears, Steps;
284 SmallVector<unsigned, 4> LinModifiers;
285
286 auto &&Subst = [&](Expr *E) -> ExprResult {
287 if (auto *DRE = dyn_cast<DeclRefExpr>(E->IgnoreParenImpCasts()))
288 if (auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {
289 Sema::ContextRAII SavedContext(S, FD);
290 LocalInstantiationScope Local(S);
291 if (FD->getNumParams() > PVD->getFunctionScopeIndex())
292 Local.InstantiatedLocal(
293 PVD, FD->getParamDecl(PVD->getFunctionScopeIndex()));
294 return S.SubstExpr(E, TemplateArgs);
295 }
296 Sema::CXXThisScopeRAII ThisScope(S, ThisContext, /*TypeQuals=*/0,
297 FD->isCXXInstanceMember());
298 return S.SubstExpr(E, TemplateArgs);
299 };
300
301 ExprResult Simdlen;
302 if (auto *E = Attr.getSimdlen())
303 Simdlen = Subst(E);
304
305 if (Attr.uniforms_size() > 0) {
306 for(auto *E : Attr.uniforms()) {
307 ExprResult Inst = Subst(E);
308 if (Inst.isInvalid())
309 continue;
310 Uniforms.push_back(Inst.get());
311 }
312 }
313
314 auto AI = Attr.alignments_begin();
315 for (auto *E : Attr.aligneds()) {
316 ExprResult Inst = Subst(E);
317 if (Inst.isInvalid())
318 continue;
319 Aligneds.push_back(Inst.get());
320 Inst = ExprEmpty();
321 if (*AI)
322 Inst = S.SubstExpr(*AI, TemplateArgs);
323 Alignments.push_back(Inst.get());
324 ++AI;
325 }
326
327 auto SI = Attr.steps_begin();
328 for (auto *E : Attr.linears()) {
329 ExprResult Inst = Subst(E);
330 if (Inst.isInvalid())
331 continue;
332 Linears.push_back(Inst.get());
333 Inst = ExprEmpty();
334 if (*SI)
335 Inst = S.SubstExpr(*SI, TemplateArgs);
336 Steps.push_back(Inst.get());
337 ++SI;
338 }
339 LinModifiers.append(Attr.modifiers_begin(), Attr.modifiers_end());
340 (void)S.ActOnOpenMPDeclareSimdDirective(
341 S.ConvertDeclToDeclGroup(New), Attr.getBranchState(), Simdlen.get(),
342 Uniforms, Aligneds, Alignments, Linears, LinModifiers, Steps,
343 Attr.getRange());
344}
345
346static bool DeclContainsAttr(const Decl *D, const Attr *NewAttr) {
347 if (!D->hasAttrs() || NewAttr->duplicatesAllowed())
348 return false;
349 return llvm::find_if(D->getAttrs(), [NewAttr](const Attr *Attr) {
350 return Attr->getKind() == NewAttr->getKind();
351 }) != D->getAttrs().end();
352}
353
354void Sema::InstantiateAttrsForDecl(
355 const MultiLevelTemplateArgumentList &TemplateArgs, const Decl *Tmpl,
356 Decl *New, LateInstantiatedAttrVec *LateAttrs,
357 LocalInstantiationScope *OuterMostScope) {
358 if (NamedDecl *ND = dyn_cast<NamedDecl>(New)) {
359 for (const auto *TmplAttr : Tmpl->attrs()) {
360 // FIXME: If any of the special case versions from InstantiateAttrs become
361 // applicable to template declaration, we'll need to add them here.
362 CXXThisScopeRAII ThisScope(
363 *this, dyn_cast_or_null<CXXRecordDecl>(ND->getDeclContext()),
364 /*TypeQuals*/ 0, ND->isCXXInstanceMember());
365
366 Attr *NewAttr = sema::instantiateTemplateAttributeForDecl(
367 TmplAttr, Context, *this, TemplateArgs);
368 if (NewAttr && !DeclContainsAttr(New, NewAttr))
369 New->addAttr(NewAttr);
370 }
371 }
372}
373
374void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
375 const Decl *Tmpl, Decl *New,
376 LateInstantiatedAttrVec *LateAttrs,
377 LocalInstantiationScope *OuterMostScope) {
378 for (const auto *TmplAttr : Tmpl->attrs()) {
379 // FIXME: This should be generalized to more than just the AlignedAttr.
380 const AlignedAttr *Aligned = dyn_cast<AlignedAttr>(TmplAttr);
381 if (Aligned && Aligned->isAlignmentDependent()) {
382 instantiateDependentAlignedAttr(*this, TemplateArgs, Aligned, New);
383 continue;
384 }
385
386 const AssumeAlignedAttr *AssumeAligned = dyn_cast<AssumeAlignedAttr>(TmplAttr);
387 if (AssumeAligned) {
388 instantiateDependentAssumeAlignedAttr(*this, TemplateArgs, AssumeAligned, New);
389 continue;
390 }
391
392 const AlignValueAttr *AlignValue = dyn_cast<AlignValueAttr>(TmplAttr);
393 if (AlignValue) {
394 instantiateDependentAlignValueAttr(*this, TemplateArgs, AlignValue, New);
395 continue;
396 }
397
398 if (const auto *AllocAlign = dyn_cast<AllocAlignAttr>(TmplAttr)) {
399 instantiateDependentAllocAlignAttr(*this, TemplateArgs, AllocAlign, New);
400 continue;
401 }
402
403
404 if (const auto *EnableIf = dyn_cast<EnableIfAttr>(TmplAttr)) {
405 instantiateDependentEnableIfAttr(*this, TemplateArgs, EnableIf, Tmpl,
406 cast<FunctionDecl>(New));
407 continue;
408 }
409
410 if (const auto *DiagnoseIf = dyn_cast<DiagnoseIfAttr>(TmplAttr)) {
411 instantiateDependentDiagnoseIfAttr(*this, TemplateArgs, DiagnoseIf, Tmpl,
412 cast<FunctionDecl>(New));
413 continue;
414 }
415
416 if (const CUDALaunchBoundsAttr *CUDALaunchBounds =
417 dyn_cast<CUDALaunchBoundsAttr>(TmplAttr)) {
418 instantiateDependentCUDALaunchBoundsAttr(*this, TemplateArgs,
419 *CUDALaunchBounds, New);
420 continue;
421 }
422
423 if (const ModeAttr *Mode = dyn_cast<ModeAttr>(TmplAttr)) {
424 instantiateDependentModeAttr(*this, TemplateArgs, *Mode, New);
425 continue;
426 }
427
428 if (const auto *OMPAttr = dyn_cast<OMPDeclareSimdDeclAttr>(TmplAttr)) {
429 instantiateOMPDeclareSimdDeclAttr(*this, TemplateArgs, *OMPAttr, New);
430 continue;
431 }
432
433 // Existing DLL attribute on the instantiation takes precedence.
434 if (TmplAttr->getKind() == attr::DLLExport ||
435 TmplAttr->getKind() == attr::DLLImport) {
436 if (New->hasAttr<DLLExportAttr>() || New->hasAttr<DLLImportAttr>()) {
437 continue;
438 }
439 }
440
441 if (auto ABIAttr = dyn_cast<ParameterABIAttr>(TmplAttr)) {
442 AddParameterABIAttr(ABIAttr->getRange(), New, ABIAttr->getABI(),
443 ABIAttr->getSpellingListIndex());
444 continue;
445 }
446
447 if (isa<NSConsumedAttr>(TmplAttr) || isa<CFConsumedAttr>(TmplAttr)) {
448 AddNSConsumedAttr(TmplAttr->getRange(), New,
449 TmplAttr->getSpellingListIndex(),
450 isa<NSConsumedAttr>(TmplAttr),
451 /*template instantiation*/ true);
452 continue;
453 }
454
455 assert(!TmplAttr->isPackExpansion())(static_cast <bool> (!TmplAttr->isPackExpansion()) ?
void (0) : __assert_fail ("!TmplAttr->isPackExpansion()",
"/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 455, __extension__ __PRETTY_FUNCTION__))
;
456 if (TmplAttr->isLateParsed() && LateAttrs) {
457 // Late parsed attributes must be instantiated and attached after the
458 // enclosing class has been instantiated. See Sema::InstantiateClass.
459 LocalInstantiationScope *Saved = nullptr;
460 if (CurrentInstantiationScope)
461 Saved = CurrentInstantiationScope->cloneScopes(OuterMostScope);
462 LateAttrs->push_back(LateInstantiatedAttribute(TmplAttr, Saved, New));
463 } else {
464 // Allow 'this' within late-parsed attributes.
465 NamedDecl *ND = dyn_cast<NamedDecl>(New);
466 CXXRecordDecl *ThisContext =
467 dyn_cast_or_null<CXXRecordDecl>(ND->getDeclContext());
468 CXXThisScopeRAII ThisScope(*this, ThisContext, /*TypeQuals*/0,
469 ND && ND->isCXXInstanceMember());
470
471 Attr *NewAttr = sema::instantiateTemplateAttribute(TmplAttr, Context,
472 *this, TemplateArgs);
473
474 if (NewAttr && !DeclContainsAttr(New, NewAttr))
475 New->addAttr(NewAttr);
476 }
477 }
478}
479
480/// Get the previous declaration of a declaration for the purposes of template
481/// instantiation. If this finds a previous declaration, then the previous
482/// declaration of the instantiation of D should be an instantiation of the
483/// result of this function.
484template<typename DeclT>
485static DeclT *getPreviousDeclForInstantiation(DeclT *D) {
486 DeclT *Result = D->getPreviousDecl();
487
488 // If the declaration is within a class, and the previous declaration was
489 // merged from a different definition of that class, then we don't have a
490 // previous declaration for the purpose of template instantiation.
491 if (Result && isa<CXXRecordDecl>(D->getDeclContext()) &&
492 D->getLexicalDeclContext() != Result->getLexicalDeclContext())
493 return nullptr;
494
495 return Result;
496}
497
498Decl *
499TemplateDeclInstantiator::VisitTranslationUnitDecl(TranslationUnitDecl *D) {
500 llvm_unreachable("Translation units cannot be instantiated")::llvm::llvm_unreachable_internal("Translation units cannot be instantiated"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 500)
;
501}
502
503Decl *
504TemplateDeclInstantiator::VisitPragmaCommentDecl(PragmaCommentDecl *D) {
505 llvm_unreachable("pragma comment cannot be instantiated")::llvm::llvm_unreachable_internal("pragma comment cannot be instantiated"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 505)
;
506}
507
508Decl *TemplateDeclInstantiator::VisitPragmaDetectMismatchDecl(
509 PragmaDetectMismatchDecl *D) {
510 llvm_unreachable("pragma comment cannot be instantiated")::llvm::llvm_unreachable_internal("pragma comment cannot be instantiated"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 510)
;
511}
512
513Decl *
514TemplateDeclInstantiator::VisitExternCContextDecl(ExternCContextDecl *D) {
515 llvm_unreachable("extern \"C\" context cannot be instantiated")::llvm::llvm_unreachable_internal("extern \"C\" context cannot be instantiated"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 515)
;
516}
517
518Decl *
519TemplateDeclInstantiator::VisitLabelDecl(LabelDecl *D) {
520 LabelDecl *Inst = LabelDecl::Create(SemaRef.Context, Owner, D->getLocation(),
521 D->getIdentifier());
522 Owner->addDecl(Inst);
523 return Inst;
524}
525
526Decl *
527TemplateDeclInstantiator::VisitNamespaceDecl(NamespaceDecl *D) {
528 llvm_unreachable("Namespaces cannot be instantiated")::llvm::llvm_unreachable_internal("Namespaces cannot be instantiated"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 528)
;
529}
530
531Decl *
532TemplateDeclInstantiator::VisitNamespaceAliasDecl(NamespaceAliasDecl *D) {
533 NamespaceAliasDecl *Inst
534 = NamespaceAliasDecl::Create(SemaRef.Context, Owner,
535 D->getNamespaceLoc(),
536 D->getAliasLoc(),
537 D->getIdentifier(),
538 D->getQualifierLoc(),
539 D->getTargetNameLoc(),
540 D->getNamespace());
541 Owner->addDecl(Inst);
542 return Inst;
543}
544
545Decl *TemplateDeclInstantiator::InstantiateTypedefNameDecl(TypedefNameDecl *D,
546 bool IsTypeAlias) {
547 bool Invalid = false;
548 TypeSourceInfo *DI = D->getTypeSourceInfo();
549 if (DI->getType()->isInstantiationDependentType() ||
550 DI->getType()->isVariablyModifiedType()) {
551 DI = SemaRef.SubstType(DI, TemplateArgs,
552 D->getLocation(), D->getDeclName());
553 if (!DI) {
554 Invalid = true;
555 DI = SemaRef.Context.getTrivialTypeSourceInfo(SemaRef.Context.IntTy);
556 }
557 } else {
558 SemaRef.MarkDeclarationsReferencedInType(D->getLocation(), DI->getType());
559 }
560
561 // HACK: g++ has a bug where it gets the value kind of ?: wrong.
562 // libstdc++ relies upon this bug in its implementation of common_type.
563 // If we happen to be processing that implementation, fake up the g++ ?:
564 // semantics. See LWG issue 2141 for more information on the bug.
565 const DecltypeType *DT = DI->getType()->getAs<DecltypeType>();
566 CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D->getDeclContext());
567 if (DT && RD && isa<ConditionalOperator>(DT->getUnderlyingExpr()) &&
568 DT->isReferenceType() &&
569 RD->getEnclosingNamespaceContext() == SemaRef.getStdNamespace() &&
570 RD->getIdentifier() && RD->getIdentifier()->isStr("common_type") &&
571 D->getIdentifier() && D->getIdentifier()->isStr("type") &&
572 SemaRef.getSourceManager().isInSystemHeader(D->getLocStart()))
573 // Fold it to the (non-reference) type which g++ would have produced.
574 DI = SemaRef.Context.getTrivialTypeSourceInfo(
575 DI->getType().getNonReferenceType());
576
577 // Create the new typedef
578 TypedefNameDecl *Typedef;
579 if (IsTypeAlias)
580 Typedef = TypeAliasDecl::Create(SemaRef.Context, Owner, D->getLocStart(),
581 D->getLocation(), D->getIdentifier(), DI);
582 else
583 Typedef = TypedefDecl::Create(SemaRef.Context, Owner, D->getLocStart(),
584 D->getLocation(), D->getIdentifier(), DI);
585 if (Invalid)
586 Typedef->setInvalidDecl();
587
588 // If the old typedef was the name for linkage purposes of an anonymous
589 // tag decl, re-establish that relationship for the new typedef.
590 if (const TagType *oldTagType = D->getUnderlyingType()->getAs<TagType>()) {
591 TagDecl *oldTag = oldTagType->getDecl();
592 if (oldTag->getTypedefNameForAnonDecl() == D && !Invalid) {
593 TagDecl *newTag = DI->getType()->castAs<TagType>()->getDecl();
594 assert(!newTag->hasNameForLinkage())(static_cast <bool> (!newTag->hasNameForLinkage()) ?
void (0) : __assert_fail ("!newTag->hasNameForLinkage()",
"/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 594, __extension__ __PRETTY_FUNCTION__))
;
595 newTag->setTypedefNameForAnonDecl(Typedef);
596 }
597 }
598
599 if (TypedefNameDecl *Prev = getPreviousDeclForInstantiation(D)) {
600 NamedDecl *InstPrev = SemaRef.FindInstantiatedDecl(D->getLocation(), Prev,
601 TemplateArgs);
602 if (!InstPrev)
603 return nullptr;
604
605 TypedefNameDecl *InstPrevTypedef = cast<TypedefNameDecl>(InstPrev);
606
607 // If the typedef types are not identical, reject them.
608 SemaRef.isIncompatibleTypedef(InstPrevTypedef, Typedef);
609
610 Typedef->setPreviousDecl(InstPrevTypedef);
611 }
612
613 SemaRef.InstantiateAttrs(TemplateArgs, D, Typedef);
614
615 Typedef->setAccess(D->getAccess());
616
617 return Typedef;
618}
619
620Decl *TemplateDeclInstantiator::VisitTypedefDecl(TypedefDecl *D) {
621 Decl *Typedef = InstantiateTypedefNameDecl(D, /*IsTypeAlias=*/false);
622 if (Typedef)
623 Owner->addDecl(Typedef);
624 return Typedef;
625}
626
627Decl *TemplateDeclInstantiator::VisitTypeAliasDecl(TypeAliasDecl *D) {
628 Decl *Typedef = InstantiateTypedefNameDecl(D, /*IsTypeAlias=*/true);
629 if (Typedef)
630 Owner->addDecl(Typedef);
631 return Typedef;
632}
633
634Decl *
635TemplateDeclInstantiator::VisitTypeAliasTemplateDecl(TypeAliasTemplateDecl *D) {
636 // Create a local instantiation scope for this type alias template, which
637 // will contain the instantiations of the template parameters.
638 LocalInstantiationScope Scope(SemaRef);
639
640 TemplateParameterList *TempParams = D->getTemplateParameters();
641 TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
642 if (!InstParams)
643 return nullptr;
644
645 TypeAliasDecl *Pattern = D->getTemplatedDecl();
646
647 TypeAliasTemplateDecl *PrevAliasTemplate = nullptr;
648 if (getPreviousDeclForInstantiation<TypedefNameDecl>(Pattern)) {
649 DeclContext::lookup_result Found = Owner->lookup(Pattern->getDeclName());
650 if (!Found.empty()) {
651 PrevAliasTemplate = dyn_cast<TypeAliasTemplateDecl>(Found.front());
652 }
653 }
654
655 TypeAliasDecl *AliasInst = cast_or_null<TypeAliasDecl>(
656 InstantiateTypedefNameDecl(Pattern, /*IsTypeAlias=*/true));
657 if (!AliasInst)
658 return nullptr;
659
660 TypeAliasTemplateDecl *Inst
661 = TypeAliasTemplateDecl::Create(SemaRef.Context, Owner, D->getLocation(),
662 D->getDeclName(), InstParams, AliasInst);
663 AliasInst->setDescribedAliasTemplate(Inst);
664 if (PrevAliasTemplate)
665 Inst->setPreviousDecl(PrevAliasTemplate);
666
667 Inst->setAccess(D->getAccess());
668
669 if (!PrevAliasTemplate)
670 Inst->setInstantiatedFromMemberTemplate(D);
671
672 Owner->addDecl(Inst);
673
674 return Inst;
675}
676
677Decl *TemplateDeclInstantiator::VisitBindingDecl(BindingDecl *D) {
678 auto *NewBD = BindingDecl::Create(SemaRef.Context, Owner, D->getLocation(),
679 D->getIdentifier());
680 NewBD->setReferenced(D->isReferenced());
681 SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, NewBD);
682 return NewBD;
683}
684
685Decl *TemplateDeclInstantiator::VisitDecompositionDecl(DecompositionDecl *D) {
686 // Transform the bindings first.
687 SmallVector<BindingDecl*, 16> NewBindings;
688 for (auto *OldBD : D->bindings())
689 NewBindings.push_back(cast<BindingDecl>(VisitBindingDecl(OldBD)));
690 ArrayRef<BindingDecl*> NewBindingArray = NewBindings;
691
692 auto *NewDD = cast_or_null<DecompositionDecl>(
693 VisitVarDecl(D, /*InstantiatingVarTemplate=*/false, &NewBindingArray));
694
695 if (!NewDD || NewDD->isInvalidDecl())
696 for (auto *NewBD : NewBindings)
697 NewBD->setInvalidDecl();
698
699 return NewDD;
700}
701
702Decl *TemplateDeclInstantiator::VisitVarDecl(VarDecl *D) {
703 return VisitVarDecl(D, /*InstantiatingVarTemplate=*/false);
704}
705
706Decl *TemplateDeclInstantiator::VisitVarDecl(VarDecl *D,
707 bool InstantiatingVarTemplate,
708 ArrayRef<BindingDecl*> *Bindings) {
709
710 // Do substitution on the type of the declaration
711 TypeSourceInfo *DI = SemaRef.SubstType(
712 D->getTypeSourceInfo(), TemplateArgs, D->getTypeSpecStartLoc(),
713 D->getDeclName(), /*AllowDeducedTST*/true);
714 if (!DI)
715 return nullptr;
716
717 if (DI->getType()->isFunctionType()) {
718 SemaRef.Diag(D->getLocation(), diag::err_variable_instantiates_to_function)
719 << D->isStaticDataMember() << DI->getType();
720 return nullptr;
721 }
722
723 DeclContext *DC = Owner;
724 if (D->isLocalExternDecl())
725 SemaRef.adjustContextForLocalExternDecl(DC);
726
727 // Build the instantiated declaration.
728 VarDecl *Var;
729 if (Bindings)
730 Var = DecompositionDecl::Create(SemaRef.Context, DC, D->getInnerLocStart(),
731 D->getLocation(), DI->getType(), DI,
732 D->getStorageClass(), *Bindings);
733 else
734 Var = VarDecl::Create(SemaRef.Context, DC, D->getInnerLocStart(),
735 D->getLocation(), D->getIdentifier(), DI->getType(),
736 DI, D->getStorageClass());
737
738 // In ARC, infer 'retaining' for variables of retainable type.
739 if (SemaRef.getLangOpts().ObjCAutoRefCount &&
740 SemaRef.inferObjCARCLifetime(Var))
741 Var->setInvalidDecl();
742
743 // Substitute the nested name specifier, if any.
744 if (SubstQualifier(D, Var))
745 return nullptr;
746
747 SemaRef.BuildVariableInstantiation(Var, D, TemplateArgs, LateAttrs, Owner,
748 StartingScope, InstantiatingVarTemplate);
749
750 if (D->isNRVOVariable()) {
751 QualType ReturnType = cast<FunctionDecl>(DC)->getReturnType();
752 if (SemaRef.isCopyElisionCandidate(ReturnType, Var, false))
753 Var->setNRVOVariable(true);
754 }
755
756 Var->setImplicit(D->isImplicit());
757
758 return Var;
759}
760
761Decl *TemplateDeclInstantiator::VisitAccessSpecDecl(AccessSpecDecl *D) {
762 AccessSpecDecl* AD
763 = AccessSpecDecl::Create(SemaRef.Context, D->getAccess(), Owner,
764 D->getAccessSpecifierLoc(), D->getColonLoc());
765 Owner->addHiddenDecl(AD);
766 return AD;
767}
768
769Decl *TemplateDeclInstantiator::VisitFieldDecl(FieldDecl *D) {
770 bool Invalid = false;
771 TypeSourceInfo *DI = D->getTypeSourceInfo();
772 if (DI->getType()->isInstantiationDependentType() ||
773 DI->getType()->isVariablyModifiedType()) {
774 DI = SemaRef.SubstType(DI, TemplateArgs,
775 D->getLocation(), D->getDeclName());
776 if (!DI) {
777 DI = D->getTypeSourceInfo();
778 Invalid = true;
779 } else if (DI->getType()->isFunctionType()) {
780 // C++ [temp.arg.type]p3:
781 // If a declaration acquires a function type through a type
782 // dependent on a template-parameter and this causes a
783 // declaration that does not use the syntactic form of a
784 // function declarator to have function type, the program is
785 // ill-formed.
786 SemaRef.Diag(D->getLocation(), diag::err_field_instantiates_to_function)
787 << DI->getType();
788 Invalid = true;
789 }
790 } else {
791 SemaRef.MarkDeclarationsReferencedInType(D->getLocation(), DI->getType());
792 }
793
794 Expr *BitWidth = D->getBitWidth();
795 if (Invalid)
796 BitWidth = nullptr;
797 else if (BitWidth) {
798 // The bit-width expression is a constant expression.
799 EnterExpressionEvaluationContext Unevaluated(
800 SemaRef, Sema::ExpressionEvaluationContext::ConstantEvaluated);
801
802 ExprResult InstantiatedBitWidth
803 = SemaRef.SubstExpr(BitWidth, TemplateArgs);
804 if (InstantiatedBitWidth.isInvalid()) {
805 Invalid = true;
806 BitWidth = nullptr;
807 } else
808 BitWidth = InstantiatedBitWidth.getAs<Expr>();
809 }
810
811 FieldDecl *Field = SemaRef.CheckFieldDecl(D->getDeclName(),
812 DI->getType(), DI,
813 cast<RecordDecl>(Owner),
814 D->getLocation(),
815 D->isMutable(),
816 BitWidth,
817 D->getInClassInitStyle(),
818 D->getInnerLocStart(),
819 D->getAccess(),
820 nullptr);
821 if (!Field) {
822 cast<Decl>(Owner)->setInvalidDecl();
823 return nullptr;
824 }
825
826 SemaRef.InstantiateAttrs(TemplateArgs, D, Field, LateAttrs, StartingScope);
827
828 if (Field->hasAttrs())
829 SemaRef.CheckAlignasUnderalignment(Field);
830
831 if (Invalid)
832 Field->setInvalidDecl();
833
834 if (!Field->getDeclName()) {
835 // Keep track of where this decl came from.
836 SemaRef.Context.setInstantiatedFromUnnamedFieldDecl(Field, D);
837 }
838 if (CXXRecordDecl *Parent= dyn_cast<CXXRecordDecl>(Field->getDeclContext())) {
839 if (Parent->isAnonymousStructOrUnion() &&
840 Parent->getRedeclContext()->isFunctionOrMethod())
841 SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Field);
842 }
843
844 Field->setImplicit(D->isImplicit());
845 Field->setAccess(D->getAccess());
846 Owner->addDecl(Field);
847
848 return Field;
849}
850
851Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {
852 bool Invalid = false;
853 TypeSourceInfo *DI = D->getTypeSourceInfo();
854
855 if (DI->getType()->isVariablyModifiedType()) {
856 SemaRef.Diag(D->getLocation(), diag::err_property_is_variably_modified)
857 << D;
858 Invalid = true;
859 } else if (DI->getType()->isInstantiationDependentType()) {
860 DI = SemaRef.SubstType(DI, TemplateArgs,
861 D->getLocation(), D->getDeclName());
862 if (!DI) {
863 DI = D->getTypeSourceInfo();
864 Invalid = true;
865 } else if (DI->getType()->isFunctionType()) {
866 // C++ [temp.arg.type]p3:
867 // If a declaration acquires a function type through a type
868 // dependent on a template-parameter and this causes a
869 // declaration that does not use the syntactic form of a
870 // function declarator to have function type, the program is
871 // ill-formed.
872 SemaRef.Diag(D->getLocation(), diag::err_field_instantiates_to_function)
873 << DI->getType();
874 Invalid = true;
875 }
876 } else {
877 SemaRef.MarkDeclarationsReferencedInType(D->getLocation(), DI->getType());
878 }
879
880 MSPropertyDecl *Property = MSPropertyDecl::Create(
881 SemaRef.Context, Owner, D->getLocation(), D->getDeclName(), DI->getType(),
882 DI, D->getLocStart(), D->getGetterId(), D->getSetterId());
883
884 SemaRef.InstantiateAttrs(TemplateArgs, D, Property, LateAttrs,
885 StartingScope);
886
887 if (Invalid)
888 Property->setInvalidDecl();
889
890 Property->setAccess(D->getAccess());
891 Owner->addDecl(Property);
892
893 return Property;
894}
895
896Decl *TemplateDeclInstantiator::VisitIndirectFieldDecl(IndirectFieldDecl *D) {
897 NamedDecl **NamedChain =
898 new (SemaRef.Context)NamedDecl*[D->getChainingSize()];
899
900 int i = 0;
901 for (auto *PI : D->chain()) {
902 NamedDecl *Next = SemaRef.FindInstantiatedDecl(D->getLocation(), PI,
903 TemplateArgs);
904 if (!Next)
905 return nullptr;
906
907 NamedChain[i++] = Next;
908 }
909
910 QualType T = cast<FieldDecl>(NamedChain[i-1])->getType();
911 IndirectFieldDecl *IndirectField = IndirectFieldDecl::Create(
912 SemaRef.Context, Owner, D->getLocation(), D->getIdentifier(), T,
913 {NamedChain, D->getChainingSize()});
914
915 for (const auto *Attr : D->attrs())
916 IndirectField->addAttr(Attr->clone(SemaRef.Context));
917
918 IndirectField->setImplicit(D->isImplicit());
919 IndirectField->setAccess(D->getAccess());
920 Owner->addDecl(IndirectField);
921 return IndirectField;
922}
923
924Decl *TemplateDeclInstantiator::VisitFriendDecl(FriendDecl *D) {
925 // Handle friend type expressions by simply substituting template
926 // parameters into the pattern type and checking the result.
927 if (TypeSourceInfo *Ty = D->getFriendType()) {
928 TypeSourceInfo *InstTy;
929 // If this is an unsupported friend, don't bother substituting template
930 // arguments into it. The actual type referred to won't be used by any
931 // parts of Clang, and may not be valid for instantiating. Just use the
932 // same info for the instantiated friend.
933 if (D->isUnsupportedFriend()) {
934 InstTy = Ty;
935 } else {
936 InstTy = SemaRef.SubstType(Ty, TemplateArgs,
937 D->getLocation(), DeclarationName());
938 }
939 if (!InstTy)
940 return nullptr;
941
942 FriendDecl *FD = SemaRef.CheckFriendTypeDecl(D->getLocStart(),
943 D->getFriendLoc(), InstTy);
944 if (!FD)
945 return nullptr;
946
947 FD->setAccess(AS_public);
948 FD->setUnsupportedFriend(D->isUnsupportedFriend());
949 Owner->addDecl(FD);
950 return FD;
951 }
952
953 NamedDecl *ND = D->getFriendDecl();
954 assert(ND && "friend decl must be a decl or a type!")(static_cast <bool> (ND && "friend decl must be a decl or a type!"
) ? void (0) : __assert_fail ("ND && \"friend decl must be a decl or a type!\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 954, __extension__ __PRETTY_FUNCTION__))
;
955
956 // All of the Visit implementations for the various potential friend
957 // declarations have to be carefully written to work for friend
958 // objects, with the most important detail being that the target
959 // decl should almost certainly not be placed in Owner.
960 Decl *NewND = Visit(ND);
961 if (!NewND) return nullptr;
962
963 FriendDecl *FD =
964 FriendDecl::Create(SemaRef.Context, Owner, D->getLocation(),
965 cast<NamedDecl>(NewND), D->getFriendLoc());
966 FD->setAccess(AS_public);
967 FD->setUnsupportedFriend(D->isUnsupportedFriend());
968 Owner->addDecl(FD);
969 return FD;
970}
971
972Decl *TemplateDeclInstantiator::VisitStaticAssertDecl(StaticAssertDecl *D) {
973 Expr *AssertExpr = D->getAssertExpr();
974
975 // The expression in a static assertion is a constant expression.
976 EnterExpressionEvaluationContext Unevaluated(
977 SemaRef, Sema::ExpressionEvaluationContext::ConstantEvaluated);
978
979 ExprResult InstantiatedAssertExpr
980 = SemaRef.SubstExpr(AssertExpr, TemplateArgs);
981 if (InstantiatedAssertExpr.isInvalid())
982 return nullptr;
983
984 return SemaRef.BuildStaticAssertDeclaration(D->getLocation(),
985 InstantiatedAssertExpr.get(),
986 D->getMessage(),
987 D->getRParenLoc(),
988 D->isFailed());
989}
990
991Decl *TemplateDeclInstantiator::VisitEnumDecl(EnumDecl *D) {
992 EnumDecl *PrevDecl = nullptr;
993 if (EnumDecl *PatternPrev = getPreviousDeclForInstantiation(D)) {
994 NamedDecl *Prev = SemaRef.FindInstantiatedDecl(D->getLocation(),
995 PatternPrev,
996 TemplateArgs);
997 if (!Prev) return nullptr;
998 PrevDecl = cast<EnumDecl>(Prev);
999 }
1000
1001 EnumDecl *Enum = EnumDecl::Create(SemaRef.Context, Owner, D->getLocStart(),
1002 D->getLocation(), D->getIdentifier(),
1003 PrevDecl, D->isScoped(),
1004 D->isScopedUsingClassTag(), D->isFixed());
1005 if (D->isFixed()) {
1006 if (TypeSourceInfo *TI = D->getIntegerTypeSourceInfo()) {
1007 // If we have type source information for the underlying type, it means it
1008 // has been explicitly set by the user. Perform substitution on it before
1009 // moving on.
1010 SourceLocation UnderlyingLoc = TI->getTypeLoc().getBeginLoc();
1011 TypeSourceInfo *NewTI = SemaRef.SubstType(TI, TemplateArgs, UnderlyingLoc,
1012 DeclarationName());
1013 if (!NewTI || SemaRef.CheckEnumUnderlyingType(NewTI))
1014 Enum->setIntegerType(SemaRef.Context.IntTy);
1015 else
1016 Enum->setIntegerTypeSourceInfo(NewTI);
1017 } else {
1018 assert(!D->getIntegerType()->isDependentType()(static_cast <bool> (!D->getIntegerType()->isDependentType
() && "Dependent type without type source info") ? void
(0) : __assert_fail ("!D->getIntegerType()->isDependentType() && \"Dependent type without type source info\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1019, __extension__ __PRETTY_FUNCTION__))
1019 && "Dependent type without type source info")(static_cast <bool> (!D->getIntegerType()->isDependentType
() && "Dependent type without type source info") ? void
(0) : __assert_fail ("!D->getIntegerType()->isDependentType() && \"Dependent type without type source info\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1019, __extension__ __PRETTY_FUNCTION__))
;
1020 Enum->setIntegerType(D->getIntegerType());
1021 }
1022 }
1023
1024 SemaRef.InstantiateAttrs(TemplateArgs, D, Enum);
1025
1026 Enum->setInstantiationOfMemberEnum(D, TSK_ImplicitInstantiation);
1027 Enum->setAccess(D->getAccess());
1028 // Forward the mangling number from the template to the instantiated decl.
1029 SemaRef.Context.setManglingNumber(Enum, SemaRef.Context.getManglingNumber(D));
1030 // See if the old tag was defined along with a declarator.
1031 // If it did, mark the new tag as being associated with that declarator.
1032 if (DeclaratorDecl *DD = SemaRef.Context.getDeclaratorForUnnamedTagDecl(D))
1033 SemaRef.Context.addDeclaratorForUnnamedTagDecl(Enum, DD);
1034 // See if the old tag was defined along with a typedef.
1035 // If it did, mark the new tag as being associated with that typedef.
1036 if (TypedefNameDecl *TND = SemaRef.Context.getTypedefNameForUnnamedTagDecl(D))
1037 SemaRef.Context.addTypedefNameForUnnamedTagDecl(Enum, TND);
1038 if (SubstQualifier(D, Enum)) return nullptr;
1039 Owner->addDecl(Enum);
1040
1041 EnumDecl *Def = D->getDefinition();
1042 if (Def && Def != D) {
1043 // If this is an out-of-line definition of an enum member template, check
1044 // that the underlying types match in the instantiation of both
1045 // declarations.
1046 if (TypeSourceInfo *TI = Def->getIntegerTypeSourceInfo()) {
1047 SourceLocation UnderlyingLoc = TI->getTypeLoc().getBeginLoc();
1048 QualType DefnUnderlying =
1049 SemaRef.SubstType(TI->getType(), TemplateArgs,
1050 UnderlyingLoc, DeclarationName());
1051 SemaRef.CheckEnumRedeclaration(Def->getLocation(), Def->isScoped(),
1052 DefnUnderlying,
1053 /*EnumUnderlyingIsImplicit=*/false, Enum);
1054 }
1055 }
1056
1057 // C++11 [temp.inst]p1: The implicit instantiation of a class template
1058 // specialization causes the implicit instantiation of the declarations, but
1059 // not the definitions of scoped member enumerations.
1060 //
1061 // DR1484 clarifies that enumeration definitions inside of a template
1062 // declaration aren't considered entities that can be separately instantiated
1063 // from the rest of the entity they are declared inside of.
1064 if (isDeclWithinFunction(D) ? D == Def : Def && !Enum->isScoped()) {
1065 SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Enum);
1066 InstantiateEnumDefinition(Enum, Def);
1067 }
1068
1069 return Enum;
1070}
1071
1072void TemplateDeclInstantiator::InstantiateEnumDefinition(
1073 EnumDecl *Enum, EnumDecl *Pattern) {
1074 Enum->startDefinition();
1075
1076 // Update the location to refer to the definition.
1077 Enum->setLocation(Pattern->getLocation());
1078
1079 SmallVector<Decl*, 4> Enumerators;
1080
1081 EnumConstantDecl *LastEnumConst = nullptr;
1082 for (auto *EC : Pattern->enumerators()) {
1083 // The specified value for the enumerator.
1084 ExprResult Value((Expr *)nullptr);
1085 if (Expr *UninstValue = EC->getInitExpr()) {
1086 // The enumerator's value expression is a constant expression.
1087 EnterExpressionEvaluationContext Unevaluated(
1088 SemaRef, Sema::ExpressionEvaluationContext::ConstantEvaluated);
1089
1090 Value = SemaRef.SubstExpr(UninstValue, TemplateArgs);
1091 }
1092
1093 // Drop the initial value and continue.
1094 bool isInvalid = false;
1095 if (Value.isInvalid()) {
1096 Value = nullptr;
1097 isInvalid = true;
1098 }
1099
1100 EnumConstantDecl *EnumConst
1101 = SemaRef.CheckEnumConstant(Enum, LastEnumConst,
1102 EC->getLocation(), EC->getIdentifier(),
1103 Value.get());
1104
1105 if (isInvalid) {
1106 if (EnumConst)
1107 EnumConst->setInvalidDecl();
1108 Enum->setInvalidDecl();
1109 }
1110
1111 if (EnumConst) {
1112 SemaRef.InstantiateAttrs(TemplateArgs, EC, EnumConst);
1113
1114 EnumConst->setAccess(Enum->getAccess());
1115 Enum->addDecl(EnumConst);
1116 Enumerators.push_back(EnumConst);
1117 LastEnumConst = EnumConst;
1118
1119 if (Pattern->getDeclContext()->isFunctionOrMethod() &&
1120 !Enum->isScoped()) {
1121 // If the enumeration is within a function or method, record the enum
1122 // constant as a local.
1123 SemaRef.CurrentInstantiationScope->InstantiatedLocal(EC, EnumConst);
1124 }
1125 }
1126 }
1127
1128 SemaRef.ActOnEnumBody(Enum->getLocation(), Enum->getBraceRange(), Enum,
1129 Enumerators,
1130 nullptr, nullptr);
1131}
1132
1133Decl *TemplateDeclInstantiator::VisitEnumConstantDecl(EnumConstantDecl *D) {
1134 llvm_unreachable("EnumConstantDecls can only occur within EnumDecls.")::llvm::llvm_unreachable_internal("EnumConstantDecls can only occur within EnumDecls."
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1134)
;
1135}
1136
1137Decl *
1138TemplateDeclInstantiator::VisitBuiltinTemplateDecl(BuiltinTemplateDecl *D) {
1139 llvm_unreachable("BuiltinTemplateDecls cannot be instantiated.")::llvm::llvm_unreachable_internal("BuiltinTemplateDecls cannot be instantiated."
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1139)
;
1140}
1141
1142Decl *TemplateDeclInstantiator::VisitClassTemplateDecl(ClassTemplateDecl *D) {
1143 bool isFriend = (D->getFriendObjectKind() != Decl::FOK_None);
1144
1145 // Create a local instantiation scope for this class template, which
1146 // will contain the instantiations of the template parameters.
1147 LocalInstantiationScope Scope(SemaRef);
1148 TemplateParameterList *TempParams = D->getTemplateParameters();
1149 TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
1150 if (!InstParams)
1151 return nullptr;
1152
1153 CXXRecordDecl *Pattern = D->getTemplatedDecl();
1154
1155 // Instantiate the qualifier. We have to do this first in case
1156 // we're a friend declaration, because if we are then we need to put
1157 // the new declaration in the appropriate context.
1158 NestedNameSpecifierLoc QualifierLoc = Pattern->getQualifierLoc();
1159 if (QualifierLoc) {
1160 QualifierLoc = SemaRef.SubstNestedNameSpecifierLoc(QualifierLoc,
1161 TemplateArgs);
1162 if (!QualifierLoc)
1163 return nullptr;
1164 }
1165
1166 CXXRecordDecl *PrevDecl = nullptr;
1167 ClassTemplateDecl *PrevClassTemplate = nullptr;
1168
1169 if (!isFriend && getPreviousDeclForInstantiation(Pattern)) {
1170 DeclContext::lookup_result Found = Owner->lookup(Pattern->getDeclName());
1171 if (!Found.empty()) {
1172 PrevClassTemplate = dyn_cast<ClassTemplateDecl>(Found.front());
1173 if (PrevClassTemplate)
1174 PrevDecl = PrevClassTemplate->getTemplatedDecl();
1175 }
1176 }
1177
1178 // If this isn't a friend, then it's a member template, in which
1179 // case we just want to build the instantiation in the
1180 // specialization. If it is a friend, we want to build it in
1181 // the appropriate context.
1182 DeclContext *DC = Owner;
1183 if (isFriend) {
1184 if (QualifierLoc) {
1185 CXXScopeSpec SS;
1186 SS.Adopt(QualifierLoc);
1187 DC = SemaRef.computeDeclContext(SS);
1188 if (!DC) return nullptr;
1189 } else {
1190 DC = SemaRef.FindInstantiatedContext(Pattern->getLocation(),
1191 Pattern->getDeclContext(),
1192 TemplateArgs);
1193 }
1194
1195 // Look for a previous declaration of the template in the owning
1196 // context.
1197 LookupResult R(SemaRef, Pattern->getDeclName(), Pattern->getLocation(),
1198 Sema::LookupOrdinaryName,
1199 SemaRef.forRedeclarationInCurContext());
1200 SemaRef.LookupQualifiedName(R, DC);
1201
1202 if (R.isSingleResult()) {
1203 PrevClassTemplate = R.getAsSingle<ClassTemplateDecl>();
1204 if (PrevClassTemplate)
1205 PrevDecl = PrevClassTemplate->getTemplatedDecl();
1206 }
1207
1208 if (!PrevClassTemplate && QualifierLoc) {
1209 SemaRef.Diag(Pattern->getLocation(), diag::err_not_tag_in_scope)
1210 << D->getTemplatedDecl()->getTagKind() << Pattern->getDeclName() << DC
1211 << QualifierLoc.getSourceRange();
1212 return nullptr;
1213 }
1214
1215 bool AdoptedPreviousTemplateParams = false;
1216 if (PrevClassTemplate) {
1217 bool Complain = true;
1218
1219 // HACK: libstdc++ 4.2.1 contains an ill-formed friend class
1220 // template for struct std::tr1::__detail::_Map_base, where the
1221 // template parameters of the friend declaration don't match the
1222 // template parameters of the original declaration. In this one
1223 // case, we don't complain about the ill-formed friend
1224 // declaration.
1225 if (isFriend && Pattern->getIdentifier() &&
1226 Pattern->getIdentifier()->isStr("_Map_base") &&
1227 DC->isNamespace() &&
1228 cast<NamespaceDecl>(DC)->getIdentifier() &&
1229 cast<NamespaceDecl>(DC)->getIdentifier()->isStr("__detail")) {
1230 DeclContext *DCParent = DC->getParent();
1231 if (DCParent->isNamespace() &&
1232 cast<NamespaceDecl>(DCParent)->getIdentifier() &&
1233 cast<NamespaceDecl>(DCParent)->getIdentifier()->isStr("tr1")) {
1234 if (cast<Decl>(DCParent)->isInStdNamespace())
1235 Complain = false;
1236 }
1237 }
1238
1239 TemplateParameterList *PrevParams
1240 = PrevClassTemplate->getTemplateParameters();
1241
1242 // Make sure the parameter lists match.
1243 if (!SemaRef.TemplateParameterListsAreEqual(InstParams, PrevParams,
1244 Complain,
1245 Sema::TPL_TemplateMatch)) {
1246 if (Complain)
1247 return nullptr;
1248
1249 AdoptedPreviousTemplateParams = true;
1250 InstParams = PrevParams;
1251 }
1252
1253 // Do some additional validation, then merge default arguments
1254 // from the existing declarations.
1255 if (!AdoptedPreviousTemplateParams &&
1256 SemaRef.CheckTemplateParameterList(InstParams, PrevParams,
1257 Sema::TPC_ClassTemplate))
1258 return nullptr;
1259 }
1260 }
1261
1262 CXXRecordDecl *RecordInst
1263 = CXXRecordDecl::Create(SemaRef.Context, Pattern->getTagKind(), DC,
1264 Pattern->getLocStart(), Pattern->getLocation(),
1265 Pattern->getIdentifier(), PrevDecl,
1266 /*DelayTypeCreation=*/true);
1267
1268 if (QualifierLoc)
1269 RecordInst->setQualifierInfo(QualifierLoc);
1270
1271 ClassTemplateDecl *Inst
1272 = ClassTemplateDecl::Create(SemaRef.Context, DC, D->getLocation(),
1273 D->getIdentifier(), InstParams, RecordInst);
1274 assert(!(isFriend && Owner->isDependentContext()))(static_cast <bool> (!(isFriend && Owner->isDependentContext
())) ? void (0) : __assert_fail ("!(isFriend && Owner->isDependentContext())"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1274, __extension__ __PRETTY_FUNCTION__))
;
1275 Inst->setPreviousDecl(PrevClassTemplate);
1276
1277 RecordInst->setDescribedClassTemplate(Inst);
1278
1279 if (isFriend) {
1280 if (PrevClassTemplate)
1281 Inst->setAccess(PrevClassTemplate->getAccess());
1282 else
1283 Inst->setAccess(D->getAccess());
1284
1285 Inst->setObjectOfFriendDecl();
1286 // TODO: do we want to track the instantiation progeny of this
1287 // friend target decl?
1288 } else {
1289 Inst->setAccess(D->getAccess());
1290 if (!PrevClassTemplate)
1291 Inst->setInstantiatedFromMemberTemplate(D);
1292 }
1293
1294 // Trigger creation of the type for the instantiation.
1295 SemaRef.Context.getInjectedClassNameType(RecordInst,
1296 Inst->getInjectedClassNameSpecialization());
1297
1298 // Finish handling of friends.
1299 if (isFriend) {
1300 DC->makeDeclVisibleInContext(Inst);
1301 Inst->setLexicalDeclContext(Owner);
1302 RecordInst->setLexicalDeclContext(Owner);
1303 return Inst;
1304 }
1305
1306 if (D->isOutOfLine()) {
1307 Inst->setLexicalDeclContext(D->getLexicalDeclContext());
1308 RecordInst->setLexicalDeclContext(D->getLexicalDeclContext());
1309 }
1310
1311 Owner->addDecl(Inst);
1312
1313 if (!PrevClassTemplate) {
1314 // Queue up any out-of-line partial specializations of this member
1315 // class template; the client will force their instantiation once
1316 // the enclosing class has been instantiated.
1317 SmallVector<ClassTemplatePartialSpecializationDecl *, 4> PartialSpecs;
1318 D->getPartialSpecializations(PartialSpecs);
1319 for (unsigned I = 0, N = PartialSpecs.size(); I != N; ++I)
1320 if (PartialSpecs[I]->getFirstDecl()->isOutOfLine())
1321 OutOfLinePartialSpecs.push_back(std::make_pair(Inst, PartialSpecs[I]));
1322 }
1323
1324 return Inst;
1325}
1326
1327Decl *
1328TemplateDeclInstantiator::VisitClassTemplatePartialSpecializationDecl(
1329 ClassTemplatePartialSpecializationDecl *D) {
1330 ClassTemplateDecl *ClassTemplate = D->getSpecializedTemplate();
1331
1332 // Lookup the already-instantiated declaration in the instantiation
1333 // of the class template and return that.
1334 DeclContext::lookup_result Found
1335 = Owner->lookup(ClassTemplate->getDeclName());
1336 if (Found.empty())
1337 return nullptr;
1338
1339 ClassTemplateDecl *InstClassTemplate
1340 = dyn_cast<ClassTemplateDecl>(Found.front());
1341 if (!InstClassTemplate)
1342 return nullptr;
1343
1344 if (ClassTemplatePartialSpecializationDecl *Result
1345 = InstClassTemplate->findPartialSpecInstantiatedFromMember(D))
1346 return Result;
1347
1348 return InstantiateClassTemplatePartialSpecialization(InstClassTemplate, D);
1349}
1350
1351Decl *TemplateDeclInstantiator::VisitVarTemplateDecl(VarTemplateDecl *D) {
1352 assert(D->getTemplatedDecl()->isStaticDataMember() &&(static_cast <bool> (D->getTemplatedDecl()->isStaticDataMember
() && "Only static data member templates are allowed."
) ? void (0) : __assert_fail ("D->getTemplatedDecl()->isStaticDataMember() && \"Only static data member templates are allowed.\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1353, __extension__ __PRETTY_FUNCTION__))
1353 "Only static data member templates are allowed.")(static_cast <bool> (D->getTemplatedDecl()->isStaticDataMember
() && "Only static data member templates are allowed."
) ? void (0) : __assert_fail ("D->getTemplatedDecl()->isStaticDataMember() && \"Only static data member templates are allowed.\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1353, __extension__ __PRETTY_FUNCTION__))
;
1354
1355 // Create a local instantiation scope for this variable template, which
1356 // will contain the instantiations of the template parameters.
1357 LocalInstantiationScope Scope(SemaRef);
1358 TemplateParameterList *TempParams = D->getTemplateParameters();
1359 TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
1360 if (!InstParams)
1361 return nullptr;
1362
1363 VarDecl *Pattern = D->getTemplatedDecl();
1364 VarTemplateDecl *PrevVarTemplate = nullptr;
1365
1366 if (getPreviousDeclForInstantiation(Pattern)) {
1367 DeclContext::lookup_result Found = Owner->lookup(Pattern->getDeclName());
1368 if (!Found.empty())
1369 PrevVarTemplate = dyn_cast<VarTemplateDecl>(Found.front());
1370 }
1371
1372 VarDecl *VarInst =
1373 cast_or_null<VarDecl>(VisitVarDecl(Pattern,
1374 /*InstantiatingVarTemplate=*/true));
1375 if (!VarInst) return nullptr;
1376
1377 DeclContext *DC = Owner;
1378
1379 VarTemplateDecl *Inst = VarTemplateDecl::Create(
1380 SemaRef.Context, DC, D->getLocation(), D->getIdentifier(), InstParams,
1381 VarInst);
1382 VarInst->setDescribedVarTemplate(Inst);
1383 Inst->setPreviousDecl(PrevVarTemplate);
1384
1385 Inst->setAccess(D->getAccess());
1386 if (!PrevVarTemplate)
1387 Inst->setInstantiatedFromMemberTemplate(D);
1388
1389 if (D->isOutOfLine()) {
1390 Inst->setLexicalDeclContext(D->getLexicalDeclContext());
1391 VarInst->setLexicalDeclContext(D->getLexicalDeclContext());
1392 }
1393
1394 Owner->addDecl(Inst);
1395
1396 if (!PrevVarTemplate) {
1397 // Queue up any out-of-line partial specializations of this member
1398 // variable template; the client will force their instantiation once
1399 // the enclosing class has been instantiated.
1400 SmallVector<VarTemplatePartialSpecializationDecl *, 4> PartialSpecs;
1401 D->getPartialSpecializations(PartialSpecs);
1402 for (unsigned I = 0, N = PartialSpecs.size(); I != N; ++I)
1403 if (PartialSpecs[I]->getFirstDecl()->isOutOfLine())
1404 OutOfLineVarPartialSpecs.push_back(
1405 std::make_pair(Inst, PartialSpecs[I]));
1406 }
1407
1408 return Inst;
1409}
1410
1411Decl *TemplateDeclInstantiator::VisitVarTemplatePartialSpecializationDecl(
1412 VarTemplatePartialSpecializationDecl *D) {
1413 assert(D->isStaticDataMember() &&(static_cast <bool> (D->isStaticDataMember() &&
"Only static data member templates are allowed.") ? void (0)
: __assert_fail ("D->isStaticDataMember() && \"Only static data member templates are allowed.\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1414, __extension__ __PRETTY_FUNCTION__))
1414 "Only static data member templates are allowed.")(static_cast <bool> (D->isStaticDataMember() &&
"Only static data member templates are allowed.") ? void (0)
: __assert_fail ("D->isStaticDataMember() && \"Only static data member templates are allowed.\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1414, __extension__ __PRETTY_FUNCTION__))
;
1415
1416 VarTemplateDecl *VarTemplate = D->getSpecializedTemplate();
1417
1418 // Lookup the already-instantiated declaration and return that.
1419 DeclContext::lookup_result Found = Owner->lookup(VarTemplate->getDeclName());
1420 assert(!Found.empty() && "Instantiation found nothing?")(static_cast <bool> (!Found.empty() && "Instantiation found nothing?"
) ? void (0) : __assert_fail ("!Found.empty() && \"Instantiation found nothing?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1420, __extension__ __PRETTY_FUNCTION__))
;
1421
1422 VarTemplateDecl *InstVarTemplate = dyn_cast<VarTemplateDecl>(Found.front());
1423 assert(InstVarTemplate && "Instantiation did not find a variable template?")(static_cast <bool> (InstVarTemplate && "Instantiation did not find a variable template?"
) ? void (0) : __assert_fail ("InstVarTemplate && \"Instantiation did not find a variable template?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1423, __extension__ __PRETTY_FUNCTION__))
;
1424
1425 if (VarTemplatePartialSpecializationDecl *Result =
1426 InstVarTemplate->findPartialSpecInstantiatedFromMember(D))
1427 return Result;
1428
1429 return InstantiateVarTemplatePartialSpecialization(InstVarTemplate, D);
1430}
1431
1432Decl *
1433TemplateDeclInstantiator::VisitFunctionTemplateDecl(FunctionTemplateDecl *D) {
1434 // Create a local instantiation scope for this function template, which
1435 // will contain the instantiations of the template parameters and then get
1436 // merged with the local instantiation scope for the function template
1437 // itself.
1438 LocalInstantiationScope Scope(SemaRef);
1439
1440 TemplateParameterList *TempParams = D->getTemplateParameters();
1441 TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
1442 if (!InstParams)
1443 return nullptr;
1444
1445 FunctionDecl *Instantiated = nullptr;
1446 if (CXXMethodDecl *DMethod = dyn_cast<CXXMethodDecl>(D->getTemplatedDecl()))
1447 Instantiated = cast_or_null<FunctionDecl>(VisitCXXMethodDecl(DMethod,
1448 InstParams));
1449 else
1450 Instantiated = cast_or_null<FunctionDecl>(VisitFunctionDecl(
1451 D->getTemplatedDecl(),
1452 InstParams));
1453
1454 if (!Instantiated)
1455 return nullptr;
1456
1457 // Link the instantiated function template declaration to the function
1458 // template from which it was instantiated.
1459 FunctionTemplateDecl *InstTemplate
1460 = Instantiated->getDescribedFunctionTemplate();
1461 InstTemplate->setAccess(D->getAccess());
1462 assert(InstTemplate &&(static_cast <bool> (InstTemplate && "VisitFunctionDecl/CXXMethodDecl didn't create a template!"
) ? void (0) : __assert_fail ("InstTemplate && \"VisitFunctionDecl/CXXMethodDecl didn't create a template!\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1463, __extension__ __PRETTY_FUNCTION__))
1463 "VisitFunctionDecl/CXXMethodDecl didn't create a template!")(static_cast <bool> (InstTemplate && "VisitFunctionDecl/CXXMethodDecl didn't create a template!"
) ? void (0) : __assert_fail ("InstTemplate && \"VisitFunctionDecl/CXXMethodDecl didn't create a template!\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1463, __extension__ __PRETTY_FUNCTION__))
;
1464
1465 bool isFriend = (InstTemplate->getFriendObjectKind() != Decl::FOK_None);
1466
1467 // Link the instantiation back to the pattern *unless* this is a
1468 // non-definition friend declaration.
1469 if (!InstTemplate->getInstantiatedFromMemberTemplate() &&
1470 !(isFriend && !D->getTemplatedDecl()->isThisDeclarationADefinition()))
1471 InstTemplate->setInstantiatedFromMemberTemplate(D);
1472
1473 // Make declarations visible in the appropriate context.
1474 if (!isFriend) {
1475 Owner->addDecl(InstTemplate);
1476 } else if (InstTemplate->getDeclContext()->isRecord() &&
1477 !getPreviousDeclForInstantiation(D)) {
1478 SemaRef.CheckFriendAccess(InstTemplate);
1479 }
1480
1481 return InstTemplate;
1482}
1483
1484Decl *TemplateDeclInstantiator::VisitCXXRecordDecl(CXXRecordDecl *D) {
1485 CXXRecordDecl *PrevDecl = nullptr;
1486 if (D->isInjectedClassName())
1487 PrevDecl = cast<CXXRecordDecl>(Owner);
1488 else if (CXXRecordDecl *PatternPrev = getPreviousDeclForInstantiation(D)) {
1489 NamedDecl *Prev = SemaRef.FindInstantiatedDecl(D->getLocation(),
1490 PatternPrev,
1491 TemplateArgs);
1492 if (!Prev) return nullptr;
1493 PrevDecl = cast<CXXRecordDecl>(Prev);
1494 }
1495
1496 CXXRecordDecl *Record
1497 = CXXRecordDecl::Create(SemaRef.Context, D->getTagKind(), Owner,
1498 D->getLocStart(), D->getLocation(),
1499 D->getIdentifier(), PrevDecl);
1500
1501 // Substitute the nested name specifier, if any.
1502 if (SubstQualifier(D, Record))
1503 return nullptr;
1504
1505 Record->setImplicit(D->isImplicit());
1506 // FIXME: Check against AS_none is an ugly hack to work around the issue that
1507 // the tag decls introduced by friend class declarations don't have an access
1508 // specifier. Remove once this area of the code gets sorted out.
1509 if (D->getAccess() != AS_none)
1510 Record->setAccess(D->getAccess());
1511 if (!D->isInjectedClassName())
1512 Record->setInstantiationOfMemberClass(D, TSK_ImplicitInstantiation);
1513
1514 // If the original function was part of a friend declaration,
1515 // inherit its namespace state.
1516 if (D->getFriendObjectKind())
1517 Record->setObjectOfFriendDecl();
1518
1519 // Make sure that anonymous structs and unions are recorded.
1520 if (D->isAnonymousStructOrUnion())
1521 Record->setAnonymousStructOrUnion(true);
1522
1523 if (D->isLocalClass())
1524 SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Record);
1525
1526 // Forward the mangling number from the template to the instantiated decl.
1527 SemaRef.Context.setManglingNumber(Record,
1528 SemaRef.Context.getManglingNumber(D));
1529
1530 // See if the old tag was defined along with a declarator.
1531 // If it did, mark the new tag as being associated with that declarator.
1532 if (DeclaratorDecl *DD = SemaRef.Context.getDeclaratorForUnnamedTagDecl(D))
1533 SemaRef.Context.addDeclaratorForUnnamedTagDecl(Record, DD);
1534
1535 // See if the old tag was defined along with a typedef.
1536 // If it did, mark the new tag as being associated with that typedef.
1537 if (TypedefNameDecl *TND = SemaRef.Context.getTypedefNameForUnnamedTagDecl(D))
1538 SemaRef.Context.addTypedefNameForUnnamedTagDecl(Record, TND);
1539
1540 Owner->addDecl(Record);
1541
1542 // DR1484 clarifies that the members of a local class are instantiated as part
1543 // of the instantiation of their enclosing entity.
1544 if (D->isCompleteDefinition() && D->isLocalClass()) {
1545 Sema::LocalEagerInstantiationScope LocalInstantiations(SemaRef);
1546
1547 SemaRef.InstantiateClass(D->getLocation(), Record, D, TemplateArgs,
1548 TSK_ImplicitInstantiation,
1549 /*Complain=*/true);
1550
1551 // For nested local classes, we will instantiate the members when we
1552 // reach the end of the outermost (non-nested) local class.
1553 if (!D->isCXXClassMember())
1554 SemaRef.InstantiateClassMembers(D->getLocation(), Record, TemplateArgs,
1555 TSK_ImplicitInstantiation);
1556
1557 // This class may have local implicit instantiations that need to be
1558 // performed within this scope.
1559 LocalInstantiations.perform();
1560 }
1561
1562 SemaRef.DiagnoseUnusedNestedTypedefs(Record);
1563
1564 return Record;
1565}
1566
1567/// \brief Adjust the given function type for an instantiation of the
1568/// given declaration, to cope with modifications to the function's type that
1569/// aren't reflected in the type-source information.
1570///
1571/// \param D The declaration we're instantiating.
1572/// \param TInfo The already-instantiated type.
1573static QualType adjustFunctionTypeForInstantiation(ASTContext &Context,
1574 FunctionDecl *D,
1575 TypeSourceInfo *TInfo) {
1576 const FunctionProtoType *OrigFunc
1577 = D->getType()->castAs<FunctionProtoType>();
1578 const FunctionProtoType *NewFunc
1579 = TInfo->getType()->castAs<FunctionProtoType>();
1580 if (OrigFunc->getExtInfo() == NewFunc->getExtInfo())
1581 return TInfo->getType();
1582
1583 FunctionProtoType::ExtProtoInfo NewEPI = NewFunc->getExtProtoInfo();
1584 NewEPI.ExtInfo = OrigFunc->getExtInfo();
1585 return Context.getFunctionType(NewFunc->getReturnType(),
1586 NewFunc->getParamTypes(), NewEPI);
1587}
1588
1589/// Normal class members are of more specific types and therefore
1590/// don't make it here. This function serves two purposes:
1591/// 1) instantiating function templates
1592/// 2) substituting friend declarations
1593Decl *TemplateDeclInstantiator::VisitFunctionDecl(FunctionDecl *D,
1594 TemplateParameterList *TemplateParams) {
1595 // Check whether there is already a function template specialization for
1596 // this declaration.
1597 FunctionTemplateDecl *FunctionTemplate = D->getDescribedFunctionTemplate();
1598 if (FunctionTemplate && !TemplateParams) {
1599 ArrayRef<TemplateArgument> Innermost = TemplateArgs.getInnermost();
1600
1601 void *InsertPos = nullptr;
1602 FunctionDecl *SpecFunc
1603 = FunctionTemplate->findSpecialization(Innermost, InsertPos);
1604
1605 // If we already have a function template specialization, return it.
1606 if (SpecFunc)
1607 return SpecFunc;
1608 }
1609
1610 bool isFriend;
1611 if (FunctionTemplate)
1612 isFriend = (FunctionTemplate->getFriendObjectKind() != Decl::FOK_None);
1613 else
1614 isFriend = (D->getFriendObjectKind() != Decl::FOK_None);
1615
1616 bool MergeWithParentScope = (TemplateParams != nullptr) ||
1617 Owner->isFunctionOrMethod() ||
1618 !(isa<Decl>(Owner) &&
1619 cast<Decl>(Owner)->isDefinedOutsideFunctionOrMethod());
1620 LocalInstantiationScope Scope(SemaRef, MergeWithParentScope);
1621
1622 SmallVector<ParmVarDecl *, 4> Params;
1623 TypeSourceInfo *TInfo = SubstFunctionType(D, Params);
1624 if (!TInfo)
1625 return nullptr;
1626 QualType T = adjustFunctionTypeForInstantiation(SemaRef.Context, D, TInfo);
1627
1628 NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc();
1629 if (QualifierLoc) {
1630 QualifierLoc = SemaRef.SubstNestedNameSpecifierLoc(QualifierLoc,
1631 TemplateArgs);
1632 if (!QualifierLoc)
1633 return nullptr;
1634 }
1635
1636 // If we're instantiating a local function declaration, put the result
1637 // in the enclosing namespace; otherwise we need to find the instantiated
1638 // context.
1639 DeclContext *DC;
1640 if (D->isLocalExternDecl()) {
1641 DC = Owner;
1642 SemaRef.adjustContextForLocalExternDecl(DC);
1643 } else if (isFriend && QualifierLoc) {
1644 CXXScopeSpec SS;
1645 SS.Adopt(QualifierLoc);
1646 DC = SemaRef.computeDeclContext(SS);
1647 if (!DC) return nullptr;
1648 } else {
1649 DC = SemaRef.FindInstantiatedContext(D->getLocation(), D->getDeclContext(),
1650 TemplateArgs);
1651 }
1652
1653 FunctionDecl *Function;
1654 if (auto *DGuide = dyn_cast<CXXDeductionGuideDecl>(D)) {
1655 Function = CXXDeductionGuideDecl::Create(
1656 SemaRef.Context, DC, D->getInnerLocStart(), DGuide->isExplicit(),
1657 D->getNameInfo(), T, TInfo, D->getSourceRange().getEnd());
1658 if (DGuide->isCopyDeductionCandidate())
1659 cast<CXXDeductionGuideDecl>(Function)->setIsCopyDeductionCandidate();
1660 } else {
1661 Function = FunctionDecl::Create(
1662 SemaRef.Context, DC, D->getInnerLocStart(), D->getNameInfo(), T, TInfo,
1663 D->getCanonicalDecl()->getStorageClass(), D->isInlineSpecified(),
1664 D->hasWrittenPrototype(), D->isConstexpr());
1665 Function->setRangeEnd(D->getSourceRange().getEnd());
1666 }
1667
1668 if (D->isInlined())
1669 Function->setImplicitlyInline();
1670
1671 if (QualifierLoc)
1672 Function->setQualifierInfo(QualifierLoc);
1673
1674 if (D->isLocalExternDecl())
1675 Function->setLocalExternDecl();
1676
1677 DeclContext *LexicalDC = Owner;
1678 if (!isFriend && D->isOutOfLine() && !D->isLocalExternDecl()) {
1679 assert(D->getDeclContext()->isFileContext())(static_cast <bool> (D->getDeclContext()->isFileContext
()) ? void (0) : __assert_fail ("D->getDeclContext()->isFileContext()"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1679, __extension__ __PRETTY_FUNCTION__))
;
1680 LexicalDC = D->getDeclContext();
1681 }
1682
1683 Function->setLexicalDeclContext(LexicalDC);
1684
1685 // Attach the parameters
1686 for (unsigned P = 0; P < Params.size(); ++P)
1687 if (Params[P])
1688 Params[P]->setOwningFunction(Function);
1689 Function->setParams(Params);
1690
1691 if (TemplateParams) {
1692 // Our resulting instantiation is actually a function template, since we
1693 // are substituting only the outer template parameters. For example, given
1694 //
1695 // template<typename T>
1696 // struct X {
1697 // template<typename U> friend void f(T, U);
1698 // };
1699 //
1700 // X<int> x;
1701 //
1702 // We are instantiating the friend function template "f" within X<int>,
1703 // which means substituting int for T, but leaving "f" as a friend function
1704 // template.
1705 // Build the function template itself.
1706 FunctionTemplate = FunctionTemplateDecl::Create(SemaRef.Context, DC,
1707 Function->getLocation(),
1708 Function->getDeclName(),
1709 TemplateParams, Function);
1710 Function->setDescribedFunctionTemplate(FunctionTemplate);
1711
1712 FunctionTemplate->setLexicalDeclContext(LexicalDC);
1713
1714 if (isFriend && D->isThisDeclarationADefinition()) {
1715 FunctionTemplate->setInstantiatedFromMemberTemplate(
1716 D->getDescribedFunctionTemplate());
1717 }
1718 } else if (FunctionTemplate) {
1719 // Record this function template specialization.
1720 ArrayRef<TemplateArgument> Innermost = TemplateArgs.getInnermost();
1721 Function->setFunctionTemplateSpecialization(FunctionTemplate,
1722 TemplateArgumentList::CreateCopy(SemaRef.Context,
1723 Innermost),
1724 /*InsertPos=*/nullptr);
1725 } else if (isFriend && D->isThisDeclarationADefinition()) {
1726 // Do not connect the friend to the template unless it's actually a
1727 // definition. We don't want non-template functions to be marked as being
1728 // template instantiations.
1729 Function->setInstantiationOfMemberFunction(D, TSK_ImplicitInstantiation);
1730 }
1731
1732 if (InitFunctionInstantiation(Function, D))
1733 Function->setInvalidDecl();
1734
1735 bool isExplicitSpecialization = false;
1736
1737 LookupResult Previous(
1738 SemaRef, Function->getDeclName(), SourceLocation(),
1739 D->isLocalExternDecl() ? Sema::LookupRedeclarationWithLinkage
1740 : Sema::LookupOrdinaryName,
1741 D->isLocalExternDecl() ? Sema::ForExternalRedeclaration
1742 : SemaRef.forRedeclarationInCurContext());
1743
1744 if (DependentFunctionTemplateSpecializationInfo *Info
1745 = D->getDependentSpecializationInfo()) {
1746 assert(isFriend && "non-friend has dependent specialization info?")(static_cast <bool> (isFriend && "non-friend has dependent specialization info?"
) ? void (0) : __assert_fail ("isFriend && \"non-friend has dependent specialization info?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1746, __extension__ __PRETTY_FUNCTION__))
;
1747
1748 // This needs to be set now for future sanity.
1749 Function->setObjectOfFriendDecl();
1750
1751 // Instantiate the explicit template arguments.
1752 TemplateArgumentListInfo ExplicitArgs(Info->getLAngleLoc(),
1753 Info->getRAngleLoc());
1754 if (SemaRef.Subst(Info->getTemplateArgs(), Info->getNumTemplateArgs(),
1755 ExplicitArgs, TemplateArgs))
1756 return nullptr;
1757
1758 // Map the candidate templates to their instantiations.
1759 for (unsigned I = 0, E = Info->getNumTemplates(); I != E; ++I) {
1760 Decl *Temp = SemaRef.FindInstantiatedDecl(D->getLocation(),
1761 Info->getTemplate(I),
1762 TemplateArgs);
1763 if (!Temp) return nullptr;
1764
1765 Previous.addDecl(cast<FunctionTemplateDecl>(Temp));
1766 }
1767
1768 if (SemaRef.CheckFunctionTemplateSpecialization(Function,
1769 &ExplicitArgs,
1770 Previous))
1771 Function->setInvalidDecl();
1772
1773 isExplicitSpecialization = true;
1774
1775 } else if (TemplateParams || !FunctionTemplate) {
1776 // Look only into the namespace where the friend would be declared to
1777 // find a previous declaration. This is the innermost enclosing namespace,
1778 // as described in ActOnFriendFunctionDecl.
1779 SemaRef.LookupQualifiedName(Previous, DC);
1780
1781 // In C++, the previous declaration we find might be a tag type
1782 // (class or enum). In this case, the new declaration will hide the
1783 // tag type. Note that this does does not apply if we're declaring a
1784 // typedef (C++ [dcl.typedef]p4).
1785 if (Previous.isSingleTagDecl())
1786 Previous.clear();
1787 }
1788
1789 if (isFriend)
1790 Function->setObjectOfFriendDecl();
1791
1792 SemaRef.CheckFunctionDeclaration(/*Scope*/ nullptr, Function, Previous,
1793 isExplicitSpecialization);
1794
1795 NamedDecl *PrincipalDecl = (TemplateParams
1796 ? cast<NamedDecl>(FunctionTemplate)
1797 : Function);
1798
1799 // If the original function was part of a friend declaration,
1800 // inherit its namespace state and add it to the owner.
1801 if (isFriend) {
1802 PrincipalDecl->setObjectOfFriendDecl();
1803 DC->makeDeclVisibleInContext(PrincipalDecl);
1804
1805 bool QueuedInstantiation = false;
1806
1807 // C++11 [temp.friend]p4 (DR329):
1808 // When a function is defined in a friend function declaration in a class
1809 // template, the function is instantiated when the function is odr-used.
1810 // The same restrictions on multiple declarations and definitions that
1811 // apply to non-template function declarations and definitions also apply
1812 // to these implicit definitions.
1813 if (D->isThisDeclarationADefinition()) {
1814 // Check for a function body.
1815 const FunctionDecl *Definition = nullptr;
1816 if (Function->isDefined(Definition) &&
1817 Definition->getTemplateSpecializationKind() == TSK_Undeclared) {
1818 SemaRef.Diag(Function->getLocation(), diag::err_redefinition)
1819 << Function->getDeclName();
1820 SemaRef.Diag(Definition->getLocation(), diag::note_previous_definition);
1821 }
1822 // Check for redefinitions due to other instantiations of this or
1823 // a similar friend function.
1824 else for (auto R : Function->redecls()) {
1825 if (R == Function)
1826 continue;
1827
1828 // If some prior declaration of this function has been used, we need
1829 // to instantiate its definition.
1830 if (!QueuedInstantiation && R->isUsed(false)) {
1831 if (MemberSpecializationInfo *MSInfo =
1832 Function->getMemberSpecializationInfo()) {
1833 if (MSInfo->getPointOfInstantiation().isInvalid()) {
1834 SourceLocation Loc = R->getLocation(); // FIXME
1835 MSInfo->setPointOfInstantiation(Loc);
1836 SemaRef.PendingLocalImplicitInstantiations.push_back(
1837 std::make_pair(Function, Loc));
1838 QueuedInstantiation = true;
1839 }
1840 }
1841 }
1842
1843 // If some prior declaration of this function was a friend with an
1844 // uninstantiated definition, reject it.
1845 if (R->getFriendObjectKind()) {
1846 if (const FunctionDecl *RPattern =
1847 R->getTemplateInstantiationPattern()) {
1848 if (RPattern->isDefined(RPattern)) {
1849 SemaRef.Diag(Function->getLocation(), diag::err_redefinition)
1850 << Function->getDeclName();
1851 SemaRef.Diag(R->getLocation(), diag::note_previous_definition);
1852 break;
1853 }
1854 }
1855 }
1856 }
1857 }
1858
1859 // Check the template parameter list against the previous declaration. The
1860 // goal here is to pick up default arguments added since the friend was
1861 // declared; we know the template parameter lists match, since otherwise
1862 // we would not have picked this template as the previous declaration.
1863 if (TemplateParams && FunctionTemplate->getPreviousDecl()) {
1864 SemaRef.CheckTemplateParameterList(
1865 TemplateParams,
1866 FunctionTemplate->getPreviousDecl()->getTemplateParameters(),
1867 Function->isThisDeclarationADefinition()
1868 ? Sema::TPC_FriendFunctionTemplateDefinition
1869 : Sema::TPC_FriendFunctionTemplate);
1870 }
1871 }
1872
1873 if (Function->isLocalExternDecl() && !Function->getPreviousDecl())
1874 DC->makeDeclVisibleInContext(PrincipalDecl);
1875
1876 if (Function->isOverloadedOperator() && !DC->isRecord() &&
1877 PrincipalDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary))
1878 PrincipalDecl->setNonMemberOperator();
1879
1880 assert(!D->isDefaulted() && "only methods should be defaulted")(static_cast <bool> (!D->isDefaulted() && "only methods should be defaulted"
) ? void (0) : __assert_fail ("!D->isDefaulted() && \"only methods should be defaulted\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 1880, __extension__ __PRETTY_FUNCTION__))
;
1881 return Function;
1882}
1883
1884Decl *
1885TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D,
1886 TemplateParameterList *TemplateParams,
1887 bool IsClassScopeSpecialization) {
1888 FunctionTemplateDecl *FunctionTemplate = D->getDescribedFunctionTemplate();
1889 if (FunctionTemplate && !TemplateParams) {
1890 // We are creating a function template specialization from a function
1891 // template. Check whether there is already a function template
1892 // specialization for this particular set of template arguments.
1893 ArrayRef<TemplateArgument> Innermost = TemplateArgs.getInnermost();
1894
1895 void *InsertPos = nullptr;
1896 FunctionDecl *SpecFunc
1897 = FunctionTemplate->findSpecialization(Innermost, InsertPos);
1898
1899 // If we already have a function template specialization, return it.
1900 if (SpecFunc)
1901 return SpecFunc;
1902 }
1903
1904 bool isFriend;
1905 if (FunctionTemplate)
1906 isFriend = (FunctionTemplate->getFriendObjectKind() != Decl::FOK_None);
1907 else
1908 isFriend = (D->getFriendObjectKind() != Decl::FOK_None);
1909
1910 bool MergeWithParentScope = (TemplateParams != nullptr) ||
1911 !(isa<Decl>(Owner) &&
1912 cast<Decl>(Owner)->isDefinedOutsideFunctionOrMethod());
1913 LocalInstantiationScope Scope(SemaRef, MergeWithParentScope);
1914
1915 // Instantiate enclosing template arguments for friends.
1916 SmallVector<TemplateParameterList *, 4> TempParamLists;
1917 unsigned NumTempParamLists = 0;
1918 if (isFriend && (NumTempParamLists = D->getNumTemplateParameterLists())) {
1919 TempParamLists.resize(NumTempParamLists);
1920 for (unsigned I = 0; I != NumTempParamLists; ++I) {
1921 TemplateParameterList *TempParams = D->getTemplateParameterList(I);
1922 TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
1923 if (!InstParams)
1924 return nullptr;
1925 TempParamLists[I] = InstParams;
1926 }
1927 }
1928
1929 SmallVector<ParmVarDecl *, 4> Params;
1930 TypeSourceInfo *TInfo = SubstFunctionType(D, Params);
1931 if (!TInfo)
1932 return nullptr;
1933 QualType T = adjustFunctionTypeForInstantiation(SemaRef.Context, D, TInfo);
1934
1935 NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc();
1936 if (QualifierLoc) {
1937 QualifierLoc = SemaRef.SubstNestedNameSpecifierLoc(QualifierLoc,
1938 TemplateArgs);
1939 if (!QualifierLoc)
1940 return nullptr;
1941 }
1942
1943 DeclContext *DC = Owner;
1944 if (isFriend) {
1945 if (QualifierLoc) {
1946 CXXScopeSpec SS;
1947 SS.Adopt(QualifierLoc);
1948 DC = SemaRef.computeDeclContext(SS);
1949
1950 if (DC && SemaRef.RequireCompleteDeclContext(SS, DC))
1951 return nullptr;
1952 } else {
1953 DC = SemaRef.FindInstantiatedContext(D->getLocation(),
1954 D->getDeclContext(),
1955 TemplateArgs);
1956 }
1957 if (!DC) return nullptr;
1958 }
1959
1960 // Build the instantiated method declaration.
1961 CXXRecordDecl *Record = cast<CXXRecordDecl>(DC);
1962 CXXMethodDecl *Method = nullptr;
1963
1964 SourceLocation StartLoc = D->getInnerLocStart();
1965 DeclarationNameInfo NameInfo
1966 = SemaRef.SubstDeclarationNameInfo(D->getNameInfo(), TemplateArgs);
1967 if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
1968 Method = CXXConstructorDecl::Create(SemaRef.Context, Record,
1969 StartLoc, NameInfo, T, TInfo,
1970 Constructor->isExplicit(),
1971 Constructor->isInlineSpecified(),
1972 false, Constructor->isConstexpr());
1973 Method->setRangeEnd(Constructor->getLocEnd());
1974 } else if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(D)) {
1975 Method = CXXDestructorDecl::Create(SemaRef.Context, Record,
1976 StartLoc, NameInfo, T, TInfo,
1977 Destructor->isInlineSpecified(),
1978 false);
1979 Method->setRangeEnd(Destructor->getLocEnd());
1980 } else if (CXXConversionDecl *Conversion = dyn_cast<CXXConversionDecl>(D)) {
1981 Method = CXXConversionDecl::Create(SemaRef.Context, Record,
1982 StartLoc, NameInfo, T, TInfo,
1983 Conversion->isInlineSpecified(),
1984 Conversion->isExplicit(),
1985 Conversion->isConstexpr(),
1986 Conversion->getLocEnd());
1987 } else {
1988 StorageClass SC = D->isStatic() ? SC_Static : SC_None;
1989 Method = CXXMethodDecl::Create(SemaRef.Context, Record,
1990 StartLoc, NameInfo, T, TInfo,
1991 SC, D->isInlineSpecified(),
1992 D->isConstexpr(), D->getLocEnd());
1993 }
1994
1995 if (D->isInlined())
1996 Method->setImplicitlyInline();
1997
1998 if (QualifierLoc)
1999 Method->setQualifierInfo(QualifierLoc);
2000
2001 if (TemplateParams) {
2002 // Our resulting instantiation is actually a function template, since we
2003 // are substituting only the outer template parameters. For example, given
2004 //
2005 // template<typename T>
2006 // struct X {
2007 // template<typename U> void f(T, U);
2008 // };
2009 //
2010 // X<int> x;
2011 //
2012 // We are instantiating the member template "f" within X<int>, which means
2013 // substituting int for T, but leaving "f" as a member function template.
2014 // Build the function template itself.
2015 FunctionTemplate = FunctionTemplateDecl::Create(SemaRef.Context, Record,
2016 Method->getLocation(),
2017 Method->getDeclName(),
2018 TemplateParams, Method);
2019 if (isFriend) {
2020 FunctionTemplate->setLexicalDeclContext(Owner);
2021 FunctionTemplate->setObjectOfFriendDecl();
2022 } else if (D->isOutOfLine())
2023 FunctionTemplate->setLexicalDeclContext(D->getLexicalDeclContext());
2024 Method->setDescribedFunctionTemplate(FunctionTemplate);
2025 } else if (FunctionTemplate) {
2026 // Record this function template specialization.
2027 ArrayRef<TemplateArgument> Innermost = TemplateArgs.getInnermost();
2028 Method->setFunctionTemplateSpecialization(FunctionTemplate,
2029 TemplateArgumentList::CreateCopy(SemaRef.Context,
2030 Innermost),
2031 /*InsertPos=*/nullptr);
2032 } else if (!isFriend) {
2033 // Record that this is an instantiation of a member function.
2034 Method->setInstantiationOfMemberFunction(D, TSK_ImplicitInstantiation);
2035 }
2036
2037 // If we are instantiating a member function defined
2038 // out-of-line, the instantiation will have the same lexical
2039 // context (which will be a namespace scope) as the template.
2040 if (isFriend) {
2041 if (NumTempParamLists)
2042 Method->setTemplateParameterListsInfo(
2043 SemaRef.Context,
2044 llvm::makeArrayRef(TempParamLists.data(), NumTempParamLists));
2045
2046 Method->setLexicalDeclContext(Owner);
2047 Method->setObjectOfFriendDecl();
2048 } else if (D->isOutOfLine())
2049 Method->setLexicalDeclContext(D->getLexicalDeclContext());
2050
2051 // Attach the parameters
2052 for (unsigned P = 0; P < Params.size(); ++P)
2053 Params[P]->setOwningFunction(Method);
2054 Method->setParams(Params);
2055
2056 if (InitMethodInstantiation(Method, D))
2057 Method->setInvalidDecl();
2058
2059 LookupResult Previous(SemaRef, NameInfo, Sema::LookupOrdinaryName,
2060 Sema::ForExternalRedeclaration);
2061
2062 if (!FunctionTemplate || TemplateParams || isFriend) {
2063 SemaRef.LookupQualifiedName(Previous, Record);
2064
2065 // In C++, the previous declaration we find might be a tag type
2066 // (class or enum). In this case, the new declaration will hide the
2067 // tag type. Note that this does does not apply if we're declaring a
2068 // typedef (C++ [dcl.typedef]p4).
2069 if (Previous.isSingleTagDecl())
2070 Previous.clear();
2071 }
2072
2073 if (!IsClassScopeSpecialization)
2074 SemaRef.CheckFunctionDeclaration(nullptr, Method, Previous, false);
2075
2076 if (D->isPure())
2077 SemaRef.CheckPureMethod(Method, SourceRange());
2078
2079 // Propagate access. For a non-friend declaration, the access is
2080 // whatever we're propagating from. For a friend, it should be the
2081 // previous declaration we just found.
2082 if (isFriend && Method->getPreviousDecl())
2083 Method->setAccess(Method->getPreviousDecl()->getAccess());
2084 else
2085 Method->setAccess(D->getAccess());
2086 if (FunctionTemplate)
2087 FunctionTemplate->setAccess(Method->getAccess());
2088
2089 SemaRef.CheckOverrideControl(Method);
2090
2091 // If a function is defined as defaulted or deleted, mark it as such now.
2092 if (D->isExplicitlyDefaulted())
2093 SemaRef.SetDeclDefaulted(Method, Method->getLocation());
2094 if (D->isDeletedAsWritten())
2095 SemaRef.SetDeclDeleted(Method, Method->getLocation());
2096
2097 // If there's a function template, let our caller handle it.
2098 if (FunctionTemplate) {
2099 // do nothing
2100
2101 // Don't hide a (potentially) valid declaration with an invalid one.
2102 } else if (Method->isInvalidDecl() && !Previous.empty()) {
2103 // do nothing
2104
2105 // Otherwise, check access to friends and make them visible.
2106 } else if (isFriend) {
2107 // We only need to re-check access for methods which we didn't
2108 // manage to match during parsing.
2109 if (!D->getPreviousDecl())
2110 SemaRef.CheckFriendAccess(Method);
2111
2112 Record->makeDeclVisibleInContext(Method);
2113
2114 // Otherwise, add the declaration. We don't need to do this for
2115 // class-scope specializations because we'll have matched them with
2116 // the appropriate template.
2117 } else if (!IsClassScopeSpecialization) {
2118 Owner->addDecl(Method);
2119 }
2120
2121 return Method;
2122}
2123
2124Decl *TemplateDeclInstantiator::VisitCXXConstructorDecl(CXXConstructorDecl *D) {
2125 return VisitCXXMethodDecl(D);
2126}
2127
2128Decl *TemplateDeclInstantiator::VisitCXXDestructorDecl(CXXDestructorDecl *D) {
2129 return VisitCXXMethodDecl(D);
2130}
2131
2132Decl *TemplateDeclInstantiator::VisitCXXConversionDecl(CXXConversionDecl *D) {
2133 return VisitCXXMethodDecl(D);
2134}
2135
2136Decl *TemplateDeclInstantiator::VisitParmVarDecl(ParmVarDecl *D) {
2137 return SemaRef.SubstParmVarDecl(D, TemplateArgs, /*indexAdjustment*/ 0, None,
2138 /*ExpectParameterPack=*/ false);
2139}
2140
2141Decl *TemplateDeclInstantiator::VisitTemplateTypeParmDecl(
2142 TemplateTypeParmDecl *D) {
2143 // TODO: don't always clone when decls are refcounted.
2144 assert(D->getTypeForDecl()->isTemplateTypeParmType())(static_cast <bool> (D->getTypeForDecl()->isTemplateTypeParmType
()) ? void (0) : __assert_fail ("D->getTypeForDecl()->isTemplateTypeParmType()"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 2144, __extension__ __PRETTY_FUNCTION__))
;
2145
2146 TemplateTypeParmDecl *Inst = TemplateTypeParmDecl::Create(
2147 SemaRef.Context, Owner, D->getLocStart(), D->getLocation(),
2148 D->getDepth() - TemplateArgs.getNumSubstitutedLevels(), D->getIndex(),
2149 D->getIdentifier(), D->wasDeclaredWithTypename(), D->isParameterPack());
2150 Inst->setAccess(AS_public);
2151
2152 if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited()) {
2153 TypeSourceInfo *InstantiatedDefaultArg =
2154 SemaRef.SubstType(D->getDefaultArgumentInfo(), TemplateArgs,
2155 D->getDefaultArgumentLoc(), D->getDeclName());
2156 if (InstantiatedDefaultArg)
2157 Inst->setDefaultArgument(InstantiatedDefaultArg);
2158 }
2159
2160 // Introduce this template parameter's instantiation into the instantiation
2161 // scope.
2162 SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Inst);
2163
2164 return Inst;
2165}
2166
2167Decl *TemplateDeclInstantiator::VisitNonTypeTemplateParmDecl(
2168 NonTypeTemplateParmDecl *D) {
2169 // Substitute into the type of the non-type template parameter.
2170 TypeLoc TL = D->getTypeSourceInfo()->getTypeLoc();
2171 SmallVector<TypeSourceInfo *, 4> ExpandedParameterPackTypesAsWritten;
2172 SmallVector<QualType, 4> ExpandedParameterPackTypes;
2173 bool IsExpandedParameterPack = false;
2174 TypeSourceInfo *DI;
2175 QualType T;
2176 bool Invalid = false;
2177
2178 if (D->isExpandedParameterPack()) {
2179 // The non-type template parameter pack is an already-expanded pack
2180 // expansion of types. Substitute into each of the expanded types.
2181 ExpandedParameterPackTypes.reserve(D->getNumExpansionTypes());
2182 ExpandedParameterPackTypesAsWritten.reserve(D->getNumExpansionTypes());
2183 for (unsigned I = 0, N = D->getNumExpansionTypes(); I != N; ++I) {
2184 TypeSourceInfo *NewDI =
2185 SemaRef.SubstType(D->getExpansionTypeSourceInfo(I), TemplateArgs,
2186 D->getLocation(), D->getDeclName());
2187 if (!NewDI)
2188 return nullptr;
2189
2190 QualType NewT =
2191 SemaRef.CheckNonTypeTemplateParameterType(NewDI, D->getLocation());
2192 if (NewT.isNull())
2193 return nullptr;
2194
2195 ExpandedParameterPackTypesAsWritten.push_back(NewDI);
2196 ExpandedParameterPackTypes.push_back(NewT);
2197 }
2198
2199 IsExpandedParameterPack = true;
2200 DI = D->getTypeSourceInfo();
2201 T = DI->getType();
2202 } else if (D->isPackExpansion()) {
2203 // The non-type template parameter pack's type is a pack expansion of types.
2204 // Determine whether we need to expand this parameter pack into separate
2205 // types.
2206 PackExpansionTypeLoc Expansion = TL.castAs<PackExpansionTypeLoc>();
2207 TypeLoc Pattern = Expansion.getPatternLoc();
2208 SmallVector<UnexpandedParameterPack, 2> Unexpanded;
2209 SemaRef.collectUnexpandedParameterPacks(Pattern, Unexpanded);
2210
2211 // Determine whether the set of unexpanded parameter packs can and should
2212 // be expanded.
2213 bool Expand = true;
2214 bool RetainExpansion = false;
2215 Optional<unsigned> OrigNumExpansions
2216 = Expansion.getTypePtr()->getNumExpansions();
2217 Optional<unsigned> NumExpansions = OrigNumExpansions;
2218 if (SemaRef.CheckParameterPacksForExpansion(Expansion.getEllipsisLoc(),
2219 Pattern.getSourceRange(),
2220 Unexpanded,
2221 TemplateArgs,
2222 Expand, RetainExpansion,
2223 NumExpansions))
2224 return nullptr;
2225
2226 if (Expand) {
2227 for (unsigned I = 0; I != *NumExpansions; ++I) {
2228 Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, I);
2229 TypeSourceInfo *NewDI = SemaRef.SubstType(Pattern, TemplateArgs,
2230 D->getLocation(),
2231 D->getDeclName());
2232 if (!NewDI)
2233 return nullptr;
2234
2235 QualType NewT =
2236 SemaRef.CheckNonTypeTemplateParameterType(NewDI, D->getLocation());
2237 if (NewT.isNull())
2238 return nullptr;
2239
2240 ExpandedParameterPackTypesAsWritten.push_back(NewDI);
2241 ExpandedParameterPackTypes.push_back(NewT);
2242 }
2243
2244 // Note that we have an expanded parameter pack. The "type" of this
2245 // expanded parameter pack is the original expansion type, but callers
2246 // will end up using the expanded parameter pack types for type-checking.
2247 IsExpandedParameterPack = true;
2248 DI = D->getTypeSourceInfo();
2249 T = DI->getType();
2250 } else {
2251 // We cannot fully expand the pack expansion now, so substitute into the
2252 // pattern and create a new pack expansion type.
2253 Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, -1);
2254 TypeSourceInfo *NewPattern = SemaRef.SubstType(Pattern, TemplateArgs,
2255 D->getLocation(),
2256 D->getDeclName());
2257 if (!NewPattern)
2258 return nullptr;
2259
2260 SemaRef.CheckNonTypeTemplateParameterType(NewPattern, D->getLocation());
2261 DI = SemaRef.CheckPackExpansion(NewPattern, Expansion.getEllipsisLoc(),
2262 NumExpansions);
2263 if (!DI)
2264 return nullptr;
2265
2266 T = DI->getType();
2267 }
2268 } else {
2269 // Simple case: substitution into a parameter that is not a parameter pack.
2270 DI = SemaRef.SubstType(D->getTypeSourceInfo(), TemplateArgs,
2271 D->getLocation(), D->getDeclName());
2272 if (!DI)
2273 return nullptr;
2274
2275 // Check that this type is acceptable for a non-type template parameter.
2276 T = SemaRef.CheckNonTypeTemplateParameterType(DI, D->getLocation());
2277 if (T.isNull()) {
2278 T = SemaRef.Context.IntTy;
2279 Invalid = true;
2280 }
2281 }
2282
2283 NonTypeTemplateParmDecl *Param;
2284 if (IsExpandedParameterPack)
2285 Param = NonTypeTemplateParmDecl::Create(
2286 SemaRef.Context, Owner, D->getInnerLocStart(), D->getLocation(),
2287 D->getDepth() - TemplateArgs.getNumSubstitutedLevels(),
2288 D->getPosition(), D->getIdentifier(), T, DI, ExpandedParameterPackTypes,
2289 ExpandedParameterPackTypesAsWritten);
2290 else
2291 Param = NonTypeTemplateParmDecl::Create(
2292 SemaRef.Context, Owner, D->getInnerLocStart(), D->getLocation(),
2293 D->getDepth() - TemplateArgs.getNumSubstitutedLevels(),
2294 D->getPosition(), D->getIdentifier(), T, D->isParameterPack(), DI);
2295
2296 Param->setAccess(AS_public);
2297 if (Invalid)
2298 Param->setInvalidDecl();
2299
2300 if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited()) {
2301 EnterExpressionEvaluationContext ConstantEvaluated(
2302 SemaRef, Sema::ExpressionEvaluationContext::ConstantEvaluated);
2303 ExprResult Value = SemaRef.SubstExpr(D->getDefaultArgument(), TemplateArgs);
2304 if (!Value.isInvalid())
2305 Param->setDefaultArgument(Value.get());
2306 }
2307
2308 // Introduce this template parameter's instantiation into the instantiation
2309 // scope.
2310 SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Param);
2311 return Param;
2312}
2313
2314static void collectUnexpandedParameterPacks(
2315 Sema &S,
2316 TemplateParameterList *Params,
2317 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded) {
2318 for (const auto &P : *Params) {
2319 if (P->isTemplateParameterPack())
2320 continue;
2321 if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(P))
2322 S.collectUnexpandedParameterPacks(NTTP->getTypeSourceInfo()->getTypeLoc(),
2323 Unexpanded);
2324 if (TemplateTemplateParmDecl *TTP = dyn_cast<TemplateTemplateParmDecl>(P))
2325 collectUnexpandedParameterPacks(S, TTP->getTemplateParameters(),
2326 Unexpanded);
2327 }
2328}
2329
2330Decl *
2331TemplateDeclInstantiator::VisitTemplateTemplateParmDecl(
2332 TemplateTemplateParmDecl *D) {
2333 // Instantiate the template parameter list of the template template parameter.
2334 TemplateParameterList *TempParams = D->getTemplateParameters();
2335 TemplateParameterList *InstParams;
2336 SmallVector<TemplateParameterList*, 8> ExpandedParams;
2337
2338 bool IsExpandedParameterPack = false;
2339
2340 if (D->isExpandedParameterPack()) {
2341 // The template template parameter pack is an already-expanded pack
2342 // expansion of template parameters. Substitute into each of the expanded
2343 // parameters.
2344 ExpandedParams.reserve(D->getNumExpansionTemplateParameters());
2345 for (unsigned I = 0, N = D->getNumExpansionTemplateParameters();
2346 I != N; ++I) {
2347 LocalInstantiationScope Scope(SemaRef);
2348 TemplateParameterList *Expansion =
2349 SubstTemplateParams(D->getExpansionTemplateParameters(I));
2350 if (!Expansion)
2351 return nullptr;
2352 ExpandedParams.push_back(Expansion);
2353 }
2354
2355 IsExpandedParameterPack = true;
2356 InstParams = TempParams;
2357 } else if (D->isPackExpansion()) {
2358 // The template template parameter pack expands to a pack of template
2359 // template parameters. Determine whether we need to expand this parameter
2360 // pack into separate parameters.
2361 SmallVector<UnexpandedParameterPack, 2> Unexpanded;
2362 collectUnexpandedParameterPacks(SemaRef, D->getTemplateParameters(),
2363 Unexpanded);
2364
2365 // Determine whether the set of unexpanded parameter packs can and should
2366 // be expanded.
2367 bool Expand = true;
2368 bool RetainExpansion = false;
2369 Optional<unsigned> NumExpansions;
2370 if (SemaRef.CheckParameterPacksForExpansion(D->getLocation(),
2371 TempParams->getSourceRange(),
2372 Unexpanded,
2373 TemplateArgs,
2374 Expand, RetainExpansion,
2375 NumExpansions))
2376 return nullptr;
2377
2378 if (Expand) {
2379 for (unsigned I = 0; I != *NumExpansions; ++I) {
2380 Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, I);
2381 LocalInstantiationScope Scope(SemaRef);
2382 TemplateParameterList *Expansion = SubstTemplateParams(TempParams);
2383 if (!Expansion)
2384 return nullptr;
2385 ExpandedParams.push_back(Expansion);
2386 }
2387
2388 // Note that we have an expanded parameter pack. The "type" of this
2389 // expanded parameter pack is the original expansion type, but callers
2390 // will end up using the expanded parameter pack types for type-checking.
2391 IsExpandedParameterPack = true;
2392 InstParams = TempParams;
2393 } else {
2394 // We cannot fully expand the pack expansion now, so just substitute
2395 // into the pattern.
2396 Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, -1);
2397
2398 LocalInstantiationScope Scope(SemaRef);
2399 InstParams = SubstTemplateParams(TempParams);
2400 if (!InstParams)
2401 return nullptr;
2402 }
2403 } else {
2404 // Perform the actual substitution of template parameters within a new,
2405 // local instantiation scope.
2406 LocalInstantiationScope Scope(SemaRef);
2407 InstParams = SubstTemplateParams(TempParams);
2408 if (!InstParams)
2409 return nullptr;
2410 }
2411
2412 // Build the template template parameter.
2413 TemplateTemplateParmDecl *Param;
2414 if (IsExpandedParameterPack)
2415 Param = TemplateTemplateParmDecl::Create(
2416 SemaRef.Context, Owner, D->getLocation(),
2417 D->getDepth() - TemplateArgs.getNumSubstitutedLevels(),
2418 D->getPosition(), D->getIdentifier(), InstParams, ExpandedParams);
2419 else
2420 Param = TemplateTemplateParmDecl::Create(
2421 SemaRef.Context, Owner, D->getLocation(),
2422 D->getDepth() - TemplateArgs.getNumSubstitutedLevels(),
2423 D->getPosition(), D->isParameterPack(), D->getIdentifier(), InstParams);
2424 if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited()) {
2425 NestedNameSpecifierLoc QualifierLoc =
2426 D->getDefaultArgument().getTemplateQualifierLoc();
2427 QualifierLoc =
2428 SemaRef.SubstNestedNameSpecifierLoc(QualifierLoc, TemplateArgs);
2429 TemplateName TName = SemaRef.SubstTemplateName(
2430 QualifierLoc, D->getDefaultArgument().getArgument().getAsTemplate(),
2431 D->getDefaultArgument().getTemplateNameLoc(), TemplateArgs);
2432 if (!TName.isNull())
2433 Param->setDefaultArgument(
2434 SemaRef.Context,
2435 TemplateArgumentLoc(TemplateArgument(TName),
2436 D->getDefaultArgument().getTemplateQualifierLoc(),
2437 D->getDefaultArgument().getTemplateNameLoc()));
2438 }
2439 Param->setAccess(AS_public);
2440
2441 // Introduce this template parameter's instantiation into the instantiation
2442 // scope.
2443 SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Param);
2444
2445 return Param;
2446}
2447
2448Decl *TemplateDeclInstantiator::VisitUsingDirectiveDecl(UsingDirectiveDecl *D) {
2449 // Using directives are never dependent (and never contain any types or
2450 // expressions), so they require no explicit instantiation work.
2451
2452 UsingDirectiveDecl *Inst
2453 = UsingDirectiveDecl::Create(SemaRef.Context, Owner, D->getLocation(),
2454 D->getNamespaceKeyLocation(),
2455 D->getQualifierLoc(),
2456 D->getIdentLocation(),
2457 D->getNominatedNamespace(),
2458 D->getCommonAncestor());
2459
2460 // Add the using directive to its declaration context
2461 // only if this is not a function or method.
2462 if (!Owner->isFunctionOrMethod())
2463 Owner->addDecl(Inst);
2464
2465 return Inst;
2466}
2467
2468Decl *TemplateDeclInstantiator::VisitUsingDecl(UsingDecl *D) {
2469
2470 // The nested name specifier may be dependent, for example
2471 // template <typename T> struct t {
2472 // struct s1 { T f1(); };
2473 // struct s2 : s1 { using s1::f1; };
2474 // };
2475 // template struct t<int>;
2476 // Here, in using s1::f1, s1 refers to t<T>::s1;
2477 // we need to substitute for t<int>::s1.
2478 NestedNameSpecifierLoc QualifierLoc
2479 = SemaRef.SubstNestedNameSpecifierLoc(D->getQualifierLoc(),
2480 TemplateArgs);
2481 if (!QualifierLoc)
2482 return nullptr;
2483
2484 // For an inheriting constructor declaration, the name of the using
2485 // declaration is the name of a constructor in this class, not in the
2486 // base class.
2487 DeclarationNameInfo NameInfo = D->getNameInfo();
2488 if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName)
2489 if (auto *RD = dyn_cast<CXXRecordDecl>(SemaRef.CurContext))
2490 NameInfo.setName(SemaRef.Context.DeclarationNames.getCXXConstructorName(
2491 SemaRef.Context.getCanonicalType(SemaRef.Context.getRecordType(RD))));
2492
2493 // We only need to do redeclaration lookups if we're in a class
2494 // scope (in fact, it's not really even possible in non-class
2495 // scopes).
2496 bool CheckRedeclaration = Owner->isRecord();
2497
2498 LookupResult Prev(SemaRef, NameInfo, Sema::LookupUsingDeclName,
2499 Sema::ForVisibleRedeclaration);
2500
2501 UsingDecl *NewUD = UsingDecl::Create(SemaRef.Context, Owner,
2502 D->getUsingLoc(),
2503 QualifierLoc,
2504 NameInfo,
2505 D->hasTypename());
2506
2507 CXXScopeSpec SS;
2508 SS.Adopt(QualifierLoc);
2509 if (CheckRedeclaration) {
2510 Prev.setHideTags(false);
2511 SemaRef.LookupQualifiedName(Prev, Owner);
2512
2513 // Check for invalid redeclarations.
2514 if (SemaRef.CheckUsingDeclRedeclaration(D->getUsingLoc(),
2515 D->hasTypename(), SS,
2516 D->getLocation(), Prev))
2517 NewUD->setInvalidDecl();
2518
2519 }
2520
2521 if (!NewUD->isInvalidDecl() &&
2522 SemaRef.CheckUsingDeclQualifier(D->getUsingLoc(), D->hasTypename(),
2523 SS, NameInfo, D->getLocation()))
2524 NewUD->setInvalidDecl();
2525
2526 SemaRef.Context.setInstantiatedFromUsingDecl(NewUD, D);
2527 NewUD->setAccess(D->getAccess());
2528 Owner->addDecl(NewUD);
2529
2530 // Don't process the shadow decls for an invalid decl.
2531 if (NewUD->isInvalidDecl())
2532 return NewUD;
2533
2534 if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName)
2535 SemaRef.CheckInheritingConstructorUsingDecl(NewUD);
2536
2537 bool isFunctionScope = Owner->isFunctionOrMethod();
2538
2539 // Process the shadow decls.
2540 for (auto *Shadow : D->shadows()) {
2541 // FIXME: UsingShadowDecl doesn't preserve its immediate target, so
2542 // reconstruct it in the case where it matters.
2543 NamedDecl *OldTarget = Shadow->getTargetDecl();
2544 if (auto *CUSD = dyn_cast<ConstructorUsingShadowDecl>(Shadow))
2545 if (auto *BaseShadow = CUSD->getNominatedBaseClassShadowDecl())
2546 OldTarget = BaseShadow;
2547
2548 NamedDecl *InstTarget =
2549 cast_or_null<NamedDecl>(SemaRef.FindInstantiatedDecl(
2550 Shadow->getLocation(), OldTarget, TemplateArgs));
2551 if (!InstTarget)
2552 return nullptr;
2553
2554 UsingShadowDecl *PrevDecl = nullptr;
2555 if (CheckRedeclaration) {
2556 if (SemaRef.CheckUsingShadowDecl(NewUD, InstTarget, Prev, PrevDecl))
2557 continue;
2558 } else if (UsingShadowDecl *OldPrev =
2559 getPreviousDeclForInstantiation(Shadow)) {
2560 PrevDecl = cast_or_null<UsingShadowDecl>(SemaRef.FindInstantiatedDecl(
2561 Shadow->getLocation(), OldPrev, TemplateArgs));
2562 }
2563
2564 UsingShadowDecl *InstShadow =
2565 SemaRef.BuildUsingShadowDecl(/*Scope*/nullptr, NewUD, InstTarget,
2566 PrevDecl);
2567 SemaRef.Context.setInstantiatedFromUsingShadowDecl(InstShadow, Shadow);
2568
2569 if (isFunctionScope)
2570 SemaRef.CurrentInstantiationScope->InstantiatedLocal(Shadow, InstShadow);
2571 }
2572
2573 return NewUD;
2574}
2575
2576Decl *TemplateDeclInstantiator::VisitUsingShadowDecl(UsingShadowDecl *D) {
2577 // Ignore these; we handle them in bulk when processing the UsingDecl.
2578 return nullptr;
2579}
2580
2581Decl *TemplateDeclInstantiator::VisitConstructorUsingShadowDecl(
2582 ConstructorUsingShadowDecl *D) {
2583 // Ignore these; we handle them in bulk when processing the UsingDecl.
2584 return nullptr;
2585}
2586
2587template <typename T>
2588Decl *TemplateDeclInstantiator::instantiateUnresolvedUsingDecl(
2589 T *D, bool InstantiatingPackElement) {
2590 // If this is a pack expansion, expand it now.
2591 if (D->isPackExpansion() && !InstantiatingPackElement) {
2592 SmallVector<UnexpandedParameterPack, 2> Unexpanded;
2593 SemaRef.collectUnexpandedParameterPacks(D->getQualifierLoc(), Unexpanded);
2594 SemaRef.collectUnexpandedParameterPacks(D->getNameInfo(), Unexpanded);
2595
2596 // Determine whether the set of unexpanded parameter packs can and should
2597 // be expanded.
2598 bool Expand = true;
2599 bool RetainExpansion = false;
2600 Optional<unsigned> NumExpansions;
2601 if (SemaRef.CheckParameterPacksForExpansion(
2602 D->getEllipsisLoc(), D->getSourceRange(), Unexpanded, TemplateArgs,
2603 Expand, RetainExpansion, NumExpansions))
2604 return nullptr;
2605
2606 // This declaration cannot appear within a function template signature,
2607 // so we can't have a partial argument list for a parameter pack.
2608 assert(!RetainExpansion &&(static_cast <bool> (!RetainExpansion && "should never need to retain an expansion for UsingPackDecl"
) ? void (0) : __assert_fail ("!RetainExpansion && \"should never need to retain an expansion for UsingPackDecl\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 2609, __extension__ __PRETTY_FUNCTION__))
2609 "should never need to retain an expansion for UsingPackDecl")(static_cast <bool> (!RetainExpansion && "should never need to retain an expansion for UsingPackDecl"
) ? void (0) : __assert_fail ("!RetainExpansion && \"should never need to retain an expansion for UsingPackDecl\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 2609, __extension__ __PRETTY_FUNCTION__))
;
2610
2611 if (!Expand) {
2612 // We cannot fully expand the pack expansion now, so substitute into the
2613 // pattern and create a new pack expansion.
2614 Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, -1);
2615 return instantiateUnresolvedUsingDecl(D, true);
2616 }
2617
2618 // Within a function, we don't have any normal way to check for conflicts
2619 // between shadow declarations from different using declarations in the
2620 // same pack expansion, but this is always ill-formed because all expansions
2621 // must produce (conflicting) enumerators.
2622 //
2623 // Sadly we can't just reject this in the template definition because it
2624 // could be valid if the pack is empty or has exactly one expansion.
2625 if (D->getDeclContext()->isFunctionOrMethod() && *NumExpansions > 1) {
2626 SemaRef.Diag(D->getEllipsisLoc(),
2627 diag::err_using_decl_redeclaration_expansion);
2628 return nullptr;
2629 }
2630
2631 // Instantiate the slices of this pack and build a UsingPackDecl.
2632 SmallVector<NamedDecl*, 8> Expansions;
2633 for (unsigned I = 0; I != *NumExpansions; ++I) {
2634 Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, I);
2635 Decl *Slice = instantiateUnresolvedUsingDecl(D, true);
2636 if (!Slice)
2637 return nullptr;
2638 // Note that we can still get unresolved using declarations here, if we
2639 // had arguments for all packs but the pattern also contained other
2640 // template arguments (this only happens during partial substitution, eg
2641 // into the body of a generic lambda in a function template).
2642 Expansions.push_back(cast<NamedDecl>(Slice));
2643 }
2644
2645 auto *NewD = SemaRef.BuildUsingPackDecl(D, Expansions);
2646 if (isDeclWithinFunction(D))
2647 SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, NewD);
2648 return NewD;
2649 }
2650
2651 UnresolvedUsingTypenameDecl *TD = dyn_cast<UnresolvedUsingTypenameDecl>(D);
2652 SourceLocation TypenameLoc = TD ? TD->getTypenameLoc() : SourceLocation();
2653
2654 NestedNameSpecifierLoc QualifierLoc
2655 = SemaRef.SubstNestedNameSpecifierLoc(D->getQualifierLoc(),
2656 TemplateArgs);
2657 if (!QualifierLoc)
2658 return nullptr;
2659
2660 CXXScopeSpec SS;
2661 SS.Adopt(QualifierLoc);
2662
2663 DeclarationNameInfo NameInfo
2664 = SemaRef.SubstDeclarationNameInfo(D->getNameInfo(), TemplateArgs);
2665
2666 // Produce a pack expansion only if we're not instantiating a particular
2667 // slice of a pack expansion.
2668 bool InstantiatingSlice = D->getEllipsisLoc().isValid() &&
2669 SemaRef.ArgumentPackSubstitutionIndex != -1;
2670 SourceLocation EllipsisLoc =
2671 InstantiatingSlice ? SourceLocation() : D->getEllipsisLoc();
2672
2673 NamedDecl *UD = SemaRef.BuildUsingDeclaration(
2674 /*Scope*/ nullptr, D->getAccess(), D->getUsingLoc(),
2675 /*HasTypename*/ TD, TypenameLoc, SS, NameInfo, EllipsisLoc, nullptr,
2676 /*IsInstantiation*/ true);
2677 if (UD)
2678 SemaRef.Context.setInstantiatedFromUsingDecl(UD, D);
2679
2680 return UD;
2681}
2682
2683Decl *TemplateDeclInstantiator::VisitUnresolvedUsingTypenameDecl(
2684 UnresolvedUsingTypenameDecl *D) {
2685 return instantiateUnresolvedUsingDecl(D);
2686}
2687
2688Decl *TemplateDeclInstantiator::VisitUnresolvedUsingValueDecl(
2689 UnresolvedUsingValueDecl *D) {
2690 return instantiateUnresolvedUsingDecl(D);
2691}
2692
2693Decl *TemplateDeclInstantiator::VisitUsingPackDecl(UsingPackDecl *D) {
2694 SmallVector<NamedDecl*, 8> Expansions;
2695 for (auto *UD : D->expansions()) {
2696 if (auto *NewUD =
2697 SemaRef.FindInstantiatedDecl(D->getLocation(), UD, TemplateArgs))
2698 Expansions.push_back(cast<NamedDecl>(NewUD));
2699 else
2700 return nullptr;
2701 }
2702
2703 auto *NewD = SemaRef.BuildUsingPackDecl(D, Expansions);
2704 if (isDeclWithinFunction(D))
2705 SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, NewD);
2706 return NewD;
2707}
2708
2709Decl *TemplateDeclInstantiator::VisitClassScopeFunctionSpecializationDecl(
2710 ClassScopeFunctionSpecializationDecl *Decl) {
2711 CXXMethodDecl *OldFD = Decl->getSpecialization();
2712 CXXMethodDecl *NewFD =
2713 cast_or_null<CXXMethodDecl>(VisitCXXMethodDecl(OldFD, nullptr, true));
2714 if (!NewFD)
2715 return nullptr;
2716
2717 LookupResult Previous(SemaRef, NewFD->getNameInfo(), Sema::LookupOrdinaryName,
2718 Sema::ForExternalRedeclaration);
2719
2720 TemplateArgumentListInfo TemplateArgs;
2721 TemplateArgumentListInfo *TemplateArgsPtr = nullptr;
2722 if (Decl->hasExplicitTemplateArgs()) {
2723 TemplateArgs = Decl->templateArgs();
2724 TemplateArgsPtr = &TemplateArgs;
2725 }
2726
2727 SemaRef.LookupQualifiedName(Previous, SemaRef.CurContext);
2728 if (SemaRef.CheckFunctionTemplateSpecialization(NewFD, TemplateArgsPtr,
2729 Previous)) {
2730 NewFD->setInvalidDecl();
2731 return NewFD;
2732 }
2733
2734 // Associate the specialization with the pattern.
2735 FunctionDecl *Specialization = cast<FunctionDecl>(Previous.getFoundDecl());
2736 assert(Specialization && "Class scope Specialization is null")(static_cast <bool> (Specialization && "Class scope Specialization is null"
) ? void (0) : __assert_fail ("Specialization && \"Class scope Specialization is null\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 2736, __extension__ __PRETTY_FUNCTION__))
;
2737 SemaRef.Context.setClassScopeSpecializationPattern(Specialization, OldFD);
2738
2739 return NewFD;
2740}
2741
2742Decl *TemplateDeclInstantiator::VisitOMPThreadPrivateDecl(
2743 OMPThreadPrivateDecl *D) {
2744 SmallVector<Expr *, 5> Vars;
2745 for (auto *I : D->varlists()) {
2746 Expr *Var = SemaRef.SubstExpr(I, TemplateArgs).get();
2747 assert(isa<DeclRefExpr>(Var) && "threadprivate arg is not a DeclRefExpr")(static_cast <bool> (isa<DeclRefExpr>(Var) &&
"threadprivate arg is not a DeclRefExpr") ? void (0) : __assert_fail
("isa<DeclRefExpr>(Var) && \"threadprivate arg is not a DeclRefExpr\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 2747, __extension__ __PRETTY_FUNCTION__))
;
2748 Vars.push_back(Var);
2749 }
2750
2751 OMPThreadPrivateDecl *TD =
2752 SemaRef.CheckOMPThreadPrivateDecl(D->getLocation(), Vars);
2753
2754 TD->setAccess(AS_public);
2755 Owner->addDecl(TD);
2756
2757 return TD;
2758}
2759
2760Decl *TemplateDeclInstantiator::VisitOMPDeclareReductionDecl(
2761 OMPDeclareReductionDecl *D) {
2762 // Instantiate type and check if it is allowed.
2763 QualType SubstReductionType = SemaRef.ActOnOpenMPDeclareReductionType(
2764 D->getLocation(),
2765 ParsedType::make(SemaRef.SubstType(D->getType(), TemplateArgs,
2766 D->getLocation(), DeclarationName())));
2767 if (SubstReductionType.isNull())
2768 return nullptr;
2769 bool IsCorrect = !SubstReductionType.isNull();
2770 // Create instantiated copy.
2771 std::pair<QualType, SourceLocation> ReductionTypes[] = {
2772 std::make_pair(SubstReductionType, D->getLocation())};
2773 auto *PrevDeclInScope = D->getPrevDeclInScope();
2774 if (PrevDeclInScope && !PrevDeclInScope->isInvalidDecl()) {
2775 PrevDeclInScope = cast<OMPDeclareReductionDecl>(
2776 SemaRef.CurrentInstantiationScope->findInstantiationOf(PrevDeclInScope)
2777 ->get<Decl *>());
2778 }
2779 auto DRD = SemaRef.ActOnOpenMPDeclareReductionDirectiveStart(
2780 /*S=*/nullptr, Owner, D->getDeclName(), ReductionTypes, D->getAccess(),
2781 PrevDeclInScope);
2782 auto *NewDRD = cast<OMPDeclareReductionDecl>(DRD.get().getSingleDecl());
2783 if (isDeclWithinFunction(NewDRD))
2784 SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, NewDRD);
2785 Expr *SubstCombiner = nullptr;
2786 Expr *SubstInitializer = nullptr;
2787 // Combiners instantiation sequence.
2788 if (D->getCombiner()) {
2789 SemaRef.ActOnOpenMPDeclareReductionCombinerStart(
2790 /*S=*/nullptr, NewDRD);
2791 const char *Names[] = {"omp_in", "omp_out"};
2792 for (auto &Name : Names) {
2793 DeclarationName DN(&SemaRef.Context.Idents.get(Name));
2794 auto OldLookup = D->lookup(DN);
2795 auto Lookup = NewDRD->lookup(DN);
2796 if (!OldLookup.empty() && !Lookup.empty()) {
2797 assert(Lookup.size() == 1 && OldLookup.size() == 1)(static_cast <bool> (Lookup.size() == 1 && OldLookup
.size() == 1) ? void (0) : __assert_fail ("Lookup.size() == 1 && OldLookup.size() == 1"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 2797, __extension__ __PRETTY_FUNCTION__))
;
2798 SemaRef.CurrentInstantiationScope->InstantiatedLocal(OldLookup.front(),
2799 Lookup.front());
2800 }
2801 }
2802 SubstCombiner = SemaRef.SubstExpr(D->getCombiner(), TemplateArgs).get();
2803 SemaRef.ActOnOpenMPDeclareReductionCombinerEnd(NewDRD, SubstCombiner);
2804 // Initializers instantiation sequence.
2805 if (D->getInitializer()) {
2806 VarDecl *OmpPrivParm =
2807 SemaRef.ActOnOpenMPDeclareReductionInitializerStart(
2808 /*S=*/nullptr, NewDRD);
2809 const char *Names[] = {"omp_orig", "omp_priv"};
2810 for (auto &Name : Names) {
2811 DeclarationName DN(&SemaRef.Context.Idents.get(Name));
2812 auto OldLookup = D->lookup(DN);
2813 auto Lookup = NewDRD->lookup(DN);
2814 if (!OldLookup.empty() && !Lookup.empty()) {
2815 assert(Lookup.size() == 1 && OldLookup.size() == 1)(static_cast <bool> (Lookup.size() == 1 && OldLookup
.size() == 1) ? void (0) : __assert_fail ("Lookup.size() == 1 && OldLookup.size() == 1"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 2815, __extension__ __PRETTY_FUNCTION__))
;
2816 auto *OldVD = cast<VarDecl>(OldLookup.front());
2817 auto *NewVD = cast<VarDecl>(Lookup.front());
2818 SemaRef.InstantiateVariableInitializer(NewVD, OldVD, TemplateArgs);
2819 SemaRef.CurrentInstantiationScope->InstantiatedLocal(OldVD, NewVD);
2820 }
2821 }
2822 if (D->getInitializerKind() == OMPDeclareReductionDecl::CallInit) {
2823 SubstInitializer =
2824 SemaRef.SubstExpr(D->getInitializer(), TemplateArgs).get();
2825 } else {
2826 IsCorrect = IsCorrect && OmpPrivParm->hasInit();
2827 }
2828 SemaRef.ActOnOpenMPDeclareReductionInitializerEnd(
2829 NewDRD, SubstInitializer, OmpPrivParm);
2830 }
2831 IsCorrect =
2832 IsCorrect && SubstCombiner &&
2833 (!D->getInitializer() ||
2834 (D->getInitializerKind() == OMPDeclareReductionDecl::CallInit &&
2835 SubstInitializer) ||
2836 (D->getInitializerKind() != OMPDeclareReductionDecl::CallInit &&
2837 !SubstInitializer && !SubstInitializer));
2838 } else
2839 IsCorrect = false;
2840
2841 (void)SemaRef.ActOnOpenMPDeclareReductionDirectiveEnd(/*S=*/nullptr, DRD,
2842 IsCorrect);
2843
2844 return NewDRD;
2845}
2846
2847Decl *TemplateDeclInstantiator::VisitOMPCapturedExprDecl(
2848 OMPCapturedExprDecl * /*D*/) {
2849 llvm_unreachable("Should not be met in templates")::llvm::llvm_unreachable_internal("Should not be met in templates"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 2849)
;
2850}
2851
2852Decl *TemplateDeclInstantiator::VisitFunctionDecl(FunctionDecl *D) {
2853 return VisitFunctionDecl(D, nullptr);
2854}
2855
2856Decl *
2857TemplateDeclInstantiator::VisitCXXDeductionGuideDecl(CXXDeductionGuideDecl *D) {
2858 return VisitFunctionDecl(D, nullptr);
2859}
2860
2861Decl *TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D) {
2862 return VisitCXXMethodDecl(D, nullptr);
2863}
2864
2865Decl *TemplateDeclInstantiator::VisitRecordDecl(RecordDecl *D) {
2866 llvm_unreachable("There are only CXXRecordDecls in C++")::llvm::llvm_unreachable_internal("There are only CXXRecordDecls in C++"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 2866)
;
2867}
2868
2869Decl *
2870TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(
2871 ClassTemplateSpecializationDecl *D) {
2872 // As a MS extension, we permit class-scope explicit specialization
2873 // of member class templates.
2874 ClassTemplateDecl *ClassTemplate = D->getSpecializedTemplate();
2875 assert(ClassTemplate->getDeclContext()->isRecord() &&(static_cast <bool> (ClassTemplate->getDeclContext()
->isRecord() && D->getTemplateSpecializationKind
() == TSK_ExplicitSpecialization && "can only instantiate an explicit specialization "
"for a member class template") ? void (0) : __assert_fail ("ClassTemplate->getDeclContext()->isRecord() && D->getTemplateSpecializationKind() == TSK_ExplicitSpecialization && \"can only instantiate an explicit specialization \" \"for a member class template\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 2878, __extension__ __PRETTY_FUNCTION__))
2876 D->getTemplateSpecializationKind() == TSK_ExplicitSpecialization &&(static_cast <bool> (ClassTemplate->getDeclContext()
->isRecord() && D->getTemplateSpecializationKind
() == TSK_ExplicitSpecialization && "can only instantiate an explicit specialization "
"for a member class template") ? void (0) : __assert_fail ("ClassTemplate->getDeclContext()->isRecord() && D->getTemplateSpecializationKind() == TSK_ExplicitSpecialization && \"can only instantiate an explicit specialization \" \"for a member class template\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 2878, __extension__ __PRETTY_FUNCTION__))
2877 "can only instantiate an explicit specialization "(static_cast <bool> (ClassTemplate->getDeclContext()
->isRecord() && D->getTemplateSpecializationKind
() == TSK_ExplicitSpecialization && "can only instantiate an explicit specialization "
"for a member class template") ? void (0) : __assert_fail ("ClassTemplate->getDeclContext()->isRecord() && D->getTemplateSpecializationKind() == TSK_ExplicitSpecialization && \"can only instantiate an explicit specialization \" \"for a member class template\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 2878, __extension__ __PRETTY_FUNCTION__))
2878 "for a member class template")(static_cast <bool> (ClassTemplate->getDeclContext()
->isRecord() && D->getTemplateSpecializationKind
() == TSK_ExplicitSpecialization && "can only instantiate an explicit specialization "
"for a member class template") ? void (0) : __assert_fail ("ClassTemplate->getDeclContext()->isRecord() && D->getTemplateSpecializationKind() == TSK_ExplicitSpecialization && \"can only instantiate an explicit specialization \" \"for a member class template\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 2878, __extension__ __PRETTY_FUNCTION__))
;
2879
2880 // Lookup the already-instantiated declaration in the instantiation
2881 // of the class template. FIXME: Diagnose or assert if this fails?
2882 DeclContext::lookup_result Found
2883 = Owner->lookup(ClassTemplate->getDeclName());
2884 if (Found.empty())
2885 return nullptr;
2886 ClassTemplateDecl *InstClassTemplate
2887 = dyn_cast<ClassTemplateDecl>(Found.front());
2888 if (!InstClassTemplate)
2889 return nullptr;
2890
2891 // Substitute into the template arguments of the class template explicit
2892 // specialization.
2893 TemplateSpecializationTypeLoc Loc = D->getTypeAsWritten()->getTypeLoc().
2894 castAs<TemplateSpecializationTypeLoc>();
2895 TemplateArgumentListInfo InstTemplateArgs(Loc.getLAngleLoc(),
2896 Loc.getRAngleLoc());
2897 SmallVector<TemplateArgumentLoc, 4> ArgLocs;
2898 for (unsigned I = 0; I != Loc.getNumArgs(); ++I)
2899 ArgLocs.push_back(Loc.getArgLoc(I));
2900 if (SemaRef.Subst(ArgLocs.data(), ArgLocs.size(),
2901 InstTemplateArgs, TemplateArgs))
2902 return nullptr;
2903
2904 // Check that the template argument list is well-formed for this
2905 // class template.
2906 SmallVector<TemplateArgument, 4> Converted;
2907 if (SemaRef.CheckTemplateArgumentList(InstClassTemplate,
2908 D->getLocation(),
2909 InstTemplateArgs,
2910 false,
2911 Converted))
2912 return nullptr;
2913
2914 // Figure out where to insert this class template explicit specialization
2915 // in the member template's set of class template explicit specializations.
2916 void *InsertPos = nullptr;
2917 ClassTemplateSpecializationDecl *PrevDecl =
2918 InstClassTemplate->findSpecialization(Converted, InsertPos);
2919
2920 // Check whether we've already seen a conflicting instantiation of this
2921 // declaration (for instance, if there was a prior implicit instantiation).
2922 bool Ignored;
2923 if (PrevDecl &&
2924 SemaRef.CheckSpecializationInstantiationRedecl(D->getLocation(),
2925 D->getSpecializationKind(),
2926 PrevDecl,
2927 PrevDecl->getSpecializationKind(),
2928 PrevDecl->getPointOfInstantiation(),
2929 Ignored))
2930 return nullptr;
2931
2932 // If PrevDecl was a definition and D is also a definition, diagnose.
2933 // This happens in cases like:
2934 //
2935 // template<typename T, typename U>
2936 // struct Outer {
2937 // template<typename X> struct Inner;
2938 // template<> struct Inner<T> {};
2939 // template<> struct Inner<U> {};
2940 // };
2941 //
2942 // Outer<int, int> outer; // error: the explicit specializations of Inner
2943 // // have the same signature.
2944 if (PrevDecl && PrevDecl->getDefinition() &&
2945 D->isThisDeclarationADefinition()) {
2946 SemaRef.Diag(D->getLocation(), diag::err_redefinition) << PrevDecl;
2947 SemaRef.Diag(PrevDecl->getDefinition()->getLocation(),
2948 diag::note_previous_definition);
2949 return nullptr;
2950 }
2951
2952 // Create the class template partial specialization declaration.
2953 ClassTemplateSpecializationDecl *InstD
2954 = ClassTemplateSpecializationDecl::Create(SemaRef.Context,
2955 D->getTagKind(),
2956 Owner,
2957 D->getLocStart(),
2958 D->getLocation(),
2959 InstClassTemplate,
2960 Converted,
2961 PrevDecl);
2962
2963 // Add this partial specialization to the set of class template partial
2964 // specializations.
2965 if (!PrevDecl)
2966 InstClassTemplate->AddSpecialization(InstD, InsertPos);
2967
2968 // Substitute the nested name specifier, if any.
2969 if (SubstQualifier(D, InstD))
2970 return nullptr;
2971
2972 // Build the canonical type that describes the converted template
2973 // arguments of the class template explicit specialization.
2974 QualType CanonType = SemaRef.Context.getTemplateSpecializationType(
2975 TemplateName(InstClassTemplate), Converted,
2976 SemaRef.Context.getRecordType(InstD));
2977
2978 // Build the fully-sugared type for this class template
2979 // specialization as the user wrote in the specialization
2980 // itself. This means that we'll pretty-print the type retrieved
2981 // from the specialization's declaration the way that the user
2982 // actually wrote the specialization, rather than formatting the
2983 // name based on the "canonical" representation used to store the
2984 // template arguments in the specialization.
2985 TypeSourceInfo *WrittenTy = SemaRef.Context.getTemplateSpecializationTypeInfo(
2986 TemplateName(InstClassTemplate), D->getLocation(), InstTemplateArgs,
2987 CanonType);
2988
2989 InstD->setAccess(D->getAccess());
2990 InstD->setInstantiationOfMemberClass(D, TSK_ImplicitInstantiation);
2991 InstD->setSpecializationKind(D->getSpecializationKind());
2992 InstD->setTypeAsWritten(WrittenTy);
2993 InstD->setExternLoc(D->getExternLoc());
2994 InstD->setTemplateKeywordLoc(D->getTemplateKeywordLoc());
2995
2996 Owner->addDecl(InstD);
2997
2998 // Instantiate the members of the class-scope explicit specialization eagerly.
2999 // We don't have support for lazy instantiation of an explicit specialization
3000 // yet, and MSVC eagerly instantiates in this case.
3001 if (D->isThisDeclarationADefinition() &&
3002 SemaRef.InstantiateClass(D->getLocation(), InstD, D, TemplateArgs,
3003 TSK_ImplicitInstantiation,
3004 /*Complain=*/true))
3005 return nullptr;
3006
3007 return InstD;
3008}
3009
3010Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
3011 VarTemplateSpecializationDecl *D) {
3012
3013 TemplateArgumentListInfo VarTemplateArgsInfo;
3014 VarTemplateDecl *VarTemplate = D->getSpecializedTemplate();
3015 assert(VarTemplate &&(static_cast <bool> (VarTemplate && "A template specialization without specialized template?"
) ? void (0) : __assert_fail ("VarTemplate && \"A template specialization without specialized template?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3016, __extension__ __PRETTY_FUNCTION__))
3016 "A template specialization without specialized template?")(static_cast <bool> (VarTemplate && "A template specialization without specialized template?"
) ? void (0) : __assert_fail ("VarTemplate && \"A template specialization without specialized template?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3016, __extension__ __PRETTY_FUNCTION__))
;
3017
3018 // Substitute the current template arguments.
3019 const TemplateArgumentListInfo &TemplateArgsInfo = D->getTemplateArgsInfo();
3020 VarTemplateArgsInfo.setLAngleLoc(TemplateArgsInfo.getLAngleLoc());
3021 VarTemplateArgsInfo.setRAngleLoc(TemplateArgsInfo.getRAngleLoc());
3022
3023 if (SemaRef.Subst(TemplateArgsInfo.getArgumentArray(),
3024 TemplateArgsInfo.size(), VarTemplateArgsInfo, TemplateArgs))
3025 return nullptr;
3026
3027 // Check that the template argument list is well-formed for this template.
3028 SmallVector<TemplateArgument, 4> Converted;
3029 if (SemaRef.CheckTemplateArgumentList(
3030 VarTemplate, VarTemplate->getLocStart(),
3031 const_cast<TemplateArgumentListInfo &>(VarTemplateArgsInfo), false,
3032 Converted))
3033 return nullptr;
3034
3035 // Find the variable template specialization declaration that
3036 // corresponds to these arguments.
3037 void *InsertPos = nullptr;
3038 if (VarTemplateSpecializationDecl *VarSpec = VarTemplate->findSpecialization(
3039 Converted, InsertPos))
3040 // If we already have a variable template specialization, return it.
3041 return VarSpec;
3042
3043 return VisitVarTemplateSpecializationDecl(VarTemplate, D, InsertPos,
3044 VarTemplateArgsInfo, Converted);
3045}
3046
3047Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
3048 VarTemplateDecl *VarTemplate, VarDecl *D, void *InsertPos,
3049 const TemplateArgumentListInfo &TemplateArgsInfo,
3050 ArrayRef<TemplateArgument> Converted) {
3051
3052 // Do substitution on the type of the declaration
3053 TypeSourceInfo *DI =
3054 SemaRef.SubstType(D->getTypeSourceInfo(), TemplateArgs,
3055 D->getTypeSpecStartLoc(), D->getDeclName());
3056 if (!DI)
3057 return nullptr;
3058
3059 if (DI->getType()->isFunctionType()) {
3060 SemaRef.Diag(D->getLocation(), diag::err_variable_instantiates_to_function)
3061 << D->isStaticDataMember() << DI->getType();
3062 return nullptr;
3063 }
3064
3065 // Build the instantiated declaration
3066 VarTemplateSpecializationDecl *Var = VarTemplateSpecializationDecl::Create(
3067 SemaRef.Context, Owner, D->getInnerLocStart(), D->getLocation(),
3068 VarTemplate, DI->getType(), DI, D->getStorageClass(), Converted);
3069 Var->setTemplateArgsInfo(TemplateArgsInfo);
3070 if (InsertPos)
3071 VarTemplate->AddSpecialization(Var, InsertPos);
3072
3073 // Substitute the nested name specifier, if any.
3074 if (SubstQualifier(D, Var))
3075 return nullptr;
3076
3077 SemaRef.BuildVariableInstantiation(Var, D, TemplateArgs, LateAttrs,
3078 Owner, StartingScope);
3079
3080 return Var;
3081}
3082
3083Decl *TemplateDeclInstantiator::VisitObjCAtDefsFieldDecl(ObjCAtDefsFieldDecl *D) {
3084 llvm_unreachable("@defs is not supported in Objective-C++")::llvm::llvm_unreachable_internal("@defs is not supported in Objective-C++"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3084)
;
3085}
3086
3087Decl *TemplateDeclInstantiator::VisitFriendTemplateDecl(FriendTemplateDecl *D) {
3088 // FIXME: We need to be able to instantiate FriendTemplateDecls.
3089 unsigned DiagID = SemaRef.getDiagnostics().getCustomDiagID(
3090 DiagnosticsEngine::Error,
3091 "cannot instantiate %0 yet");
3092 SemaRef.Diag(D->getLocation(), DiagID)
3093 << D->getDeclKindName();
3094
3095 return nullptr;
3096}
3097
3098Decl *TemplateDeclInstantiator::VisitDecl(Decl *D) {
3099 llvm_unreachable("Unexpected decl")::llvm::llvm_unreachable_internal("Unexpected decl", "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3099)
;
3100}
3101
3102Decl *Sema::SubstDecl(Decl *D, DeclContext *Owner,
3103 const MultiLevelTemplateArgumentList &TemplateArgs) {
3104 TemplateDeclInstantiator Instantiator(*this, Owner, TemplateArgs);
3105 if (D->isInvalidDecl())
3106 return nullptr;
3107
3108 return Instantiator.Visit(D);
3109}
3110
3111/// \brief Instantiates a nested template parameter list in the current
3112/// instantiation context.
3113///
3114/// \param L The parameter list to instantiate
3115///
3116/// \returns NULL if there was an error
3117TemplateParameterList *
3118TemplateDeclInstantiator::SubstTemplateParams(TemplateParameterList *L) {
3119 // Get errors for all the parameters before bailing out.
3120 bool Invalid = false;
3121
3122 unsigned N = L->size();
3123 typedef SmallVector<NamedDecl *, 8> ParamVector;
3124 ParamVector Params;
3125 Params.reserve(N);
3126 for (auto &P : *L) {
3127 NamedDecl *D = cast_or_null<NamedDecl>(Visit(P));
3128 Params.push_back(D);
3129 Invalid = Invalid || !D || D->isInvalidDecl();
3130 }
3131
3132 // Clean up if we had an error.
3133 if (Invalid)
3134 return nullptr;
3135
3136 // Note: we substitute into associated constraints later
3137 Expr *const UninstantiatedRequiresClause = L->getRequiresClause();
3138
3139 TemplateParameterList *InstL
3140 = TemplateParameterList::Create(SemaRef.Context, L->getTemplateLoc(),
3141 L->getLAngleLoc(), Params,
3142 L->getRAngleLoc(),
3143 UninstantiatedRequiresClause);
3144 return InstL;
3145}
3146
3147/// \brief Instantiate the declaration of a class template partial
3148/// specialization.
3149///
3150/// \param ClassTemplate the (instantiated) class template that is partially
3151// specialized by the instantiation of \p PartialSpec.
3152///
3153/// \param PartialSpec the (uninstantiated) class template partial
3154/// specialization that we are instantiating.
3155///
3156/// \returns The instantiated partial specialization, if successful; otherwise,
3157/// NULL to indicate an error.
3158ClassTemplatePartialSpecializationDecl *
3159TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization(
3160 ClassTemplateDecl *ClassTemplate,
3161 ClassTemplatePartialSpecializationDecl *PartialSpec) {
3162 // Create a local instantiation scope for this class template partial
3163 // specialization, which will contain the instantiations of the template
3164 // parameters.
3165 LocalInstantiationScope Scope(SemaRef);
3166
3167 // Substitute into the template parameters of the class template partial
3168 // specialization.
3169 TemplateParameterList *TempParams = PartialSpec->getTemplateParameters();
3170 TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
3171 if (!InstParams)
3172 return nullptr;
3173
3174 // Substitute into the template arguments of the class template partial
3175 // specialization.
3176 const ASTTemplateArgumentListInfo *TemplArgInfo
3177 = PartialSpec->getTemplateArgsAsWritten();
3178 TemplateArgumentListInfo InstTemplateArgs(TemplArgInfo->LAngleLoc,
3179 TemplArgInfo->RAngleLoc);
3180 if (SemaRef.Subst(TemplArgInfo->getTemplateArgs(),
3181 TemplArgInfo->NumTemplateArgs,
3182 InstTemplateArgs, TemplateArgs))
3183 return nullptr;
3184
3185 // Check that the template argument list is well-formed for this
3186 // class template.
3187 SmallVector<TemplateArgument, 4> Converted;
3188 if (SemaRef.CheckTemplateArgumentList(ClassTemplate,
3189 PartialSpec->getLocation(),
3190 InstTemplateArgs,
3191 false,
3192 Converted))
3193 return nullptr;
3194
3195 // Check these arguments are valid for a template partial specialization.
3196 if (SemaRef.CheckTemplatePartialSpecializationArgs(
3197 PartialSpec->getLocation(), ClassTemplate, InstTemplateArgs.size(),
3198 Converted))
3199 return nullptr;
3200
3201 // Figure out where to insert this class template partial specialization
3202 // in the member template's set of class template partial specializations.
3203 void *InsertPos = nullptr;
3204 ClassTemplateSpecializationDecl *PrevDecl
3205 = ClassTemplate->findPartialSpecialization(Converted, InsertPos);
3206
3207 // Build the canonical type that describes the converted template
3208 // arguments of the class template partial specialization.
3209 QualType CanonType
3210 = SemaRef.Context.getTemplateSpecializationType(TemplateName(ClassTemplate),
3211 Converted);
3212
3213 // Build the fully-sugared type for this class template
3214 // specialization as the user wrote in the specialization
3215 // itself. This means that we'll pretty-print the type retrieved
3216 // from the specialization's declaration the way that the user
3217 // actually wrote the specialization, rather than formatting the
3218 // name based on the "canonical" representation used to store the
3219 // template arguments in the specialization.
3220 TypeSourceInfo *WrittenTy
3221 = SemaRef.Context.getTemplateSpecializationTypeInfo(
3222 TemplateName(ClassTemplate),
3223 PartialSpec->getLocation(),
3224 InstTemplateArgs,
3225 CanonType);
3226
3227 if (PrevDecl) {
3228 // We've already seen a partial specialization with the same template
3229 // parameters and template arguments. This can happen, for example, when
3230 // substituting the outer template arguments ends up causing two
3231 // class template partial specializations of a member class template
3232 // to have identical forms, e.g.,
3233 //
3234 // template<typename T, typename U>
3235 // struct Outer {
3236 // template<typename X, typename Y> struct Inner;
3237 // template<typename Y> struct Inner<T, Y>;
3238 // template<typename Y> struct Inner<U, Y>;
3239 // };
3240 //
3241 // Outer<int, int> outer; // error: the partial specializations of Inner
3242 // // have the same signature.
3243 SemaRef.Diag(PartialSpec->getLocation(), diag::err_partial_spec_redeclared)
3244 << WrittenTy->getType();
3245 SemaRef.Diag(PrevDecl->getLocation(), diag::note_prev_partial_spec_here)
3246 << SemaRef.Context.getTypeDeclType(PrevDecl);
3247 return nullptr;
3248 }
3249
3250
3251 // Create the class template partial specialization declaration.
3252 ClassTemplatePartialSpecializationDecl *InstPartialSpec
3253 = ClassTemplatePartialSpecializationDecl::Create(SemaRef.Context,
3254 PartialSpec->getTagKind(),
3255 Owner,
3256 PartialSpec->getLocStart(),
3257 PartialSpec->getLocation(),
3258 InstParams,
3259 ClassTemplate,
3260 Converted,
3261 InstTemplateArgs,
3262 CanonType,
3263 nullptr);
3264 // Substitute the nested name specifier, if any.
3265 if (SubstQualifier(PartialSpec, InstPartialSpec))
3266 return nullptr;
3267
3268 InstPartialSpec->setInstantiatedFromMember(PartialSpec);
3269 InstPartialSpec->setTypeAsWritten(WrittenTy);
3270
3271 // Check the completed partial specialization.
3272 SemaRef.CheckTemplatePartialSpecialization(InstPartialSpec);
3273
3274 // Add this partial specialization to the set of class template partial
3275 // specializations.
3276 ClassTemplate->AddPartialSpecialization(InstPartialSpec,
3277 /*InsertPos=*/nullptr);
3278 return InstPartialSpec;
3279}
3280
3281/// \brief Instantiate the declaration of a variable template partial
3282/// specialization.
3283///
3284/// \param VarTemplate the (instantiated) variable template that is partially
3285/// specialized by the instantiation of \p PartialSpec.
3286///
3287/// \param PartialSpec the (uninstantiated) variable template partial
3288/// specialization that we are instantiating.
3289///
3290/// \returns The instantiated partial specialization, if successful; otherwise,
3291/// NULL to indicate an error.
3292VarTemplatePartialSpecializationDecl *
3293TemplateDeclInstantiator::InstantiateVarTemplatePartialSpecialization(
3294 VarTemplateDecl *VarTemplate,
3295 VarTemplatePartialSpecializationDecl *PartialSpec) {
3296 // Create a local instantiation scope for this variable template partial
3297 // specialization, which will contain the instantiations of the template
3298 // parameters.
3299 LocalInstantiationScope Scope(SemaRef);
3300
3301 // Substitute into the template parameters of the variable template partial
3302 // specialization.
3303 TemplateParameterList *TempParams = PartialSpec->getTemplateParameters();
3304 TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
3305 if (!InstParams)
3306 return nullptr;
3307
3308 // Substitute into the template arguments of the variable template partial
3309 // specialization.
3310 const ASTTemplateArgumentListInfo *TemplArgInfo
3311 = PartialSpec->getTemplateArgsAsWritten();
3312 TemplateArgumentListInfo InstTemplateArgs(TemplArgInfo->LAngleLoc,
3313 TemplArgInfo->RAngleLoc);
3314 if (SemaRef.Subst(TemplArgInfo->getTemplateArgs(),
3315 TemplArgInfo->NumTemplateArgs,
3316 InstTemplateArgs, TemplateArgs))
3317 return nullptr;
3318
3319 // Check that the template argument list is well-formed for this
3320 // class template.
3321 SmallVector<TemplateArgument, 4> Converted;
3322 if (SemaRef.CheckTemplateArgumentList(VarTemplate, PartialSpec->getLocation(),
3323 InstTemplateArgs, false, Converted))
3324 return nullptr;
3325
3326 // Check these arguments are valid for a template partial specialization.
3327 if (SemaRef.CheckTemplatePartialSpecializationArgs(
3328 PartialSpec->getLocation(), VarTemplate, InstTemplateArgs.size(),
3329 Converted))
3330 return nullptr;
3331
3332 // Figure out where to insert this variable template partial specialization
3333 // in the member template's set of variable template partial specializations.
3334 void *InsertPos = nullptr;
3335 VarTemplateSpecializationDecl *PrevDecl =
3336 VarTemplate->findPartialSpecialization(Converted, InsertPos);
3337
3338 // Build the canonical type that describes the converted template
3339 // arguments of the variable template partial specialization.
3340 QualType CanonType = SemaRef.Context.getTemplateSpecializationType(
3341 TemplateName(VarTemplate), Converted);
3342
3343 // Build the fully-sugared type for this variable template
3344 // specialization as the user wrote in the specialization
3345 // itself. This means that we'll pretty-print the type retrieved
3346 // from the specialization's declaration the way that the user
3347 // actually wrote the specialization, rather than formatting the
3348 // name based on the "canonical" representation used to store the
3349 // template arguments in the specialization.
3350 TypeSourceInfo *WrittenTy = SemaRef.Context.getTemplateSpecializationTypeInfo(
3351 TemplateName(VarTemplate), PartialSpec->getLocation(), InstTemplateArgs,
3352 CanonType);
3353
3354 if (PrevDecl) {
3355 // We've already seen a partial specialization with the same template
3356 // parameters and template arguments. This can happen, for example, when
3357 // substituting the outer template arguments ends up causing two
3358 // variable template partial specializations of a member variable template
3359 // to have identical forms, e.g.,
3360 //
3361 // template<typename T, typename U>
3362 // struct Outer {
3363 // template<typename X, typename Y> pair<X,Y> p;
3364 // template<typename Y> pair<T, Y> p;
3365 // template<typename Y> pair<U, Y> p;
3366 // };
3367 //
3368 // Outer<int, int> outer; // error: the partial specializations of Inner
3369 // // have the same signature.
3370 SemaRef.Diag(PartialSpec->getLocation(),
3371 diag::err_var_partial_spec_redeclared)
3372 << WrittenTy->getType();
3373 SemaRef.Diag(PrevDecl->getLocation(),
3374 diag::note_var_prev_partial_spec_here);
3375 return nullptr;
3376 }
3377
3378 // Do substitution on the type of the declaration
3379 TypeSourceInfo *DI = SemaRef.SubstType(
3380 PartialSpec->getTypeSourceInfo(), TemplateArgs,
3381 PartialSpec->getTypeSpecStartLoc(), PartialSpec->getDeclName());
3382 if (!DI)
3383 return nullptr;
3384
3385 if (DI->getType()->isFunctionType()) {
3386 SemaRef.Diag(PartialSpec->getLocation(),
3387 diag::err_variable_instantiates_to_function)
3388 << PartialSpec->isStaticDataMember() << DI->getType();
3389 return nullptr;
3390 }
3391
3392 // Create the variable template partial specialization declaration.
3393 VarTemplatePartialSpecializationDecl *InstPartialSpec =
3394 VarTemplatePartialSpecializationDecl::Create(
3395 SemaRef.Context, Owner, PartialSpec->getInnerLocStart(),
3396 PartialSpec->getLocation(), InstParams, VarTemplate, DI->getType(),
3397 DI, PartialSpec->getStorageClass(), Converted, InstTemplateArgs);
3398
3399 // Substitute the nested name specifier, if any.
3400 if (SubstQualifier(PartialSpec, InstPartialSpec))
3401 return nullptr;
3402
3403 InstPartialSpec->setInstantiatedFromMember(PartialSpec);
3404 InstPartialSpec->setTypeAsWritten(WrittenTy);
3405
3406 // Check the completed partial specialization.
3407 SemaRef.CheckTemplatePartialSpecialization(InstPartialSpec);
3408
3409 // Add this partial specialization to the set of variable template partial
3410 // specializations. The instantiation of the initializer is not necessary.
3411 VarTemplate->AddPartialSpecialization(InstPartialSpec, /*InsertPos=*/nullptr);
3412
3413 SemaRef.BuildVariableInstantiation(InstPartialSpec, PartialSpec, TemplateArgs,
3414 LateAttrs, Owner, StartingScope);
3415
3416 return InstPartialSpec;
3417}
3418
3419TypeSourceInfo*
3420TemplateDeclInstantiator::SubstFunctionType(FunctionDecl *D,
3421 SmallVectorImpl<ParmVarDecl *> &Params) {
3422 TypeSourceInfo *OldTInfo = D->getTypeSourceInfo();
3423 assert(OldTInfo && "substituting function without type source info")(static_cast <bool> (OldTInfo && "substituting function without type source info"
) ? void (0) : __assert_fail ("OldTInfo && \"substituting function without type source info\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3423, __extension__ __PRETTY_FUNCTION__))
;
3424 assert(Params.empty() && "parameter vector is non-empty at start")(static_cast <bool> (Params.empty() && "parameter vector is non-empty at start"
) ? void (0) : __assert_fail ("Params.empty() && \"parameter vector is non-empty at start\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3424, __extension__ __PRETTY_FUNCTION__))
;
3425
3426 CXXRecordDecl *ThisContext = nullptr;
3427 unsigned ThisTypeQuals = 0;
3428 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
3429 ThisContext = cast<CXXRecordDecl>(Owner);
3430 ThisTypeQuals = Method->getTypeQualifiers();
3431 }
3432
3433 TypeSourceInfo *NewTInfo
3434 = SemaRef.SubstFunctionDeclType(OldTInfo, TemplateArgs,
3435 D->getTypeSpecStartLoc(),
3436 D->getDeclName(),
3437 ThisContext, ThisTypeQuals);
3438 if (!NewTInfo)
3439 return nullptr;
3440
3441 TypeLoc OldTL = OldTInfo->getTypeLoc().IgnoreParens();
3442 if (FunctionProtoTypeLoc OldProtoLoc = OldTL.getAs<FunctionProtoTypeLoc>()) {
3443 if (NewTInfo != OldTInfo) {
3444 // Get parameters from the new type info.
3445 TypeLoc NewTL = NewTInfo->getTypeLoc().IgnoreParens();
3446 FunctionProtoTypeLoc NewProtoLoc = NewTL.castAs<FunctionProtoTypeLoc>();
3447 unsigned NewIdx = 0;
3448 for (unsigned OldIdx = 0, NumOldParams = OldProtoLoc.getNumParams();
3449 OldIdx != NumOldParams; ++OldIdx) {
3450 ParmVarDecl *OldParam = OldProtoLoc.getParam(OldIdx);
3451 LocalInstantiationScope *Scope = SemaRef.CurrentInstantiationScope;
3452
3453 Optional<unsigned> NumArgumentsInExpansion;
3454 if (OldParam->isParameterPack())
3455 NumArgumentsInExpansion =
3456 SemaRef.getNumArgumentsInExpansion(OldParam->getType(),
3457 TemplateArgs);
3458 if (!NumArgumentsInExpansion) {
3459 // Simple case: normal parameter, or a parameter pack that's
3460 // instantiated to a (still-dependent) parameter pack.
3461 ParmVarDecl *NewParam = NewProtoLoc.getParam(NewIdx++);
3462 Params.push_back(NewParam);
3463 Scope->InstantiatedLocal(OldParam, NewParam);
3464 } else {
3465 // Parameter pack expansion: make the instantiation an argument pack.
3466 Scope->MakeInstantiatedLocalArgPack(OldParam);
3467 for (unsigned I = 0; I != *NumArgumentsInExpansion; ++I) {
3468 ParmVarDecl *NewParam = NewProtoLoc.getParam(NewIdx++);
3469 Params.push_back(NewParam);
3470 Scope->InstantiatedLocalPackArg(OldParam, NewParam);
3471 }
3472 }
3473 }
3474 } else {
3475 // The function type itself was not dependent and therefore no
3476 // substitution occurred. However, we still need to instantiate
3477 // the function parameters themselves.
3478 const FunctionProtoType *OldProto =
3479 cast<FunctionProtoType>(OldProtoLoc.getType());
3480 for (unsigned i = 0, i_end = OldProtoLoc.getNumParams(); i != i_end;
3481 ++i) {
3482 ParmVarDecl *OldParam = OldProtoLoc.getParam(i);
3483 if (!OldParam) {
3484 Params.push_back(SemaRef.BuildParmVarDeclForTypedef(
3485 D, D->getLocation(), OldProto->getParamType(i)));
3486 continue;
3487 }
3488
3489 ParmVarDecl *Parm =
3490 cast_or_null<ParmVarDecl>(VisitParmVarDecl(OldParam));
3491 if (!Parm)
3492 return nullptr;
3493 Params.push_back(Parm);
3494 }
3495 }
3496 } else {
3497 // If the type of this function, after ignoring parentheses, is not
3498 // *directly* a function type, then we're instantiating a function that
3499 // was declared via a typedef or with attributes, e.g.,
3500 //
3501 // typedef int functype(int, int);
3502 // functype func;
3503 // int __cdecl meth(int, int);
3504 //
3505 // In this case, we'll just go instantiate the ParmVarDecls that we
3506 // synthesized in the method declaration.
3507 SmallVector<QualType, 4> ParamTypes;
3508 Sema::ExtParameterInfoBuilder ExtParamInfos;
3509 if (SemaRef.SubstParmTypes(D->getLocation(), D->parameters(), nullptr,
3510 TemplateArgs, ParamTypes, &Params,
3511 ExtParamInfos))
3512 return nullptr;
3513 }
3514
3515 return NewTInfo;
3516}
3517
3518/// Introduce the instantiated function parameters into the local
3519/// instantiation scope, and set the parameter names to those used
3520/// in the template.
3521static bool addInstantiatedParametersToScope(Sema &S, FunctionDecl *Function,
3522 const FunctionDecl *PatternDecl,
3523 LocalInstantiationScope &Scope,
3524 const MultiLevelTemplateArgumentList &TemplateArgs) {
3525 unsigned FParamIdx = 0;
3526 for (unsigned I = 0, N = PatternDecl->getNumParams(); I != N; ++I) {
3527 const ParmVarDecl *PatternParam = PatternDecl->getParamDecl(I);
3528 if (!PatternParam->isParameterPack()) {
3529 // Simple case: not a parameter pack.
3530 assert(FParamIdx < Function->getNumParams())(static_cast <bool> (FParamIdx < Function->getNumParams
()) ? void (0) : __assert_fail ("FParamIdx < Function->getNumParams()"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3530, __extension__ __PRETTY_FUNCTION__))
;
3531 ParmVarDecl *FunctionParam = Function->getParamDecl(FParamIdx);
3532 FunctionParam->setDeclName(PatternParam->getDeclName());
3533 // If the parameter's type is not dependent, update it to match the type
3534 // in the pattern. They can differ in top-level cv-qualifiers, and we want
3535 // the pattern's type here. If the type is dependent, they can't differ,
3536 // per core issue 1668. Substitute into the type from the pattern, in case
3537 // it's instantiation-dependent.
3538 // FIXME: Updating the type to work around this is at best fragile.
3539 if (!PatternDecl->getType()->isDependentType()) {
3540 QualType T = S.SubstType(PatternParam->getType(), TemplateArgs,
3541 FunctionParam->getLocation(),
3542 FunctionParam->getDeclName());
3543 if (T.isNull())
3544 return true;
3545 FunctionParam->setType(T);
3546 }
3547
3548 Scope.InstantiatedLocal(PatternParam, FunctionParam);
3549 ++FParamIdx;
3550 continue;
3551 }
3552
3553 // Expand the parameter pack.
3554 Scope.MakeInstantiatedLocalArgPack(PatternParam);
3555 Optional<unsigned> NumArgumentsInExpansion
3556 = S.getNumArgumentsInExpansion(PatternParam->getType(), TemplateArgs);
3557 assert(NumArgumentsInExpansion &&(static_cast <bool> (NumArgumentsInExpansion &&
"should only be called when all template arguments are known"
) ? void (0) : __assert_fail ("NumArgumentsInExpansion && \"should only be called when all template arguments are known\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3558, __extension__ __PRETTY_FUNCTION__))
3558 "should only be called when all template arguments are known")(static_cast <bool> (NumArgumentsInExpansion &&
"should only be called when all template arguments are known"
) ? void (0) : __assert_fail ("NumArgumentsInExpansion && \"should only be called when all template arguments are known\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3558, __extension__ __PRETTY_FUNCTION__))
;
3559 QualType PatternType =
3560 PatternParam->getType()->castAs<PackExpansionType>()->getPattern();
3561 for (unsigned Arg = 0; Arg < *NumArgumentsInExpansion; ++Arg) {
3562 ParmVarDecl *FunctionParam = Function->getParamDecl(FParamIdx);
3563 FunctionParam->setDeclName(PatternParam->getDeclName());
3564 if (!PatternDecl->getType()->isDependentType()) {
3565 Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(S, Arg);
3566 QualType T = S.SubstType(PatternType, TemplateArgs,
3567 FunctionParam->getLocation(),
3568 FunctionParam->getDeclName());
3569 if (T.isNull())
3570 return true;
3571 FunctionParam->setType(T);
3572 }
3573
3574 Scope.InstantiatedLocalPackArg(PatternParam, FunctionParam);
3575 ++FParamIdx;
3576 }
3577 }
3578
3579 return false;
3580}
3581
3582void Sema::InstantiateExceptionSpec(SourceLocation PointOfInstantiation,
3583 FunctionDecl *Decl) {
3584 const FunctionProtoType *Proto = Decl->getType()->castAs<FunctionProtoType>();
3585 if (Proto->getExceptionSpecType() != EST_Uninstantiated)
3586 return;
3587
3588 InstantiatingTemplate Inst(*this, PointOfInstantiation, Decl,
3589 InstantiatingTemplate::ExceptionSpecification());
3590 if (Inst.isInvalid()) {
3591 // We hit the instantiation depth limit. Clear the exception specification
3592 // so that our callers don't have to cope with EST_Uninstantiated.
3593 UpdateExceptionSpec(Decl, EST_None);
3594 return;
3595 }
3596 if (Inst.isAlreadyInstantiating()) {
3597 // This exception specification indirectly depends on itself. Reject.
3598 // FIXME: Corresponding rule in the standard?
3599 Diag(PointOfInstantiation, diag::err_exception_spec_cycle) << Decl;
3600 UpdateExceptionSpec(Decl, EST_None);
3601 return;
3602 }
3603
3604 // Enter the scope of this instantiation. We don't use
3605 // PushDeclContext because we don't have a scope.
3606 Sema::ContextRAII savedContext(*this, Decl);
3607 LocalInstantiationScope Scope(*this);
3608
3609 MultiLevelTemplateArgumentList TemplateArgs =
3610 getTemplateInstantiationArgs(Decl, nullptr, /*RelativeToPrimary*/true);
3611
3612 FunctionDecl *Template = Proto->getExceptionSpecTemplate();
3613 if (addInstantiatedParametersToScope(*this, Decl, Template, Scope,
3614 TemplateArgs)) {
3615 UpdateExceptionSpec(Decl, EST_None);
3616 return;
3617 }
3618
3619 SubstExceptionSpec(Decl, Template->getType()->castAs<FunctionProtoType>(),
3620 TemplateArgs);
3621}
3622
3623/// \brief Initializes the common fields of an instantiation function
3624/// declaration (New) from the corresponding fields of its template (Tmpl).
3625///
3626/// \returns true if there was an error
3627bool
3628TemplateDeclInstantiator::InitFunctionInstantiation(FunctionDecl *New,
3629 FunctionDecl *Tmpl) {
3630 if (Tmpl->isDeleted())
3631 New->setDeletedAsWritten();
3632
3633 New->setImplicit(Tmpl->isImplicit());
3634
3635 // Forward the mangling number from the template to the instantiated decl.
3636 SemaRef.Context.setManglingNumber(New,
3637 SemaRef.Context.getManglingNumber(Tmpl));
3638
3639 // If we are performing substituting explicitly-specified template arguments
3640 // or deduced template arguments into a function template and we reach this
3641 // point, we are now past the point where SFINAE applies and have committed
3642 // to keeping the new function template specialization. We therefore
3643 // convert the active template instantiation for the function template
3644 // into a template instantiation for this specific function template
3645 // specialization, which is not a SFINAE context, so that we diagnose any
3646 // further errors in the declaration itself.
3647 typedef Sema::CodeSynthesisContext ActiveInstType;
3648 ActiveInstType &ActiveInst = SemaRef.CodeSynthesisContexts.back();
3649 if (ActiveInst.Kind == ActiveInstType::ExplicitTemplateArgumentSubstitution ||
3650 ActiveInst.Kind == ActiveInstType::DeducedTemplateArgumentSubstitution) {
3651 if (FunctionTemplateDecl *FunTmpl
3652 = dyn_cast<FunctionTemplateDecl>(ActiveInst.Entity)) {
3653 assert(FunTmpl->getTemplatedDecl() == Tmpl &&(static_cast <bool> (FunTmpl->getTemplatedDecl() == Tmpl
&& "Deduction from the wrong function template?") ? void
(0) : __assert_fail ("FunTmpl->getTemplatedDecl() == Tmpl && \"Deduction from the wrong function template?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3654, __extension__ __PRETTY_FUNCTION__))
3654 "Deduction from the wrong function template?")(static_cast <bool> (FunTmpl->getTemplatedDecl() == Tmpl
&& "Deduction from the wrong function template?") ? void
(0) : __assert_fail ("FunTmpl->getTemplatedDecl() == Tmpl && \"Deduction from the wrong function template?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3654, __extension__ __PRETTY_FUNCTION__))
;
3655 (void) FunTmpl;
3656 ActiveInst.Kind = ActiveInstType::TemplateInstantiation;
3657 ActiveInst.Entity = New;
3658 }
3659 }
3660
3661 const FunctionProtoType *Proto = Tmpl->getType()->getAs<FunctionProtoType>();
3662 assert(Proto && "Function template without prototype?")(static_cast <bool> (Proto && "Function template without prototype?"
) ? void (0) : __assert_fail ("Proto && \"Function template without prototype?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3662, __extension__ __PRETTY_FUNCTION__))
;
3663
3664 if (Proto->hasExceptionSpec() || Proto->getNoReturnAttr()) {
3665 FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
3666
3667 // DR1330: In C++11, defer instantiation of a non-trivial
3668 // exception specification.
3669 // DR1484: Local classes and their members are instantiated along with the
3670 // containing function.
3671 if (SemaRef.getLangOpts().CPlusPlus11 &&
3672 EPI.ExceptionSpec.Type != EST_None &&
3673 EPI.ExceptionSpec.Type != EST_DynamicNone &&
3674 EPI.ExceptionSpec.Type != EST_BasicNoexcept &&
3675 !Tmpl->isLexicallyWithinFunctionOrMethod()) {
3676 FunctionDecl *ExceptionSpecTemplate = Tmpl;
3677 if (EPI.ExceptionSpec.Type == EST_Uninstantiated)
3678 ExceptionSpecTemplate = EPI.ExceptionSpec.SourceTemplate;
3679 ExceptionSpecificationType NewEST = EST_Uninstantiated;
3680 if (EPI.ExceptionSpec.Type == EST_Unevaluated)
3681 NewEST = EST_Unevaluated;
3682
3683 // Mark the function has having an uninstantiated exception specification.
3684 const FunctionProtoType *NewProto
3685 = New->getType()->getAs<FunctionProtoType>();
3686 assert(NewProto && "Template instantiation without function prototype?")(static_cast <bool> (NewProto && "Template instantiation without function prototype?"
) ? void (0) : __assert_fail ("NewProto && \"Template instantiation without function prototype?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3686, __extension__ __PRETTY_FUNCTION__))
;
3687 EPI = NewProto->getExtProtoInfo();
3688 EPI.ExceptionSpec.Type = NewEST;
3689 EPI.ExceptionSpec.SourceDecl = New;
3690 EPI.ExceptionSpec.SourceTemplate = ExceptionSpecTemplate;
3691 New->setType(SemaRef.Context.getFunctionType(
3692 NewProto->getReturnType(), NewProto->getParamTypes(), EPI));
3693 } else {
3694 Sema::ContextRAII SwitchContext(SemaRef, New);
3695 SemaRef.SubstExceptionSpec(New, Proto, TemplateArgs);
3696 }
3697 }
3698
3699 // Get the definition. Leaves the variable unchanged if undefined.
3700 const FunctionDecl *Definition = Tmpl;
3701 Tmpl->isDefined(Definition);
3702
3703 SemaRef.InstantiateAttrs(TemplateArgs, Definition, New,
3704 LateAttrs, StartingScope);
3705
3706 return false;
3707}
3708
3709/// \brief Initializes common fields of an instantiated method
3710/// declaration (New) from the corresponding fields of its template
3711/// (Tmpl).
3712///
3713/// \returns true if there was an error
3714bool
3715TemplateDeclInstantiator::InitMethodInstantiation(CXXMethodDecl *New,
3716 CXXMethodDecl *Tmpl) {
3717 if (InitFunctionInstantiation(New, Tmpl))
3718 return true;
3719
3720 New->setAccess(Tmpl->getAccess());
3721 if (Tmpl->isVirtualAsWritten())
3722 New->setVirtualAsWritten(true);
3723
3724 // FIXME: New needs a pointer to Tmpl
3725 return false;
3726}
3727
3728/// In the MS ABI, we need to instantiate default arguments of dllexported
3729/// default constructors along with the constructor definition. This allows IR
3730/// gen to emit a constructor closure which calls the default constructor with
3731/// its default arguments.
3732static void InstantiateDefaultCtorDefaultArgs(Sema &S,
3733 CXXConstructorDecl *Ctor) {
3734 assert(S.Context.getTargetInfo().getCXXABI().isMicrosoft() &&(static_cast <bool> (S.Context.getTargetInfo().getCXXABI
().isMicrosoft() && Ctor->isDefaultConstructor()) ?
void (0) : __assert_fail ("S.Context.getTargetInfo().getCXXABI().isMicrosoft() && Ctor->isDefaultConstructor()"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3735, __extension__ __PRETTY_FUNCTION__))
3735 Ctor->isDefaultConstructor())(static_cast <bool> (S.Context.getTargetInfo().getCXXABI
().isMicrosoft() && Ctor->isDefaultConstructor()) ?
void (0) : __assert_fail ("S.Context.getTargetInfo().getCXXABI().isMicrosoft() && Ctor->isDefaultConstructor()"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3735, __extension__ __PRETTY_FUNCTION__))
;
3736 unsigned NumParams = Ctor->getNumParams();
3737 if (NumParams == 0)
3738 return;
3739 DLLExportAttr *Attr = Ctor->getAttr<DLLExportAttr>();
3740 if (!Attr)
3741 return;
3742 for (unsigned I = 0; I != NumParams; ++I) {
3743 (void)S.CheckCXXDefaultArgExpr(Attr->getLocation(), Ctor,
3744 Ctor->getParamDecl(I));
3745 S.DiscardCleanupsInEvaluationContext();
3746 }
3747}
3748
3749/// \brief Instantiate the definition of the given function from its
3750/// template.
3751///
3752/// \param PointOfInstantiation the point at which the instantiation was
3753/// required. Note that this is not precisely a "point of instantiation"
3754/// for the function, but it's close.
3755///
3756/// \param Function the already-instantiated declaration of a
3757/// function template specialization or member function of a class template
3758/// specialization.
3759///
3760/// \param Recursive if true, recursively instantiates any functions that
3761/// are required by this instantiation.
3762///
3763/// \param DefinitionRequired if true, then we are performing an explicit
3764/// instantiation where the body of the function is required. Complain if
3765/// there is no such body.
3766void Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation,
3767 FunctionDecl *Function,
3768 bool Recursive,
3769 bool DefinitionRequired,
3770 bool AtEndOfTU) {
3771 if (Function->isInvalidDecl() || Function->isDefined() ||
3772 isa<CXXDeductionGuideDecl>(Function))
3773 return;
3774
3775 // Never instantiate an explicit specialization except if it is a class scope
3776 // explicit specialization.
3777 TemplateSpecializationKind TSK = Function->getTemplateSpecializationKind();
3778 if (TSK == TSK_ExplicitSpecialization &&
3779 !Function->getClassScopeSpecializationPattern())
3780 return;
3781
3782 // Find the function body that we'll be substituting.
3783 const FunctionDecl *PatternDecl = Function->getTemplateInstantiationPattern();
3784 assert(PatternDecl && "instantiating a non-template")(static_cast <bool> (PatternDecl && "instantiating a non-template"
) ? void (0) : __assert_fail ("PatternDecl && \"instantiating a non-template\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3784, __extension__ __PRETTY_FUNCTION__))
;
3785
3786 const FunctionDecl *PatternDef = PatternDecl->getDefinition();
3787 Stmt *Pattern = nullptr;
3788 if (PatternDef) {
3789 Pattern = PatternDef->getBody(PatternDef);
3790 PatternDecl = PatternDef;
3791 if (PatternDef->willHaveBody())
3792 PatternDef = nullptr;
3793 }
3794
3795 // FIXME: We need to track the instantiation stack in order to know which
3796 // definitions should be visible within this instantiation.
3797 if (DiagnoseUninstantiableTemplate(PointOfInstantiation, Function,
3798 Function->getInstantiatedFromMemberFunction(),
3799 PatternDecl, PatternDef, TSK,
3800 /*Complain*/DefinitionRequired)) {
3801 if (DefinitionRequired)
3802 Function->setInvalidDecl();
3803 else if (TSK == TSK_ExplicitInstantiationDefinition) {
3804 // Try again at the end of the translation unit (at which point a
3805 // definition will be required).
3806 assert(!Recursive)(static_cast <bool> (!Recursive) ? void (0) : __assert_fail
("!Recursive", "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3806, __extension__ __PRETTY_FUNCTION__))
;
3807 Function->setInstantiationIsPending(true);
3808 PendingInstantiations.push_back(
3809 std::make_pair(Function, PointOfInstantiation));
3810 } else if (TSK == TSK_ImplicitInstantiation) {
3811 if (AtEndOfTU && !getDiagnostics().hasErrorOccurred()) {
3812 Diag(PointOfInstantiation, diag::warn_func_template_missing)
3813 << Function;
3814 Diag(PatternDecl->getLocation(), diag::note_forward_template_decl);
3815 if (getLangOpts().CPlusPlus11)
3816 Diag(PointOfInstantiation, diag::note_inst_declaration_hint)
3817 << Function;
3818 }
3819 }
3820
3821 return;
3822 }
3823
3824 // Postpone late parsed template instantiations.
3825 if (PatternDecl->isLateTemplateParsed() &&
3826 !LateTemplateParser) {
3827 Function->setInstantiationIsPending(true);
3828 PendingInstantiations.push_back(
3829 std::make_pair(Function, PointOfInstantiation));
3830 return;
3831 }
3832
3833 // If we're performing recursive template instantiation, create our own
3834 // queue of pending implicit instantiations that we will instantiate later,
3835 // while we're still within our own instantiation context.
3836 // This has to happen before LateTemplateParser below is called, so that
3837 // it marks vtables used in late parsed templates as used.
3838 GlobalEagerInstantiationScope GlobalInstantiations(*this,
3839 /*Enabled=*/Recursive);
3840 LocalEagerInstantiationScope LocalInstantiations(*this);
3841
3842 // Call the LateTemplateParser callback if there is a need to late parse
3843 // a templated function definition.
3844 if (!Pattern && PatternDecl->isLateTemplateParsed() &&
3845 LateTemplateParser) {
3846 // FIXME: Optimize to allow individual templates to be deserialized.
3847 if (PatternDecl->isFromASTFile())
3848 ExternalSource->ReadLateParsedTemplates(LateParsedTemplateMap);
3849
3850 auto LPTIter = LateParsedTemplateMap.find(PatternDecl);
3851 assert(LPTIter != LateParsedTemplateMap.end() &&(static_cast <bool> (LPTIter != LateParsedTemplateMap.end
() && "missing LateParsedTemplate") ? void (0) : __assert_fail
("LPTIter != LateParsedTemplateMap.end() && \"missing LateParsedTemplate\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3852, __extension__ __PRETTY_FUNCTION__))
3852 "missing LateParsedTemplate")(static_cast <bool> (LPTIter != LateParsedTemplateMap.end
() && "missing LateParsedTemplate") ? void (0) : __assert_fail
("LPTIter != LateParsedTemplateMap.end() && \"missing LateParsedTemplate\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3852, __extension__ __PRETTY_FUNCTION__))
;
3853 LateTemplateParser(OpaqueParser, *LPTIter->second);
3854 Pattern = PatternDecl->getBody(PatternDecl);
3855 }
3856
3857 // Note, we should never try to instantiate a deleted function template.
3858 assert((Pattern || PatternDecl->isDefaulted()) &&(static_cast <bool> ((Pattern || PatternDecl->isDefaulted
()) && "unexpected kind of function template definition"
) ? void (0) : __assert_fail ("(Pattern || PatternDecl->isDefaulted()) && \"unexpected kind of function template definition\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3859, __extension__ __PRETTY_FUNCTION__))
3859 "unexpected kind of function template definition")(static_cast <bool> ((Pattern || PatternDecl->isDefaulted
()) && "unexpected kind of function template definition"
) ? void (0) : __assert_fail ("(Pattern || PatternDecl->isDefaulted()) && \"unexpected kind of function template definition\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 3859, __extension__ __PRETTY_FUNCTION__))
;
3860
3861 // C++1y [temp.explicit]p10:
3862 // Except for inline functions, declarations with types deduced from their
3863 // initializer or return value, and class template specializations, other
3864 // explicit instantiation declarations have the effect of suppressing the
3865 // implicit instantiation of the entity to which they refer.
3866 if (TSK == TSK_ExplicitInstantiationDeclaration &&
3867 !PatternDecl->isInlined() &&
3868 !PatternDecl->getReturnType()->getContainedAutoType())
3869 return;
3870
3871 if (PatternDecl->isInlined()) {
3872 // Function, and all later redeclarations of it (from imported modules,
3873 // for instance), are now implicitly inline.
3874 for (auto *D = Function->getMostRecentDecl(); /**/;
3875 D = D->getPreviousDecl()) {
3876 D->setImplicitlyInline();
3877 if (D == Function)
3878 break;
3879 }
3880 }
3881
3882 InstantiatingTemplate Inst(*this, PointOfInstantiation, Function);
3883 if (Inst.isInvalid() || Inst.isAlreadyInstantiating())
3884 return;
3885 PrettyDeclStackTraceEntry CrashInfo(*this, Function, SourceLocation(),
3886 "instantiating function definition");
3887
3888 // The instantiation is visible here, even if it was first declared in an
3889 // unimported module.
3890 Function->setVisibleDespiteOwningModule();
3891
3892 // Copy the inner loc start from the pattern.
3893 Function->setInnerLocStart(PatternDecl->getInnerLocStart());
3894
3895 EnterExpressionEvaluationContext EvalContext(
3896 *this, Sema::ExpressionEvaluationContext::PotentiallyEvaluated);
3897
3898 // Introduce a new scope where local variable instantiations will be
3899 // recorded, unless we're actually a member function within a local
3900 // class, in which case we need to merge our results with the parent
3901 // scope (of the enclosing function).
3902 bool MergeWithParentScope = false;
3903 if (CXXRecordDecl *Rec = dyn_cast<CXXRecordDecl>(Function->getDeclContext()))
3904 MergeWithParentScope = Rec->isLocalClass();
3905
3906 LocalInstantiationScope Scope(*this, MergeWithParentScope);
3907
3908 if (PatternDecl->isDefaulted())
3909 SetDeclDefaulted(Function, PatternDecl->getLocation());
3910 else {
3911 MultiLevelTemplateArgumentList TemplateArgs =
3912 getTemplateInstantiationArgs(Function, nullptr, false, PatternDecl);
3913
3914 // Substitute into the qualifier; we can get a substitution failure here
3915 // through evil use of alias templates.
3916 // FIXME: Is CurContext correct for this? Should we go to the (instantiation
3917 // of the) lexical context of the pattern?
3918 SubstQualifier(*this, PatternDecl, Function, TemplateArgs);
3919
3920 ActOnStartOfFunctionDef(nullptr, Function);
3921
3922 // Enter the scope of this instantiation. We don't use
3923 // PushDeclContext because we don't have a scope.
3924 Sema::ContextRAII savedContext(*this, Function);
3925
3926 if (addInstantiatedParametersToScope(*this, Function, PatternDecl, Scope,
3927 TemplateArgs))
3928 return;
3929
3930 if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Function)) {
3931 // If this is a constructor, instantiate the member initializers.
3932 InstantiateMemInitializers(Ctor, cast<CXXConstructorDecl>(PatternDecl),
3933 TemplateArgs);
3934
3935 // If this is an MS ABI dllexport default constructor, instantiate any
3936 // default arguments.
3937 if (Context.getTargetInfo().getCXXABI().isMicrosoft() &&
3938 Ctor->isDefaultConstructor()) {
3939 InstantiateDefaultCtorDefaultArgs(*this, Ctor);
3940 }
3941 }
3942
3943 // Instantiate the function body.
3944 StmtResult Body = SubstStmt(Pattern, TemplateArgs);
3945
3946 if (Body.isInvalid())
3947 Function->setInvalidDecl();
3948
3949 // FIXME: finishing the function body while in an expression evaluation
3950 // context seems wrong. Investigate more.
3951 ActOnFinishFunctionBody(Function, Body.get(),
3952 /*IsInstantiation=*/true);
3953
3954 PerformDependentDiagnostics(PatternDecl, TemplateArgs);
3955
3956 if (auto *Listener = getASTMutationListener())
3957 Listener->FunctionDefinitionInstantiated(Function);
3958
3959 savedContext.pop();
3960 }
3961
3962 DeclGroupRef DG(Function);
3963 Consumer.HandleTopLevelDecl(DG);
3964
3965 // This class may have local implicit instantiations that need to be
3966 // instantiation within this scope.
3967 LocalInstantiations.perform();
3968 Scope.Exit();
3969 GlobalInstantiations.perform();
3970}
3971
3972VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
3973 VarTemplateDecl *VarTemplate, VarDecl *FromVar,
3974 const TemplateArgumentList &TemplateArgList,
3975 const TemplateArgumentListInfo &TemplateArgsInfo,
3976 SmallVectorImpl<TemplateArgument> &Converted,
3977 SourceLocation PointOfInstantiation, void *InsertPos,
3978 LateInstantiatedAttrVec *LateAttrs,
3979 LocalInstantiationScope *StartingScope) {
3980 if (FromVar->isInvalidDecl())
3981 return nullptr;
3982
3983 InstantiatingTemplate Inst(*this, PointOfInstantiation, FromVar);
3984 if (Inst.isInvalid())
3985 return nullptr;
3986
3987 MultiLevelTemplateArgumentList TemplateArgLists;
3988 TemplateArgLists.addOuterTemplateArguments(&TemplateArgList);
3989
3990 // Instantiate the first declaration of the variable template: for a partial
3991 // specialization of a static data member template, the first declaration may
3992 // or may not be the declaration in the class; if it's in the class, we want
3993 // to instantiate a member in the class (a declaration), and if it's outside,
3994 // we want to instantiate a definition.
3995 //
3996 // If we're instantiating an explicitly-specialized member template or member
3997 // partial specialization, don't do this. The member specialization completely
3998 // replaces the original declaration in this case.
3999 bool IsMemberSpec = false;
4000 if (VarTemplatePartialSpecializationDecl *PartialSpec =
4001 dyn_cast<VarTemplatePartialSpecializationDecl>(FromVar))
4002 IsMemberSpec = PartialSpec->isMemberSpecialization();
4003 else if (VarTemplateDecl *FromTemplate = FromVar->getDescribedVarTemplate())
4004 IsMemberSpec = FromTemplate->isMemberSpecialization();
4005 if (!IsMemberSpec)
4006 FromVar = FromVar->getFirstDecl();
4007
4008 MultiLevelTemplateArgumentList MultiLevelList(TemplateArgList);
4009 TemplateDeclInstantiator Instantiator(*this, FromVar->getDeclContext(),
4010 MultiLevelList);
4011
4012 // TODO: Set LateAttrs and StartingScope ...
4013
4014 return cast_or_null<VarTemplateSpecializationDecl>(
4015 Instantiator.VisitVarTemplateSpecializationDecl(
4016 VarTemplate, FromVar, InsertPos, TemplateArgsInfo, Converted));
4017}
4018
4019/// \brief Instantiates a variable template specialization by completing it
4020/// with appropriate type information and initializer.
4021VarTemplateSpecializationDecl *Sema::CompleteVarTemplateSpecializationDecl(
4022 VarTemplateSpecializationDecl *VarSpec, VarDecl *PatternDecl,
4023 const MultiLevelTemplateArgumentList &TemplateArgs) {
4024
4025 // Do substitution on the type of the declaration
4026 TypeSourceInfo *DI =
4027 SubstType(PatternDecl->getTypeSourceInfo(), TemplateArgs,
4028 PatternDecl->getTypeSpecStartLoc(), PatternDecl->getDeclName());
4029 if (!DI)
4030 return nullptr;
4031
4032 // Update the type of this variable template specialization.
4033 VarSpec->setType(DI->getType());
4034
4035 // Instantiate the initializer.
4036 InstantiateVariableInitializer(VarSpec, PatternDecl, TemplateArgs);
4037
4038 return VarSpec;
4039}
4040
4041/// BuildVariableInstantiation - Used after a new variable has been created.
4042/// Sets basic variable data and decides whether to postpone the
4043/// variable instantiation.
4044void Sema::BuildVariableInstantiation(
4045 VarDecl *NewVar, VarDecl *OldVar,
4046 const MultiLevelTemplateArgumentList &TemplateArgs,
4047 LateInstantiatedAttrVec *LateAttrs, DeclContext *Owner,
4048 LocalInstantiationScope *StartingScope,
4049 bool InstantiatingVarTemplate) {
4050
4051 // If we are instantiating a local extern declaration, the
4052 // instantiation belongs lexically to the containing function.
4053 // If we are instantiating a static data member defined
4054 // out-of-line, the instantiation will have the same lexical
4055 // context (which will be a namespace scope) as the template.
4056 if (OldVar->isLocalExternDecl()) {
4057 NewVar->setLocalExternDecl();
4058 NewVar->setLexicalDeclContext(Owner);
4059 } else if (OldVar->isOutOfLine())
4060 NewVar->setLexicalDeclContext(OldVar->getLexicalDeclContext());
4061 NewVar->setTSCSpec(OldVar->getTSCSpec());
4062 NewVar->setInitStyle(OldVar->getInitStyle());
4063 NewVar->setCXXForRangeDecl(OldVar->isCXXForRangeDecl());
4064 NewVar->setConstexpr(OldVar->isConstexpr());
4065 NewVar->setInitCapture(OldVar->isInitCapture());
4066 NewVar->setPreviousDeclInSameBlockScope(
4067 OldVar->isPreviousDeclInSameBlockScope());
4068 NewVar->setAccess(OldVar->getAccess());
4069
4070 if (!OldVar->isStaticDataMember()) {
4071 if (OldVar->isUsed(false))
4072 NewVar->setIsUsed();
4073 NewVar->setReferenced(OldVar->isReferenced());
4074 }
4075
4076 InstantiateAttrs(TemplateArgs, OldVar, NewVar, LateAttrs, StartingScope);
4077
4078 LookupResult Previous(
4079 *this, NewVar->getDeclName(), NewVar->getLocation(),
4080 NewVar->isLocalExternDecl() ? Sema::LookupRedeclarationWithLinkage
4081 : Sema::LookupOrdinaryName,
4082 NewVar->isLocalExternDecl() ? Sema::ForExternalRedeclaration
4083 : forRedeclarationInCurContext());
4084
4085 if (NewVar->isLocalExternDecl() && OldVar->getPreviousDecl() &&
4086 (!OldVar->getPreviousDecl()->getDeclContext()->isDependentContext() ||
4087 OldVar->getPreviousDecl()->getDeclContext()==OldVar->getDeclContext())) {
4088 // We have a previous declaration. Use that one, so we merge with the
4089 // right type.
4090 if (NamedDecl *NewPrev = FindInstantiatedDecl(
4091 NewVar->getLocation(), OldVar->getPreviousDecl(), TemplateArgs))
4092 Previous.addDecl(NewPrev);
4093 } else if (!isa<VarTemplateSpecializationDecl>(NewVar) &&
4094 OldVar->hasLinkage())
4095 LookupQualifiedName(Previous, NewVar->getDeclContext(), false);
4096 CheckVariableDeclaration(NewVar, Previous);
4097
4098 if (!InstantiatingVarTemplate) {
4099 NewVar->getLexicalDeclContext()->addHiddenDecl(NewVar);
4100 if (!NewVar->isLocalExternDecl() || !NewVar->getPreviousDecl())
4101 NewVar->getDeclContext()->makeDeclVisibleInContext(NewVar);
4102 }
4103
4104 if (!OldVar->isOutOfLine()) {
4105 if (NewVar->getDeclContext()->isFunctionOrMethod())
4106 CurrentInstantiationScope->InstantiatedLocal(OldVar, NewVar);
4107 }
4108
4109 // Link instantiations of static data members back to the template from
4110 // which they were instantiated.
4111 if (NewVar->isStaticDataMember() && !InstantiatingVarTemplate)
4112 NewVar->setInstantiationOfStaticDataMember(OldVar,
4113 TSK_ImplicitInstantiation);
4114
4115 // Forward the mangling number from the template to the instantiated decl.
4116 Context.setManglingNumber(NewVar, Context.getManglingNumber(OldVar));
4117 Context.setStaticLocalNumber(NewVar, Context.getStaticLocalNumber(OldVar));
4118
4119 // Delay instantiation of the initializer for variable templates or inline
4120 // static data members until a definition of the variable is needed. We need
4121 // it right away if the type contains 'auto'.
4122 if ((!isa<VarTemplateSpecializationDecl>(NewVar) &&
4123 !InstantiatingVarTemplate &&
4124 !(OldVar->isInline() && OldVar->isThisDeclarationADefinition())) ||
4125 NewVar->getType()->isUndeducedType())
4126 InstantiateVariableInitializer(NewVar, OldVar, TemplateArgs);
4127
4128 // Diagnose unused local variables with dependent types, where the diagnostic
4129 // will have been deferred.
4130 if (!NewVar->isInvalidDecl() &&
4131 NewVar->getDeclContext()->isFunctionOrMethod() &&
4132 OldVar->getType()->isDependentType())
4133 DiagnoseUnusedDecl(NewVar);
4134}
4135
4136/// \brief Instantiate the initializer of a variable.
4137void Sema::InstantiateVariableInitializer(
4138 VarDecl *Var, VarDecl *OldVar,
4139 const MultiLevelTemplateArgumentList &TemplateArgs) {
4140 // We propagate the 'inline' flag with the initializer, because it
4141 // would otherwise imply that the variable is a definition for a
4142 // non-static data member.
4143 if (OldVar->isInlineSpecified())
4144 Var->setInlineSpecified();
4145 else if (OldVar->isInline())
4146 Var->setImplicitlyInline();
4147
4148 if (OldVar->getInit()) {
4149 EnterExpressionEvaluationContext Evaluated(
4150 *this, Sema::ExpressionEvaluationContext::PotentiallyEvaluated, Var);
4151
4152 // Instantiate the initializer.
4153 ExprResult Init;
4154
4155 {
4156 ContextRAII SwitchContext(*this, Var->getDeclContext());
4157 Init = SubstInitializer(OldVar->getInit(), TemplateArgs,
4158 OldVar->getInitStyle() == VarDecl::CallInit);
4159 }
4160
4161 if (!Init.isInvalid()) {
4162 Expr *InitExpr = Init.get();
4163
4164 if (Var->hasAttr<DLLImportAttr>() &&
4165 (!InitExpr ||
4166 !InitExpr->isConstantInitializer(getASTContext(), false))) {
4167 // Do not dynamically initialize dllimport variables.
4168 } else if (InitExpr) {
4169 bool DirectInit = OldVar->isDirectInit();
4170 AddInitializerToDecl(Var, InitExpr, DirectInit);
4171 } else
4172 ActOnUninitializedDecl(Var);
4173 } else {
4174 // FIXME: Not too happy about invalidating the declaration
4175 // because of a bogus initializer.
4176 Var->setInvalidDecl();
4177 }
4178 } else {
4179 if (Var->isStaticDataMember()) {
4180 if (!Var->isOutOfLine())
4181 return;
4182
4183 // If the declaration inside the class had an initializer, don't add
4184 // another one to the out-of-line definition.
4185 if (OldVar->getFirstDecl()->hasInit())
4186 return;
4187 }
4188
4189 // We'll add an initializer to a for-range declaration later.
4190 if (Var->isCXXForRangeDecl())
4191 return;
4192
4193 ActOnUninitializedDecl(Var);
4194 }
4195}
4196
4197/// \brief Instantiate the definition of the given variable from its
4198/// template.
4199///
4200/// \param PointOfInstantiation the point at which the instantiation was
4201/// required. Note that this is not precisely a "point of instantiation"
4202/// for the function, but it's close.
4203///
4204/// \param Var the already-instantiated declaration of a static member
4205/// variable of a class template specialization.
4206///
4207/// \param Recursive if true, recursively instantiates any functions that
4208/// are required by this instantiation.
4209///
4210/// \param DefinitionRequired if true, then we are performing an explicit
4211/// instantiation where an out-of-line definition of the member variable
4212/// is required. Complain if there is no such definition.
4213void Sema::InstantiateStaticDataMemberDefinition(
4214 SourceLocation PointOfInstantiation,
4215 VarDecl *Var,
4216 bool Recursive,
4217 bool DefinitionRequired) {
4218 InstantiateVariableDefinition(PointOfInstantiation, Var, Recursive,
1
Calling 'Sema::InstantiateVariableDefinition'
4219 DefinitionRequired);
4220}
4221
4222void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
4223 VarDecl *Var, bool Recursive,
4224 bool DefinitionRequired, bool AtEndOfTU) {
4225 if (Var->isInvalidDecl())
2
Assuming the condition is false
3
Taking false branch
34
Assuming the condition is false
35
Taking false branch
66
Assuming the condition is false
67
Taking false branch
98
Assuming the condition is false
99
Taking false branch
130
Assuming the condition is false
131
Taking false branch
4226 return;
4227
4228 VarTemplateSpecializationDecl *VarSpec =
4229 dyn_cast<VarTemplateSpecializationDecl>(Var);
4230 VarDecl *PatternDecl = nullptr, *Def = nullptr;
4231 MultiLevelTemplateArgumentList TemplateArgs =
4232 getTemplateInstantiationArgs(Var);
4233
4234 if (VarSpec) {
4
Taking false branch
36
Taking false branch
68
Taking false branch
100
Taking false branch
132
Taking false branch
4235 // If this is a variable template specialization, make sure that it is
4236 // non-dependent, then find its instantiation pattern.
4237 bool InstantiationDependent = false;
4238 assert(!TemplateSpecializationType::anyDependentTemplateArguments((static_cast <bool> (!TemplateSpecializationType::anyDependentTemplateArguments
( VarSpec->getTemplateArgsInfo(), InstantiationDependent) &&
"Only instantiate variable template specializations that are "
"not type-dependent") ? void (0) : __assert_fail ("!TemplateSpecializationType::anyDependentTemplateArguments( VarSpec->getTemplateArgsInfo(), InstantiationDependent) && \"Only instantiate variable template specializations that are \" \"not type-dependent\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4241, __extension__ __PRETTY_FUNCTION__))
4239 VarSpec->getTemplateArgsInfo(), InstantiationDependent) &&(static_cast <bool> (!TemplateSpecializationType::anyDependentTemplateArguments
( VarSpec->getTemplateArgsInfo(), InstantiationDependent) &&
"Only instantiate variable template specializations that are "
"not type-dependent") ? void (0) : __assert_fail ("!TemplateSpecializationType::anyDependentTemplateArguments( VarSpec->getTemplateArgsInfo(), InstantiationDependent) && \"Only instantiate variable template specializations that are \" \"not type-dependent\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4241, __extension__ __PRETTY_FUNCTION__))
4240 "Only instantiate variable template specializations that are "(static_cast <bool> (!TemplateSpecializationType::anyDependentTemplateArguments
( VarSpec->getTemplateArgsInfo(), InstantiationDependent) &&
"Only instantiate variable template specializations that are "
"not type-dependent") ? void (0) : __assert_fail ("!TemplateSpecializationType::anyDependentTemplateArguments( VarSpec->getTemplateArgsInfo(), InstantiationDependent) && \"Only instantiate variable template specializations that are \" \"not type-dependent\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4241, __extension__ __PRETTY_FUNCTION__))
4241 "not type-dependent")(static_cast <bool> (!TemplateSpecializationType::anyDependentTemplateArguments
( VarSpec->getTemplateArgsInfo(), InstantiationDependent) &&
"Only instantiate variable template specializations that are "
"not type-dependent") ? void (0) : __assert_fail ("!TemplateSpecializationType::anyDependentTemplateArguments( VarSpec->getTemplateArgsInfo(), InstantiationDependent) && \"Only instantiate variable template specializations that are \" \"not type-dependent\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4241, __extension__ __PRETTY_FUNCTION__))
;
4242 (void)InstantiationDependent;
4243
4244 // Find the variable initialization that we'll be substituting. If the
4245 // pattern was instantiated from a member template, look back further to
4246 // find the real pattern.
4247 assert(VarSpec->getSpecializedTemplate() &&(static_cast <bool> (VarSpec->getSpecializedTemplate
() && "Specialization without specialized template?")
? void (0) : __assert_fail ("VarSpec->getSpecializedTemplate() && \"Specialization without specialized template?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4248, __extension__ __PRETTY_FUNCTION__))
4248 "Specialization without specialized template?")(static_cast <bool> (VarSpec->getSpecializedTemplate
() && "Specialization without specialized template?")
? void (0) : __assert_fail ("VarSpec->getSpecializedTemplate() && \"Specialization without specialized template?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4248, __extension__ __PRETTY_FUNCTION__))
;
4249 llvm::PointerUnion<VarTemplateDecl *,
4250 VarTemplatePartialSpecializationDecl *> PatternPtr =
4251 VarSpec->getSpecializedTemplateOrPartial();
4252 if (PatternPtr.is<VarTemplatePartialSpecializationDecl *>()) {
4253 VarTemplatePartialSpecializationDecl *Tmpl =
4254 PatternPtr.get<VarTemplatePartialSpecializationDecl *>();
4255 while (VarTemplatePartialSpecializationDecl *From =
4256 Tmpl->getInstantiatedFromMember()) {
4257 if (Tmpl->isMemberSpecialization())
4258 break;
4259
4260 Tmpl = From;
4261 }
4262 PatternDecl = Tmpl;
4263 } else {
4264 VarTemplateDecl *Tmpl = PatternPtr.get<VarTemplateDecl *>();
4265 while (VarTemplateDecl *From =
4266 Tmpl->getInstantiatedFromMemberTemplate()) {
4267 if (Tmpl->isMemberSpecialization())
4268 break;
4269
4270 Tmpl = From;
4271 }
4272 PatternDecl = Tmpl->getTemplatedDecl();
4273 }
4274
4275 // If this is a static data member template, there might be an
4276 // uninstantiated initializer on the declaration. If so, instantiate
4277 // it now.
4278 if (PatternDecl->isStaticDataMember() &&
4279 (PatternDecl = PatternDecl->getFirstDecl())->hasInit() &&
4280 !Var->hasInit()) {
4281 // FIXME: Factor out the duplicated instantiation context setup/tear down
4282 // code here.
4283 InstantiatingTemplate Inst(*this, PointOfInstantiation, Var);
4284 if (Inst.isInvalid() || Inst.isAlreadyInstantiating())
4285 return;
4286 PrettyDeclStackTraceEntry CrashInfo(*this, Var, SourceLocation(),
4287 "instantiating variable initializer");
4288
4289 // The instantiation is visible here, even if it was first declared in an
4290 // unimported module.
4291 Var->setVisibleDespiteOwningModule();
4292
4293 // If we're performing recursive template instantiation, create our own
4294 // queue of pending implicit instantiations that we will instantiate
4295 // later, while we're still within our own instantiation context.
4296 GlobalEagerInstantiationScope GlobalInstantiations(*this,
4297 /*Enabled=*/Recursive);
4298 LocalInstantiationScope Local(*this);
4299 LocalEagerInstantiationScope LocalInstantiations(*this);
4300
4301 // Enter the scope of this instantiation. We don't use
4302 // PushDeclContext because we don't have a scope.
4303 ContextRAII PreviousContext(*this, Var->getDeclContext());
4304 InstantiateVariableInitializer(Var, PatternDecl, TemplateArgs);
4305 PreviousContext.pop();
4306
4307 // This variable may have local implicit instantiations that need to be
4308 // instantiated within this scope.
4309 LocalInstantiations.perform();
4310 Local.Exit();
4311 GlobalInstantiations.perform();
4312 }
4313
4314 // Find actual definition
4315 Def = PatternDecl->getDefinition(getASTContext());
4316 } else {
4317 // If this is a static data member, find its out-of-line definition.
4318 assert(Var->isStaticDataMember() && "not a static data member?")(static_cast <bool> (Var->isStaticDataMember() &&
"not a static data member?") ? void (0) : __assert_fail ("Var->isStaticDataMember() && \"not a static data member?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4318, __extension__ __PRETTY_FUNCTION__))
;
4319 PatternDecl = Var->getInstantiatedFromStaticDataMember();
4320
4321 assert(PatternDecl && "data member was not instantiated from a template?")(static_cast <bool> (PatternDecl && "data member was not instantiated from a template?"
) ? void (0) : __assert_fail ("PatternDecl && \"data member was not instantiated from a template?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4321, __extension__ __PRETTY_FUNCTION__))
;
4322 assert(PatternDecl->isStaticDataMember() && "not a static data member?")(static_cast <bool> (PatternDecl->isStaticDataMember
() && "not a static data member?") ? void (0) : __assert_fail
("PatternDecl->isStaticDataMember() && \"not a static data member?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4322, __extension__ __PRETTY_FUNCTION__))
;
4323 Def = PatternDecl->getDefinition();
37
Calling 'VarDecl::getDefinition'
38
Returning from 'VarDecl::getDefinition'
69
Calling 'VarDecl::getDefinition'
70
Returning from 'VarDecl::getDefinition'
101
Calling 'VarDecl::getDefinition'
102
Returning from 'VarDecl::getDefinition'
133
Calling 'VarDecl::getDefinition'
134
Returning from 'VarDecl::getDefinition'
135
Value assigned to 'Def'
4324 }
4325
4326 TemplateSpecializationKind TSK = Var->getTemplateSpecializationKind();
4327
4328 // If we don't have a definition of the variable template, we won't perform
4329 // any instantiation. Rather, we rely on the user to instantiate this
4330 // definition (or provide a specialization for it) in another translation
4331 // unit.
4332 if (!Def && !DefinitionRequired) {
5
Assuming 'Def' is non-null
39
Assuming 'Def' is non-null
71
Assuming 'Def' is non-null
103
Assuming 'Def' is non-null
136
Assuming 'Def' is null
137
Assuming pointer value is null
138
Taking true branch
4333 if (TSK == TSK_ExplicitInstantiationDefinition) {
139
Assuming 'TSK' is not equal to TSK_ExplicitInstantiationDefinition
140
Taking false branch
4334 PendingInstantiations.push_back(
4335 std::make_pair(Var, PointOfInstantiation));
4336 } else if (TSK == TSK_ImplicitInstantiation) {
141
Assuming 'TSK' is not equal to TSK_ImplicitInstantiation
142
Taking false branch
4337 // Warn about missing definition at the end of translation unit.
4338 if (AtEndOfTU && !getDiagnostics().hasErrorOccurred()) {
4339 Diag(PointOfInstantiation, diag::warn_var_template_missing)
4340 << Var;
4341 Diag(PatternDecl->getLocation(), diag::note_forward_template_decl);
4342 if (getLangOpts().CPlusPlus11)
4343 Diag(PointOfInstantiation, diag::note_inst_declaration_hint) << Var;
4344 }
4345 return;
4346 }
4347
4348 }
4349
4350 // FIXME: We need to track the instantiation stack in order to know which
4351 // definitions should be visible within this instantiation.
4352 // FIXME: Produce diagnostics when Var->getInstantiatedFromStaticDataMember().
4353 if (DiagnoseUninstantiableTemplate(PointOfInstantiation, Var,
6
Assuming the condition is false
7
Taking false branch
40
Assuming the condition is false
41
Taking false branch
72
Assuming the condition is false
73
Taking false branch
104
Assuming the condition is false
105
Taking false branch
143
Assuming the condition is false
144
Taking false branch
4354 /*InstantiatedFromMember*/false,
4355 PatternDecl, Def, TSK,
4356 /*Complain*/DefinitionRequired))
4357 return;
4358
4359
4360 // Never instantiate an explicit specialization.
4361 if (TSK == TSK_ExplicitSpecialization)
8
Assuming 'TSK' is not equal to TSK_ExplicitSpecialization
9
Taking false branch
42
Assuming 'TSK' is not equal to TSK_ExplicitSpecialization
43
Taking false branch
74
Assuming 'TSK' is not equal to TSK_ExplicitSpecialization
75
Taking false branch
106
Assuming 'TSK' is not equal to TSK_ExplicitSpecialization
107
Taking false branch
145
Assuming 'TSK' is not equal to TSK_ExplicitSpecialization
146
Taking false branch
4362 return;
4363
4364 // C++11 [temp.explicit]p10:
4365 // Except for inline functions, const variables of literal types, variables
4366 // of reference types, [...] explicit instantiation declarations
4367 // have the effect of suppressing the implicit instantiation of the entity
4368 // to which they refer.
4369 if (TSK == TSK_ExplicitInstantiationDeclaration &&
10
Assuming 'TSK' is not equal to TSK_ExplicitInstantiationDeclaration
44
Assuming 'TSK' is not equal to TSK_ExplicitInstantiationDeclaration
76
Assuming 'TSK' is not equal to TSK_ExplicitInstantiationDeclaration
108
Assuming 'TSK' is not equal to TSK_ExplicitInstantiationDeclaration
147
Assuming 'TSK' is not equal to TSK_ExplicitInstantiationDeclaration
4370 !Var->isUsableInConstantExpressions(getASTContext()))
4371 return;
4372
4373 // Make sure to pass the instantiated variable to the consumer at the end.
4374 struct PassToConsumerRAII {
4375 ASTConsumer &Consumer;
4376 VarDecl *Var;
4377
4378 PassToConsumerRAII(ASTConsumer &Consumer, VarDecl *Var)
4379 : Consumer(Consumer), Var(Var) { }
4380
4381 ~PassToConsumerRAII() {
4382 Consumer.HandleCXXStaticMemberVarInstantiation(Var);
4383 }
4384 } PassToConsumerRAII(Consumer, Var);
4385
4386 // If we already have a definition, we're done.
4387 if (VarDecl *Def = Var->getDefinition()) {
11
Assuming 'Def' is null
12
Taking false branch
45
Assuming 'Def' is null
46
Taking false branch
77
Assuming 'Def' is null
78
Taking false branch
109
Assuming 'Def' is null
110
Taking false branch
148
Assuming 'Def' is null
149
Taking false branch
4388 // We may be explicitly instantiating something we've already implicitly
4389 // instantiated.
4390 Def->setTemplateSpecializationKind(Var->getTemplateSpecializationKind(),
4391 PointOfInstantiation);
4392 return;
4393 }
4394
4395 InstantiatingTemplate Inst(*this, PointOfInstantiation, Var);
4396 if (Inst.isInvalid() || Inst.isAlreadyInstantiating())
13
Assuming the condition is false
14
Assuming the condition is false
15
Taking false branch
47
Assuming the condition is false
48
Assuming the condition is false
49
Taking false branch
79
Assuming the condition is false
80
Assuming the condition is false
81
Taking false branch
111
Assuming the condition is false
112
Assuming the condition is false
113
Taking false branch
150
Assuming the condition is false
151
Assuming the condition is false
152
Taking false branch
4397 return;
4398 PrettyDeclStackTraceEntry CrashInfo(*this, Var, SourceLocation(),
4399 "instantiating variable definition");
4400
4401 // If we're performing recursive template instantiation, create our own
4402 // queue of pending implicit instantiations that we will instantiate later,
4403 // while we're still within our own instantiation context.
4404 GlobalEagerInstantiationScope GlobalInstantiations(*this,
4405 /*Enabled=*/Recursive);
4406
4407 // Enter the scope of this instantiation. We don't use
4408 // PushDeclContext because we don't have a scope.
4409 ContextRAII PreviousContext(*this, Var->getDeclContext());
4410 LocalInstantiationScope Local(*this);
4411
4412 LocalEagerInstantiationScope LocalInstantiations(*this);
4413
4414 VarDecl *OldVar = Var;
4415 if (Def->isStaticDataMember() && !Def->isOutOfLine()) {
153
Called C++ object pointer is null
4416 // We're instantiating an inline static data member whose definition was
4417 // provided inside the class.
4418 InstantiateVariableInitializer(Var, Def, TemplateArgs);
4419 } else if (!VarSpec) {
16
Taking true branch
50
Taking true branch
82
Taking true branch
114
Taking true branch
4420 Var = cast_or_null<VarDecl>(SubstDecl(Def, Var->getDeclContext(),
4421 TemplateArgs));
4422 } else if (Var->isStaticDataMember() &&
4423 Var->getLexicalDeclContext()->isRecord()) {
4424 // We need to instantiate the definition of a static data member template,
4425 // and all we have is the in-class declaration of it. Instantiate a separate
4426 // declaration of the definition.
4427 TemplateDeclInstantiator Instantiator(*this, Var->getDeclContext(),
4428 TemplateArgs);
4429 Var = cast_or_null<VarDecl>(Instantiator.VisitVarTemplateSpecializationDecl(
4430 VarSpec->getSpecializedTemplate(), Def, nullptr,
4431 VarSpec->getTemplateArgsInfo(), VarSpec->getTemplateArgs().asArray()));
4432 if (Var) {
4433 llvm::PointerUnion<VarTemplateDecl *,
4434 VarTemplatePartialSpecializationDecl *> PatternPtr =
4435 VarSpec->getSpecializedTemplateOrPartial();
4436 if (VarTemplatePartialSpecializationDecl *Partial =
4437 PatternPtr.dyn_cast<VarTemplatePartialSpecializationDecl *>())
4438 cast<VarTemplateSpecializationDecl>(Var)->setInstantiationOf(
4439 Partial, &VarSpec->getTemplateInstantiationArgs());
4440
4441 // Merge the definition with the declaration.
4442 LookupResult R(*this, Var->getDeclName(), Var->getLocation(),
4443 LookupOrdinaryName, forRedeclarationInCurContext());
4444 R.addDecl(OldVar);
4445 MergeVarDecl(Var, R);
4446
4447 // Attach the initializer.
4448 InstantiateVariableInitializer(Var, Def, TemplateArgs);
4449 }
4450 } else
4451 // Complete the existing variable's definition with an appropriately
4452 // substituted type and initializer.
4453 Var = CompleteVarTemplateSpecializationDecl(VarSpec, Def, TemplateArgs);
4454
4455 PreviousContext.pop();
4456
4457 if (Var) {
17
Taking true branch
51
Assuming 'Var' is null
52
Taking false branch
83
Assuming 'Var' is null
84
Taking false branch
115
Assuming 'Var' is null
116
Taking false branch
4458 PassToConsumerRAII.Var = Var;
4459 Var->setTemplateSpecializationKind(OldVar->getTemplateSpecializationKind(),
4460 OldVar->getPointOfInstantiation());
4461 }
4462
4463 // This variable may have local implicit instantiations that need to be
4464 // instantiated within this scope.
4465 LocalInstantiations.perform();
4466 Local.Exit();
4467 GlobalInstantiations.perform();
18
Calling 'GlobalEagerInstantiationScope::perform'
4468}
4469
4470void
4471Sema::InstantiateMemInitializers(CXXConstructorDecl *New,
4472 const CXXConstructorDecl *Tmpl,
4473 const MultiLevelTemplateArgumentList &TemplateArgs) {
4474
4475 SmallVector<CXXCtorInitializer*, 4> NewInits;
4476 bool AnyErrors = Tmpl->isInvalidDecl();
4477
4478 // Instantiate all the initializers.
4479 for (const auto *Init : Tmpl->inits()) {
4480 // Only instantiate written initializers, let Sema re-construct implicit
4481 // ones.
4482 if (!Init->isWritten())
4483 continue;
4484
4485 SourceLocation EllipsisLoc;
4486
4487 if (Init->isPackExpansion()) {
4488 // This is a pack expansion. We should expand it now.
4489 TypeLoc BaseTL = Init->getTypeSourceInfo()->getTypeLoc();
4490 SmallVector<UnexpandedParameterPack, 4> Unexpanded;
4491 collectUnexpandedParameterPacks(BaseTL, Unexpanded);
4492 collectUnexpandedParameterPacks(Init->getInit(), Unexpanded);
4493 bool ShouldExpand = false;
4494 bool RetainExpansion = false;
4495 Optional<unsigned> NumExpansions;
4496 if (CheckParameterPacksForExpansion(Init->getEllipsisLoc(),
4497 BaseTL.getSourceRange(),
4498 Unexpanded,
4499 TemplateArgs, ShouldExpand,
4500 RetainExpansion,
4501 NumExpansions)) {
4502 AnyErrors = true;
4503 New->setInvalidDecl();
4504 continue;
4505 }
4506 assert(ShouldExpand && "Partial instantiation of base initializer?")(static_cast <bool> (ShouldExpand && "Partial instantiation of base initializer?"
) ? void (0) : __assert_fail ("ShouldExpand && \"Partial instantiation of base initializer?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4506, __extension__ __PRETTY_FUNCTION__))
;
4507
4508 // Loop over all of the arguments in the argument pack(s),
4509 for (unsigned I = 0; I != *NumExpansions; ++I) {
4510 Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(*this, I);
4511
4512 // Instantiate the initializer.
4513 ExprResult TempInit = SubstInitializer(Init->getInit(), TemplateArgs,
4514 /*CXXDirectInit=*/true);
4515 if (TempInit.isInvalid()) {
4516 AnyErrors = true;
4517 break;
4518 }
4519
4520 // Instantiate the base type.
4521 TypeSourceInfo *BaseTInfo = SubstType(Init->getTypeSourceInfo(),
4522 TemplateArgs,
4523 Init->getSourceLocation(),
4524 New->getDeclName());
4525 if (!BaseTInfo) {
4526 AnyErrors = true;
4527 break;
4528 }
4529
4530 // Build the initializer.
4531 MemInitResult NewInit = BuildBaseInitializer(BaseTInfo->getType(),
4532 BaseTInfo, TempInit.get(),
4533 New->getParent(),
4534 SourceLocation());
4535 if (NewInit.isInvalid()) {
4536 AnyErrors = true;
4537 break;
4538 }
4539
4540 NewInits.push_back(NewInit.get());
4541 }
4542
4543 continue;
4544 }
4545
4546 // Instantiate the initializer.
4547 ExprResult TempInit = SubstInitializer(Init->getInit(), TemplateArgs,
4548 /*CXXDirectInit=*/true);
4549 if (TempInit.isInvalid()) {
4550 AnyErrors = true;
4551 continue;
4552 }
4553
4554 MemInitResult NewInit;
4555 if (Init->isDelegatingInitializer() || Init->isBaseInitializer()) {
4556 TypeSourceInfo *TInfo = SubstType(Init->getTypeSourceInfo(),
4557 TemplateArgs,
4558 Init->getSourceLocation(),
4559 New->getDeclName());
4560 if (!TInfo) {
4561 AnyErrors = true;
4562 New->setInvalidDecl();
4563 continue;
4564 }
4565
4566 if (Init->isBaseInitializer())
4567 NewInit = BuildBaseInitializer(TInfo->getType(), TInfo, TempInit.get(),
4568 New->getParent(), EllipsisLoc);
4569 else
4570 NewInit = BuildDelegatingInitializer(TInfo, TempInit.get(),
4571 cast<CXXRecordDecl>(CurContext->getParent()));
4572 } else if (Init->isMemberInitializer()) {
4573 FieldDecl *Member = cast_or_null<FieldDecl>(FindInstantiatedDecl(
4574 Init->getMemberLocation(),
4575 Init->getMember(),
4576 TemplateArgs));
4577 if (!Member) {
4578 AnyErrors = true;
4579 New->setInvalidDecl();
4580 continue;
4581 }
4582
4583 NewInit = BuildMemberInitializer(Member, TempInit.get(),
4584 Init->getSourceLocation());
4585 } else if (Init->isIndirectMemberInitializer()) {
4586 IndirectFieldDecl *IndirectMember =
4587 cast_or_null<IndirectFieldDecl>(FindInstantiatedDecl(
4588 Init->getMemberLocation(),
4589 Init->getIndirectMember(), TemplateArgs));
4590
4591 if (!IndirectMember) {
4592 AnyErrors = true;
4593 New->setInvalidDecl();
4594 continue;
4595 }
4596
4597 NewInit = BuildMemberInitializer(IndirectMember, TempInit.get(),
4598 Init->getSourceLocation());
4599 }
4600
4601 if (NewInit.isInvalid()) {
4602 AnyErrors = true;
4603 New->setInvalidDecl();
4604 } else {
4605 NewInits.push_back(NewInit.get());
4606 }
4607 }
4608
4609 // Assign all the initializers to the new constructor.
4610 ActOnMemInitializers(New,
4611 /*FIXME: ColonLoc */
4612 SourceLocation(),
4613 NewInits,
4614 AnyErrors);
4615}
4616
4617// TODO: this could be templated if the various decl types used the
4618// same method name.
4619static bool isInstantiationOf(ClassTemplateDecl *Pattern,
4620 ClassTemplateDecl *Instance) {
4621 Pattern = Pattern->getCanonicalDecl();
4622
4623 do {
4624 Instance = Instance->getCanonicalDecl();
4625 if (Pattern == Instance) return true;
4626 Instance = Instance->getInstantiatedFromMemberTemplate();
4627 } while (Instance);
4628
4629 return false;
4630}
4631
4632static bool isInstantiationOf(FunctionTemplateDecl *Pattern,
4633 FunctionTemplateDecl *Instance) {
4634 Pattern = Pattern->getCanonicalDecl();
4635
4636 do {
4637 Instance = Instance->getCanonicalDecl();
4638 if (Pattern == Instance) return true;
4639 Instance = Instance->getInstantiatedFromMemberTemplate();
4640 } while (Instance);
4641
4642 return false;
4643}
4644
4645static bool
4646isInstantiationOf(ClassTemplatePartialSpecializationDecl *Pattern,
4647 ClassTemplatePartialSpecializationDecl *Instance) {
4648 Pattern
4649 = cast<ClassTemplatePartialSpecializationDecl>(Pattern->getCanonicalDecl());
4650 do {
4651 Instance = cast<ClassTemplatePartialSpecializationDecl>(
4652 Instance->getCanonicalDecl());
4653 if (Pattern == Instance)
4654 return true;
4655 Instance = Instance->getInstantiatedFromMember();
4656 } while (Instance);
4657
4658 return false;
4659}
4660
4661static bool isInstantiationOf(CXXRecordDecl *Pattern,
4662 CXXRecordDecl *Instance) {
4663 Pattern = Pattern->getCanonicalDecl();
4664
4665 do {
4666 Instance = Instance->getCanonicalDecl();
4667 if (Pattern == Instance) return true;
4668 Instance = Instance->getInstantiatedFromMemberClass();
4669 } while (Instance);
4670
4671 return false;
4672}
4673
4674static bool isInstantiationOf(FunctionDecl *Pattern,
4675 FunctionDecl *Instance) {
4676 Pattern = Pattern->getCanonicalDecl();
4677
4678 do {
4679 Instance = Instance->getCanonicalDecl();
4680 if (Pattern == Instance) return true;
4681 Instance = Instance->getInstantiatedFromMemberFunction();
4682 } while (Instance);
4683
4684 return false;
4685}
4686
4687static bool isInstantiationOf(EnumDecl *Pattern,
4688 EnumDecl *Instance) {
4689 Pattern = Pattern->getCanonicalDecl();
4690
4691 do {
4692 Instance = Instance->getCanonicalDecl();
4693 if (Pattern == Instance) return true;
4694 Instance = Instance->getInstantiatedFromMemberEnum();
4695 } while (Instance);
4696
4697 return false;
4698}
4699
4700static bool isInstantiationOf(UsingShadowDecl *Pattern,
4701 UsingShadowDecl *Instance,
4702 ASTContext &C) {
4703 return declaresSameEntity(C.getInstantiatedFromUsingShadowDecl(Instance),
4704 Pattern);
4705}
4706
4707static bool isInstantiationOf(UsingDecl *Pattern, UsingDecl *Instance,
4708 ASTContext &C) {
4709 return declaresSameEntity(C.getInstantiatedFromUsingDecl(Instance), Pattern);
4710}
4711
4712template<typename T>
4713static bool isInstantiationOfUnresolvedUsingDecl(T *Pattern, Decl *Other,
4714 ASTContext &Ctx) {
4715 // An unresolved using declaration can instantiate to an unresolved using
4716 // declaration, or to a using declaration or a using declaration pack.
4717 //
4718 // Multiple declarations can claim to be instantiated from an unresolved
4719 // using declaration if it's a pack expansion. We want the UsingPackDecl
4720 // in that case, not the individual UsingDecls within the pack.
4721 bool OtherIsPackExpansion;
4722 NamedDecl *OtherFrom;
4723 if (auto *OtherUUD = dyn_cast<T>(Other)) {
4724 OtherIsPackExpansion = OtherUUD->isPackExpansion();
4725 OtherFrom = Ctx.getInstantiatedFromUsingDecl(OtherUUD);
4726 } else if (auto *OtherUPD = dyn_cast<UsingPackDecl>(Other)) {
4727 OtherIsPackExpansion = true;
4728 OtherFrom = OtherUPD->getInstantiatedFromUsingDecl();
4729 } else if (auto *OtherUD = dyn_cast<UsingDecl>(Other)) {
4730 OtherIsPackExpansion = false;
4731 OtherFrom = Ctx.getInstantiatedFromUsingDecl(OtherUD);
4732 } else {
4733 return false;
4734 }
4735 return Pattern->isPackExpansion() == OtherIsPackExpansion &&
4736 declaresSameEntity(OtherFrom, Pattern);
4737}
4738
4739static bool isInstantiationOfStaticDataMember(VarDecl *Pattern,
4740 VarDecl *Instance) {
4741 assert(Instance->isStaticDataMember())(static_cast <bool> (Instance->isStaticDataMember())
? void (0) : __assert_fail ("Instance->isStaticDataMember()"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4741, __extension__ __PRETTY_FUNCTION__))
;
4742
4743 Pattern = Pattern->getCanonicalDecl();
4744
4745 do {
4746 Instance = Instance->getCanonicalDecl();
4747 if (Pattern == Instance) return true;
4748 Instance = Instance->getInstantiatedFromStaticDataMember();
4749 } while (Instance);
4750
4751 return false;
4752}
4753
4754// Other is the prospective instantiation
4755// D is the prospective pattern
4756static bool isInstantiationOf(ASTContext &Ctx, NamedDecl *D, Decl *Other) {
4757 if (auto *UUD = dyn_cast<UnresolvedUsingTypenameDecl>(D))
4758 return isInstantiationOfUnresolvedUsingDecl(UUD, Other, Ctx);
4759
4760 if (auto *UUD = dyn_cast<UnresolvedUsingValueDecl>(D))
4761 return isInstantiationOfUnresolvedUsingDecl(UUD, Other, Ctx);
4762
4763 if (D->getKind() != Other->getKind())
4764 return false;
4765
4766 if (auto *Record = dyn_cast<CXXRecordDecl>(Other))
4767 return isInstantiationOf(cast<CXXRecordDecl>(D), Record);
4768
4769 if (auto *Function = dyn_cast<FunctionDecl>(Other))
4770 return isInstantiationOf(cast<FunctionDecl>(D), Function);
4771
4772 if (auto *Enum = dyn_cast<EnumDecl>(Other))
4773 return isInstantiationOf(cast<EnumDecl>(D), Enum);
4774
4775 if (auto *Var = dyn_cast<VarDecl>(Other))
4776 if (Var->isStaticDataMember())
4777 return isInstantiationOfStaticDataMember(cast<VarDecl>(D), Var);
4778
4779 if (auto *Temp = dyn_cast<ClassTemplateDecl>(Other))
4780 return isInstantiationOf(cast<ClassTemplateDecl>(D), Temp);
4781
4782 if (auto *Temp = dyn_cast<FunctionTemplateDecl>(Other))
4783 return isInstantiationOf(cast<FunctionTemplateDecl>(D), Temp);
4784
4785 if (auto *PartialSpec =
4786 dyn_cast<ClassTemplatePartialSpecializationDecl>(Other))
4787 return isInstantiationOf(cast<ClassTemplatePartialSpecializationDecl>(D),
4788 PartialSpec);
4789
4790 if (auto *Field = dyn_cast<FieldDecl>(Other)) {
4791 if (!Field->getDeclName()) {
4792 // This is an unnamed field.
4793 return declaresSameEntity(Ctx.getInstantiatedFromUnnamedFieldDecl(Field),
4794 cast<FieldDecl>(D));
4795 }
4796 }
4797
4798 if (auto *Using = dyn_cast<UsingDecl>(Other))
4799 return isInstantiationOf(cast<UsingDecl>(D), Using, Ctx);
4800
4801 if (auto *Shadow = dyn_cast<UsingShadowDecl>(Other))
4802 return isInstantiationOf(cast<UsingShadowDecl>(D), Shadow, Ctx);
4803
4804 return D->getDeclName() &&
4805 D->getDeclName() == cast<NamedDecl>(Other)->getDeclName();
4806}
4807
4808template<typename ForwardIterator>
4809static NamedDecl *findInstantiationOf(ASTContext &Ctx,
4810 NamedDecl *D,
4811 ForwardIterator first,
4812 ForwardIterator last) {
4813 for (; first != last; ++first)
4814 if (isInstantiationOf(Ctx, D, *first))
4815 return cast<NamedDecl>(*first);
4816
4817 return nullptr;
4818}
4819
4820/// \brief Finds the instantiation of the given declaration context
4821/// within the current instantiation.
4822///
4823/// \returns NULL if there was an error
4824DeclContext *Sema::FindInstantiatedContext(SourceLocation Loc, DeclContext* DC,
4825 const MultiLevelTemplateArgumentList &TemplateArgs) {
4826 if (NamedDecl *D = dyn_cast<NamedDecl>(DC)) {
4827 Decl* ID = FindInstantiatedDecl(Loc, D, TemplateArgs, true);
4828 return cast_or_null<DeclContext>(ID);
4829 } else return DC;
4830}
4831
4832/// \brief Find the instantiation of the given declaration within the
4833/// current instantiation.
4834///
4835/// This routine is intended to be used when \p D is a declaration
4836/// referenced from within a template, that needs to mapped into the
4837/// corresponding declaration within an instantiation. For example,
4838/// given:
4839///
4840/// \code
4841/// template<typename T>
4842/// struct X {
4843/// enum Kind {
4844/// KnownValue = sizeof(T)
4845/// };
4846///
4847/// bool getKind() const { return KnownValue; }
4848/// };
4849///
4850/// template struct X<int>;
4851/// \endcode
4852///
4853/// In the instantiation of <tt>X<int>::getKind()</tt>, we need to map the
4854/// \p EnumConstantDecl for \p KnownValue (which refers to
4855/// <tt>X<T>::<Kind>::KnownValue</tt>) to its instantiation
4856/// (<tt>X<int>::<Kind>::KnownValue</tt>). \p FindInstantiatedDecl performs
4857/// this mapping from within the instantiation of <tt>X<int></tt>.
4858NamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D,
4859 const MultiLevelTemplateArgumentList &TemplateArgs,
4860 bool FindingInstantiatedContext) {
4861 DeclContext *ParentDC = D->getDeclContext();
4862 // FIXME: Parmeters of pointer to functions (y below) that are themselves
4863 // parameters (p below) can have their ParentDC set to the translation-unit
4864 // - thus we can not consistently check if the ParentDC of such a parameter
4865 // is Dependent or/and a FunctionOrMethod.
4866 // For e.g. this code, during Template argument deduction tries to
4867 // find an instantiated decl for (T y) when the ParentDC for y is
4868 // the translation unit.
4869 // e.g. template <class T> void Foo(auto (*p)(T y) -> decltype(y())) {}
4870 // float baz(float(*)()) { return 0.0; }
4871 // Foo(baz);
4872 // The better fix here is perhaps to ensure that a ParmVarDecl, by the time
4873 // it gets here, always has a FunctionOrMethod as its ParentDC??
4874 // For now:
4875 // - as long as we have a ParmVarDecl whose parent is non-dependent and
4876 // whose type is not instantiation dependent, do nothing to the decl
4877 // - otherwise find its instantiated decl.
4878 if (isa<ParmVarDecl>(D) && !ParentDC->isDependentContext() &&
4879 !cast<ParmVarDecl>(D)->getType()->isInstantiationDependentType())
4880 return D;
4881 if (isa<ParmVarDecl>(D) || isa<NonTypeTemplateParmDecl>(D) ||
4882 isa<TemplateTypeParmDecl>(D) || isa<TemplateTemplateParmDecl>(D) ||
4883 (ParentDC->isFunctionOrMethod() && ParentDC->isDependentContext()) ||
4884 (isa<CXXRecordDecl>(D) && cast<CXXRecordDecl>(D)->isLambda())) {
4885 // D is a local of some kind. Look into the map of local
4886 // declarations to their instantiations.
4887 if (CurrentInstantiationScope) {
4888 if (auto Found = CurrentInstantiationScope->findInstantiationOf(D)) {
4889 if (Decl *FD = Found->dyn_cast<Decl *>())
4890 return cast<NamedDecl>(FD);
4891
4892 int PackIdx = ArgumentPackSubstitutionIndex;
4893 assert(PackIdx != -1 &&(static_cast <bool> (PackIdx != -1 && "found declaration pack but not pack expanding"
) ? void (0) : __assert_fail ("PackIdx != -1 && \"found declaration pack but not pack expanding\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4894, __extension__ __PRETTY_FUNCTION__))
4894 "found declaration pack but not pack expanding")(static_cast <bool> (PackIdx != -1 && "found declaration pack but not pack expanding"
) ? void (0) : __assert_fail ("PackIdx != -1 && \"found declaration pack but not pack expanding\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4894, __extension__ __PRETTY_FUNCTION__))
;
4895 typedef LocalInstantiationScope::DeclArgumentPack DeclArgumentPack;
4896 return cast<NamedDecl>((*Found->get<DeclArgumentPack *>())[PackIdx]);
4897 }
4898 }
4899
4900 // If we're performing a partial substitution during template argument
4901 // deduction, we may not have values for template parameters yet. They
4902 // just map to themselves.
4903 if (isa<NonTypeTemplateParmDecl>(D) || isa<TemplateTypeParmDecl>(D) ||
4904 isa<TemplateTemplateParmDecl>(D))
4905 return D;
4906
4907 if (D->isInvalidDecl())
4908 return nullptr;
4909
4910 // Normally this function only searches for already instantiated declaration
4911 // however we have to make an exclusion for local types used before
4912 // definition as in the code:
4913 //
4914 // template<typename T> void f1() {
4915 // void g1(struct x1);
4916 // struct x1 {};
4917 // }
4918 //
4919 // In this case instantiation of the type of 'g1' requires definition of
4920 // 'x1', which is defined later. Error recovery may produce an enum used
4921 // before definition. In these cases we need to instantiate relevant
4922 // declarations here.
4923 bool NeedInstantiate = false;
4924 if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D))
4925 NeedInstantiate = RD->isLocalClass();
4926 else
4927 NeedInstantiate = isa<EnumDecl>(D);
4928 if (NeedInstantiate) {
4929 Decl *Inst = SubstDecl(D, CurContext, TemplateArgs);
4930 CurrentInstantiationScope->InstantiatedLocal(D, Inst);
4931 return cast<TypeDecl>(Inst);
4932 }
4933
4934 // If we didn't find the decl, then we must have a label decl that hasn't
4935 // been found yet. Lazily instantiate it and return it now.
4936 assert(isa<LabelDecl>(D))(static_cast <bool> (isa<LabelDecl>(D)) ? void (0
) : __assert_fail ("isa<LabelDecl>(D)", "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4936, __extension__ __PRETTY_FUNCTION__))
;
4937
4938 Decl *Inst = SubstDecl(D, CurContext, TemplateArgs);
4939 assert(Inst && "Failed to instantiate label??")(static_cast <bool> (Inst && "Failed to instantiate label??"
) ? void (0) : __assert_fail ("Inst && \"Failed to instantiate label??\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 4939, __extension__ __PRETTY_FUNCTION__))
;
4940
4941 CurrentInstantiationScope->InstantiatedLocal(D, Inst);
4942 return cast<LabelDecl>(Inst);
4943 }
4944
4945 // For variable template specializations, update those that are still
4946 // type-dependent.
4947 if (VarTemplateSpecializationDecl *VarSpec =
4948 dyn_cast<VarTemplateSpecializationDecl>(D)) {
4949 bool InstantiationDependent = false;
4950 const TemplateArgumentListInfo &VarTemplateArgs =
4951 VarSpec->getTemplateArgsInfo();
4952 if (TemplateSpecializationType::anyDependentTemplateArguments(
4953 VarTemplateArgs, InstantiationDependent))
4954 D = cast<NamedDecl>(
4955 SubstDecl(D, VarSpec->getDeclContext(), TemplateArgs));
4956 return D;
4957 }
4958
4959 if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {
4960 if (!Record->isDependentContext())
4961 return D;
4962
4963 // Determine whether this record is the "templated" declaration describing
4964 // a class template or class template partial specialization.
4965 ClassTemplateDecl *ClassTemplate = Record->getDescribedClassTemplate();
4966 if (ClassTemplate)
4967 ClassTemplate = ClassTemplate->getCanonicalDecl();
4968 else if (ClassTemplatePartialSpecializationDecl *PartialSpec
4969 = dyn_cast<ClassTemplatePartialSpecializationDecl>(Record))
4970 ClassTemplate = PartialSpec->getSpecializedTemplate()->getCanonicalDecl();
4971
4972 // Walk the current context to find either the record or an instantiation of
4973 // it.
4974 DeclContext *DC = CurContext;
4975 while (!DC->isFileContext()) {
4976 // If we're performing substitution while we're inside the template
4977 // definition, we'll find our own context. We're done.
4978 if (DC->Equals(Record))
4979 return Record;
4980
4981 if (CXXRecordDecl *InstRecord = dyn_cast<CXXRecordDecl>(DC)) {
4982 // Check whether we're in the process of instantiating a class template
4983 // specialization of the template we're mapping.
4984 if (ClassTemplateSpecializationDecl *InstSpec
4985 = dyn_cast<ClassTemplateSpecializationDecl>(InstRecord)){
4986 ClassTemplateDecl *SpecTemplate = InstSpec->getSpecializedTemplate();
4987 if (ClassTemplate && isInstantiationOf(ClassTemplate, SpecTemplate))
4988 return InstRecord;
4989 }
4990
4991 // Check whether we're in the process of instantiating a member class.
4992 if (isInstantiationOf(Record, InstRecord))
4993 return InstRecord;
4994 }
4995
4996 // Move to the outer template scope.
4997 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) {
4998 if (FD->getFriendObjectKind() && FD->getDeclContext()->isFileContext()){
4999 DC = FD->getLexicalDeclContext();
5000 continue;
5001 }
5002 // An implicit deduction guide acts as if it's within the class template
5003 // specialization described by its name and first N template params.
5004 auto *Guide = dyn_cast<CXXDeductionGuideDecl>(FD);
5005 if (Guide && Guide->isImplicit()) {
5006 TemplateDecl *TD = Guide->getDeducedTemplate();
5007 // Convert the arguments to an "as-written" list.
5008 TemplateArgumentListInfo Args(Loc, Loc);
5009 for (TemplateArgument Arg : TemplateArgs.getInnermost().take_front(
5010 TD->getTemplateParameters()->size())) {
5011 ArrayRef<TemplateArgument> Unpacked(Arg);
5012 if (Arg.getKind() == TemplateArgument::Pack)
5013 Unpacked = Arg.pack_elements();
5014 for (TemplateArgument UnpackedArg : Unpacked)
5015 Args.addArgument(
5016 getTrivialTemplateArgumentLoc(UnpackedArg, QualType(), Loc));
5017 }
5018 QualType T = CheckTemplateIdType(TemplateName(TD), Loc, Args);
5019 if (T.isNull())
5020 return nullptr;
5021 auto *SubstRecord = T->getAsCXXRecordDecl();
5022 assert(SubstRecord && "class template id not a class type?")(static_cast <bool> (SubstRecord && "class template id not a class type?"
) ? void (0) : __assert_fail ("SubstRecord && \"class template id not a class type?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 5022, __extension__ __PRETTY_FUNCTION__))
;
5023 // Check that this template-id names the primary template and not a
5024 // partial or explicit specialization. (In the latter cases, it's
5025 // meaningless to attempt to find an instantiation of D within the
5026 // specialization.)
5027 // FIXME: The standard doesn't say what should happen here.
5028 if (FindingInstantiatedContext &&
5029 usesPartialOrExplicitSpecialization(
5030 Loc, cast<ClassTemplateSpecializationDecl>(SubstRecord))) {
5031 Diag(Loc, diag::err_specialization_not_primary_template)
5032 << T << (SubstRecord->getTemplateSpecializationKind() ==
5033 TSK_ExplicitSpecialization);
5034 return nullptr;
5035 }
5036 DC = SubstRecord;
5037 continue;
5038 }
5039 }
5040
5041 DC = DC->getParent();
5042 }
5043
5044 // Fall through to deal with other dependent record types (e.g.,
5045 // anonymous unions in class templates).
5046 }
5047
5048 if (!ParentDC->isDependentContext())
5049 return D;
5050
5051 ParentDC = FindInstantiatedContext(Loc, ParentDC, TemplateArgs);
5052 if (!ParentDC)
5053 return nullptr;
5054
5055 if (ParentDC != D->getDeclContext()) {
5056 // We performed some kind of instantiation in the parent context,
5057 // so now we need to look into the instantiated parent context to
5058 // find the instantiation of the declaration D.
5059
5060 // If our context used to be dependent, we may need to instantiate
5061 // it before performing lookup into that context.
5062 bool IsBeingInstantiated = false;
5063 if (CXXRecordDecl *Spec = dyn_cast<CXXRecordDecl>(ParentDC)) {
5064 if (!Spec->isDependentContext()) {
5065 QualType T = Context.getTypeDeclType(Spec);
5066 const RecordType *Tag = T->getAs<RecordType>();
5067 assert(Tag && "type of non-dependent record is not a RecordType")(static_cast <bool> (Tag && "type of non-dependent record is not a RecordType"
) ? void (0) : __assert_fail ("Tag && \"type of non-dependent record is not a RecordType\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 5067, __extension__ __PRETTY_FUNCTION__))
;
5068 if (Tag->isBeingDefined())
5069 IsBeingInstantiated = true;
5070 if (!Tag->isBeingDefined() &&
5071 RequireCompleteType(Loc, T, diag::err_incomplete_type))
5072 return nullptr;
5073
5074 ParentDC = Tag->getDecl();
5075 }
5076 }
5077
5078 NamedDecl *Result = nullptr;
5079 // FIXME: If the name is a dependent name, this lookup won't necessarily
5080 // find it. Does that ever matter?
5081 if (auto Name = D->getDeclName()) {
5082 DeclarationNameInfo NameInfo(Name, D->getLocation());
5083 Name = SubstDeclarationNameInfo(NameInfo, TemplateArgs).getName();
5084 if (!Name)
5085 return nullptr;
5086 DeclContext::lookup_result Found = ParentDC->lookup(Name);
5087 Result = findInstantiationOf(Context, D, Found.begin(), Found.end());
5088 } else {
5089 // Since we don't have a name for the entity we're looking for,
5090 // our only option is to walk through all of the declarations to
5091 // find that name. This will occur in a few cases:
5092 //
5093 // - anonymous struct/union within a template
5094 // - unnamed class/struct/union/enum within a template
5095 //
5096 // FIXME: Find a better way to find these instantiations!
5097 Result = findInstantiationOf(Context, D,
5098 ParentDC->decls_begin(),
5099 ParentDC->decls_end());
5100 }
5101
5102 if (!Result) {
5103 if (isa<UsingShadowDecl>(D)) {
5104 // UsingShadowDecls can instantiate to nothing because of using hiding.
5105 } else if (Diags.hasErrorOccurred()) {
5106 // We've already complained about something, so most likely this
5107 // declaration failed to instantiate. There's no point in complaining
5108 // further, since this is normal in invalid code.
5109 } else if (IsBeingInstantiated) {
5110 // The class in which this member exists is currently being
5111 // instantiated, and we haven't gotten around to instantiating this
5112 // member yet. This can happen when the code uses forward declarations
5113 // of member classes, and introduces ordering dependencies via
5114 // template instantiation.
5115 Diag(Loc, diag::err_member_not_yet_instantiated)
5116 << D->getDeclName()
5117 << Context.getTypeDeclType(cast<CXXRecordDecl>(ParentDC));
5118 Diag(D->getLocation(), diag::note_non_instantiated_member_here);
5119 } else if (EnumConstantDecl *ED = dyn_cast<EnumConstantDecl>(D)) {
5120 // This enumeration constant was found when the template was defined,
5121 // but can't be found in the instantiation. This can happen if an
5122 // unscoped enumeration member is explicitly specialized.
5123 EnumDecl *Enum = cast<EnumDecl>(ED->getLexicalDeclContext());
5124 EnumDecl *Spec = cast<EnumDecl>(FindInstantiatedDecl(Loc, Enum,
5125 TemplateArgs));
5126 assert(Spec->getTemplateSpecializationKind() ==(static_cast <bool> (Spec->getTemplateSpecializationKind
() == TSK_ExplicitSpecialization) ? void (0) : __assert_fail (
"Spec->getTemplateSpecializationKind() == TSK_ExplicitSpecialization"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 5127, __extension__ __PRETTY_FUNCTION__))
5127 TSK_ExplicitSpecialization)(static_cast <bool> (Spec->getTemplateSpecializationKind
() == TSK_ExplicitSpecialization) ? void (0) : __assert_fail (
"Spec->getTemplateSpecializationKind() == TSK_ExplicitSpecialization"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 5127, __extension__ __PRETTY_FUNCTION__))
;
5128 Diag(Loc, diag::err_enumerator_does_not_exist)
5129 << D->getDeclName()
5130 << Context.getTypeDeclType(cast<TypeDecl>(Spec->getDeclContext()));
5131 Diag(Spec->getLocation(), diag::note_enum_specialized_here)
5132 << Context.getTypeDeclType(Spec);
5133 } else {
5134 // We should have found something, but didn't.
5135 llvm_unreachable("Unable to find instantiation of declaration!")::llvm::llvm_unreachable_internal("Unable to find instantiation of declaration!"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 5135)
;
5136 }
5137 }
5138
5139 D = Result;
5140 }
5141
5142 return D;
5143}
5144
5145/// \brief Performs template instantiation for all implicit template
5146/// instantiations we have seen until this point.
5147void Sema::PerformPendingInstantiations(bool LocalOnly) {
5148 while (!PendingLocalImplicitInstantiations.empty() ||
22
Assuming the condition is false
24
Loop condition is true. Entering loop body
54
Assuming the condition is false
56
Loop condition is true. Entering loop body
86
Assuming the condition is false
88
Loop condition is true. Entering loop body
118
Assuming the condition is false
120
Loop condition is true. Entering loop body
5149 (!LocalOnly && !PendingInstantiations.empty())) {
23
Assuming the condition is true
55
Assuming the condition is true
87
Assuming the condition is true
119
Assuming the condition is true
5150 PendingImplicitInstantiation Inst;
5151
5152 if (PendingLocalImplicitInstantiations.empty()) {
25
Assuming the condition is false
26
Taking false branch
57
Assuming the condition is false
58
Taking false branch
89
Assuming the condition is false
90
Taking false branch
121
Assuming the condition is false
122
Taking false branch
5153 Inst = PendingInstantiations.front();
5154 PendingInstantiations.pop_front();
5155 } else {
5156 Inst = PendingLocalImplicitInstantiations.front();
5157 PendingLocalImplicitInstantiations.pop_front();
5158 }
5159
5160 // Instantiate function definitions
5161 if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Inst.first)) {
27
Taking false branch
59
Taking false branch
91
Taking false branch
123
Taking false branch
5162 bool DefinitionRequired = Function->getTemplateSpecializationKind() ==
5163 TSK_ExplicitInstantiationDefinition;
5164 InstantiateFunctionDefinition(/*FIXME:*/Inst.second, Function, true,
5165 DefinitionRequired, true);
5166 if (Function->isDefined())
5167 Function->setInstantiationIsPending(false);
5168 continue;
5169 }
5170
5171 // Instantiate variable definitions
5172 VarDecl *Var = cast<VarDecl>(Inst.first);
5173
5174 assert((Var->isStaticDataMember() ||(static_cast <bool> ((Var->isStaticDataMember() || isa
<VarTemplateSpecializationDecl>(Var)) && "Not a static data member, nor a variable template"
" specialization?") ? void (0) : __assert_fail ("(Var->isStaticDataMember() || isa<VarTemplateSpecializationDecl>(Var)) && \"Not a static data member, nor a variable template\" \" specialization?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 5177, __extension__ __PRETTY_FUNCTION__))
5175 isa<VarTemplateSpecializationDecl>(Var)) &&(static_cast <bool> ((Var->isStaticDataMember() || isa
<VarTemplateSpecializationDecl>(Var)) && "Not a static data member, nor a variable template"
" specialization?") ? void (0) : __assert_fail ("(Var->isStaticDataMember() || isa<VarTemplateSpecializationDecl>(Var)) && \"Not a static data member, nor a variable template\" \" specialization?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 5177, __extension__ __PRETTY_FUNCTION__))
5176 "Not a static data member, nor a variable template"(static_cast <bool> ((Var->isStaticDataMember() || isa
<VarTemplateSpecializationDecl>(Var)) && "Not a static data member, nor a variable template"
" specialization?") ? void (0) : __assert_fail ("(Var->isStaticDataMember() || isa<VarTemplateSpecializationDecl>(Var)) && \"Not a static data member, nor a variable template\" \" specialization?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 5177, __extension__ __PRETTY_FUNCTION__))
5177 " specialization?")(static_cast <bool> ((Var->isStaticDataMember() || isa
<VarTemplateSpecializationDecl>(Var)) && "Not a static data member, nor a variable template"
" specialization?") ? void (0) : __assert_fail ("(Var->isStaticDataMember() || isa<VarTemplateSpecializationDecl>(Var)) && \"Not a static data member, nor a variable template\" \" specialization?\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 5177, __extension__ __PRETTY_FUNCTION__))
;
5178
5179 // Don't try to instantiate declarations if the most recent redeclaration
5180 // is invalid.
5181 if (Var->getMostRecentDecl()->isInvalidDecl())
28
Assuming the condition is false
29
Taking false branch
60
Assuming the condition is false
61
Taking false branch
92
Assuming the condition is false
93
Taking false branch
124
Assuming the condition is false
125
Taking false branch
5182 continue;
5183
5184 // Check if the most recent declaration has changed the specialization kind
5185 // and removed the need for implicit instantiation.
5186 switch (Var->getMostRecentDecl()->getTemplateSpecializationKind()) {
30
Control jumps to 'case TSK_ImplicitInstantiation:' at line 5196
62
Control jumps to 'case TSK_ImplicitInstantiation:' at line 5196
94
Control jumps to 'case TSK_ImplicitInstantiation:' at line 5196
126
Control jumps to 'case TSK_ImplicitInstantiation:' at line 5196
5187 case TSK_Undeclared:
5188 llvm_unreachable("Cannot instantitiate an undeclared specialization.")::llvm::llvm_unreachable_internal("Cannot instantitiate an undeclared specialization."
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"
, 5188)
;
5189 case TSK_ExplicitInstantiationDeclaration:
5190 case TSK_ExplicitSpecialization:
5191 continue; // No longer need to instantiate this type.
5192 case TSK_ExplicitInstantiationDefinition:
5193 // We only need an instantiation if the pending instantiation *is* the
5194 // explicit instantiation.
5195 if (Var != Var->getMostRecentDecl()) continue;
5196 case TSK_ImplicitInstantiation:
5197 break;
31
Execution continues on line 5200
63
Execution continues on line 5200
95
Execution continues on line 5200
127
Execution continues on line 5200
5198 }
5199
5200 PrettyDeclStackTraceEntry CrashInfo(*this, Var, SourceLocation(),
5201 "instantiating variable definition");
5202 bool DefinitionRequired = Var->getTemplateSpecializationKind() ==
32
Assuming the condition is false
64
Assuming the condition is false
96
Assuming the condition is false
128
Assuming the condition is false
5203 TSK_ExplicitInstantiationDefinition;
5204
5205 // Instantiate static data member definitions or variable template
5206 // specializations.
5207 InstantiateVariableDefinition(/*FIXME:*/ Inst.second, Var, true,
33
Calling 'Sema::InstantiateVariableDefinition'
53
Returning from 'Sema::InstantiateVariableDefinition'
65
Calling 'Sema::InstantiateVariableDefinition'
85
Returning from 'Sema::InstantiateVariableDefinition'
97
Calling 'Sema::InstantiateVariableDefinition'
117
Returning from 'Sema::InstantiateVariableDefinition'
129
Calling 'Sema::InstantiateVariableDefinition'
5208 DefinitionRequired, true);
5209 }
5210}
5211
5212void Sema::PerformDependentDiagnostics(const DeclContext *Pattern,
5213 const MultiLevelTemplateArgumentList &TemplateArgs) {
5214 for (auto DD : Pattern->ddiags()) {
5215 switch (DD->getKind()) {
5216 case DependentDiagnostic::Access:
5217 HandleDependentAccessCheck(*DD, TemplateArgs);
5218 break;
5219 }
5220 }
5221}

/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h

1//===--- Sema.h - Semantic Analysis & AST Building --------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the Sema class, which performs semantic analysis and
11// builds ASTs.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_CLANG_SEMA_SEMA_H
16#define LLVM_CLANG_SEMA_SEMA_H
17
18#include "clang/AST/Attr.h"
19#include "clang/AST/Availability.h"
20#include "clang/AST/DeclarationName.h"
21#include "clang/AST/DeclTemplate.h"
22#include "clang/AST/Expr.h"
23#include "clang/AST/ExprObjC.h"
24#include "clang/AST/ExternalASTSource.h"
25#include "clang/AST/LocInfoType.h"
26#include "clang/AST/MangleNumberingContext.h"
27#include "clang/AST/NSAPI.h"
28#include "clang/AST/PrettyPrinter.h"
29#include "clang/AST/StmtCXX.h"
30#include "clang/AST/TypeLoc.h"
31#include "clang/AST/TypeOrdering.h"
32#include "clang/Basic/ExpressionTraits.h"
33#include "clang/Basic/LangOptions.h"
34#include "clang/Basic/Module.h"
35#include "clang/Basic/OpenMPKinds.h"
36#include "clang/Basic/PragmaKinds.h"
37#include "clang/Basic/Specifiers.h"
38#include "clang/Basic/TemplateKinds.h"
39#include "clang/Basic/TypeTraits.h"
40#include "clang/Sema/AnalysisBasedWarnings.h"
41#include "clang/Sema/CleanupInfo.h"
42#include "clang/Sema/DeclSpec.h"
43#include "clang/Sema/ExternalSemaSource.h"
44#include "clang/Sema/IdentifierResolver.h"
45#include "clang/Sema/ObjCMethodList.h"
46#include "clang/Sema/Ownership.h"
47#include "clang/Sema/Scope.h"
48#include "clang/Sema/ScopeInfo.h"
49#include "clang/Sema/TypoCorrection.h"
50#include "clang/Sema/Weak.h"
51#include "llvm/ADT/ArrayRef.h"
52#include "llvm/ADT/Optional.h"
53#include "llvm/ADT/SetVector.h"
54#include "llvm/ADT/SmallPtrSet.h"
55#include "llvm/ADT/SmallVector.h"
56#include "llvm/ADT/TinyPtrVector.h"
57#include <deque>
58#include <memory>
59#include <string>
60#include <vector>
61
62namespace llvm {
63 class APSInt;
64 template <typename ValueT> struct DenseMapInfo;
65 template <typename ValueT, typename ValueInfoT> class DenseSet;
66 class SmallBitVector;
67 struct InlineAsmIdentifierInfo;
68}
69
70namespace clang {
71 class ADLResult;
72 class ASTConsumer;
73 class ASTContext;
74 class ASTMutationListener;
75 class ASTReader;
76 class ASTWriter;
77 class ArrayType;
78 class AttributeList;
79 class BindingDecl;
80 class BlockDecl;
81 class CapturedDecl;
82 class CXXBasePath;
83 class CXXBasePaths;
84 class CXXBindTemporaryExpr;
85 typedef SmallVector<CXXBaseSpecifier*, 4> CXXCastPath;
86 class CXXConstructorDecl;
87 class CXXConversionDecl;
88 class CXXDeleteExpr;
89 class CXXDestructorDecl;
90 class CXXFieldCollector;
91 class CXXMemberCallExpr;
92 class CXXMethodDecl;
93 class CXXScopeSpec;
94 class CXXTemporary;
95 class CXXTryStmt;
96 class CallExpr;
97 class ClassTemplateDecl;
98 class ClassTemplatePartialSpecializationDecl;
99 class ClassTemplateSpecializationDecl;
100 class VarTemplatePartialSpecializationDecl;
101 class CodeCompleteConsumer;
102 class CodeCompletionAllocator;
103 class CodeCompletionTUInfo;
104 class CodeCompletionResult;
105 class CoroutineBodyStmt;
106 class Decl;
107 class DeclAccessPair;
108 class DeclContext;
109 class DeclRefExpr;
110 class DeclaratorDecl;
111 class DeducedTemplateArgument;
112 class DependentDiagnostic;
113 class DesignatedInitExpr;
114 class Designation;
115 class EnableIfAttr;
116 class EnumConstantDecl;
117 class Expr;
118 class ExtVectorType;
119 class FormatAttr;
120 class FriendDecl;
121 class FunctionDecl;
122 class FunctionProtoType;
123 class FunctionTemplateDecl;
124 class ImplicitConversionSequence;
125 typedef MutableArrayRef<ImplicitConversionSequence> ConversionSequenceList;
126 class InitListExpr;
127 class InitializationKind;
128 class InitializationSequence;
129 class InitializedEntity;
130 class IntegerLiteral;
131 class LabelStmt;
132 class LambdaExpr;
133 class LangOptions;
134 class LocalInstantiationScope;
135 class LookupResult;
136 class MacroInfo;
137 typedef ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> ModuleIdPath;
138 class ModuleLoader;
139 class MultiLevelTemplateArgumentList;
140 class NamedDecl;
141 class ObjCCategoryDecl;
142 class ObjCCategoryImplDecl;
143 class ObjCCompatibleAliasDecl;
144 class ObjCContainerDecl;
145 class ObjCImplDecl;
146 class ObjCImplementationDecl;
147 class ObjCInterfaceDecl;
148 class ObjCIvarDecl;
149 template <class T> class ObjCList;
150 class ObjCMessageExpr;
151 class ObjCMethodDecl;
152 class ObjCPropertyDecl;
153 class ObjCProtocolDecl;
154 class OMPThreadPrivateDecl;
155 class OMPDeclareReductionDecl;
156 class OMPDeclareSimdDecl;
157 class OMPClause;
158 struct OverloadCandidate;
159 class OverloadCandidateSet;
160 class OverloadExpr;
161 class ParenListExpr;
162 class ParmVarDecl;
163 class Preprocessor;
164 class PseudoDestructorTypeStorage;
165 class PseudoObjectExpr;
166 class QualType;
167 class StandardConversionSequence;
168 class Stmt;
169 class StringLiteral;
170 class SwitchStmt;
171 class TemplateArgument;
172 class TemplateArgumentList;
173 class TemplateArgumentLoc;
174 class TemplateDecl;
175 class TemplateParameterList;
176 class TemplatePartialOrderingContext;
177 class TemplateTemplateParmDecl;
178 class Token;
179 class TypeAliasDecl;
180 class TypedefDecl;
181 class TypedefNameDecl;
182 class TypeLoc;
183 class TypoCorrectionConsumer;
184 class UnqualifiedId;
185 class UnresolvedLookupExpr;
186 class UnresolvedMemberExpr;
187 class UnresolvedSetImpl;
188 class UnresolvedSetIterator;
189 class UsingDecl;
190 class UsingShadowDecl;
191 class ValueDecl;
192 class VarDecl;
193 class VarTemplateSpecializationDecl;
194 class VisibilityAttr;
195 class VisibleDeclConsumer;
196 class IndirectFieldDecl;
197 struct DeductionFailureInfo;
198 class TemplateSpecCandidateSet;
199
200namespace sema {
201 class AccessedEntity;
202 class BlockScopeInfo;
203 class CapturedRegionScopeInfo;
204 class CapturingScopeInfo;
205 class CompoundScopeInfo;
206 class DelayedDiagnostic;
207 class DelayedDiagnosticPool;
208 class FunctionScopeInfo;
209 class LambdaScopeInfo;
210 class PossiblyUnreachableDiag;
211 class SemaPPCallbacks;
212 class TemplateDeductionInfo;
213}
214
215namespace threadSafety {
216 class BeforeSet;
217 void threadSafetyCleanup(BeforeSet* Cache);
218}
219
220// FIXME: No way to easily map from TemplateTypeParmTypes to
221// TemplateTypeParmDecls, so we have this horrible PointerUnion.
222typedef std::pair<llvm::PointerUnion<const TemplateTypeParmType*, NamedDecl*>,
223 SourceLocation> UnexpandedParameterPack;
224
225/// Describes whether we've seen any nullability information for the given
226/// file.
227struct FileNullability {
228 /// The first pointer declarator (of any pointer kind) in the file that does
229 /// not have a corresponding nullability annotation.
230 SourceLocation PointerLoc;
231
232 /// The end location for the first pointer declarator in the file. Used for
233 /// placing fix-its.
234 SourceLocation PointerEndLoc;
235
236 /// Which kind of pointer declarator we saw.
237 uint8_t PointerKind;
238
239 /// Whether we saw any type nullability annotations in the given file.
240 bool SawTypeNullability = false;
241};
242
243/// A mapping from file IDs to a record of whether we've seen nullability
244/// information in that file.
245class FileNullabilityMap {
246 /// A mapping from file IDs to the nullability information for each file ID.
247 llvm::DenseMap<FileID, FileNullability> Map;
248
249 /// A single-element cache based on the file ID.
250 struct {
251 FileID File;
252 FileNullability Nullability;
253 } Cache;
254
255public:
256 FileNullability &operator[](FileID file) {
257 // Check the single-element cache.
258 if (file == Cache.File)
259 return Cache.Nullability;
260
261 // It's not in the single-element cache; flush the cache if we have one.
262 if (!Cache.File.isInvalid()) {
263 Map[Cache.File] = Cache.Nullability;
264 }
265
266 // Pull this entry into the cache.
267 Cache.File = file;
268 Cache.Nullability = Map[file];
269 return Cache.Nullability;
270 }
271};
272
273/// Sema - This implements semantic analysis and AST building for C.
274class Sema {
275 Sema(const Sema &) = delete;
276 void operator=(const Sema &) = delete;
277
278 ///\brief Source of additional semantic information.
279 ExternalSemaSource *ExternalSource;
280
281 ///\brief Whether Sema has generated a multiplexer and has to delete it.
282 bool isMultiplexExternalSource;
283
284 static bool mightHaveNonExternalLinkage(const DeclaratorDecl *FD);
285
286 bool isVisibleSlow(const NamedDecl *D);
287
288 /// Determine whether two declarations should be linked together, given that
289 /// the old declaration might not be visible and the new declaration might
290 /// not have external linkage.
291 bool shouldLinkPossiblyHiddenDecl(const NamedDecl *Old,
292 const NamedDecl *New) {
293 if (isVisible(Old))
294 return true;
295 // See comment in below overload for why it's safe to compute the linkage
296 // of the new declaration here.
297 if (New->isExternallyDeclarable()) {
298 assert(Old->isExternallyDeclarable() &&(static_cast <bool> (Old->isExternallyDeclarable() &&
"should not have found a non-externally-declarable previous decl"
) ? void (0) : __assert_fail ("Old->isExternallyDeclarable() && \"should not have found a non-externally-declarable previous decl\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 299, __extension__ __PRETTY_FUNCTION__))
299 "should not have found a non-externally-declarable previous decl")(static_cast <bool> (Old->isExternallyDeclarable() &&
"should not have found a non-externally-declarable previous decl"
) ? void (0) : __assert_fail ("Old->isExternallyDeclarable() && \"should not have found a non-externally-declarable previous decl\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 299, __extension__ __PRETTY_FUNCTION__))
;
300 return true;
301 }
302 return false;
303 }
304 bool shouldLinkPossiblyHiddenDecl(LookupResult &Old, const NamedDecl *New);
305
306public:
307 typedef OpaquePtr<DeclGroupRef> DeclGroupPtrTy;
308 typedef OpaquePtr<TemplateName> TemplateTy;
309 typedef OpaquePtr<QualType> TypeTy;
310
311 OpenCLOptions OpenCLFeatures;
312 FPOptions FPFeatures;
313
314 const LangOptions &LangOpts;
315 Preprocessor &PP;
316 ASTContext &Context;
317 ASTConsumer &Consumer;
318 DiagnosticsEngine &Diags;
319 SourceManager &SourceMgr;
320
321 /// \brief Flag indicating whether or not to collect detailed statistics.
322 bool CollectStats;
323
324 /// \brief Code-completion consumer.
325 CodeCompleteConsumer *CodeCompleter;
326
327 /// CurContext - This is the current declaration context of parsing.
328 DeclContext *CurContext;
329
330 /// \brief Generally null except when we temporarily switch decl contexts,
331 /// like in \see ActOnObjCTemporaryExitContainerContext.
332 DeclContext *OriginalLexicalContext;
333
334 /// VAListTagName - The declaration name corresponding to __va_list_tag.
335 /// This is used as part of a hack to omit that class from ADL results.
336 DeclarationName VAListTagName;
337
338 bool MSStructPragmaOn; // True when \#pragma ms_struct on
339
340 /// \brief Controls member pointer representation format under the MS ABI.
341 LangOptions::PragmaMSPointersToMembersKind
342 MSPointerToMemberRepresentationMethod;
343
344 /// Stack of active SEH __finally scopes. Can be empty.
345 SmallVector<Scope*, 2> CurrentSEHFinally;
346
347 /// \brief Source location for newly created implicit MSInheritanceAttrs
348 SourceLocation ImplicitMSInheritanceAttrLoc;
349
350 /// \brief pragma clang section kind
351 enum PragmaClangSectionKind {
352 PCSK_Invalid = 0,
353 PCSK_BSS = 1,
354 PCSK_Data = 2,
355 PCSK_Rodata = 3,
356 PCSK_Text = 4
357 };
358
359 enum PragmaClangSectionAction {
360 PCSA_Set = 0,
361 PCSA_Clear = 1
362 };
363
364 struct PragmaClangSection {
365 std::string SectionName;
366 bool Valid = false;
367 SourceLocation PragmaLocation;
368
369 void Act(SourceLocation PragmaLocation,
370 PragmaClangSectionAction Action,
371 StringLiteral* Name);
372 };
373
374 PragmaClangSection PragmaClangBSSSection;
375 PragmaClangSection PragmaClangDataSection;
376 PragmaClangSection PragmaClangRodataSection;
377 PragmaClangSection PragmaClangTextSection;
378
379 enum PragmaMsStackAction {
380 PSK_Reset = 0x0, // #pragma ()
381 PSK_Set = 0x1, // #pragma (value)
382 PSK_Push = 0x2, // #pragma (push[, id])
383 PSK_Pop = 0x4, // #pragma (pop[, id])
384 PSK_Show = 0x8, // #pragma (show) -- only for "pack"!
385 PSK_Push_Set = PSK_Push | PSK_Set, // #pragma (push[, id], value)
386 PSK_Pop_Set = PSK_Pop | PSK_Set, // #pragma (pop[, id], value)
387 };
388
389 template<typename ValueType>
390 struct PragmaStack {
391 struct Slot {
392 llvm::StringRef StackSlotLabel;
393 ValueType Value;
394 SourceLocation PragmaLocation;
395 SourceLocation PragmaPushLocation;
396 Slot(llvm::StringRef StackSlotLabel, ValueType Value,
397 SourceLocation PragmaLocation, SourceLocation PragmaPushLocation)
398 : StackSlotLabel(StackSlotLabel), Value(Value),
399 PragmaLocation(PragmaLocation),
400 PragmaPushLocation(PragmaPushLocation) {}
401 };
402 void Act(SourceLocation PragmaLocation,
403 PragmaMsStackAction Action,
404 llvm::StringRef StackSlotLabel,
405 ValueType Value);
406
407 // MSVC seems to add artificial slots to #pragma stacks on entering a C++
408 // method body to restore the stacks on exit, so it works like this:
409 //
410 // struct S {
411 // #pragma <name>(push, InternalPragmaSlot, <current_pragma_value>)
412 // void Method {}
413 // #pragma <name>(pop, InternalPragmaSlot)
414 // };
415 //
416 // It works even with #pragma vtordisp, although MSVC doesn't support
417 // #pragma vtordisp(push [, id], n)
418 // syntax.
419 //
420 // Push / pop a named sentinel slot.
421 void SentinelAction(PragmaMsStackAction Action, StringRef Label) {
422 assert((Action == PSK_Push || Action == PSK_Pop) &&(static_cast <bool> ((Action == PSK_Push || Action == PSK_Pop
) && "Can only push / pop #pragma stack sentinels!") ?
void (0) : __assert_fail ("(Action == PSK_Push || Action == PSK_Pop) && \"Can only push / pop #pragma stack sentinels!\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 423, __extension__ __PRETTY_FUNCTION__))
423 "Can only push / pop #pragma stack sentinels!")(static_cast <bool> ((Action == PSK_Push || Action == PSK_Pop
) && "Can only push / pop #pragma stack sentinels!") ?
void (0) : __assert_fail ("(Action == PSK_Push || Action == PSK_Pop) && \"Can only push / pop #pragma stack sentinels!\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 423, __extension__ __PRETTY_FUNCTION__))
;
424 Act(CurrentPragmaLocation, Action, Label, CurrentValue);
425 }
426
427 // Constructors.
428 explicit PragmaStack(const ValueType &Default)
429 : DefaultValue(Default), CurrentValue(Default) {}
430
431 bool hasValue() const { return CurrentValue != DefaultValue; }
432
433 SmallVector<Slot, 2> Stack;
434 ValueType DefaultValue; // Value used for PSK_Reset action.
435 ValueType CurrentValue;
436 SourceLocation CurrentPragmaLocation;
437 };
438 // FIXME: We should serialize / deserialize these if they occur in a PCH (but
439 // we shouldn't do so if they're in a module).
440
441 /// \brief Whether to insert vtordisps prior to virtual bases in the Microsoft
442 /// C++ ABI. Possible values are 0, 1, and 2, which mean:
443 ///
444 /// 0: Suppress all vtordisps
445 /// 1: Insert vtordisps in the presence of vbase overrides and non-trivial
446 /// structors
447 /// 2: Always insert vtordisps to support RTTI on partially constructed
448 /// objects
449 PragmaStack<MSVtorDispAttr::Mode> VtorDispStack;
450 // #pragma pack.
451 // Sentinel to represent when the stack is set to mac68k alignment.
452 static const unsigned kMac68kAlignmentSentinel = ~0U;
453 PragmaStack<unsigned> PackStack;
454 // The current #pragma pack values and locations at each #include.
455 struct PackIncludeState {
456 unsigned CurrentValue;
457 SourceLocation CurrentPragmaLocation;
458 bool HasNonDefaultValue, ShouldWarnOnInclude;
459 };
460 SmallVector<PackIncludeState, 8> PackIncludeStack;
461 // Segment #pragmas.
462 PragmaStack<StringLiteral *> DataSegStack;
463 PragmaStack<StringLiteral *> BSSSegStack;
464 PragmaStack<StringLiteral *> ConstSegStack;
465 PragmaStack<StringLiteral *> CodeSegStack;
466
467 // RAII object to push / pop sentinel slots for all MS #pragma stacks.
468 // Actions should be performed only if we enter / exit a C++ method body.
469 class PragmaStackSentinelRAII {
470 public:
471 PragmaStackSentinelRAII(Sema &S, StringRef SlotLabel, bool ShouldAct);
472 ~PragmaStackSentinelRAII();
473
474 private:
475 Sema &S;
476 StringRef SlotLabel;
477 bool ShouldAct;
478 };
479
480 /// A mapping that describes the nullability we've seen in each header file.
481 FileNullabilityMap NullabilityMap;
482
483 /// Last section used with #pragma init_seg.
484 StringLiteral *CurInitSeg;
485 SourceLocation CurInitSegLoc;
486
487 /// VisContext - Manages the stack for \#pragma GCC visibility.
488 void *VisContext; // Really a "PragmaVisStack*"
489
490 /// \brief This represents the stack of attributes that were pushed by
491 /// \#pragma clang attribute.
492 struct PragmaAttributeEntry {
493 SourceLocation Loc;
494 AttributeList *Attribute;
495 SmallVector<attr::SubjectMatchRule, 4> MatchRules;
496 bool IsUsed;
497 };
498 SmallVector<PragmaAttributeEntry, 2> PragmaAttributeStack;
499
500 /// \brief The declaration that is currently receiving an attribute from the
501 /// #pragma attribute stack.
502 const Decl *PragmaAttributeCurrentTargetDecl;
503
504 /// \brief This represents the last location of a "#pragma clang optimize off"
505 /// directive if such a directive has not been closed by an "on" yet. If
506 /// optimizations are currently "on", this is set to an invalid location.
507 SourceLocation OptimizeOffPragmaLocation;
508
509 /// \brief Flag indicating if Sema is building a recovery call expression.
510 ///
511 /// This flag is used to avoid building recovery call expressions
512 /// if Sema is already doing so, which would cause infinite recursions.
513 bool IsBuildingRecoveryCallExpr;
514
515 /// Used to control the generation of ExprWithCleanups.
516 CleanupInfo Cleanup;
517
518 /// ExprCleanupObjects - This is the stack of objects requiring
519 /// cleanup that are created by the current full expression. The
520 /// element type here is ExprWithCleanups::Object.
521 SmallVector<BlockDecl*, 8> ExprCleanupObjects;
522
523 /// \brief Store a list of either DeclRefExprs or MemberExprs
524 /// that contain a reference to a variable (constant) that may or may not
525 /// be odr-used in this Expr, and we won't know until all lvalue-to-rvalue
526 /// and discarded value conversions have been applied to all subexpressions
527 /// of the enclosing full expression. This is cleared at the end of each
528 /// full expression.
529 llvm::SmallPtrSet<Expr*, 2> MaybeODRUseExprs;
530
531 /// \brief Stack containing information about each of the nested
532 /// function, block, and method scopes that are currently active.
533 ///
534 /// This array is never empty. Clients should ignore the first
535 /// element, which is used to cache a single FunctionScopeInfo
536 /// that's used to parse every top-level function.
537 SmallVector<sema::FunctionScopeInfo *, 4> FunctionScopes;
538
539 typedef LazyVector<TypedefNameDecl *, ExternalSemaSource,
540 &ExternalSemaSource::ReadExtVectorDecls, 2, 2>
541 ExtVectorDeclsType;
542
543 /// ExtVectorDecls - This is a list all the extended vector types. This allows
544 /// us to associate a raw vector type with one of the ext_vector type names.
545 /// This is only necessary for issuing pretty diagnostics.
546 ExtVectorDeclsType ExtVectorDecls;
547
548 /// FieldCollector - Collects CXXFieldDecls during parsing of C++ classes.
549 std::unique_ptr<CXXFieldCollector> FieldCollector;
550
551 typedef llvm::SmallSetVector<const NamedDecl*, 16> NamedDeclSetType;
552
553 /// \brief Set containing all declared private fields that are not used.
554 NamedDeclSetType UnusedPrivateFields;
555
556 /// \brief Set containing all typedefs that are likely unused.
557 llvm::SmallSetVector<const TypedefNameDecl *, 4>
558 UnusedLocalTypedefNameCandidates;
559
560 /// \brief Delete-expressions to be analyzed at the end of translation unit
561 ///
562 /// This list contains class members, and locations of delete-expressions
563 /// that could not be proven as to whether they mismatch with new-expression
564 /// used in initializer of the field.
565 typedef std::pair<SourceLocation, bool> DeleteExprLoc;
566 typedef llvm::SmallVector<DeleteExprLoc, 4> DeleteLocs;
567 llvm::MapVector<FieldDecl *, DeleteLocs> DeleteExprs;
568
569 typedef llvm::SmallPtrSet<const CXXRecordDecl*, 8> RecordDeclSetTy;
570
571 /// PureVirtualClassDiagSet - a set of class declarations which we have
572 /// emitted a list of pure virtual functions. Used to prevent emitting the
573 /// same list more than once.
574 std::unique_ptr<RecordDeclSetTy> PureVirtualClassDiagSet;
575
576 /// ParsingInitForAutoVars - a set of declarations with auto types for which
577 /// we are currently parsing the initializer.
578 llvm::SmallPtrSet<const Decl*, 4> ParsingInitForAutoVars;
579
580 /// \brief Look for a locally scoped extern "C" declaration by the given name.
581 NamedDecl *findLocallyScopedExternCDecl(DeclarationName Name);
582
583 typedef LazyVector<VarDecl *, ExternalSemaSource,
584 &ExternalSemaSource::ReadTentativeDefinitions, 2, 2>
585 TentativeDefinitionsType;
586
587 /// \brief All the tentative definitions encountered in the TU.
588 TentativeDefinitionsType TentativeDefinitions;
589
590 typedef LazyVector<const DeclaratorDecl *, ExternalSemaSource,
591 &ExternalSemaSource::ReadUnusedFileScopedDecls, 2, 2>
592 UnusedFileScopedDeclsType;
593
594 /// \brief The set of file scoped decls seen so far that have not been used
595 /// and must warn if not used. Only contains the first declaration.
596 UnusedFileScopedDeclsType UnusedFileScopedDecls;
597
598 typedef LazyVector<CXXConstructorDecl *, ExternalSemaSource,
599 &ExternalSemaSource::ReadDelegatingConstructors, 2, 2>
600 DelegatingCtorDeclsType;
601
602 /// \brief All the delegating constructors seen so far in the file, used for
603 /// cycle detection at the end of the TU.
604 DelegatingCtorDeclsType DelegatingCtorDecls;
605
606 /// \brief All the overriding functions seen during a class definition
607 /// that had their exception spec checks delayed, plus the overridden
608 /// function.
609 SmallVector<std::pair<const CXXMethodDecl*, const CXXMethodDecl*>, 2>
610 DelayedExceptionSpecChecks;
611
612 /// \brief All the members seen during a class definition which were both
613 /// explicitly defaulted and had explicitly-specified exception
614 /// specifications, along with the function type containing their
615 /// user-specified exception specification. Those exception specifications
616 /// were overridden with the default specifications, but we still need to
617 /// check whether they are compatible with the default specification, and
618 /// we can't do that until the nesting set of class definitions is complete.
619 SmallVector<std::pair<CXXMethodDecl*, const FunctionProtoType*>, 2>
620 DelayedDefaultedMemberExceptionSpecs;
621
622 typedef llvm::MapVector<const FunctionDecl *,
623 std::unique_ptr<LateParsedTemplate>>
624 LateParsedTemplateMapT;
625 LateParsedTemplateMapT LateParsedTemplateMap;
626
627 /// \brief Callback to the parser to parse templated functions when needed.
628 typedef void LateTemplateParserCB(void *P, LateParsedTemplate &LPT);
629 typedef void LateTemplateParserCleanupCB(void *P);
630 LateTemplateParserCB *LateTemplateParser;
631 LateTemplateParserCleanupCB *LateTemplateParserCleanup;
632 void *OpaqueParser;
633
634 void SetLateTemplateParser(LateTemplateParserCB *LTP,
635 LateTemplateParserCleanupCB *LTPCleanup,
636 void *P) {
637 LateTemplateParser = LTP;
638 LateTemplateParserCleanup = LTPCleanup;
639 OpaqueParser = P;
640 }
641
642 class DelayedDiagnostics;
643
644 class DelayedDiagnosticsState {
645 sema::DelayedDiagnosticPool *SavedPool;
646 friend class Sema::DelayedDiagnostics;
647 };
648 typedef DelayedDiagnosticsState ParsingDeclState;
649 typedef DelayedDiagnosticsState ProcessingContextState;
650
651 /// A class which encapsulates the logic for delaying diagnostics
652 /// during parsing and other processing.
653 class DelayedDiagnostics {
654 /// \brief The current pool of diagnostics into which delayed
655 /// diagnostics should go.
656 sema::DelayedDiagnosticPool *CurPool;
657
658 public:
659 DelayedDiagnostics() : CurPool(nullptr) {}
660
661 /// Adds a delayed diagnostic.
662 void add(const sema::DelayedDiagnostic &diag); // in DelayedDiagnostic.h
663
664 /// Determines whether diagnostics should be delayed.
665 bool shouldDelayDiagnostics() { return CurPool != nullptr; }
666
667 /// Returns the current delayed-diagnostics pool.
668 sema::DelayedDiagnosticPool *getCurrentPool() const {
669 return CurPool;
670 }
671
672 /// Enter a new scope. Access and deprecation diagnostics will be
673 /// collected in this pool.
674 DelayedDiagnosticsState push(sema::DelayedDiagnosticPool &pool) {
675 DelayedDiagnosticsState state;
676 state.SavedPool = CurPool;
677 CurPool = &pool;
678 return state;
679 }
680
681 /// Leave a delayed-diagnostic state that was previously pushed.
682 /// Do not emit any of the diagnostics. This is performed as part
683 /// of the bookkeeping of popping a pool "properly".
684 void popWithoutEmitting(DelayedDiagnosticsState state) {
685 CurPool = state.SavedPool;
686 }
687
688 /// Enter a new scope where access and deprecation diagnostics are
689 /// not delayed.
690 DelayedDiagnosticsState pushUndelayed() {
691 DelayedDiagnosticsState state;
692 state.SavedPool = CurPool;
693 CurPool = nullptr;
694 return state;
695 }
696
697 /// Undo a previous pushUndelayed().
698 void popUndelayed(DelayedDiagnosticsState state) {
699 assert(CurPool == nullptr)(static_cast <bool> (CurPool == nullptr) ? void (0) : __assert_fail
("CurPool == nullptr", "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 699, __extension__ __PRETTY_FUNCTION__))
;
700 CurPool = state.SavedPool;
701 }
702 } DelayedDiagnostics;
703
704 /// A RAII object to temporarily push a declaration context.
705 class ContextRAII {
706 private:
707 Sema &S;
708 DeclContext *SavedContext;
709 ProcessingContextState SavedContextState;
710 QualType SavedCXXThisTypeOverride;
711
712 public:
713 ContextRAII(Sema &S, DeclContext *ContextToPush, bool NewThisContext = true)
714 : S(S), SavedContext(S.CurContext),
715 SavedContextState(S.DelayedDiagnostics.pushUndelayed()),
716 SavedCXXThisTypeOverride(S.CXXThisTypeOverride)
717 {
718 assert(ContextToPush && "pushing null context")(static_cast <bool> (ContextToPush && "pushing null context"
) ? void (0) : __assert_fail ("ContextToPush && \"pushing null context\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 718, __extension__ __PRETTY_FUNCTION__))
;
719 S.CurContext = ContextToPush;
720 if (NewThisContext)
721 S.CXXThisTypeOverride = QualType();
722 }
723
724 void pop() {
725 if (!SavedContext) return;
726 S.CurContext = SavedContext;
727 S.DelayedDiagnostics.popUndelayed(SavedContextState);
728 S.CXXThisTypeOverride = SavedCXXThisTypeOverride;
729 SavedContext = nullptr;
730 }
731
732 ~ContextRAII() {
733 pop();
734 }
735 };
736
737 /// \brief RAII object to handle the state changes required to synthesize
738 /// a function body.
739 class SynthesizedFunctionScope {
740 Sema &S;
741 Sema::ContextRAII SavedContext;
742 bool PushedCodeSynthesisContext = false;
743
744 public:
745 SynthesizedFunctionScope(Sema &S, DeclContext *DC)
746 : S(S), SavedContext(S, DC) {
747 S.PushFunctionScope();
748 S.PushExpressionEvaluationContext(
749 Sema::ExpressionEvaluationContext::PotentiallyEvaluated);
750 if (auto *FD = dyn_cast<FunctionDecl>(DC))
751 FD->setWillHaveBody(true);
752 else
753 assert(isa<ObjCMethodDecl>(DC))(static_cast <bool> (isa<ObjCMethodDecl>(DC)) ? void
(0) : __assert_fail ("isa<ObjCMethodDecl>(DC)", "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 753, __extension__ __PRETTY_FUNCTION__))
;
754 }
755
756 void addContextNote(SourceLocation UseLoc) {
757 assert(!PushedCodeSynthesisContext)(static_cast <bool> (!PushedCodeSynthesisContext) ? void
(0) : __assert_fail ("!PushedCodeSynthesisContext", "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 757, __extension__ __PRETTY_FUNCTION__))
;
758
759 Sema::CodeSynthesisContext Ctx;
760 Ctx.Kind = Sema::CodeSynthesisContext::DefiningSynthesizedFunction;
761 Ctx.PointOfInstantiation = UseLoc;
762 Ctx.Entity = cast<Decl>(S.CurContext);
763 S.pushCodeSynthesisContext(Ctx);
764
765 PushedCodeSynthesisContext = true;
766 }
767
768 ~SynthesizedFunctionScope() {
769 if (PushedCodeSynthesisContext)
770 S.popCodeSynthesisContext();
771 if (auto *FD = dyn_cast<FunctionDecl>(S.CurContext))
772 FD->setWillHaveBody(false);
773 S.PopExpressionEvaluationContext();
774 S.PopFunctionScopeInfo();
775 }
776 };
777
778 /// WeakUndeclaredIdentifiers - Identifiers contained in
779 /// \#pragma weak before declared. rare. may alias another
780 /// identifier, declared or undeclared
781 llvm::MapVector<IdentifierInfo *, WeakInfo> WeakUndeclaredIdentifiers;
782
783 /// ExtnameUndeclaredIdentifiers - Identifiers contained in
784 /// \#pragma redefine_extname before declared. Used in Solaris system headers
785 /// to define functions that occur in multiple standards to call the version
786 /// in the currently selected standard.
787 llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*> ExtnameUndeclaredIdentifiers;
788
789
790 /// \brief Load weak undeclared identifiers from the external source.
791 void LoadExternalWeakUndeclaredIdentifiers();
792
793 /// WeakTopLevelDecl - Translation-unit scoped declarations generated by
794 /// \#pragma weak during processing of other Decls.
795 /// I couldn't figure out a clean way to generate these in-line, so
796 /// we store them here and handle separately -- which is a hack.
797 /// It would be best to refactor this.
798 SmallVector<Decl*,2> WeakTopLevelDecl;
799
800 IdentifierResolver IdResolver;
801
802 /// Translation Unit Scope - useful to Objective-C actions that need
803 /// to lookup file scope declarations in the "ordinary" C decl namespace.
804 /// For example, user-defined classes, built-in "id" type, etc.
805 Scope *TUScope;
806
807 /// \brief The C++ "std" namespace, where the standard library resides.
808 LazyDeclPtr StdNamespace;
809
810 /// \brief The C++ "std::bad_alloc" class, which is defined by the C++
811 /// standard library.
812 LazyDeclPtr StdBadAlloc;
813
814 /// \brief The C++ "std::align_val_t" enum class, which is defined by the C++
815 /// standard library.
816 LazyDeclPtr StdAlignValT;
817
818 /// \brief The C++ "std::experimental" namespace, where the experimental parts
819 /// of the standard library resides.
820 NamespaceDecl *StdExperimentalNamespaceCache;
821
822 /// \brief The C++ "std::initializer_list" template, which is defined in
823 /// \<initializer_list>.
824 ClassTemplateDecl *StdInitializerList;
825
826 /// \brief The C++ "type_info" declaration, which is defined in \<typeinfo>.
827 RecordDecl *CXXTypeInfoDecl;
828
829 /// \brief The MSVC "_GUID" struct, which is defined in MSVC header files.
830 RecordDecl *MSVCGuidDecl;
831
832 /// \brief Caches identifiers/selectors for NSFoundation APIs.
833 std::unique_ptr<NSAPI> NSAPIObj;
834
835 /// \brief The declaration of the Objective-C NSNumber class.
836 ObjCInterfaceDecl *NSNumberDecl;
837
838 /// \brief The declaration of the Objective-C NSValue class.
839 ObjCInterfaceDecl *NSValueDecl;
840
841 /// \brief Pointer to NSNumber type (NSNumber *).
842 QualType NSNumberPointer;
843
844 /// \brief Pointer to NSValue type (NSValue *).
845 QualType NSValuePointer;
846
847 /// \brief The Objective-C NSNumber methods used to create NSNumber literals.
848 ObjCMethodDecl *NSNumberLiteralMethods[NSAPI::NumNSNumberLiteralMethods];
849
850 /// \brief The declaration of the Objective-C NSString class.
851 ObjCInterfaceDecl *NSStringDecl;
852
853 /// \brief Pointer to NSString type (NSString *).
854 QualType NSStringPointer;
855
856 /// \brief The declaration of the stringWithUTF8String: method.
857 ObjCMethodDecl *StringWithUTF8StringMethod;
858
859 /// \brief The declaration of the valueWithBytes:objCType: method.
860 ObjCMethodDecl *ValueWithBytesObjCTypeMethod;
861
862 /// \brief The declaration of the Objective-C NSArray class.
863 ObjCInterfaceDecl *NSArrayDecl;
864
865 /// \brief The declaration of the arrayWithObjects:count: method.
866 ObjCMethodDecl *ArrayWithObjectsMethod;
867
868 /// \brief The declaration of the Objective-C NSDictionary class.
869 ObjCInterfaceDecl *NSDictionaryDecl;
870
871 /// \brief The declaration of the dictionaryWithObjects:forKeys:count: method.
872 ObjCMethodDecl *DictionaryWithObjectsMethod;
873
874 /// \brief id<NSCopying> type.
875 QualType QIDNSCopying;
876
877 /// \brief will hold 'respondsToSelector:'
878 Selector RespondsToSelectorSel;
879
880 /// A flag to remember whether the implicit forms of operator new and delete
881 /// have been declared.
882 bool GlobalNewDeleteDeclared;
883
884 /// A flag to indicate that we're in a context that permits abstract
885 /// references to fields. This is really a
886 bool AllowAbstractFieldReference;
887
888 /// \brief Describes how the expressions currently being parsed are
889 /// evaluated at run-time, if at all.
890 enum class ExpressionEvaluationContext {
891 /// \brief The current expression and its subexpressions occur within an
892 /// unevaluated operand (C++11 [expr]p7), such as the subexpression of
893 /// \c sizeof, where the type of the expression may be significant but
894 /// no code will be generated to evaluate the value of the expression at
895 /// run time.
896 Unevaluated,
897
898 /// \brief The current expression occurs within a braced-init-list within
899 /// an unevaluated operand. This is mostly like a regular unevaluated
900 /// context, except that we still instantiate constexpr functions that are
901 /// referenced here so that we can perform narrowing checks correctly.
902 UnevaluatedList,
903
904 /// \brief The current expression occurs within a discarded statement.
905 /// This behaves largely similarly to an unevaluated operand in preventing
906 /// definitions from being required, but not in other ways.
907 DiscardedStatement,
908
909 /// \brief The current expression occurs within an unevaluated
910 /// operand that unconditionally permits abstract references to
911 /// fields, such as a SIZE operator in MS-style inline assembly.
912 UnevaluatedAbstract,
913
914 /// \brief The current context is "potentially evaluated" in C++11 terms,
915 /// but the expression is evaluated at compile-time (like the values of
916 /// cases in a switch statement).
917 ConstantEvaluated,
918
919 /// \brief The current expression is potentially evaluated at run time,
920 /// which means that code may be generated to evaluate the value of the
921 /// expression at run time.
922 PotentiallyEvaluated,
923
924 /// \brief The current expression is potentially evaluated, but any
925 /// declarations referenced inside that expression are only used if
926 /// in fact the current expression is used.
927 ///
928 /// This value is used when parsing default function arguments, for which
929 /// we would like to provide diagnostics (e.g., passing non-POD arguments
930 /// through varargs) but do not want to mark declarations as "referenced"
931 /// until the default argument is used.
932 PotentiallyEvaluatedIfUsed
933 };
934
935 /// \brief Data structure used to record current or nested
936 /// expression evaluation contexts.
937 struct ExpressionEvaluationContextRecord {
938 /// \brief The expression evaluation context.
939 ExpressionEvaluationContext Context;
940
941 /// \brief Whether the enclosing context needed a cleanup.
942 CleanupInfo ParentCleanup;
943
944 /// \brief Whether we are in a decltype expression.
945 bool IsDecltype;
946
947 /// \brief The number of active cleanup objects when we entered
948 /// this expression evaluation context.
949 unsigned NumCleanupObjects;
950
951 /// \brief The number of typos encountered during this expression evaluation
952 /// context (i.e. the number of TypoExprs created).
953 unsigned NumTypos;
954
955 llvm::SmallPtrSet<Expr*, 2> SavedMaybeODRUseExprs;
956
957 /// \brief The lambdas that are present within this context, if it
958 /// is indeed an unevaluated context.
959 SmallVector<LambdaExpr *, 2> Lambdas;
960
961 /// \brief The declaration that provides context for lambda expressions
962 /// and block literals if the normal declaration context does not
963 /// suffice, e.g., in a default function argument.
964 Decl *ManglingContextDecl;
965
966 /// \brief The context information used to mangle lambda expressions
967 /// and block literals within this context.
968 ///
969 /// This mangling information is allocated lazily, since most contexts
970 /// do not have lambda expressions or block literals.
971 std::unique_ptr<MangleNumberingContext> MangleNumbering;
972
973 /// \brief If we are processing a decltype type, a set of call expressions
974 /// for which we have deferred checking the completeness of the return type.
975 SmallVector<CallExpr *, 8> DelayedDecltypeCalls;
976
977 /// \brief If we are processing a decltype type, a set of temporary binding
978 /// expressions for which we have deferred checking the destructor.
979 SmallVector<CXXBindTemporaryExpr *, 8> DelayedDecltypeBinds;
980
981 ExpressionEvaluationContextRecord(ExpressionEvaluationContext Context,
982 unsigned NumCleanupObjects,
983 CleanupInfo ParentCleanup,
984 Decl *ManglingContextDecl,
985 bool IsDecltype)
986 : Context(Context), ParentCleanup(ParentCleanup),
987 IsDecltype(IsDecltype), NumCleanupObjects(NumCleanupObjects),
988 NumTypos(0),
989 ManglingContextDecl(ManglingContextDecl), MangleNumbering() { }
990
991 /// \brief Retrieve the mangling numbering context, used to consistently
992 /// number constructs like lambdas for mangling.
993 MangleNumberingContext &getMangleNumberingContext(ASTContext &Ctx);
994
995 bool isUnevaluated() const {
996 return Context == ExpressionEvaluationContext::Unevaluated ||
997 Context == ExpressionEvaluationContext::UnevaluatedAbstract ||
998 Context == ExpressionEvaluationContext::UnevaluatedList;
999 }
1000 bool isConstantEvaluated() const {
1001 return Context == ExpressionEvaluationContext::ConstantEvaluated;
1002 }
1003 };
1004
1005 /// A stack of expression evaluation contexts.
1006 SmallVector<ExpressionEvaluationContextRecord, 8> ExprEvalContexts;
1007
1008 /// \brief Compute the mangling number context for a lambda expression or
1009 /// block literal.
1010 ///
1011 /// \param DC - The DeclContext containing the lambda expression or
1012 /// block literal.
1013 /// \param[out] ManglingContextDecl - Returns the ManglingContextDecl
1014 /// associated with the context, if relevant.
1015 MangleNumberingContext *getCurrentMangleNumberContext(
1016 const DeclContext *DC,
1017 Decl *&ManglingContextDecl);
1018
1019
1020 /// SpecialMemberOverloadResult - The overloading result for a special member
1021 /// function.
1022 ///
1023 /// This is basically a wrapper around PointerIntPair. The lowest bits of the
1024 /// integer are used to determine whether overload resolution succeeded.
1025 class SpecialMemberOverloadResult {
1026 public:
1027 enum Kind {
1028 NoMemberOrDeleted,
1029 Ambiguous,
1030 Success
1031 };
1032
1033 private:
1034 llvm::PointerIntPair<CXXMethodDecl*, 2> Pair;
1035
1036 public:
1037 SpecialMemberOverloadResult() : Pair() {}
1038 SpecialMemberOverloadResult(CXXMethodDecl *MD)
1039 : Pair(MD, MD->isDeleted() ? NoMemberOrDeleted : Success) {}
1040
1041 CXXMethodDecl *getMethod() const { return Pair.getPointer(); }
1042 void setMethod(CXXMethodDecl *MD) { Pair.setPointer(MD); }
1043
1044 Kind getKind() const { return static_cast<Kind>(Pair.getInt()); }
1045 void setKind(Kind K) { Pair.setInt(K); }
1046 };
1047
1048 class SpecialMemberOverloadResultEntry
1049 : public llvm::FastFoldingSetNode,
1050 public SpecialMemberOverloadResult {
1051 public:
1052 SpecialMemberOverloadResultEntry(const llvm::FoldingSetNodeID &ID)
1053 : FastFoldingSetNode(ID)
1054 {}
1055 };
1056
1057 /// \brief A cache of special member function overload resolution results
1058 /// for C++ records.
1059 llvm::FoldingSet<SpecialMemberOverloadResultEntry> SpecialMemberCache;
1060
1061 /// \brief A cache of the flags available in enumerations with the flag_bits
1062 /// attribute.
1063 mutable llvm::DenseMap<const EnumDecl*, llvm::APInt> FlagBitsCache;
1064
1065 /// \brief The kind of translation unit we are processing.
1066 ///
1067 /// When we're processing a complete translation unit, Sema will perform
1068 /// end-of-translation-unit semantic tasks (such as creating
1069 /// initializers for tentative definitions in C) once parsing has
1070 /// completed. Modules and precompiled headers perform different kinds of
1071 /// checks.
1072 TranslationUnitKind TUKind;
1073
1074 llvm::BumpPtrAllocator BumpAlloc;
1075
1076 /// \brief The number of SFINAE diagnostics that have been trapped.
1077 unsigned NumSFINAEErrors;
1078
1079 typedef llvm::DenseMap<ParmVarDecl *, llvm::TinyPtrVector<ParmVarDecl *>>
1080 UnparsedDefaultArgInstantiationsMap;
1081
1082 /// \brief A mapping from parameters with unparsed default arguments to the
1083 /// set of instantiations of each parameter.
1084 ///
1085 /// This mapping is a temporary data structure used when parsing
1086 /// nested class templates or nested classes of class templates,
1087 /// where we might end up instantiating an inner class before the
1088 /// default arguments of its methods have been parsed.
1089 UnparsedDefaultArgInstantiationsMap UnparsedDefaultArgInstantiations;
1090
1091 // Contains the locations of the beginning of unparsed default
1092 // argument locations.
1093 llvm::DenseMap<ParmVarDecl *, SourceLocation> UnparsedDefaultArgLocs;
1094
1095 /// UndefinedInternals - all the used, undefined objects which require a
1096 /// definition in this translation unit.
1097 llvm::MapVector<NamedDecl *, SourceLocation> UndefinedButUsed;
1098
1099 /// Determine if VD, which must be a variable or function, is an external
1100 /// symbol that nonetheless can't be referenced from outside this translation
1101 /// unit because its type has no linkage and it's not extern "C".
1102 bool isExternalWithNoLinkageType(ValueDecl *VD);
1103
1104 /// Obtain a sorted list of functions that are undefined but ODR-used.
1105 void getUndefinedButUsed(
1106 SmallVectorImpl<std::pair<NamedDecl *, SourceLocation> > &Undefined);
1107
1108 /// Retrieves list of suspicious delete-expressions that will be checked at
1109 /// the end of translation unit.
1110 const llvm::MapVector<FieldDecl *, DeleteLocs> &
1111 getMismatchingDeleteExpressions() const;
1112
1113 typedef std::pair<ObjCMethodList, ObjCMethodList> GlobalMethods;
1114 typedef llvm::DenseMap<Selector, GlobalMethods> GlobalMethodPool;
1115
1116 /// Method Pool - allows efficient lookup when typechecking messages to "id".
1117 /// We need to maintain a list, since selectors can have differing signatures
1118 /// across classes. In Cocoa, this happens to be extremely uncommon (only 1%
1119 /// of selectors are "overloaded").
1120 /// At the head of the list it is recorded whether there were 0, 1, or >= 2
1121 /// methods inside categories with a particular selector.
1122 GlobalMethodPool MethodPool;
1123
1124 /// Method selectors used in a \@selector expression. Used for implementation
1125 /// of -Wselector.
1126 llvm::MapVector<Selector, SourceLocation> ReferencedSelectors;
1127
1128 /// Kinds of C++ special members.
1129 enum CXXSpecialMember {
1130 CXXDefaultConstructor,
1131 CXXCopyConstructor,
1132 CXXMoveConstructor,
1133 CXXCopyAssignment,
1134 CXXMoveAssignment,
1135 CXXDestructor,
1136 CXXInvalid
1137 };
1138
1139 typedef llvm::PointerIntPair<CXXRecordDecl *, 3, CXXSpecialMember>
1140 SpecialMemberDecl;
1141
1142 /// The C++ special members which we are currently in the process of
1143 /// declaring. If this process recursively triggers the declaration of the
1144 /// same special member, we should act as if it is not yet declared.
1145 llvm::SmallPtrSet<SpecialMemberDecl, 4> SpecialMembersBeingDeclared;
1146
1147 /// The function definitions which were renamed as part of typo-correction
1148 /// to match their respective declarations. We want to keep track of them
1149 /// to ensure that we don't emit a "redefinition" error if we encounter a
1150 /// correctly named definition after the renamed definition.
1151 llvm::SmallPtrSet<const NamedDecl *, 4> TypoCorrectedFunctionDefinitions;
1152
1153 /// Stack of types that correspond to the parameter entities that are
1154 /// currently being copy-initialized. Can be empty.
1155 llvm::SmallVector<QualType, 4> CurrentParameterCopyTypes;
1156
1157 void ReadMethodPool(Selector Sel);
1158 void updateOutOfDateSelector(Selector Sel);
1159
1160 /// Private Helper predicate to check for 'self'.
1161 bool isSelfExpr(Expr *RExpr);
1162 bool isSelfExpr(Expr *RExpr, const ObjCMethodDecl *Method);
1163
1164 /// \brief Cause the active diagnostic on the DiagosticsEngine to be
1165 /// emitted. This is closely coupled to the SemaDiagnosticBuilder class and
1166 /// should not be used elsewhere.
1167 void EmitCurrentDiagnostic(unsigned DiagID);
1168
1169 /// Records and restores the FP_CONTRACT state on entry/exit of compound
1170 /// statements.
1171 class FPContractStateRAII {
1172 public:
1173 FPContractStateRAII(Sema &S) : S(S), OldFPFeaturesState(S.FPFeatures) {}
1174 ~FPContractStateRAII() { S.FPFeatures = OldFPFeaturesState; }
1175
1176 private:
1177 Sema& S;
1178 FPOptions OldFPFeaturesState;
1179 };
1180
1181 void addImplicitTypedef(StringRef Name, QualType T);
1182
1183public:
1184 Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
1185 TranslationUnitKind TUKind = TU_Complete,
1186 CodeCompleteConsumer *CompletionConsumer = nullptr);
1187 ~Sema();
1188
1189 /// \brief Perform initialization that occurs after the parser has been
1190 /// initialized but before it parses anything.
1191 void Initialize();
1192
1193 const LangOptions &getLangOpts() const { return LangOpts; }
1194 OpenCLOptions &getOpenCLOptions() { return OpenCLFeatures; }
1195 FPOptions &getFPOptions() { return FPFeatures; }
1196
1197 DiagnosticsEngine &getDiagnostics() const { return Diags; }
1198 SourceManager &getSourceManager() const { return SourceMgr; }
1199 Preprocessor &getPreprocessor() const { return PP; }
1200 ASTContext &getASTContext() const { return Context; }
1201 ASTConsumer &getASTConsumer() const { return Consumer; }
1202 ASTMutationListener *getASTMutationListener() const;
1203 ExternalSemaSource* getExternalSource() const { return ExternalSource; }
1204
1205 ///\brief Registers an external source. If an external source already exists,
1206 /// creates a multiplex external source and appends to it.
1207 ///
1208 ///\param[in] E - A non-null external sema source.
1209 ///
1210 void addExternalSource(ExternalSemaSource *E);
1211
1212 void PrintStats() const;
1213
1214 /// \brief Helper class that creates diagnostics with optional
1215 /// template instantiation stacks.
1216 ///
1217 /// This class provides a wrapper around the basic DiagnosticBuilder
1218 /// class that emits diagnostics. SemaDiagnosticBuilder is
1219 /// responsible for emitting the diagnostic (as DiagnosticBuilder
1220 /// does) and, if the diagnostic comes from inside a template
1221 /// instantiation, printing the template instantiation stack as
1222 /// well.
1223 class SemaDiagnosticBuilder : public DiagnosticBuilder {
1224 Sema &SemaRef;
1225 unsigned DiagID;
1226
1227 public:
1228 SemaDiagnosticBuilder(DiagnosticBuilder &DB, Sema &SemaRef, unsigned DiagID)
1229 : DiagnosticBuilder(DB), SemaRef(SemaRef), DiagID(DiagID) { }
1230
1231 // This is a cunning lie. DiagnosticBuilder actually performs move
1232 // construction in its copy constructor (but due to varied uses, it's not
1233 // possible to conveniently express this as actual move construction). So
1234 // the default copy ctor here is fine, because the base class disables the
1235 // source anyway, so the user-defined ~SemaDiagnosticBuilder is a safe no-op
1236 // in that case anwyay.
1237 SemaDiagnosticBuilder(const SemaDiagnosticBuilder&) = default;
1238
1239 ~SemaDiagnosticBuilder() {
1240 // If we aren't active, there is nothing to do.
1241 if (!isActive()) return;
1242
1243 // Otherwise, we need to emit the diagnostic. First flush the underlying
1244 // DiagnosticBuilder data, and clear the diagnostic builder itself so it
1245 // won't emit the diagnostic in its own destructor.
1246 //
1247 // This seems wasteful, in that as written the DiagnosticBuilder dtor will
1248 // do its own needless checks to see if the diagnostic needs to be
1249 // emitted. However, because we take care to ensure that the builder
1250 // objects never escape, a sufficiently smart compiler will be able to
1251 // eliminate that code.
1252 FlushCounts();
1253 Clear();
1254
1255 // Dispatch to Sema to emit the diagnostic.
1256 SemaRef.EmitCurrentDiagnostic(DiagID);
1257 }
1258
1259 /// Teach operator<< to produce an object of the correct type.
1260 template<typename T>
1261 friend const SemaDiagnosticBuilder &operator<<(
1262 const SemaDiagnosticBuilder &Diag, const T &Value) {
1263 const DiagnosticBuilder &BaseDiag = Diag;
1264 BaseDiag << Value;
1265 return Diag;
1266 }
1267 };
1268
1269 /// \brief Emit a diagnostic.
1270 SemaDiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) {
1271 DiagnosticBuilder DB = Diags.Report(Loc, DiagID);
1272 return SemaDiagnosticBuilder(DB, *this, DiagID);
1273 }
1274
1275 /// \brief Emit a partial diagnostic.
1276 SemaDiagnosticBuilder Diag(SourceLocation Loc, const PartialDiagnostic& PD);
1277
1278 /// \brief Build a partial diagnostic.
1279 PartialDiagnostic PDiag(unsigned DiagID = 0); // in SemaInternal.h
1280
1281 bool findMacroSpelling(SourceLocation &loc, StringRef name);
1282
1283 /// \brief Get a string to suggest for zero-initialization of a type.
1284 std::string
1285 getFixItZeroInitializerForType(QualType T, SourceLocation Loc) const;
1286 std::string getFixItZeroLiteralForType(QualType T, SourceLocation Loc) const;
1287
1288 /// \brief Calls \c Lexer::getLocForEndOfToken()
1289 SourceLocation getLocForEndOfToken(SourceLocation Loc, unsigned Offset = 0);
1290
1291 /// \brief Retrieve the module loader associated with the preprocessor.
1292 ModuleLoader &getModuleLoader() const;
1293
1294 void emitAndClearUnusedLocalTypedefWarnings();
1295
1296 void ActOnStartOfTranslationUnit();
1297 void ActOnEndOfTranslationUnit();
1298
1299 void CheckDelegatingCtorCycles();
1300
1301 Scope *getScopeForContext(DeclContext *Ctx);
1302
1303 void PushFunctionScope();
1304 void PushBlockScope(Scope *BlockScope, BlockDecl *Block);
1305 sema::LambdaScopeInfo *PushLambdaScope();
1306
1307 /// \brief This is used to inform Sema what the current TemplateParameterDepth
1308 /// is during Parsing. Currently it is used to pass on the depth
1309 /// when parsing generic lambda 'auto' parameters.
1310 void RecordParsingTemplateParameterDepth(unsigned Depth);
1311
1312 void PushCapturedRegionScope(Scope *RegionScope, CapturedDecl *CD,
1313 RecordDecl *RD,
1314 CapturedRegionKind K);
1315 void
1316 PopFunctionScopeInfo(const sema::AnalysisBasedWarnings::Policy *WP = nullptr,
1317 const Decl *D = nullptr,
1318 const BlockExpr *blkExpr = nullptr);
1319
1320 sema::FunctionScopeInfo *getCurFunction() const {
1321 return FunctionScopes.back();
1322 }
1323
1324 sema::FunctionScopeInfo *getEnclosingFunction() const {
1325 if (FunctionScopes.empty())
1326 return nullptr;
1327
1328 for (int e = FunctionScopes.size()-1; e >= 0; --e) {
1329 if (isa<sema::BlockScopeInfo>(FunctionScopes[e]))
1330 continue;
1331 return FunctionScopes[e];
1332 }
1333 return nullptr;
1334 }
1335
1336 template <typename ExprT>
1337 void recordUseOfEvaluatedWeak(const ExprT *E, bool IsRead=true) {
1338 if (!isUnevaluatedContext())
1339 getCurFunction()->recordUseOfWeak(E, IsRead);
1340 }
1341
1342 void PushCompoundScope();
1343 void PopCompoundScope();
1344
1345 sema::CompoundScopeInfo &getCurCompoundScope() const;
1346
1347 bool hasAnyUnrecoverableErrorsInThisFunction() const;
1348
1349 /// \brief Retrieve the current block, if any.
1350 sema::BlockScopeInfo *getCurBlock();
1351
1352 /// Retrieve the current lambda scope info, if any.
1353 /// \param IgnoreNonLambdaCapturingScope true if should find the top-most
1354 /// lambda scope info ignoring all inner capturing scopes that are not
1355 /// lambda scopes.
1356 sema::LambdaScopeInfo *
1357 getCurLambda(bool IgnoreNonLambdaCapturingScope = false);
1358
1359 /// \brief Retrieve the current generic lambda info, if any.
1360 sema::LambdaScopeInfo *getCurGenericLambda();
1361
1362 /// \brief Retrieve the current captured region, if any.
1363 sema::CapturedRegionScopeInfo *getCurCapturedRegion();
1364
1365 /// WeakTopLevelDeclDecls - access to \#pragma weak-generated Decls
1366 SmallVectorImpl<Decl *> &WeakTopLevelDecls() { return WeakTopLevelDecl; }
1367
1368 void ActOnComment(SourceRange Comment);
1369
1370 //===--------------------------------------------------------------------===//
1371 // Type Analysis / Processing: SemaType.cpp.
1372 //
1373
1374 QualType BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs,
1375 const DeclSpec *DS = nullptr);
1376 QualType BuildQualifiedType(QualType T, SourceLocation Loc, unsigned CVRA,
1377 const DeclSpec *DS = nullptr);
1378 QualType BuildPointerType(QualType T,
1379 SourceLocation Loc, DeclarationName Entity);
1380 QualType BuildReferenceType(QualType T, bool LValueRef,
1381 SourceLocation Loc, DeclarationName Entity);
1382 QualType BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM,
1383 Expr *ArraySize, unsigned Quals,
1384 SourceRange Brackets, DeclarationName Entity);
1385 QualType BuildExtVectorType(QualType T, Expr *ArraySize,
1386 SourceLocation AttrLoc);
1387 QualType BuildAddressSpaceAttr(QualType &T, Expr *AddrSpace,
1388 SourceLocation AttrLoc);
1389
1390 bool CheckFunctionReturnType(QualType T, SourceLocation Loc);
1391
1392 /// \brief Build a function type.
1393 ///
1394 /// This routine checks the function type according to C++ rules and
1395 /// under the assumption that the result type and parameter types have
1396 /// just been instantiated from a template. It therefore duplicates
1397 /// some of the behavior of GetTypeForDeclarator, but in a much
1398 /// simpler form that is only suitable for this narrow use case.
1399 ///
1400 /// \param T The return type of the function.
1401 ///
1402 /// \param ParamTypes The parameter types of the function. This array
1403 /// will be modified to account for adjustments to the types of the
1404 /// function parameters.
1405 ///
1406 /// \param Loc The location of the entity whose type involves this
1407 /// function type or, if there is no such entity, the location of the
1408 /// type that will have function type.
1409 ///
1410 /// \param Entity The name of the entity that involves the function
1411 /// type, if known.
1412 ///
1413 /// \param EPI Extra information about the function type. Usually this will
1414 /// be taken from an existing function with the same prototype.
1415 ///
1416 /// \returns A suitable function type, if there are no errors. The
1417 /// unqualified type will always be a FunctionProtoType.
1418 /// Otherwise, returns a NULL type.
1419 QualType BuildFunctionType(QualType T,
1420 MutableArrayRef<QualType> ParamTypes,
1421 SourceLocation Loc, DeclarationName Entity,
1422 const FunctionProtoType::ExtProtoInfo &EPI);
1423
1424 QualType BuildMemberPointerType(QualType T, QualType Class,
1425 SourceLocation Loc,
1426 DeclarationName Entity);
1427 QualType BuildBlockPointerType(QualType T,
1428 SourceLocation Loc, DeclarationName Entity);
1429 QualType BuildParenType(QualType T);
1430 QualType BuildAtomicType(QualType T, SourceLocation Loc);
1431 QualType BuildReadPipeType(QualType T,
1432 SourceLocation Loc);
1433 QualType BuildWritePipeType(QualType T,
1434 SourceLocation Loc);
1435
1436 TypeSourceInfo *GetTypeForDeclarator(Declarator &D, Scope *S);
1437 TypeSourceInfo *GetTypeForDeclaratorCast(Declarator &D, QualType FromTy);
1438 TypeSourceInfo *GetTypeSourceInfoForDeclarator(Declarator &D, QualType T,
1439 TypeSourceInfo *ReturnTypeInfo);
1440
1441 /// \brief Package the given type and TSI into a ParsedType.
1442 ParsedType CreateParsedType(QualType T, TypeSourceInfo *TInfo);
1443 DeclarationNameInfo GetNameForDeclarator(Declarator &D);
1444 DeclarationNameInfo GetNameFromUnqualifiedId(const UnqualifiedId &Name);
1445 static QualType GetTypeFromParser(ParsedType Ty,
1446 TypeSourceInfo **TInfo = nullptr);
1447 CanThrowResult canThrow(const Expr *E);
1448 const FunctionProtoType *ResolveExceptionSpec(SourceLocation Loc,
1449 const FunctionProtoType *FPT);
1450 void UpdateExceptionSpec(FunctionDecl *FD,
1451 const FunctionProtoType::ExceptionSpecInfo &ESI);
1452 bool CheckSpecifiedExceptionType(QualType &T, SourceRange Range);
1453 bool CheckDistantExceptionSpec(QualType T);
1454 bool CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New);
1455 bool CheckEquivalentExceptionSpec(
1456 const FunctionProtoType *Old, SourceLocation OldLoc,
1457 const FunctionProtoType *New, SourceLocation NewLoc);
1458 bool CheckEquivalentExceptionSpec(
1459 const PartialDiagnostic &DiagID, const PartialDiagnostic & NoteID,
1460 const FunctionProtoType *Old, SourceLocation OldLoc,
1461 const FunctionProtoType *New, SourceLocation NewLoc);
1462 bool CheckExceptionSpecSubset(const PartialDiagnostic &DiagID,
1463 const PartialDiagnostic &NestedDiagID,
1464 const PartialDiagnostic &NoteID,
1465 const FunctionProtoType *Superset,
1466 SourceLocation SuperLoc,
1467 const FunctionProtoType *Subset,
1468 SourceLocation SubLoc);
1469 bool CheckParamExceptionSpec(const PartialDiagnostic &NestedDiagID,
1470 const PartialDiagnostic &NoteID,
1471 const FunctionProtoType *Target,
1472 SourceLocation TargetLoc,
1473 const FunctionProtoType *Source,
1474 SourceLocation SourceLoc);
1475
1476 TypeResult ActOnTypeName(Scope *S, Declarator &D);
1477
1478 /// \brief The parser has parsed the context-sensitive type 'instancetype'
1479 /// in an Objective-C message declaration. Return the appropriate type.
1480 ParsedType ActOnObjCInstanceType(SourceLocation Loc);
1481
1482 /// \brief Abstract class used to diagnose incomplete types.
1483 struct TypeDiagnoser {
1484 TypeDiagnoser() {}
1485
1486 virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) = 0;
1487 virtual ~TypeDiagnoser() {}
1488 };
1489
1490 static int getPrintable(int I) { return I; }
1491 static unsigned getPrintable(unsigned I) { return I; }
1492 static bool getPrintable(bool B) { return B; }
1493 static const char * getPrintable(const char *S) { return S; }
1494 static StringRef getPrintable(StringRef S) { return S; }
1495 static const std::string &getPrintable(const std::string &S) { return S; }
1496 static const IdentifierInfo *getPrintable(const IdentifierInfo *II) {
1497 return II;
1498 }
1499 static DeclarationName getPrintable(DeclarationName N) { return N; }
1500 static QualType getPrintable(QualType T) { return T; }
1501 static SourceRange getPrintable(SourceRange R) { return R; }
1502 static SourceRange getPrintable(SourceLocation L) { return L; }
1503 static SourceRange getPrintable(const Expr *E) { return E->getSourceRange(); }
1504 static SourceRange getPrintable(TypeLoc TL) { return TL.getSourceRange();}
1505
1506 template <typename... Ts> class BoundTypeDiagnoser : public TypeDiagnoser {
1507 unsigned DiagID;
1508 std::tuple<const Ts &...> Args;
1509
1510 template <std::size_t... Is>
1511 void emit(const SemaDiagnosticBuilder &DB,
1512 llvm::index_sequence<Is...>) const {
1513 // Apply all tuple elements to the builder in order.
1514 bool Dummy[] = {false, (DB << getPrintable(std::get<Is>(Args)))...};
1515 (void)Dummy;
1516 }
1517
1518 public:
1519 BoundTypeDiagnoser(unsigned DiagID, const Ts &...Args)
1520 : TypeDiagnoser(), DiagID(DiagID), Args(Args...) {
1521 assert(DiagID != 0 && "no diagnostic for type diagnoser")(static_cast <bool> (DiagID != 0 && "no diagnostic for type diagnoser"
) ? void (0) : __assert_fail ("DiagID != 0 && \"no diagnostic for type diagnoser\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 1521, __extension__ __PRETTY_FUNCTION__))
;
1522 }
1523
1524 void diagnose(Sema &S, SourceLocation Loc, QualType T) override {
1525 const SemaDiagnosticBuilder &DB = S.Diag(Loc, DiagID);
1526 emit(DB, llvm::index_sequence_for<Ts...>());
1527 DB << T;
1528 }
1529 };
1530
1531private:
1532 bool RequireCompleteTypeImpl(SourceLocation Loc, QualType T,
1533 TypeDiagnoser *Diagnoser);
1534
1535 struct ModuleScope {
1536 clang::Module *Module = nullptr;
1537 bool ModuleInterface = false;
1538 VisibleModuleSet OuterVisibleModules;
1539 };
1540 /// The modules we're currently parsing.
1541 llvm::SmallVector<ModuleScope, 16> ModuleScopes;
1542
1543 /// Get the module whose scope we are currently within.
1544 Module *getCurrentModule() const {
1545 return ModuleScopes.empty() ? nullptr : ModuleScopes.back().Module;
1546 }
1547
1548 VisibleModuleSet VisibleModules;
1549
1550public:
1551 /// \brief Get the module owning an entity.
1552 Module *getOwningModule(Decl *Entity) { return Entity->getOwningModule(); }
1553
1554 /// \brief Make a merged definition of an existing hidden definition \p ND
1555 /// visible at the specified location.
1556 void makeMergedDefinitionVisible(NamedDecl *ND);
1557
1558 bool isModuleVisible(const Module *M) { return VisibleModules.isVisible(M); }
1559
1560 /// Determine whether a declaration is visible to name lookup.
1561 bool isVisible(const NamedDecl *D) {
1562 return !D->isHidden() || isVisibleSlow(D);
1563 }
1564
1565 /// Determine whether any declaration of an entity is visible.
1566 bool
1567 hasVisibleDeclaration(const NamedDecl *D,
1568 llvm::SmallVectorImpl<Module *> *Modules = nullptr) {
1569 return isVisible(D) || hasVisibleDeclarationSlow(D, Modules);
1570 }
1571 bool hasVisibleDeclarationSlow(const NamedDecl *D,
1572 llvm::SmallVectorImpl<Module *> *Modules);
1573
1574 bool hasVisibleMergedDefinition(NamedDecl *Def);
1575 bool hasMergedDefinitionInCurrentModule(NamedDecl *Def);
1576
1577 /// Determine if \p D and \p Suggested have a structurally compatible
1578 /// layout as described in C11 6.2.7/1.
1579 bool hasStructuralCompatLayout(Decl *D, Decl *Suggested);
1580
1581 /// Determine if \p D has a visible definition. If not, suggest a declaration
1582 /// that should be made visible to expose the definition.
1583 bool hasVisibleDefinition(NamedDecl *D, NamedDecl **Suggested,
1584 bool OnlyNeedComplete = false);
1585 bool hasVisibleDefinition(const NamedDecl *D) {
1586 NamedDecl *Hidden;
1587 return hasVisibleDefinition(const_cast<NamedDecl*>(D), &Hidden);
1588 }
1589
1590 /// Determine if the template parameter \p D has a visible default argument.
1591 bool
1592 hasVisibleDefaultArgument(const NamedDecl *D,
1593 llvm::SmallVectorImpl<Module *> *Modules = nullptr);
1594
1595 /// Determine if there is a visible declaration of \p D that is an explicit
1596 /// specialization declaration for a specialization of a template. (For a
1597 /// member specialization, use hasVisibleMemberSpecialization.)
1598 bool hasVisibleExplicitSpecialization(
1599 const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
1600
1601 /// Determine if there is a visible declaration of \p D that is a member
1602 /// specialization declaration (as opposed to an instantiated declaration).
1603 bool hasVisibleMemberSpecialization(
1604 const NamedDecl *D, llvm::SmallVectorImpl<Module *> *Modules = nullptr);
1605
1606 /// Determine if \p A and \p B are equivalent internal linkage declarations
1607 /// from different modules, and thus an ambiguity error can be downgraded to
1608 /// an extension warning.
1609 bool isEquivalentInternalLinkageDeclaration(const NamedDecl *A,
1610 const NamedDecl *B);
1611 void diagnoseEquivalentInternalLinkageDeclarations(
1612 SourceLocation Loc, const NamedDecl *D,
1613 ArrayRef<const NamedDecl *> Equiv);
1614
1615 bool isCompleteType(SourceLocation Loc, QualType T) {
1616 return !RequireCompleteTypeImpl(Loc, T, nullptr);
1617 }
1618 bool RequireCompleteType(SourceLocation Loc, QualType T,
1619 TypeDiagnoser &Diagnoser);
1620 bool RequireCompleteType(SourceLocation Loc, QualType T,
1621 unsigned DiagID);
1622
1623 template <typename... Ts>
1624 bool RequireCompleteType(SourceLocation Loc, QualType T, unsigned DiagID,
1625 const Ts &...Args) {
1626 BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
1627 return RequireCompleteType(Loc, T, Diagnoser);
1628 }
1629
1630 void completeExprArrayBound(Expr *E);
1631 bool RequireCompleteExprType(Expr *E, TypeDiagnoser &Diagnoser);
1632 bool RequireCompleteExprType(Expr *E, unsigned DiagID);
1633
1634 template <typename... Ts>
1635 bool RequireCompleteExprType(Expr *E, unsigned DiagID, const Ts &...Args) {
1636 BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
1637 return RequireCompleteExprType(E, Diagnoser);
1638 }
1639
1640 bool RequireLiteralType(SourceLocation Loc, QualType T,
1641 TypeDiagnoser &Diagnoser);
1642 bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID);
1643
1644 template <typename... Ts>
1645 bool RequireLiteralType(SourceLocation Loc, QualType T, unsigned DiagID,
1646 const Ts &...Args) {
1647 BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
1648 return RequireLiteralType(Loc, T, Diagnoser);
1649 }
1650
1651 QualType getElaboratedType(ElaboratedTypeKeyword Keyword,
1652 const CXXScopeSpec &SS, QualType T);
1653
1654 QualType BuildTypeofExprType(Expr *E, SourceLocation Loc);
1655 /// If AsUnevaluated is false, E is treated as though it were an evaluated
1656 /// context, such as when building a type for decltype(auto).
1657 QualType BuildDecltypeType(Expr *E, SourceLocation Loc,
1658 bool AsUnevaluated = true);
1659 QualType BuildUnaryTransformType(QualType BaseType,
1660 UnaryTransformType::UTTKind UKind,
1661 SourceLocation Loc);
1662
1663 //===--------------------------------------------------------------------===//
1664 // Symbol table / Decl tracking callbacks: SemaDecl.cpp.
1665 //
1666
1667 struct SkipBodyInfo {
1668 SkipBodyInfo()
1669 : ShouldSkip(false), CheckSameAsPrevious(false), Previous(nullptr),
1670 New(nullptr) {}
1671 bool ShouldSkip;
1672 bool CheckSameAsPrevious;
1673 NamedDecl *Previous;
1674 NamedDecl *New;
1675 };
1676
1677 DeclGroupPtrTy ConvertDeclToDeclGroup(Decl *Ptr, Decl *OwnedType = nullptr);
1678
1679 void DiagnoseUseOfUnimplementedSelectors();
1680
1681 bool isSimpleTypeSpecifier(tok::TokenKind Kind) const;
1682
1683 ParsedType getTypeName(const IdentifierInfo &II, SourceLocation NameLoc,
1684 Scope *S, CXXScopeSpec *SS = nullptr,
1685 bool isClassName = false, bool HasTrailingDot = false,
1686 ParsedType ObjectType = nullptr,
1687 bool IsCtorOrDtorName = false,
1688 bool WantNontrivialTypeSourceInfo = false,
1689 bool IsClassTemplateDeductionContext = true,
1690 IdentifierInfo **CorrectedII = nullptr);
1691 TypeSpecifierType isTagName(IdentifierInfo &II, Scope *S);
1692 bool isMicrosoftMissingTypename(const CXXScopeSpec *SS, Scope *S);
1693 void DiagnoseUnknownTypeName(IdentifierInfo *&II,
1694 SourceLocation IILoc,
1695 Scope *S,
1696 CXXScopeSpec *SS,
1697 ParsedType &SuggestedType,
1698 bool IsTemplateName = false);
1699
1700 /// Attempt to behave like MSVC in situations where lookup of an unqualified
1701 /// type name has failed in a dependent context. In these situations, we
1702 /// automatically form a DependentTypeName that will retry lookup in a related
1703 /// scope during instantiation.
1704 ParsedType ActOnMSVCUnknownTypeName(const IdentifierInfo &II,
1705 SourceLocation NameLoc,
1706 bool IsTemplateTypeArg);
1707
1708 /// \brief Describes the result of the name lookup and resolution performed
1709 /// by \c ClassifyName().
1710 enum NameClassificationKind {
1711 NC_Unknown,
1712 NC_Error,
1713 NC_Keyword,
1714 NC_Type,
1715 NC_Expression,
1716 NC_NestedNameSpecifier,
1717 NC_TypeTemplate,
1718 NC_VarTemplate,
1719 NC_FunctionTemplate
1720 };
1721
1722 class NameClassification {
1723 NameClassificationKind Kind;
1724 ExprResult Expr;
1725 TemplateName Template;
1726 ParsedType Type;
1727
1728 explicit NameClassification(NameClassificationKind Kind) : Kind(Kind) {}
1729
1730 public:
1731 NameClassification(ExprResult Expr) : Kind(NC_Expression), Expr(Expr) {}
1732
1733 NameClassification(ParsedType Type) : Kind(NC_Type), Type(Type) {}
1734
1735 NameClassification(const IdentifierInfo *Keyword) : Kind(NC_Keyword) {}
1736
1737 static NameClassification Error() {
1738 return NameClassification(NC_Error);
1739 }
1740
1741 static NameClassification Unknown() {
1742 return NameClassification(NC_Unknown);
1743 }
1744
1745 static NameClassification NestedNameSpecifier() {
1746 return NameClassification(NC_NestedNameSpecifier);
1747 }
1748
1749 static NameClassification TypeTemplate(TemplateName Name) {
1750 NameClassification Result(NC_TypeTemplate);
1751 Result.Template = Name;
1752 return Result;
1753 }
1754
1755 static NameClassification VarTemplate(TemplateName Name) {
1756 NameClassification Result(NC_VarTemplate);
1757 Result.Template = Name;
1758 return Result;
1759 }
1760
1761 static NameClassification FunctionTemplate(TemplateName Name) {
1762 NameClassification Result(NC_FunctionTemplate);
1763 Result.Template = Name;
1764 return Result;
1765 }
1766
1767 NameClassificationKind getKind() const { return Kind; }
1768
1769 ParsedType getType() const {
1770 assert(Kind == NC_Type)(static_cast <bool> (Kind == NC_Type) ? void (0) : __assert_fail
("Kind == NC_Type", "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 1770, __extension__ __PRETTY_FUNCTION__))
;
1771 return Type;
1772 }
1773
1774 ExprResult getExpression() const {
1775 assert(Kind == NC_Expression)(static_cast <bool> (Kind == NC_Expression) ? void (0) :
__assert_fail ("Kind == NC_Expression", "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 1775, __extension__ __PRETTY_FUNCTION__))
;
1776 return Expr;
1777 }
1778
1779 TemplateName getTemplateName() const {
1780 assert(Kind == NC_TypeTemplate || Kind == NC_FunctionTemplate ||(static_cast <bool> (Kind == NC_TypeTemplate || Kind ==
NC_FunctionTemplate || Kind == NC_VarTemplate) ? void (0) : __assert_fail
("Kind == NC_TypeTemplate || Kind == NC_FunctionTemplate || Kind == NC_VarTemplate"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 1781, __extension__ __PRETTY_FUNCTION__))
1781 Kind == NC_VarTemplate)(static_cast <bool> (Kind == NC_TypeTemplate || Kind ==
NC_FunctionTemplate || Kind == NC_VarTemplate) ? void (0) : __assert_fail
("Kind == NC_TypeTemplate || Kind == NC_FunctionTemplate || Kind == NC_VarTemplate"
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 1781, __extension__ __PRETTY_FUNCTION__))
;
1782 return Template;
1783 }
1784
1785 TemplateNameKind getTemplateNameKind() const {
1786 switch (Kind) {
1787 case NC_TypeTemplate:
1788 return TNK_Type_template;
1789 case NC_FunctionTemplate:
1790 return TNK_Function_template;
1791 case NC_VarTemplate:
1792 return TNK_Var_template;
1793 default:
1794 llvm_unreachable("unsupported name classification.")::llvm::llvm_unreachable_internal("unsupported name classification."
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 1794)
;
1795 }
1796 }
1797 };
1798
1799 /// \brief Perform name lookup on the given name, classifying it based on
1800 /// the results of name lookup and the following token.
1801 ///
1802 /// This routine is used by the parser to resolve identifiers and help direct
1803 /// parsing. When the identifier cannot be found, this routine will attempt
1804 /// to correct the typo and classify based on the resulting name.
1805 ///
1806 /// \param S The scope in which we're performing name lookup.
1807 ///
1808 /// \param SS The nested-name-specifier that precedes the name.
1809 ///
1810 /// \param Name The identifier. If typo correction finds an alternative name,
1811 /// this pointer parameter will be updated accordingly.
1812 ///
1813 /// \param NameLoc The location of the identifier.
1814 ///
1815 /// \param NextToken The token following the identifier. Used to help
1816 /// disambiguate the name.
1817 ///
1818 /// \param IsAddressOfOperand True if this name is the operand of a unary
1819 /// address of ('&') expression, assuming it is classified as an
1820 /// expression.
1821 ///
1822 /// \param CCC The correction callback, if typo correction is desired.
1823 NameClassification
1824 ClassifyName(Scope *S, CXXScopeSpec &SS, IdentifierInfo *&Name,
1825 SourceLocation NameLoc, const Token &NextToken,
1826 bool IsAddressOfOperand,
1827 std::unique_ptr<CorrectionCandidateCallback> CCC = nullptr);
1828
1829 /// Describes the detailed kind of a template name. Used in diagnostics.
1830 enum class TemplateNameKindForDiagnostics {
1831 ClassTemplate,
1832 FunctionTemplate,
1833 VarTemplate,
1834 AliasTemplate,
1835 TemplateTemplateParam,
1836 DependentTemplate
1837 };
1838 TemplateNameKindForDiagnostics
1839 getTemplateNameKindForDiagnostics(TemplateName Name);
1840
1841 /// Determine whether it's plausible that E was intended to be a
1842 /// template-name.
1843 bool mightBeIntendedToBeTemplateName(ExprResult E) {
1844 if (!getLangOpts().CPlusPlus || E.isInvalid())
1845 return false;
1846 if (auto *DRE = dyn_cast<DeclRefExpr>(E.get()))
1847 return !DRE->hasExplicitTemplateArgs();
1848 if (auto *ME = dyn_cast<MemberExpr>(E.get()))
1849 return !ME->hasExplicitTemplateArgs();
1850 // Any additional cases recognized here should also be handled by
1851 // diagnoseExprIntendedAsTemplateName.
1852 return false;
1853 }
1854 void diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName,
1855 SourceLocation Less,
1856 SourceLocation Greater);
1857
1858 Decl *ActOnDeclarator(Scope *S, Declarator &D);
1859
1860 NamedDecl *HandleDeclarator(Scope *S, Declarator &D,
1861 MultiTemplateParamsArg TemplateParameterLists);
1862 void RegisterLocallyScopedExternCDecl(NamedDecl *ND, Scope *S);
1863 bool DiagnoseClassNameShadow(DeclContext *DC, DeclarationNameInfo Info);
1864 bool diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC,
1865 DeclarationName Name,
1866 SourceLocation Loc);
1867 void
1868 diagnoseIgnoredQualifiers(unsigned DiagID, unsigned Quals,
1869 SourceLocation FallbackLoc,
1870 SourceLocation ConstQualLoc = SourceLocation(),
1871 SourceLocation VolatileQualLoc = SourceLocation(),
1872 SourceLocation RestrictQualLoc = SourceLocation(),
1873 SourceLocation AtomicQualLoc = SourceLocation(),
1874 SourceLocation UnalignedQualLoc = SourceLocation());
1875
1876 static bool adjustContextForLocalExternDecl(DeclContext *&DC);
1877 void DiagnoseFunctionSpecifiers(const DeclSpec &DS);
1878 NamedDecl *getShadowedDeclaration(const TypedefNameDecl *D,
1879 const LookupResult &R);
1880 NamedDecl *getShadowedDeclaration(const VarDecl *D, const LookupResult &R);
1881 void CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl,
1882 const LookupResult &R);
1883 void CheckShadow(Scope *S, VarDecl *D);
1884
1885 /// Warn if 'E', which is an expression that is about to be modified, refers
1886 /// to a shadowing declaration.
1887 void CheckShadowingDeclModification(Expr *E, SourceLocation Loc);
1888
1889 void DiagnoseShadowingLambdaDecls(const sema::LambdaScopeInfo *LSI);
1890
1891private:
1892 /// Map of current shadowing declarations to shadowed declarations. Warn if
1893 /// it looks like the user is trying to modify the shadowing declaration.
1894 llvm::DenseMap<const NamedDecl *, const NamedDecl *> ShadowingDecls;
1895
1896public:
1897 void CheckCastAlign(Expr *Op, QualType T, SourceRange TRange);
1898 void handleTagNumbering(const TagDecl *Tag, Scope *TagScope);
1899 void setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec,
1900 TypedefNameDecl *NewTD);
1901 void CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *D);
1902 NamedDecl* ActOnTypedefDeclarator(Scope* S, Declarator& D, DeclContext* DC,
1903 TypeSourceInfo *TInfo,
1904 LookupResult &Previous);
1905 NamedDecl* ActOnTypedefNameDecl(Scope* S, DeclContext* DC, TypedefNameDecl *D,
1906 LookupResult &Previous, bool &Redeclaration);
1907 NamedDecl *ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC,
1908 TypeSourceInfo *TInfo,
1909 LookupResult &Previous,
1910 MultiTemplateParamsArg TemplateParamLists,
1911 bool &AddToScope,
1912 ArrayRef<BindingDecl *> Bindings = None);
1913 NamedDecl *
1914 ActOnDecompositionDeclarator(Scope *S, Declarator &D,
1915 MultiTemplateParamsArg TemplateParamLists);
1916 // Returns true if the variable declaration is a redeclaration
1917 bool CheckVariableDeclaration(VarDecl *NewVD, LookupResult &Previous);
1918 void CheckVariableDeclarationType(VarDecl *NewVD);
1919 bool DeduceVariableDeclarationType(VarDecl *VDecl, bool DirectInit,
1920 Expr *Init);
1921 void CheckCompleteVariableDeclaration(VarDecl *VD);
1922 void CheckCompleteDecompositionDeclaration(DecompositionDecl *DD);
1923 void MaybeSuggestAddingStaticToDecl(const FunctionDecl *D);
1924
1925 NamedDecl* ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC,
1926 TypeSourceInfo *TInfo,
1927 LookupResult &Previous,
1928 MultiTemplateParamsArg TemplateParamLists,
1929 bool &AddToScope);
1930 bool AddOverriddenMethods(CXXRecordDecl *DC, CXXMethodDecl *MD);
1931
1932 bool CheckConstexprFunctionDecl(const FunctionDecl *FD);
1933 bool CheckConstexprFunctionBody(const FunctionDecl *FD, Stmt *Body);
1934
1935 void DiagnoseHiddenVirtualMethods(CXXMethodDecl *MD);
1936 void FindHiddenVirtualMethods(CXXMethodDecl *MD,
1937 SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods);
1938 void NoteHiddenVirtualMethods(CXXMethodDecl *MD,
1939 SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods);
1940 // Returns true if the function declaration is a redeclaration
1941 bool CheckFunctionDeclaration(Scope *S,
1942 FunctionDecl *NewFD, LookupResult &Previous,
1943 bool IsMemberSpecialization);
1944 bool shouldLinkDependentDeclWithPrevious(Decl *D, Decl *OldDecl);
1945 void CheckMain(FunctionDecl *FD, const DeclSpec &D);
1946 void CheckMSVCRTEntryPoint(FunctionDecl *FD);
1947 Decl *ActOnParamDeclarator(Scope *S, Declarator &D);
1948 ParmVarDecl *BuildParmVarDeclForTypedef(DeclContext *DC,
1949 SourceLocation Loc,
1950 QualType T);
1951 ParmVarDecl *CheckParameter(DeclContext *DC, SourceLocation StartLoc,
1952 SourceLocation NameLoc, IdentifierInfo *Name,
1953 QualType T, TypeSourceInfo *TSInfo,
1954 StorageClass SC);
1955 void ActOnParamDefaultArgument(Decl *param,
1956 SourceLocation EqualLoc,
1957 Expr *defarg);
1958 void ActOnParamUnparsedDefaultArgument(Decl *param,
1959 SourceLocation EqualLoc,
1960 SourceLocation ArgLoc);
1961 void ActOnParamDefaultArgumentError(Decl *param, SourceLocation EqualLoc);
1962 bool SetParamDefaultArgument(ParmVarDecl *Param, Expr *DefaultArg,
1963 SourceLocation EqualLoc);
1964
1965 void AddInitializerToDecl(Decl *dcl, Expr *init, bool DirectInit);
1966 void ActOnUninitializedDecl(Decl *dcl);
1967 void ActOnInitializerError(Decl *Dcl);
1968
1969 void ActOnPureSpecifier(Decl *D, SourceLocation PureSpecLoc);
1970 void ActOnCXXForRangeDecl(Decl *D);
1971 StmtResult ActOnCXXForRangeIdentifier(Scope *S, SourceLocation IdentLoc,
1972 IdentifierInfo *Ident,
1973 ParsedAttributes &Attrs,
1974 SourceLocation AttrEnd);
1975 void SetDeclDeleted(Decl *dcl, SourceLocation DelLoc);
1976 void SetDeclDefaulted(Decl *dcl, SourceLocation DefaultLoc);
1977 void FinalizeDeclaration(Decl *D);
1978 DeclGroupPtrTy FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS,
1979 ArrayRef<Decl *> Group);
1980 DeclGroupPtrTy BuildDeclaratorGroup(MutableArrayRef<Decl *> Group);
1981
1982 /// Should be called on all declarations that might have attached
1983 /// documentation comments.
1984 void ActOnDocumentableDecl(Decl *D);
1985 void ActOnDocumentableDecls(ArrayRef<Decl *> Group);
1986
1987 void ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D,
1988 SourceLocation LocAfterDecls);
1989 void CheckForFunctionRedefinition(
1990 FunctionDecl *FD, const FunctionDecl *EffectiveDefinition = nullptr,
1991 SkipBodyInfo *SkipBody = nullptr);
1992 Decl *ActOnStartOfFunctionDef(Scope *S, Declarator &D,
1993 MultiTemplateParamsArg TemplateParamLists,
1994 SkipBodyInfo *SkipBody = nullptr);
1995 Decl *ActOnStartOfFunctionDef(Scope *S, Decl *D,
1996 SkipBodyInfo *SkipBody = nullptr);
1997 void ActOnStartOfObjCMethodDef(Scope *S, Decl *D);
1998 bool isObjCMethodDecl(Decl *D) {
1999 return D && isa<ObjCMethodDecl>(D);
2000 }
2001
2002 /// \brief Determine whether we can delay parsing the body of a function or
2003 /// function template until it is used, assuming we don't care about emitting
2004 /// code for that function.
2005 ///
2006 /// This will be \c false if we may need the body of the function in the
2007 /// middle of parsing an expression (where it's impractical to switch to
2008 /// parsing a different function), for instance, if it's constexpr in C++11
2009 /// or has an 'auto' return type in C++14. These cases are essentially bugs.
2010 bool canDelayFunctionBody(const Declarator &D);
2011
2012 /// \brief Determine whether we can skip parsing the body of a function
2013 /// definition, assuming we don't care about analyzing its body or emitting
2014 /// code for that function.
2015 ///
2016 /// This will be \c false only if we may need the body of the function in
2017 /// order to parse the rest of the program (for instance, if it is
2018 /// \c constexpr in C++11 or has an 'auto' return type in C++14).
2019 bool canSkipFunctionBody(Decl *D);
2020
2021 void computeNRVO(Stmt *Body, sema::FunctionScopeInfo *Scope);
2022 Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body);
2023 Decl *ActOnFinishFunctionBody(Decl *Decl, Stmt *Body, bool IsInstantiation);
2024 Decl *ActOnSkippedFunctionBody(Decl *Decl);
2025 void ActOnFinishInlineFunctionDef(FunctionDecl *D);
2026
2027 /// ActOnFinishDelayedAttribute - Invoked when we have finished parsing an
2028 /// attribute for which parsing is delayed.
2029 void ActOnFinishDelayedAttribute(Scope *S, Decl *D, ParsedAttributes &Attrs);
2030
2031 /// \brief Diagnose any unused parameters in the given sequence of
2032 /// ParmVarDecl pointers.
2033 void DiagnoseUnusedParameters(ArrayRef<ParmVarDecl *> Parameters);
2034
2035 /// \brief Diagnose whether the size of parameters or return value of a
2036 /// function or obj-c method definition is pass-by-value and larger than a
2037 /// specified threshold.
2038 void
2039 DiagnoseSizeOfParametersAndReturnValue(ArrayRef<ParmVarDecl *> Parameters,
2040 QualType ReturnTy, NamedDecl *D);
2041
2042 void DiagnoseInvalidJumps(Stmt *Body);
2043 Decl *ActOnFileScopeAsmDecl(Expr *expr,
2044 SourceLocation AsmLoc,
2045 SourceLocation RParenLoc);
2046
2047 /// \brief Handle a C++11 empty-declaration and attribute-declaration.
2048 Decl *ActOnEmptyDeclaration(Scope *S,
2049 AttributeList *AttrList,
2050 SourceLocation SemiLoc);
2051
2052 enum class ModuleDeclKind {
2053 Interface, ///< 'export module X;'
2054 Implementation, ///< 'module X;'
2055 Partition, ///< 'module partition X;'
2056 };
2057
2058 /// The parser has processed a module-declaration that begins the definition
2059 /// of a module interface or implementation.
2060 DeclGroupPtrTy ActOnModuleDecl(SourceLocation StartLoc,
2061 SourceLocation ModuleLoc, ModuleDeclKind MDK,
2062 ModuleIdPath Path);
2063
2064 /// \brief The parser has processed a module import declaration.
2065 ///
2066 /// \param AtLoc The location of the '@' symbol, if any.
2067 ///
2068 /// \param ImportLoc The location of the 'import' keyword.
2069 ///
2070 /// \param Path The module access path.
2071 DeclResult ActOnModuleImport(SourceLocation AtLoc, SourceLocation ImportLoc,
2072 ModuleIdPath Path);
2073
2074 /// \brief The parser has processed a module import translated from a
2075 /// #include or similar preprocessing directive.
2076 void ActOnModuleInclude(SourceLocation DirectiveLoc, Module *Mod);
2077 void BuildModuleInclude(SourceLocation DirectiveLoc, Module *Mod);
2078
2079 /// \brief The parsed has entered a submodule.
2080 void ActOnModuleBegin(SourceLocation DirectiveLoc, Module *Mod);
2081 /// \brief The parser has left a submodule.
2082 void ActOnModuleEnd(SourceLocation DirectiveLoc, Module *Mod);
2083
2084 /// \brief Create an implicit import of the given module at the given
2085 /// source location, for error recovery, if possible.
2086 ///
2087 /// This routine is typically used when an entity found by name lookup
2088 /// is actually hidden within a module that we know about but the user
2089 /// has forgotten to import.
2090 void createImplicitModuleImportForErrorRecovery(SourceLocation Loc,
2091 Module *Mod);
2092
2093 /// Kinds of missing import. Note, the values of these enumerators correspond
2094 /// to %select values in diagnostics.
2095 enum class MissingImportKind {
2096 Declaration,
2097 Definition,
2098 DefaultArgument,
2099 ExplicitSpecialization,
2100 PartialSpecialization
2101 };
2102
2103 /// \brief Diagnose that the specified declaration needs to be visible but
2104 /// isn't, and suggest a module import that would resolve the problem.
2105 void diagnoseMissingImport(SourceLocation Loc, NamedDecl *Decl,
2106 MissingImportKind MIK, bool Recover = true);
2107 void diagnoseMissingImport(SourceLocation Loc, NamedDecl *Decl,
2108 SourceLocation DeclLoc, ArrayRef<Module *> Modules,
2109 MissingImportKind MIK, bool Recover);
2110
2111 Decl *ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc,
2112 SourceLocation LBraceLoc);
2113 Decl *ActOnFinishExportDecl(Scope *S, Decl *ExportDecl,
2114 SourceLocation RBraceLoc);
2115
2116 /// \brief We've found a use of a templated declaration that would trigger an
2117 /// implicit instantiation. Check that any relevant explicit specializations
2118 /// and partial specializations are visible, and diagnose if not.
2119 void checkSpecializationVisibility(SourceLocation Loc, NamedDecl *Spec);
2120
2121 /// \brief We've found a use of a template specialization that would select a
2122 /// partial specialization. Check that the partial specialization is visible,
2123 /// and diagnose if not.
2124 void checkPartialSpecializationVisibility(SourceLocation Loc,
2125 NamedDecl *Spec);
2126
2127 /// \brief Retrieve a suitable printing policy.
2128 PrintingPolicy getPrintingPolicy() const {
2129 return getPrintingPolicy(Context, PP);
2130 }
2131
2132 /// \brief Retrieve a suitable printing policy.
2133 static PrintingPolicy getPrintingPolicy(const ASTContext &Ctx,
2134 const Preprocessor &PP);
2135
2136 /// Scope actions.
2137 void ActOnPopScope(SourceLocation Loc, Scope *S);
2138 void ActOnTranslationUnitScope(Scope *S);
2139
2140 Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS,
2141 RecordDecl *&AnonRecord);
2142 Decl *ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS,
2143 MultiTemplateParamsArg TemplateParams,
2144 bool IsExplicitInstantiation,
2145 RecordDecl *&AnonRecord);
2146
2147 Decl *BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS,
2148 AccessSpecifier AS,
2149 RecordDecl *Record,
2150 const PrintingPolicy &Policy);
2151
2152 Decl *BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS,
2153 RecordDecl *Record);
2154
2155 /// Common ways to introduce type names without a tag for use in diagnostics.
2156 /// Keep in sync with err_tag_reference_non_tag.
2157 enum NonTagKind {
2158 NTK_NonStruct,
2159 NTK_NonClass,
2160 NTK_NonUnion,
2161 NTK_NonEnum,
2162 NTK_Typedef,
2163 NTK_TypeAlias,
2164 NTK_Template,
2165 NTK_TypeAliasTemplate,
2166 NTK_TemplateTemplateArgument,
2167 };
2168
2169 /// Given a non-tag type declaration, returns an enum useful for indicating
2170 /// what kind of non-tag type this is.
2171 NonTagKind getNonTagTypeDeclKind(const Decl *D, TagTypeKind TTK);
2172
2173 bool isAcceptableTagRedeclaration(const TagDecl *Previous,
2174 TagTypeKind NewTag, bool isDefinition,
2175 SourceLocation NewTagLoc,
2176 const IdentifierInfo *Name);
2177
2178 enum TagUseKind {
2179 TUK_Reference, // Reference to a tag: 'struct foo *X;'
2180 TUK_Declaration, // Fwd decl of a tag: 'struct foo;'
2181 TUK_Definition, // Definition of a tag: 'struct foo { int X; } Y;'
2182 TUK_Friend // Friend declaration: 'friend struct foo;'
2183 };
2184
2185 Decl *ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
2186 SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name,
2187 SourceLocation NameLoc, AttributeList *Attr,
2188 AccessSpecifier AS, SourceLocation ModulePrivateLoc,
2189 MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl,
2190 bool &IsDependent, SourceLocation ScopedEnumKWLoc,
2191 bool ScopedEnumUsesClassTag, TypeResult UnderlyingType,
2192 bool IsTypeSpecifier, bool IsTemplateParamOrArg,
2193 SkipBodyInfo *SkipBody = nullptr);
2194
2195 Decl *ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
2196 unsigned TagSpec, SourceLocation TagLoc,
2197 CXXScopeSpec &SS,
2198 IdentifierInfo *Name, SourceLocation NameLoc,
2199 AttributeList *Attr,
2200 MultiTemplateParamsArg TempParamLists);
2201
2202 TypeResult ActOnDependentTag(Scope *S,
2203 unsigned TagSpec,
2204 TagUseKind TUK,
2205 const CXXScopeSpec &SS,
2206 IdentifierInfo *Name,
2207 SourceLocation TagLoc,
2208 SourceLocation NameLoc);
2209
2210 void ActOnDefs(Scope *S, Decl *TagD, SourceLocation DeclStart,
2211 IdentifierInfo *ClassName,
2212 SmallVectorImpl<Decl *> &Decls);
2213 Decl *ActOnField(Scope *S, Decl *TagD, SourceLocation DeclStart,
2214 Declarator &D, Expr *BitfieldWidth);
2215
2216 FieldDecl *HandleField(Scope *S, RecordDecl *TagD, SourceLocation DeclStart,
2217 Declarator &D, Expr *BitfieldWidth,
2218 InClassInitStyle InitStyle,
2219 AccessSpecifier AS);
2220 MSPropertyDecl *HandleMSProperty(Scope *S, RecordDecl *TagD,
2221 SourceLocation DeclStart,
2222 Declarator &D, Expr *BitfieldWidth,
2223 InClassInitStyle InitStyle,
2224 AccessSpecifier AS,
2225 AttributeList *MSPropertyAttr);
2226
2227 FieldDecl *CheckFieldDecl(DeclarationName Name, QualType T,
2228 TypeSourceInfo *TInfo,
2229 RecordDecl *Record, SourceLocation Loc,
2230 bool Mutable, Expr *BitfieldWidth,
2231 InClassInitStyle InitStyle,
2232 SourceLocation TSSL,
2233 AccessSpecifier AS, NamedDecl *PrevDecl,
2234 Declarator *D = nullptr);
2235
2236 bool CheckNontrivialField(FieldDecl *FD);
2237 void DiagnoseNontrivial(const CXXRecordDecl *Record, CXXSpecialMember CSM);
2238 bool SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM,
2239 bool Diagnose = false);
2240 CXXSpecialMember getSpecialMember(const CXXMethodDecl *MD);
2241 void ActOnLastBitfield(SourceLocation DeclStart,
2242 SmallVectorImpl<Decl *> &AllIvarDecls);
2243 Decl *ActOnIvar(Scope *S, SourceLocation DeclStart,
2244 Declarator &D, Expr *BitfieldWidth,
2245 tok::ObjCKeywordKind visibility);
2246
2247 // This is used for both record definitions and ObjC interface declarations.
2248 void ActOnFields(Scope* S, SourceLocation RecLoc, Decl *TagDecl,
2249 ArrayRef<Decl *> Fields,
2250 SourceLocation LBrac, SourceLocation RBrac,
2251 AttributeList *AttrList);
2252
2253 /// ActOnTagStartDefinition - Invoked when we have entered the
2254 /// scope of a tag's definition (e.g., for an enumeration, class,
2255 /// struct, or union).
2256 void ActOnTagStartDefinition(Scope *S, Decl *TagDecl);
2257
2258 /// Perform ODR-like check for C/ObjC when merging tag types from modules.
2259 /// Differently from C++, actually parse the body and reject / error out
2260 /// in case of a structural mismatch.
2261 bool ActOnDuplicateDefinition(DeclSpec &DS, Decl *Prev,
2262 SkipBodyInfo &SkipBody);
2263
2264 typedef void *SkippedDefinitionContext;
2265
2266 /// \brief Invoked when we enter a tag definition that we're skipping.
2267 SkippedDefinitionContext ActOnTagStartSkippedDefinition(Scope *S, Decl *TD);
2268
2269 Decl *ActOnObjCContainerStartDefinition(Decl *IDecl);
2270
2271 /// ActOnStartCXXMemberDeclarations - Invoked when we have parsed a
2272 /// C++ record definition's base-specifiers clause and are starting its
2273 /// member declarations.
2274 void ActOnStartCXXMemberDeclarations(Scope *S, Decl *TagDecl,
2275 SourceLocation FinalLoc,
2276 bool IsFinalSpelledSealed,
2277 SourceLocation LBraceLoc);
2278
2279 /// ActOnTagFinishDefinition - Invoked once we have finished parsing
2280 /// the definition of a tag (enumeration, class, struct, or union).
2281 void ActOnTagFinishDefinition(Scope *S, Decl *TagDecl,
2282 SourceRange BraceRange);
2283
2284 void ActOnTagFinishSkippedDefinition(SkippedDefinitionContext Context);
2285
2286 void ActOnObjCContainerFinishDefinition();
2287
2288 /// \brief Invoked when we must temporarily exit the objective-c container
2289 /// scope for parsing/looking-up C constructs.
2290 ///
2291 /// Must be followed by a call to \see ActOnObjCReenterContainerContext
2292 void ActOnObjCTemporaryExitContainerContext(DeclContext *DC);
2293 void ActOnObjCReenterContainerContext(DeclContext *DC);
2294
2295 /// ActOnTagDefinitionError - Invoked when there was an unrecoverable
2296 /// error parsing the definition of a tag.
2297 void ActOnTagDefinitionError(Scope *S, Decl *TagDecl);
2298
2299 EnumConstantDecl *CheckEnumConstant(EnumDecl *Enum,
2300 EnumConstantDecl *LastEnumConst,
2301 SourceLocation IdLoc,
2302 IdentifierInfo *Id,
2303 Expr *val);
2304 bool CheckEnumUnderlyingType(TypeSourceInfo *TI);
2305 bool CheckEnumRedeclaration(SourceLocation EnumLoc, bool IsScoped,
2306 QualType EnumUnderlyingTy,
2307 bool EnumUnderlyingIsImplicit,
2308 const EnumDecl *Prev);
2309
2310 /// Determine whether the body of an anonymous enumeration should be skipped.
2311 /// \param II The name of the first enumerator.
2312 SkipBodyInfo shouldSkipAnonEnumBody(Scope *S, IdentifierInfo *II,
2313 SourceLocation IILoc);
2314
2315 Decl *ActOnEnumConstant(Scope *S, Decl *EnumDecl, Decl *LastEnumConstant,
2316 SourceLocation IdLoc, IdentifierInfo *Id,
2317 AttributeList *Attrs, SourceLocation EqualLoc,
2318 Expr *Val);
2319 void ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange,
2320 Decl *EnumDecl,
2321 ArrayRef<Decl *> Elements,
2322 Scope *S, AttributeList *Attr);
2323
2324 DeclContext *getContainingDC(DeclContext *DC);
2325
2326 /// Set the current declaration context until it gets popped.
2327 void PushDeclContext(Scope *S, DeclContext *DC);
2328 void PopDeclContext();
2329
2330 /// EnterDeclaratorContext - Used when we must lookup names in the context
2331 /// of a declarator's nested name specifier.
2332 void EnterDeclaratorContext(Scope *S, DeclContext *DC);
2333 void ExitDeclaratorContext(Scope *S);
2334
2335 /// Push the parameters of D, which must be a function, into scope.
2336 void ActOnReenterFunctionContext(Scope* S, Decl* D);
2337 void ActOnExitFunctionContext();
2338
2339 DeclContext *getFunctionLevelDeclContext();
2340
2341 /// getCurFunctionDecl - If inside of a function body, this returns a pointer
2342 /// to the function decl for the function being parsed. If we're currently
2343 /// in a 'block', this returns the containing context.
2344 FunctionDecl *getCurFunctionDecl();
2345
2346 /// getCurMethodDecl - If inside of a method body, this returns a pointer to
2347 /// the method decl for the method being parsed. If we're currently
2348 /// in a 'block', this returns the containing context.
2349 ObjCMethodDecl *getCurMethodDecl();
2350
2351 /// getCurFunctionOrMethodDecl - Return the Decl for the current ObjC method
2352 /// or C function we're in, otherwise return null. If we're currently
2353 /// in a 'block', this returns the containing context.
2354 NamedDecl *getCurFunctionOrMethodDecl();
2355
2356 /// Add this decl to the scope shadowed decl chains.
2357 void PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext = true);
2358
2359 /// \brief Make the given externally-produced declaration visible at the
2360 /// top level scope.
2361 ///
2362 /// \param D The externally-produced declaration to push.
2363 ///
2364 /// \param Name The name of the externally-produced declaration.
2365 void pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name);
2366
2367 /// isDeclInScope - If 'Ctx' is a function/method, isDeclInScope returns true
2368 /// if 'D' is in Scope 'S', otherwise 'S' is ignored and isDeclInScope returns
2369 /// true if 'D' belongs to the given declaration context.
2370 ///
2371 /// \param AllowInlineNamespace If \c true, allow the declaration to be in the
2372 /// enclosing namespace set of the context, rather than contained
2373 /// directly within it.
2374 bool isDeclInScope(NamedDecl *D, DeclContext *Ctx, Scope *S = nullptr,
2375 bool AllowInlineNamespace = false);
2376
2377 /// Finds the scope corresponding to the given decl context, if it
2378 /// happens to be an enclosing scope. Otherwise return NULL.
2379 static Scope *getScopeForDeclContext(Scope *S, DeclContext *DC);
2380
2381 /// Subroutines of ActOnDeclarator().
2382 TypedefDecl *ParseTypedefDecl(Scope *S, Declarator &D, QualType T,
2383 TypeSourceInfo *TInfo);
2384 bool isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New);
2385
2386 /// \brief Describes the kind of merge to perform for availability
2387 /// attributes (including "deprecated", "unavailable", and "availability").
2388 enum AvailabilityMergeKind {
2389 /// \brief Don't merge availability attributes at all.
2390 AMK_None,
2391 /// \brief Merge availability attributes for a redeclaration, which requires
2392 /// an exact match.
2393 AMK_Redeclaration,
2394 /// \brief Merge availability attributes for an override, which requires
2395 /// an exact match or a weakening of constraints.
2396 AMK_Override,
2397 /// \brief Merge availability attributes for an implementation of
2398 /// a protocol requirement.
2399 AMK_ProtocolImplementation,
2400 };
2401
2402 /// Attribute merging methods. Return true if a new attribute was added.
2403 AvailabilityAttr *mergeAvailabilityAttr(NamedDecl *D, SourceRange Range,
2404 IdentifierInfo *Platform,
2405 bool Implicit,
2406 VersionTuple Introduced,
2407 VersionTuple Deprecated,
2408 VersionTuple Obsoleted,
2409 bool IsUnavailable,
2410 StringRef Message,
2411 bool IsStrict, StringRef Replacement,
2412 AvailabilityMergeKind AMK,
2413 unsigned AttrSpellingListIndex);
2414 TypeVisibilityAttr *mergeTypeVisibilityAttr(Decl *D, SourceRange Range,
2415 TypeVisibilityAttr::VisibilityType Vis,
2416 unsigned AttrSpellingListIndex);
2417 VisibilityAttr *mergeVisibilityAttr(Decl *D, SourceRange Range,
2418 VisibilityAttr::VisibilityType Vis,
2419 unsigned AttrSpellingListIndex);
2420 UuidAttr *mergeUuidAttr(Decl *D, SourceRange Range,
2421 unsigned AttrSpellingListIndex, StringRef Uuid);
2422 DLLImportAttr *mergeDLLImportAttr(Decl *D, SourceRange Range,
2423 unsigned AttrSpellingListIndex);
2424 DLLExportAttr *mergeDLLExportAttr(Decl *D, SourceRange Range,
2425 unsigned AttrSpellingListIndex);
2426 MSInheritanceAttr *
2427 mergeMSInheritanceAttr(Decl *D, SourceRange Range, bool BestCase,
2428 unsigned AttrSpellingListIndex,
2429 MSInheritanceAttr::Spelling SemanticSpelling);
2430 FormatAttr *mergeFormatAttr(Decl *D, SourceRange Range,
2431 IdentifierInfo *Format, int FormatIdx,
2432 int FirstArg, unsigned AttrSpellingListIndex);
2433 SectionAttr *mergeSectionAttr(Decl *D, SourceRange Range, StringRef Name,
2434 unsigned AttrSpellingListIndex);
2435 AlwaysInlineAttr *mergeAlwaysInlineAttr(Decl *D, SourceRange Range,
2436 IdentifierInfo *Ident,
2437 unsigned AttrSpellingListIndex);
2438 MinSizeAttr *mergeMinSizeAttr(Decl *D, SourceRange Range,
2439 unsigned AttrSpellingListIndex);
2440 OptimizeNoneAttr *mergeOptimizeNoneAttr(Decl *D, SourceRange Range,
2441 unsigned AttrSpellingListIndex);
2442 InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D, SourceRange Range,
2443 IdentifierInfo *Ident,
2444 unsigned AttrSpellingListIndex);
2445 CommonAttr *mergeCommonAttr(Decl *D, SourceRange Range, IdentifierInfo *Ident,
2446 unsigned AttrSpellingListIndex);
2447
2448 void mergeDeclAttributes(NamedDecl *New, Decl *Old,
2449 AvailabilityMergeKind AMK = AMK_Redeclaration);
2450 void MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New,
2451 LookupResult &OldDecls);
2452 bool MergeFunctionDecl(FunctionDecl *New, NamedDecl *&Old, Scope *S,
2453 bool MergeTypeWithOld);
2454 bool MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old,
2455 Scope *S, bool MergeTypeWithOld);
2456 void mergeObjCMethodDecls(ObjCMethodDecl *New, ObjCMethodDecl *Old);
2457 void MergeVarDecl(VarDecl *New, LookupResult &Previous);
2458 void MergeVarDeclTypes(VarDecl *New, VarDecl *Old, bool MergeTypeWithOld);
2459 void MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old);
2460 bool checkVarDeclRedefinition(VarDecl *OldDefn, VarDecl *NewDefn);
2461 void notePreviousDefinition(const NamedDecl *Old, SourceLocation New);
2462 bool MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S);
2463
2464 // AssignmentAction - This is used by all the assignment diagnostic functions
2465 // to represent what is actually causing the operation
2466 enum AssignmentAction {
2467 AA_Assigning,
2468 AA_Passing,
2469 AA_Returning,
2470 AA_Converting,
2471 AA_Initializing,
2472 AA_Sending,
2473 AA_Casting,
2474 AA_Passing_CFAudited
2475 };
2476
2477 /// C++ Overloading.
2478 enum OverloadKind {
2479 /// This is a legitimate overload: the existing declarations are
2480 /// functions or function templates with different signatures.
2481 Ovl_Overload,
2482
2483 /// This is not an overload because the signature exactly matches
2484 /// an existing declaration.
2485 Ovl_Match,
2486
2487 /// This is not an overload because the lookup results contain a
2488 /// non-function.
2489 Ovl_NonFunction
2490 };
2491 OverloadKind CheckOverload(Scope *S,
2492 FunctionDecl *New,
2493 const LookupResult &OldDecls,
2494 NamedDecl *&OldDecl,
2495 bool IsForUsingDecl);
2496 bool IsOverload(FunctionDecl *New, FunctionDecl *Old, bool IsForUsingDecl,
2497 bool ConsiderCudaAttrs = true);
2498
2499 /// \brief Checks availability of the function depending on the current
2500 /// function context.Inside an unavailable function,unavailability is ignored.
2501 ///
2502 /// \returns true if \p FD is unavailable and current context is inside
2503 /// an available function, false otherwise.
2504 bool isFunctionConsideredUnavailable(FunctionDecl *FD);
2505
2506 ImplicitConversionSequence
2507 TryImplicitConversion(Expr *From, QualType ToType,
2508 bool SuppressUserConversions,
2509 bool AllowExplicit,
2510 bool InOverloadResolution,
2511 bool CStyle,
2512 bool AllowObjCWritebackConversion);
2513
2514 bool IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType);
2515 bool IsFloatingPointPromotion(QualType FromType, QualType ToType);
2516 bool IsComplexPromotion(QualType FromType, QualType ToType);
2517 bool IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
2518 bool InOverloadResolution,
2519 QualType& ConvertedType, bool &IncompatibleObjC);
2520 bool isObjCPointerConversion(QualType FromType, QualType ToType,
2521 QualType& ConvertedType, bool &IncompatibleObjC);
2522 bool isObjCWritebackConversion(QualType FromType, QualType ToType,
2523 QualType &ConvertedType);
2524 bool IsBlockPointerConversion(QualType FromType, QualType ToType,
2525 QualType& ConvertedType);
2526 bool FunctionParamTypesAreEqual(const FunctionProtoType *OldType,
2527 const FunctionProtoType *NewType,
2528 unsigned *ArgPos = nullptr);
2529 void HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
2530 QualType FromType, QualType ToType);
2531
2532 void maybeExtendBlockObject(ExprResult &E);
2533 CastKind PrepareCastToObjCObjectPointer(ExprResult &E);
2534 bool CheckPointerConversion(Expr *From, QualType ToType,
2535 CastKind &Kind,
2536 CXXCastPath& BasePath,
2537 bool IgnoreBaseAccess,
2538 bool Diagnose = true);
2539 bool IsMemberPointerConversion(Expr *From, QualType FromType, QualType ToType,
2540 bool InOverloadResolution,
2541 QualType &ConvertedType);
2542 bool CheckMemberPointerConversion(Expr *From, QualType ToType,
2543 CastKind &Kind,
2544 CXXCastPath &BasePath,
2545 bool IgnoreBaseAccess);
2546 bool IsQualificationConversion(QualType FromType, QualType ToType,
2547 bool CStyle, bool &ObjCLifetimeConversion);
2548 bool IsFunctionConversion(QualType FromType, QualType ToType,
2549 QualType &ResultTy);
2550 bool DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType);
2551 bool isSameOrCompatibleFunctionType(CanQualType Param, CanQualType Arg);
2552
2553 ExprResult PerformMoveOrCopyInitialization(const InitializedEntity &Entity,
2554 const VarDecl *NRVOCandidate,
2555 QualType ResultType,
2556 Expr *Value,
2557 bool AllowNRVO = true);
2558
2559 bool CanPerformCopyInitialization(const InitializedEntity &Entity,
2560 ExprResult Init);
2561 ExprResult PerformCopyInitialization(const InitializedEntity &Entity,
2562 SourceLocation EqualLoc,
2563 ExprResult Init,
2564 bool TopLevelOfInitList = false,
2565 bool AllowExplicit = false);
2566 ExprResult PerformObjectArgumentInitialization(Expr *From,
2567 NestedNameSpecifier *Qualifier,
2568 NamedDecl *FoundDecl,
2569 CXXMethodDecl *Method);
2570
2571 ExprResult PerformContextuallyConvertToBool(Expr *From);
2572 ExprResult PerformContextuallyConvertToObjCPointer(Expr *From);
2573
2574 /// Contexts in which a converted constant expression is required.
2575 enum CCEKind {
2576 CCEK_CaseValue, ///< Expression in a case label.
2577 CCEK_Enumerator, ///< Enumerator value with fixed underlying type.
2578 CCEK_TemplateArg, ///< Value of a non-type template parameter.
2579 CCEK_NewExpr, ///< Constant expression in a noptr-new-declarator.
2580 CCEK_ConstexprIf ///< Condition in a constexpr if statement.
2581 };
2582 ExprResult CheckConvertedConstantExpression(Expr *From, QualType T,
2583 llvm::APSInt &Value, CCEKind CCE);
2584 ExprResult CheckConvertedConstantExpression(Expr *From, QualType T,
2585 APValue &Value, CCEKind CCE);
2586
2587 /// \brief Abstract base class used to perform a contextual implicit
2588 /// conversion from an expression to any type passing a filter.
2589 class ContextualImplicitConverter {
2590 public:
2591 bool Suppress;
2592 bool SuppressConversion;
2593
2594 ContextualImplicitConverter(bool Suppress = false,
2595 bool SuppressConversion = false)
2596 : Suppress(Suppress), SuppressConversion(SuppressConversion) {}
2597
2598 /// \brief Determine whether the specified type is a valid destination type
2599 /// for this conversion.
2600 virtual bool match(QualType T) = 0;
2601
2602 /// \brief Emits a diagnostic complaining that the expression does not have
2603 /// integral or enumeration type.
2604 virtual SemaDiagnosticBuilder
2605 diagnoseNoMatch(Sema &S, SourceLocation Loc, QualType T) = 0;
2606
2607 /// \brief Emits a diagnostic when the expression has incomplete class type.
2608 virtual SemaDiagnosticBuilder
2609 diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) = 0;
2610
2611 /// \brief Emits a diagnostic when the only matching conversion function
2612 /// is explicit.
2613 virtual SemaDiagnosticBuilder diagnoseExplicitConv(
2614 Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) = 0;
2615
2616 /// \brief Emits a note for the explicit conversion function.
2617 virtual SemaDiagnosticBuilder
2618 noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0;
2619
2620 /// \brief Emits a diagnostic when there are multiple possible conversion
2621 /// functions.
2622 virtual SemaDiagnosticBuilder
2623 diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) = 0;
2624
2625 /// \brief Emits a note for one of the candidate conversions.
2626 virtual SemaDiagnosticBuilder
2627 noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0;
2628
2629 /// \brief Emits a diagnostic when we picked a conversion function
2630 /// (for cases when we are not allowed to pick a conversion function).
2631 virtual SemaDiagnosticBuilder diagnoseConversion(
2632 Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) = 0;
2633
2634 virtual ~ContextualImplicitConverter() {}
2635 };
2636
2637 class ICEConvertDiagnoser : public ContextualImplicitConverter {
2638 bool AllowScopedEnumerations;
2639
2640 public:
2641 ICEConvertDiagnoser(bool AllowScopedEnumerations,
2642 bool Suppress, bool SuppressConversion)
2643 : ContextualImplicitConverter(Suppress, SuppressConversion),
2644 AllowScopedEnumerations(AllowScopedEnumerations) {}
2645
2646 /// Match an integral or (possibly scoped) enumeration type.
2647 bool match(QualType T) override;
2648
2649 SemaDiagnosticBuilder
2650 diagnoseNoMatch(Sema &S, SourceLocation Loc, QualType T) override {
2651 return diagnoseNotInt(S, Loc, T);
2652 }
2653
2654 /// \brief Emits a diagnostic complaining that the expression does not have
2655 /// integral or enumeration type.
2656 virtual SemaDiagnosticBuilder
2657 diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) = 0;
2658 };
2659
2660 /// Perform a contextual implicit conversion.
2661 ExprResult PerformContextualImplicitConversion(
2662 SourceLocation Loc, Expr *FromE, ContextualImplicitConverter &Converter);
2663
2664
2665 enum ObjCSubscriptKind {
2666 OS_Array,
2667 OS_Dictionary,
2668 OS_Error
2669 };
2670 ObjCSubscriptKind CheckSubscriptingKind(Expr *FromE);
2671
2672 // Note that LK_String is intentionally after the other literals, as
2673 // this is used for diagnostics logic.
2674 enum ObjCLiteralKind {
2675 LK_Array,
2676 LK_Dictionary,
2677 LK_Numeric,
2678 LK_Boxed,
2679 LK_String,
2680 LK_Block,
2681 LK_None
2682 };
2683 ObjCLiteralKind CheckLiteralKind(Expr *FromE);
2684
2685 ExprResult PerformObjectMemberConversion(Expr *From,
2686 NestedNameSpecifier *Qualifier,
2687 NamedDecl *FoundDecl,
2688 NamedDecl *Member);
2689
2690 // Members have to be NamespaceDecl* or TranslationUnitDecl*.
2691 // TODO: make this is a typesafe union.
2692 typedef llvm::SmallSetVector<DeclContext *, 16> AssociatedNamespaceSet;
2693 typedef llvm::SmallSetVector<CXXRecordDecl *, 16> AssociatedClassSet;
2694
2695 void AddOverloadCandidate(FunctionDecl *Function,
2696 DeclAccessPair FoundDecl,
2697 ArrayRef<Expr *> Args,
2698 OverloadCandidateSet &CandidateSet,
2699 bool SuppressUserConversions = false,
2700 bool PartialOverloading = false,
2701 bool AllowExplicit = false,
2702 ConversionSequenceList EarlyConversions = None);
2703 void AddFunctionCandidates(const UnresolvedSetImpl &Functions,
2704 ArrayRef<Expr *> Args,
2705 OverloadCandidateSet &CandidateSet,
2706 TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr,
2707 bool SuppressUserConversions = false,
2708 bool PartialOverloading = false,
2709 bool FirstArgumentIsBase = false);
2710 void AddMethodCandidate(DeclAccessPair FoundDecl,
2711 QualType ObjectType,
2712 Expr::Classification ObjectClassification,
2713 ArrayRef<Expr *> Args,
2714 OverloadCandidateSet& CandidateSet,
2715 bool SuppressUserConversion = false);
2716 void AddMethodCandidate(CXXMethodDecl *Method,
2717 DeclAccessPair FoundDecl,
2718 CXXRecordDecl *ActingContext, QualType ObjectType,
2719 Expr::Classification ObjectClassification,
2720 ArrayRef<Expr *> Args,
2721 OverloadCandidateSet& CandidateSet,
2722 bool SuppressUserConversions = false,
2723 bool PartialOverloading = false,
2724 ConversionSequenceList EarlyConversions = None);
2725 void AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
2726 DeclAccessPair FoundDecl,
2727 CXXRecordDecl *ActingContext,
2728 TemplateArgumentListInfo *ExplicitTemplateArgs,
2729 QualType ObjectType,
2730 Expr::Classification ObjectClassification,
2731 ArrayRef<Expr *> Args,
2732 OverloadCandidateSet& CandidateSet,
2733 bool SuppressUserConversions = false,
2734 bool PartialOverloading = false);
2735 void AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
2736 DeclAccessPair FoundDecl,
2737 TemplateArgumentListInfo *ExplicitTemplateArgs,
2738 ArrayRef<Expr *> Args,
2739 OverloadCandidateSet& CandidateSet,
2740 bool SuppressUserConversions = false,
2741 bool PartialOverloading = false);
2742 bool CheckNonDependentConversions(FunctionTemplateDecl *FunctionTemplate,
2743 ArrayRef<QualType> ParamTypes,
2744 ArrayRef<Expr *> Args,
2745 OverloadCandidateSet &CandidateSet,
2746 ConversionSequenceList &Conversions,
2747 bool SuppressUserConversions,
2748 CXXRecordDecl *ActingContext = nullptr,
2749 QualType ObjectType = QualType(),
2750 Expr::Classification
2751 ObjectClassification = {});
2752 void AddConversionCandidate(CXXConversionDecl *Conversion,
2753 DeclAccessPair FoundDecl,
2754 CXXRecordDecl *ActingContext,
2755 Expr *From, QualType ToType,
2756 OverloadCandidateSet& CandidateSet,
2757 bool AllowObjCConversionOnExplicit,
2758 bool AllowResultConversion = true);
2759 void AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
2760 DeclAccessPair FoundDecl,
2761 CXXRecordDecl *ActingContext,
2762 Expr *From, QualType ToType,
2763 OverloadCandidateSet &CandidateSet,
2764 bool AllowObjCConversionOnExplicit,
2765 bool AllowResultConversion = true);
2766 void AddSurrogateCandidate(CXXConversionDecl *Conversion,
2767 DeclAccessPair FoundDecl,
2768 CXXRecordDecl *ActingContext,
2769 const FunctionProtoType *Proto,
2770 Expr *Object, ArrayRef<Expr *> Args,
2771 OverloadCandidateSet& CandidateSet);
2772 void AddMemberOperatorCandidates(OverloadedOperatorKind Op,
2773 SourceLocation OpLoc, ArrayRef<Expr *> Args,
2774 OverloadCandidateSet& CandidateSet,
2775 SourceRange OpRange = SourceRange());
2776 void AddBuiltinCandidate(QualType *ParamTys, ArrayRef<Expr *> Args,
2777 OverloadCandidateSet& CandidateSet,
2778 bool IsAssignmentOperator = false,
2779 unsigned NumContextualBoolArguments = 0);
2780 void AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
2781 SourceLocation OpLoc, ArrayRef<Expr *> Args,
2782 OverloadCandidateSet& CandidateSet);
2783 void AddArgumentDependentLookupCandidates(DeclarationName Name,
2784 SourceLocation Loc,
2785 ArrayRef<Expr *> Args,
2786 TemplateArgumentListInfo *ExplicitTemplateArgs,
2787 OverloadCandidateSet& CandidateSet,
2788 bool PartialOverloading = false);
2789
2790 // Emit as a 'note' the specific overload candidate
2791 void NoteOverloadCandidate(NamedDecl *Found, FunctionDecl *Fn,
2792 QualType DestType = QualType(),
2793 bool TakingAddress = false);
2794
2795 // Emit as a series of 'note's all template and non-templates identified by
2796 // the expression Expr
2797 void NoteAllOverloadCandidates(Expr *E, QualType DestType = QualType(),
2798 bool TakingAddress = false);
2799
2800 /// Check the enable_if expressions on the given function. Returns the first
2801 /// failing attribute, or NULL if they were all successful.
2802 EnableIfAttr *CheckEnableIf(FunctionDecl *Function, ArrayRef<Expr *> Args,
2803 bool MissingImplicitThis = false);
2804
2805 /// Find the failed Boolean condition within a given Boolean
2806 /// constant expression, and describe it with a string.
2807 ///
2808 /// \param AllowTopLevelCond Whether to allow the result to be the
2809 /// complete top-level condition.
2810 std::pair<Expr *, std::string>
2811 findFailedBooleanCondition(Expr *Cond, bool AllowTopLevelCond);
2812
2813 /// Emit diagnostics for the diagnose_if attributes on Function, ignoring any
2814 /// non-ArgDependent DiagnoseIfAttrs.
2815 ///
2816 /// Argument-dependent diagnose_if attributes should be checked each time a
2817 /// function is used as a direct callee of a function call.
2818 ///
2819 /// Returns true if any errors were emitted.
2820 bool diagnoseArgDependentDiagnoseIfAttrs(const FunctionDecl *Function,
2821 const Expr *ThisArg,
2822 ArrayRef<const Expr *> Args,
2823 SourceLocation Loc);
2824
2825 /// Emit diagnostics for the diagnose_if attributes on Function, ignoring any
2826 /// ArgDependent DiagnoseIfAttrs.
2827 ///
2828 /// Argument-independent diagnose_if attributes should be checked on every use
2829 /// of a function.
2830 ///
2831 /// Returns true if any errors were emitted.
2832 bool diagnoseArgIndependentDiagnoseIfAttrs(const NamedDecl *ND,
2833 SourceLocation Loc);
2834
2835 /// Returns whether the given function's address can be taken or not,
2836 /// optionally emitting a diagnostic if the address can't be taken.
2837 ///
2838 /// Returns false if taking the address of the function is illegal.
2839 bool checkAddressOfFunctionIsAvailable(const FunctionDecl *Function,
2840 bool Complain = false,
2841 SourceLocation Loc = SourceLocation());
2842
2843 // [PossiblyAFunctionType] --> [Return]
2844 // NonFunctionType --> NonFunctionType
2845 // R (A) --> R(A)
2846 // R (*)(A) --> R (A)
2847 // R (&)(A) --> R (A)
2848 // R (S::*)(A) --> R (A)
2849 QualType ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType);
2850
2851 FunctionDecl *
2852 ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
2853 QualType TargetType,
2854 bool Complain,
2855 DeclAccessPair &Found,
2856 bool *pHadMultipleCandidates = nullptr);
2857
2858 FunctionDecl *
2859 resolveAddressOfOnlyViableOverloadCandidate(Expr *E,
2860 DeclAccessPair &FoundResult);
2861
2862 bool resolveAndFixAddressOfOnlyViableOverloadCandidate(
2863 ExprResult &SrcExpr, bool DoFunctionPointerConversion = false);
2864
2865 FunctionDecl *
2866 ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
2867 bool Complain = false,
2868 DeclAccessPair *Found = nullptr);
2869
2870 bool ResolveAndFixSingleFunctionTemplateSpecialization(
2871 ExprResult &SrcExpr,
2872 bool DoFunctionPointerConverion = false,
2873 bool Complain = false,
2874 SourceRange OpRangeForComplaining = SourceRange(),
2875 QualType DestTypeForComplaining = QualType(),
2876 unsigned DiagIDForComplaining = 0);
2877
2878
2879 Expr *FixOverloadedFunctionReference(Expr *E,
2880 DeclAccessPair FoundDecl,
2881 FunctionDecl *Fn);
2882 ExprResult FixOverloadedFunctionReference(ExprResult,
2883 DeclAccessPair FoundDecl,
2884 FunctionDecl *Fn);
2885
2886 void AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
2887 ArrayRef<Expr *> Args,
2888 OverloadCandidateSet &CandidateSet,
2889 bool PartialOverloading = false);
2890
2891 // An enum used to represent the different possible results of building a
2892 // range-based for loop.
2893 enum ForRangeStatus {
2894 FRS_Success,
2895 FRS_NoViableFunction,
2896 FRS_DiagnosticIssued
2897 };
2898
2899 ForRangeStatus BuildForRangeBeginEndCall(SourceLocation Loc,
2900 SourceLocation RangeLoc,
2901 const DeclarationNameInfo &NameInfo,
2902 LookupResult &MemberLookup,
2903 OverloadCandidateSet *CandidateSet,
2904 Expr *Range, ExprResult *CallExpr);
2905
2906 ExprResult BuildOverloadedCallExpr(Scope *S, Expr *Fn,
2907 UnresolvedLookupExpr *ULE,
2908 SourceLocation LParenLoc,
2909 MultiExprArg Args,
2910 SourceLocation RParenLoc,
2911 Expr *ExecConfig,
2912 bool AllowTypoCorrection=true,
2913 bool CalleesAddressIsTaken=false);
2914
2915 bool buildOverloadedCallSet(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE,
2916 MultiExprArg Args, SourceLocation RParenLoc,
2917 OverloadCandidateSet *CandidateSet,
2918 ExprResult *Result);
2919
2920 ExprResult CreateOverloadedUnaryOp(SourceLocation OpLoc,
2921 UnaryOperatorKind Opc,
2922 const UnresolvedSetImpl &Fns,
2923 Expr *input, bool RequiresADL = true);
2924
2925 ExprResult CreateOverloadedBinOp(SourceLocation OpLoc,
2926 BinaryOperatorKind Opc,
2927 const UnresolvedSetImpl &Fns,
2928 Expr *LHS, Expr *RHS,
2929 bool RequiresADL = true);
2930
2931 ExprResult CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
2932 SourceLocation RLoc,
2933 Expr *Base,Expr *Idx);
2934
2935 ExprResult
2936 BuildCallToMemberFunction(Scope *S, Expr *MemExpr,
2937 SourceLocation LParenLoc,
2938 MultiExprArg Args,
2939 SourceLocation RParenLoc);
2940 ExprResult
2941 BuildCallToObjectOfClassType(Scope *S, Expr *Object, SourceLocation LParenLoc,
2942 MultiExprArg Args,
2943 SourceLocation RParenLoc);
2944
2945 ExprResult BuildOverloadedArrowExpr(Scope *S, Expr *Base,
2946 SourceLocation OpLoc,
2947 bool *NoArrowOperatorFound = nullptr);
2948
2949 /// CheckCallReturnType - Checks that a call expression's return type is
2950 /// complete. Returns true on failure. The location passed in is the location
2951 /// that best represents the call.
2952 bool CheckCallReturnType(QualType ReturnType, SourceLocation Loc,
2953 CallExpr *CE, FunctionDecl *FD);
2954
2955 /// Helpers for dealing with blocks and functions.
2956 bool CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters,
2957 bool CheckParameterNames);
2958 void CheckCXXDefaultArguments(FunctionDecl *FD);
2959 void CheckExtraCXXDefaultArguments(Declarator &D);
2960 Scope *getNonFieldDeclScope(Scope *S);
2961
2962 /// \name Name lookup
2963 ///
2964 /// These routines provide name lookup that is used during semantic
2965 /// analysis to resolve the various kinds of names (identifiers,
2966 /// overloaded operator names, constructor names, etc.) into zero or
2967 /// more declarations within a particular scope. The major entry
2968 /// points are LookupName, which performs unqualified name lookup,
2969 /// and LookupQualifiedName, which performs qualified name lookup.
2970 ///
2971 /// All name lookup is performed based on some specific criteria,
2972 /// which specify what names will be visible to name lookup and how
2973 /// far name lookup should work. These criteria are important both
2974 /// for capturing language semantics (certain lookups will ignore
2975 /// certain names, for example) and for performance, since name
2976 /// lookup is often a bottleneck in the compilation of C++. Name
2977 /// lookup criteria is specified via the LookupCriteria enumeration.
2978 ///
2979 /// The results of name lookup can vary based on the kind of name
2980 /// lookup performed, the current language, and the translation
2981 /// unit. In C, for example, name lookup will either return nothing
2982 /// (no entity found) or a single declaration. In C++, name lookup
2983 /// can additionally refer to a set of overloaded functions or
2984 /// result in an ambiguity. All of the possible results of name
2985 /// lookup are captured by the LookupResult class, which provides
2986 /// the ability to distinguish among them.
2987 //@{
2988
2989 /// @brief Describes the kind of name lookup to perform.
2990 enum LookupNameKind {
2991 /// Ordinary name lookup, which finds ordinary names (functions,
2992 /// variables, typedefs, etc.) in C and most kinds of names
2993 /// (functions, variables, members, types, etc.) in C++.
2994 LookupOrdinaryName = 0,
2995 /// Tag name lookup, which finds the names of enums, classes,
2996 /// structs, and unions.
2997 LookupTagName,
2998 /// Label name lookup.
2999 LookupLabel,
3000 /// Member name lookup, which finds the names of
3001 /// class/struct/union members.
3002 LookupMemberName,
3003 /// Look up of an operator name (e.g., operator+) for use with
3004 /// operator overloading. This lookup is similar to ordinary name
3005 /// lookup, but will ignore any declarations that are class members.
3006 LookupOperatorName,
3007 /// Look up of a name that precedes the '::' scope resolution
3008 /// operator in C++. This lookup completely ignores operator, object,
3009 /// function, and enumerator names (C++ [basic.lookup.qual]p1).
3010 LookupNestedNameSpecifierName,
3011 /// Look up a namespace name within a C++ using directive or
3012 /// namespace alias definition, ignoring non-namespace names (C++
3013 /// [basic.lookup.udir]p1).
3014 LookupNamespaceName,
3015 /// Look up all declarations in a scope with the given name,
3016 /// including resolved using declarations. This is appropriate
3017 /// for checking redeclarations for a using declaration.
3018 LookupUsingDeclName,
3019 /// Look up an ordinary name that is going to be redeclared as a
3020 /// name with linkage. This lookup ignores any declarations that
3021 /// are outside of the current scope unless they have linkage. See
3022 /// C99 6.2.2p4-5 and C++ [basic.link]p6.
3023 LookupRedeclarationWithLinkage,
3024 /// Look up a friend of a local class. This lookup does not look
3025 /// outside the innermost non-class scope. See C++11 [class.friend]p11.
3026 LookupLocalFriendName,
3027 /// Look up the name of an Objective-C protocol.
3028 LookupObjCProtocolName,
3029 /// Look up implicit 'self' parameter of an objective-c method.
3030 LookupObjCImplicitSelfParam,
3031 /// \brief Look up the name of an OpenMP user-defined reduction operation.
3032 LookupOMPReductionName,
3033 /// \brief Look up any declaration with any name.
3034 LookupAnyName
3035 };
3036
3037 /// \brief Specifies whether (or how) name lookup is being performed for a
3038 /// redeclaration (vs. a reference).
3039 enum RedeclarationKind {
3040 /// \brief The lookup is a reference to this name that is not for the
3041 /// purpose of redeclaring the name.
3042 NotForRedeclaration = 0,
3043 /// \brief The lookup results will be used for redeclaration of a name,
3044 /// if an entity by that name already exists and is visible.
3045 ForVisibleRedeclaration,
3046 /// \brief The lookup results will be used for redeclaration of a name
3047 /// with external linkage; non-visible lookup results with external linkage
3048 /// may also be found.
3049 ForExternalRedeclaration
3050 };
3051
3052 RedeclarationKind forRedeclarationInCurContext() {
3053 // A declaration with an owning module for linkage can never link against
3054 // anything that is not visible. We don't need to check linkage here; if
3055 // the context has internal linkage, redeclaration lookup won't find things
3056 // from other TUs, and we can't safely compute linkage yet in general.
3057 if (cast<Decl>(CurContext)
3058 ->getOwningModuleForLinkage(/*IgnoreLinkage*/true))
3059 return ForVisibleRedeclaration;
3060 return ForExternalRedeclaration;
3061 }
3062
3063 /// \brief The possible outcomes of name lookup for a literal operator.
3064 enum LiteralOperatorLookupResult {
3065 /// \brief The lookup resulted in an error.
3066 LOLR_Error,
3067 /// \brief The lookup found no match but no diagnostic was issued.
3068 LOLR_ErrorNoDiagnostic,
3069 /// \brief The lookup found a single 'cooked' literal operator, which
3070 /// expects a normal literal to be built and passed to it.
3071 LOLR_Cooked,
3072 /// \brief The lookup found a single 'raw' literal operator, which expects
3073 /// a string literal containing the spelling of the literal token.
3074 LOLR_Raw,
3075 /// \brief The lookup found an overload set of literal operator templates,
3076 /// which expect the characters of the spelling of the literal token to be
3077 /// passed as a non-type template argument pack.
3078 LOLR_Template,
3079 /// \brief The lookup found an overload set of literal operator templates,
3080 /// which expect the character type and characters of the spelling of the
3081 /// string literal token to be passed as template arguments.
3082 LOLR_StringTemplate
3083 };
3084
3085 SpecialMemberOverloadResult LookupSpecialMember(CXXRecordDecl *D,
3086 CXXSpecialMember SM,
3087 bool ConstArg,
3088 bool VolatileArg,
3089 bool RValueThis,
3090 bool ConstThis,
3091 bool VolatileThis);
3092
3093 typedef std::function<void(const TypoCorrection &)> TypoDiagnosticGenerator;
3094 typedef std::function<ExprResult(Sema &, TypoExpr *, TypoCorrection)>
3095 TypoRecoveryCallback;
3096
3097private:
3098 bool CppLookupName(LookupResult &R, Scope *S);
3099
3100 struct TypoExprState {
3101 std::unique_ptr<TypoCorrectionConsumer> Consumer;
3102 TypoDiagnosticGenerator DiagHandler;
3103 TypoRecoveryCallback RecoveryHandler;
3104 TypoExprState();
3105 TypoExprState(TypoExprState &&other) noexcept;
3106 TypoExprState &operator=(TypoExprState &&other) noexcept;
3107 };
3108
3109 /// \brief The set of unhandled TypoExprs and their associated state.
3110 llvm::MapVector<TypoExpr *, TypoExprState> DelayedTypos;
3111
3112 /// \brief Creates a new TypoExpr AST node.
3113 TypoExpr *createDelayedTypo(std::unique_ptr<TypoCorrectionConsumer> TCC,
3114 TypoDiagnosticGenerator TDG,
3115 TypoRecoveryCallback TRC);
3116
3117 // \brief The set of known/encountered (unique, canonicalized) NamespaceDecls.
3118 //
3119 // The boolean value will be true to indicate that the namespace was loaded
3120 // from an AST/PCH file, or false otherwise.
3121 llvm::MapVector<NamespaceDecl*, bool> KnownNamespaces;
3122
3123 /// \brief Whether we have already loaded known namespaces from an extenal
3124 /// source.
3125 bool LoadedExternalKnownNamespaces;
3126
3127 /// \brief Helper for CorrectTypo and CorrectTypoDelayed used to create and
3128 /// populate a new TypoCorrectionConsumer. Returns nullptr if typo correction
3129 /// should be skipped entirely.
3130 std::unique_ptr<TypoCorrectionConsumer>
3131 makeTypoCorrectionConsumer(const DeclarationNameInfo &Typo,
3132 Sema::LookupNameKind LookupKind, Scope *S,
3133 CXXScopeSpec *SS,
3134 std::unique_ptr<CorrectionCandidateCallback> CCC,
3135 DeclContext *MemberContext, bool EnteringContext,
3136 const ObjCObjectPointerType *OPT,
3137 bool ErrorRecovery);
3138
3139public:
3140 const TypoExprState &getTypoExprState(TypoExpr *TE) const;
3141
3142 /// \brief Clears the state of the given TypoExpr.
3143 void clearDelayedTypo(TypoExpr *TE);
3144
3145 /// \brief Look up a name, looking for a single declaration. Return
3146 /// null if the results were absent, ambiguous, or overloaded.
3147 ///
3148 /// It is preferable to use the elaborated form and explicitly handle
3149 /// ambiguity and overloaded.
3150 NamedDecl *LookupSingleName(Scope *S, DeclarationName Name,
3151 SourceLocation Loc,
3152 LookupNameKind NameKind,
3153 RedeclarationKind Redecl
3154 = NotForRedeclaration);
3155 bool LookupName(LookupResult &R, Scope *S,
3156 bool AllowBuiltinCreation = false);
3157 bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx,
3158 bool InUnqualifiedLookup = false);
3159 bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx,
3160 CXXScopeSpec &SS);
3161 bool LookupParsedName(LookupResult &R, Scope *S, CXXScopeSpec *SS,
3162 bool AllowBuiltinCreation = false,
3163 bool EnteringContext = false);
3164 ObjCProtocolDecl *LookupProtocol(IdentifierInfo *II, SourceLocation IdLoc,
3165 RedeclarationKind Redecl
3166 = NotForRedeclaration);
3167 bool LookupInSuper(LookupResult &R, CXXRecordDecl *Class);
3168
3169 void LookupOverloadedOperatorName(OverloadedOperatorKind Op, Scope *S,
3170 QualType T1, QualType T2,
3171 UnresolvedSetImpl &Functions);
3172
3173 LabelDecl *LookupOrCreateLabel(IdentifierInfo *II, SourceLocation IdentLoc,
3174 SourceLocation GnuLabelLoc = SourceLocation());
3175
3176 DeclContextLookupResult LookupConstructors(CXXRecordDecl *Class);
3177 CXXConstructorDecl *LookupDefaultConstructor(CXXRecordDecl *Class);
3178 CXXConstructorDecl *LookupCopyingConstructor(CXXRecordDecl *Class,
3179 unsigned Quals);
3180 CXXMethodDecl *LookupCopyingAssignment(CXXRecordDecl *Class, unsigned Quals,
3181 bool RValueThis, unsigned ThisQuals);
3182 CXXConstructorDecl *LookupMovingConstructor(CXXRecordDecl *Class,
3183 unsigned Quals);
3184 CXXMethodDecl *LookupMovingAssignment(CXXRecordDecl *Class, unsigned Quals,
3185 bool RValueThis, unsigned ThisQuals);
3186 CXXDestructorDecl *LookupDestructor(CXXRecordDecl *Class);
3187
3188 bool checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Id);
3189 LiteralOperatorLookupResult LookupLiteralOperator(Scope *S, LookupResult &R,
3190 ArrayRef<QualType> ArgTys,
3191 bool AllowRaw,
3192 bool AllowTemplate,
3193 bool AllowStringTemplate,
3194 bool DiagnoseMissing);
3195 bool isKnownName(StringRef name);
3196
3197 void ArgumentDependentLookup(DeclarationName Name, SourceLocation Loc,
3198 ArrayRef<Expr *> Args, ADLResult &Functions);
3199
3200 void LookupVisibleDecls(Scope *S, LookupNameKind Kind,
3201 VisibleDeclConsumer &Consumer,
3202 bool IncludeGlobalScope = true);
3203 void LookupVisibleDecls(DeclContext *Ctx, LookupNameKind Kind,
3204 VisibleDeclConsumer &Consumer,
3205 bool IncludeGlobalScope = true,
3206 bool IncludeDependentBases = false);
3207
3208 enum CorrectTypoKind {
3209 CTK_NonError, // CorrectTypo used in a non error recovery situation.
3210 CTK_ErrorRecovery // CorrectTypo used in normal error recovery.
3211 };
3212
3213 TypoCorrection CorrectTypo(const DeclarationNameInfo &Typo,
3214 Sema::LookupNameKind LookupKind,
3215 Scope *S, CXXScopeSpec *SS,
3216 std::unique_ptr<CorrectionCandidateCallback> CCC,
3217 CorrectTypoKind Mode,
3218 DeclContext *MemberContext = nullptr,
3219 bool EnteringContext = false,
3220 const ObjCObjectPointerType *OPT = nullptr,
3221 bool RecordFailure = true);
3222
3223 TypoExpr *CorrectTypoDelayed(const DeclarationNameInfo &Typo,
3224 Sema::LookupNameKind LookupKind, Scope *S,
3225 CXXScopeSpec *SS,
3226 std::unique_ptr<CorrectionCandidateCallback> CCC,
3227 TypoDiagnosticGenerator TDG,
3228 TypoRecoveryCallback TRC, CorrectTypoKind Mode,
3229 DeclContext *MemberContext = nullptr,
3230 bool EnteringContext = false,
3231 const ObjCObjectPointerType *OPT = nullptr);
3232
3233 /// \brief Process any TypoExprs in the given Expr and its children,
3234 /// generating diagnostics as appropriate and returning a new Expr if there
3235 /// were typos that were all successfully corrected and ExprError if one or
3236 /// more typos could not be corrected.
3237 ///
3238 /// \param E The Expr to check for TypoExprs.
3239 ///
3240 /// \param InitDecl A VarDecl to avoid because the Expr being corrected is its
3241 /// initializer.
3242 ///
3243 /// \param Filter A function applied to a newly rebuilt Expr to determine if
3244 /// it is an acceptable/usable result from a single combination of typo
3245 /// corrections. As long as the filter returns ExprError, different
3246 /// combinations of corrections will be tried until all are exhausted.
3247 ExprResult
3248 CorrectDelayedTyposInExpr(Expr *E, VarDecl *InitDecl = nullptr,
3249 llvm::function_ref<ExprResult(Expr *)> Filter =
3250 [](Expr *E) -> ExprResult { return E; });
3251
3252 ExprResult
3253 CorrectDelayedTyposInExpr(Expr *E,
3254 llvm::function_ref<ExprResult(Expr *)> Filter) {
3255 return CorrectDelayedTyposInExpr(E, nullptr, Filter);
3256 }
3257
3258 ExprResult
3259 CorrectDelayedTyposInExpr(ExprResult ER, VarDecl *InitDecl = nullptr,
3260 llvm::function_ref<ExprResult(Expr *)> Filter =
3261 [](Expr *E) -> ExprResult { return E; }) {
3262 return ER.isInvalid() ? ER : CorrectDelayedTyposInExpr(ER.get(), Filter);
3263 }
3264
3265 ExprResult
3266 CorrectDelayedTyposInExpr(ExprResult ER,
3267 llvm::function_ref<ExprResult(Expr *)> Filter) {
3268 return CorrectDelayedTyposInExpr(ER, nullptr, Filter);
3269 }
3270
3271 void diagnoseTypo(const TypoCorrection &Correction,
3272 const PartialDiagnostic &TypoDiag,
3273 bool ErrorRecovery = true);
3274
3275 void diagnoseTypo(const TypoCorrection &Correction,
3276 const PartialDiagnostic &TypoDiag,
3277 const PartialDiagnostic &PrevNote,
3278 bool ErrorRecovery = true);
3279
3280 void MarkTypoCorrectedFunctionDefinition(const NamedDecl *F);
3281
3282 void FindAssociatedClassesAndNamespaces(SourceLocation InstantiationLoc,
3283 ArrayRef<Expr *> Args,
3284 AssociatedNamespaceSet &AssociatedNamespaces,
3285 AssociatedClassSet &AssociatedClasses);
3286
3287 void FilterLookupForScope(LookupResult &R, DeclContext *Ctx, Scope *S,
3288 bool ConsiderLinkage, bool AllowInlineNamespace);
3289
3290 bool CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old);
3291
3292 void DiagnoseAmbiguousLookup(LookupResult &Result);
3293 //@}
3294
3295 ObjCInterfaceDecl *getObjCInterfaceDecl(IdentifierInfo *&Id,
3296 SourceLocation IdLoc,
3297 bool TypoCorrection = false);
3298 NamedDecl *LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID,
3299 Scope *S, bool ForRedeclaration,
3300 SourceLocation Loc);
3301 NamedDecl *ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II,
3302 Scope *S);
3303 void AddKnownFunctionAttributes(FunctionDecl *FD);
3304
3305 // More parsing and symbol table subroutines.
3306
3307 void ProcessPragmaWeak(Scope *S, Decl *D);
3308 // Decl attributes - this routine is the top level dispatcher.
3309 void ProcessDeclAttributes(Scope *S, Decl *D, const Declarator &PD);
3310 // Helper for delayed processing of attributes.
3311 void ProcessDeclAttributeDelayed(Decl *D, const AttributeList *AttrList);
3312 void ProcessDeclAttributeList(Scope *S, Decl *D, const AttributeList *AL,
3313 bool IncludeCXX11Attributes = true);
3314 bool ProcessAccessDeclAttributeList(AccessSpecDecl *ASDecl,
3315 const AttributeList *AttrList);
3316
3317 void checkUnusedDeclAttributes(Declarator &D);
3318
3319 /// Determine if type T is a valid subject for a nonnull and similar
3320 /// attributes. By default, we look through references (the behavior used by
3321 /// nonnull), but if the second parameter is true, then we treat a reference
3322 /// type as valid.
3323 bool isValidPointerAttrType(QualType T, bool RefOkay = false);
3324
3325 bool CheckRegparmAttr(const AttributeList &attr, unsigned &value);
3326 bool CheckCallingConvAttr(const AttributeList &attr, CallingConv &CC,
3327 const FunctionDecl *FD = nullptr);
3328 bool CheckNoReturnAttr(const AttributeList &attr);
3329 bool CheckNoCallerSavedRegsAttr(const AttributeList &attr);
3330 bool checkStringLiteralArgumentAttr(const AttributeList &Attr,
3331 unsigned ArgNum, StringRef &Str,
3332 SourceLocation *ArgLocation = nullptr);
3333 bool checkSectionName(SourceLocation LiteralLoc, StringRef Str);
3334 bool checkTargetAttr(SourceLocation LiteralLoc, StringRef Str);
3335 bool checkMSInheritanceAttrOnDefinition(
3336 CXXRecordDecl *RD, SourceRange Range, bool BestCase,
3337 MSInheritanceAttr::Spelling SemanticSpelling);
3338
3339 void CheckAlignasUnderalignment(Decl *D);
3340
3341 /// Adjust the calling convention of a method to be the ABI default if it
3342 /// wasn't specified explicitly. This handles method types formed from
3343 /// function type typedefs and typename template arguments.
3344 void adjustMemberFunctionCC(QualType &T, bool IsStatic, bool IsCtorOrDtor,
3345 SourceLocation Loc);
3346
3347 // Check if there is an explicit attribute, but only look through parens.
3348 // The intent is to look for an attribute on the current declarator, but not
3349 // one that came from a typedef.
3350 bool hasExplicitCallingConv(QualType &T);
3351
3352 /// Get the outermost AttributedType node that sets a calling convention.
3353 /// Valid types should not have multiple attributes with different CCs.
3354 const AttributedType *getCallingConvAttributedType(QualType T) const;
3355
3356 /// Check whether a nullability type specifier can be added to the given
3357 /// type.
3358 ///
3359 /// \param type The type to which the nullability specifier will be
3360 /// added. On success, this type will be updated appropriately.
3361 ///
3362 /// \param nullability The nullability specifier to add.
3363 ///
3364 /// \param nullabilityLoc The location of the nullability specifier.
3365 ///
3366 /// \param isContextSensitive Whether this nullability specifier was
3367 /// written as a context-sensitive keyword (in an Objective-C
3368 /// method) or an Objective-C property attribute, rather than as an
3369 /// underscored type specifier.
3370 ///
3371 /// \param allowArrayTypes Whether to accept nullability specifiers on an
3372 /// array type (e.g., because it will decay to a pointer).
3373 ///
3374 /// \returns true if nullability cannot be applied, false otherwise.
3375 bool checkNullabilityTypeSpecifier(QualType &type, NullabilityKind nullability,
3376 SourceLocation nullabilityLoc,
3377 bool isContextSensitive,
3378 bool allowArrayTypes);
3379
3380 /// \brief Stmt attributes - this routine is the top level dispatcher.
3381 StmtResult ProcessStmtAttributes(Stmt *Stmt, AttributeList *Attrs,
3382 SourceRange Range);
3383
3384 void WarnConflictingTypedMethods(ObjCMethodDecl *Method,
3385 ObjCMethodDecl *MethodDecl,
3386 bool IsProtocolMethodDecl);
3387
3388 void CheckConflictingOverridingMethod(ObjCMethodDecl *Method,
3389 ObjCMethodDecl *Overridden,
3390 bool IsProtocolMethodDecl);
3391
3392 /// WarnExactTypedMethods - This routine issues a warning if method
3393 /// implementation declaration matches exactly that of its declaration.
3394 void WarnExactTypedMethods(ObjCMethodDecl *Method,
3395 ObjCMethodDecl *MethodDecl,
3396 bool IsProtocolMethodDecl);
3397
3398 typedef llvm::SmallPtrSet<Selector, 8> SelectorSet;
3399
3400 /// CheckImplementationIvars - This routine checks if the instance variables
3401 /// listed in the implelementation match those listed in the interface.
3402 void CheckImplementationIvars(ObjCImplementationDecl *ImpDecl,
3403 ObjCIvarDecl **Fields, unsigned nIvars,
3404 SourceLocation Loc);
3405
3406 /// ImplMethodsVsClassMethods - This is main routine to warn if any method
3407 /// remains unimplemented in the class or category \@implementation.
3408 void ImplMethodsVsClassMethods(Scope *S, ObjCImplDecl* IMPDecl,
3409 ObjCContainerDecl* IDecl,
3410 bool IncompleteImpl = false);
3411
3412 /// DiagnoseUnimplementedProperties - This routine warns on those properties
3413 /// which must be implemented by this implementation.
3414 void DiagnoseUnimplementedProperties(Scope *S, ObjCImplDecl* IMPDecl,
3415 ObjCContainerDecl *CDecl,
3416 bool SynthesizeProperties);
3417
3418 /// Diagnose any null-resettable synthesized setters.
3419 void diagnoseNullResettableSynthesizedSetters(const ObjCImplDecl *impDecl);
3420
3421 /// DefaultSynthesizeProperties - This routine default synthesizes all
3422 /// properties which must be synthesized in the class's \@implementation.
3423 void DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl,
3424 ObjCInterfaceDecl *IDecl,
3425 SourceLocation AtEnd);
3426 void DefaultSynthesizeProperties(Scope *S, Decl *D, SourceLocation AtEnd);
3427
3428 /// IvarBacksCurrentMethodAccessor - This routine returns 'true' if 'IV' is
3429 /// an ivar synthesized for 'Method' and 'Method' is a property accessor
3430 /// declared in class 'IFace'.
3431 bool IvarBacksCurrentMethodAccessor(ObjCInterfaceDecl *IFace,
3432 ObjCMethodDecl *Method, ObjCIvarDecl *IV);
3433
3434 /// DiagnoseUnusedBackingIvarInAccessor - Issue an 'unused' warning if ivar which
3435 /// backs the property is not used in the property's accessor.
3436 void DiagnoseUnusedBackingIvarInAccessor(Scope *S,
3437 const ObjCImplementationDecl *ImplD);
3438
3439 /// GetIvarBackingPropertyAccessor - If method is a property setter/getter and
3440 /// it property has a backing ivar, returns this ivar; otherwise, returns NULL.
3441 /// It also returns ivar's property on success.
3442 ObjCIvarDecl *GetIvarBackingPropertyAccessor(const ObjCMethodDecl *Method,
3443 const ObjCPropertyDecl *&PDecl) const;
3444
3445 /// Called by ActOnProperty to handle \@property declarations in
3446 /// class extensions.
3447 ObjCPropertyDecl *HandlePropertyInClassExtension(Scope *S,
3448 SourceLocation AtLoc,
3449 SourceLocation LParenLoc,
3450 FieldDeclarator &FD,
3451 Selector GetterSel,
3452 SourceLocation GetterNameLoc,
3453 Selector SetterSel,
3454 SourceLocation SetterNameLoc,
3455 const bool isReadWrite,
3456 unsigned &Attributes,
3457 const unsigned AttributesAsWritten,
3458 QualType T,
3459 TypeSourceInfo *TSI,
3460 tok::ObjCKeywordKind MethodImplKind);
3461
3462 /// Called by ActOnProperty and HandlePropertyInClassExtension to
3463 /// handle creating the ObjcPropertyDecl for a category or \@interface.
3464 ObjCPropertyDecl *CreatePropertyDecl(Scope *S,
3465 ObjCContainerDecl *CDecl,
3466 SourceLocation AtLoc,
3467 SourceLocation LParenLoc,
3468 FieldDeclarator &FD,
3469 Selector GetterSel,
3470 SourceLocation GetterNameLoc,
3471 Selector SetterSel,
3472 SourceLocation SetterNameLoc,
3473 const bool isReadWrite,
3474 const unsigned Attributes,
3475 const unsigned AttributesAsWritten,
3476 QualType T,
3477 TypeSourceInfo *TSI,
3478 tok::ObjCKeywordKind MethodImplKind,
3479 DeclContext *lexicalDC = nullptr);
3480
3481 /// AtomicPropertySetterGetterRules - This routine enforces the rule (via
3482 /// warning) when atomic property has one but not the other user-declared
3483 /// setter or getter.
3484 void AtomicPropertySetterGetterRules(ObjCImplDecl* IMPDecl,
3485 ObjCInterfaceDecl* IDecl);
3486
3487 void DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D);
3488
3489 void DiagnoseMissingDesignatedInitOverrides(
3490 const ObjCImplementationDecl *ImplD,
3491 const ObjCInterfaceDecl *IFD);
3492
3493 void DiagnoseDuplicateIvars(ObjCInterfaceDecl *ID, ObjCInterfaceDecl *SID);
3494
3495 enum MethodMatchStrategy {
3496 MMS_loose,
3497 MMS_strict
3498 };
3499
3500 /// MatchTwoMethodDeclarations - Checks if two methods' type match and returns
3501 /// true, or false, accordingly.
3502 bool MatchTwoMethodDeclarations(const ObjCMethodDecl *Method,
3503 const ObjCMethodDecl *PrevMethod,
3504 MethodMatchStrategy strategy = MMS_strict);
3505
3506 /// MatchAllMethodDeclarations - Check methods declaraed in interface or
3507 /// or protocol against those declared in their implementations.
3508 void MatchAllMethodDeclarations(const SelectorSet &InsMap,
3509 const SelectorSet &ClsMap,
3510 SelectorSet &InsMapSeen,
3511 SelectorSet &ClsMapSeen,
3512 ObjCImplDecl* IMPDecl,
3513 ObjCContainerDecl* IDecl,
3514 bool &IncompleteImpl,
3515 bool ImmediateClass,
3516 bool WarnCategoryMethodImpl=false);
3517
3518 /// CheckCategoryVsClassMethodMatches - Checks that methods implemented in
3519 /// category matches with those implemented in its primary class and
3520 /// warns each time an exact match is found.
3521 void CheckCategoryVsClassMethodMatches(ObjCCategoryImplDecl *CatIMP);
3522
3523 /// \brief Add the given method to the list of globally-known methods.
3524 void addMethodToGlobalList(ObjCMethodList *List, ObjCMethodDecl *Method);
3525
3526private:
3527 /// AddMethodToGlobalPool - Add an instance or factory method to the global
3528 /// pool. See descriptoin of AddInstanceMethodToGlobalPool.
3529 void AddMethodToGlobalPool(ObjCMethodDecl *Method, bool impl, bool instance);
3530
3531 /// LookupMethodInGlobalPool - Returns the instance or factory method and
3532 /// optionally warns if there are multiple signatures.
3533 ObjCMethodDecl *LookupMethodInGlobalPool(Selector Sel, SourceRange R,
3534 bool receiverIdOrClass,
3535 bool instance);
3536
3537public:
3538 /// \brief - Returns instance or factory methods in global method pool for
3539 /// given selector. It checks the desired kind first, if none is found, and
3540 /// parameter checkTheOther is set, it then checks the other kind. If no such
3541 /// method or only one method is found, function returns false; otherwise, it
3542 /// returns true.
3543 bool
3544 CollectMultipleMethodsInGlobalPool(Selector Sel,
3545 SmallVectorImpl<ObjCMethodDecl*>& Methods,
3546 bool InstanceFirst, bool CheckTheOther,
3547 const ObjCObjectType *TypeBound = nullptr);
3548
3549 bool
3550 AreMultipleMethodsInGlobalPool(Selector Sel, ObjCMethodDecl *BestMethod,
3551 SourceRange R, bool receiverIdOrClass,
3552 SmallVectorImpl<ObjCMethodDecl*>& Methods);
3553
3554 void
3555 DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl*> &Methods,
3556 Selector Sel, SourceRange R,
3557 bool receiverIdOrClass);
3558
3559private:
3560 /// \brief - Returns a selector which best matches given argument list or
3561 /// nullptr if none could be found
3562 ObjCMethodDecl *SelectBestMethod(Selector Sel, MultiExprArg Args,
3563 bool IsInstance,
3564 SmallVectorImpl<ObjCMethodDecl*>& Methods);
3565
3566
3567 /// \brief Record the typo correction failure and return an empty correction.
3568 TypoCorrection FailedCorrection(IdentifierInfo *Typo, SourceLocation TypoLoc,
3569 bool RecordFailure = true) {
3570 if (RecordFailure)
3571 TypoCorrectionFailures[Typo].insert(TypoLoc);
3572 return TypoCorrection();
3573 }
3574
3575public:
3576 /// AddInstanceMethodToGlobalPool - All instance methods in a translation
3577 /// unit are added to a global pool. This allows us to efficiently associate
3578 /// a selector with a method declaraation for purposes of typechecking
3579 /// messages sent to "id" (where the class of the object is unknown).
3580 void AddInstanceMethodToGlobalPool(ObjCMethodDecl *Method, bool impl=false) {
3581 AddMethodToGlobalPool(Method, impl, /*instance*/true);
3582 }
3583
3584 /// AddFactoryMethodToGlobalPool - Same as above, but for factory methods.
3585 void AddFactoryMethodToGlobalPool(ObjCMethodDecl *Method, bool impl=false) {
3586 AddMethodToGlobalPool(Method, impl, /*instance*/false);
3587 }
3588
3589 /// AddAnyMethodToGlobalPool - Add any method, instance or factory to global
3590 /// pool.
3591 void AddAnyMethodToGlobalPool(Decl *D);
3592
3593 /// LookupInstanceMethodInGlobalPool - Returns the method and warns if
3594 /// there are multiple signatures.
3595 ObjCMethodDecl *LookupInstanceMethodInGlobalPool(Selector Sel, SourceRange R,
3596 bool receiverIdOrClass=false) {
3597 return LookupMethodInGlobalPool(Sel, R, receiverIdOrClass,
3598 /*instance*/true);
3599 }
3600
3601 /// LookupFactoryMethodInGlobalPool - Returns the method and warns if
3602 /// there are multiple signatures.
3603 ObjCMethodDecl *LookupFactoryMethodInGlobalPool(Selector Sel, SourceRange R,
3604 bool receiverIdOrClass=false) {
3605 return LookupMethodInGlobalPool(Sel, R, receiverIdOrClass,
3606 /*instance*/false);
3607 }
3608
3609 const ObjCMethodDecl *SelectorsForTypoCorrection(Selector Sel,
3610 QualType ObjectType=QualType());
3611 /// LookupImplementedMethodInGlobalPool - Returns the method which has an
3612 /// implementation.
3613 ObjCMethodDecl *LookupImplementedMethodInGlobalPool(Selector Sel);
3614
3615 /// CollectIvarsToConstructOrDestruct - Collect those ivars which require
3616 /// initialization.
3617 void CollectIvarsToConstructOrDestruct(ObjCInterfaceDecl *OI,
3618 SmallVectorImpl<ObjCIvarDecl*> &Ivars);
3619
3620 //===--------------------------------------------------------------------===//
3621 // Statement Parsing Callbacks: SemaStmt.cpp.
3622public:
3623 class FullExprArg {
3624 public:
3625 FullExprArg() : E(nullptr) { }
3626 FullExprArg(Sema &actions) : E(nullptr) { }
3627
3628 ExprResult release() {
3629 return E;
3630 }
3631
3632 Expr *get() const { return E; }
3633
3634 Expr *operator->() {
3635 return E;
3636 }
3637
3638 private:
3639 // FIXME: No need to make the entire Sema class a friend when it's just
3640 // Sema::MakeFullExpr that needs access to the constructor below.
3641 friend class Sema;
3642
3643 explicit FullExprArg(Expr *expr) : E(expr) {}
3644
3645 Expr *E;
3646 };
3647
3648 FullExprArg MakeFullExpr(Expr *Arg) {
3649 return MakeFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation());
3650 }
3651 FullExprArg MakeFullExpr(Expr *Arg, SourceLocation CC) {
3652 return FullExprArg(ActOnFinishFullExpr(Arg, CC).get());
3653 }
3654 FullExprArg MakeFullDiscardedValueExpr(Expr *Arg) {
3655 ExprResult FE =
3656 ActOnFinishFullExpr(Arg, Arg ? Arg->getExprLoc() : SourceLocation(),
3657 /*DiscardedValue*/ true);
3658 return FullExprArg(FE.get());
3659 }
3660
3661 StmtResult ActOnExprStmt(ExprResult Arg);
3662 StmtResult ActOnExprStmtError();
3663
3664 StmtResult ActOnNullStmt(SourceLocation SemiLoc,
3665 bool HasLeadingEmptyMacro = false);
3666
3667 void ActOnStartOfCompoundStmt();
3668 void ActOnFinishOfCompoundStmt();
3669 StmtResult ActOnCompoundStmt(SourceLocation L, SourceLocation R,
3670 ArrayRef<Stmt *> Elts, bool isStmtExpr);
3671
3672 /// \brief A RAII object to enter scope of a compound statement.
3673 class CompoundScopeRAII {
3674 public:
3675 CompoundScopeRAII(Sema &S): S(S) {
3676 S.ActOnStartOfCompoundStmt();
3677 }
3678
3679 ~CompoundScopeRAII() {
3680 S.ActOnFinishOfCompoundStmt();
3681 }
3682
3683 private:
3684 Sema &S;
3685 };
3686
3687 /// An RAII helper that pops function a function scope on exit.
3688 struct FunctionScopeRAII {
3689 Sema &S;
3690 bool Active;
3691 FunctionScopeRAII(Sema &S) : S(S), Active(true) {}
3692 ~FunctionScopeRAII() {
3693 if (Active)
3694 S.PopFunctionScopeInfo();
3695 }
3696 void disable() { Active = false; }
3697 };
3698
3699 StmtResult ActOnDeclStmt(DeclGroupPtrTy Decl,
3700 SourceLocation StartLoc,
3701 SourceLocation EndLoc);
3702 void ActOnForEachDeclStmt(DeclGroupPtrTy Decl);
3703 StmtResult ActOnForEachLValueExpr(Expr *E);
3704 StmtResult ActOnCaseStmt(SourceLocation CaseLoc, Expr *LHSVal,
3705 SourceLocation DotDotDotLoc, Expr *RHSVal,
3706 SourceLocation ColonLoc);
3707 void ActOnCaseStmtBody(Stmt *CaseStmt, Stmt *SubStmt);
3708
3709 StmtResult ActOnDefaultStmt(SourceLocation DefaultLoc,
3710 SourceLocation ColonLoc,
3711 Stmt *SubStmt, Scope *CurScope);
3712 StmtResult ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl,
3713 SourceLocation ColonLoc, Stmt *SubStmt);
3714
3715 StmtResult ActOnAttributedStmt(SourceLocation AttrLoc,
3716 ArrayRef<const Attr*> Attrs,
3717 Stmt *SubStmt);
3718
3719 class ConditionResult;
3720 StmtResult ActOnIfStmt(SourceLocation IfLoc, bool IsConstexpr,
3721 Stmt *InitStmt,
3722 ConditionResult Cond, Stmt *ThenVal,
3723 SourceLocation ElseLoc, Stmt *ElseVal);
3724 StmtResult BuildIfStmt(SourceLocation IfLoc, bool IsConstexpr,
3725 Stmt *InitStmt,
3726 ConditionResult Cond, Stmt *ThenVal,
3727 SourceLocation ElseLoc, Stmt *ElseVal);
3728 StmtResult ActOnStartOfSwitchStmt(SourceLocation SwitchLoc,
3729 Stmt *InitStmt,
3730 ConditionResult Cond);
3731 StmtResult ActOnFinishSwitchStmt(SourceLocation SwitchLoc,
3732 Stmt *Switch, Stmt *Body);
3733 StmtResult ActOnWhileStmt(SourceLocation WhileLoc, ConditionResult Cond,
3734 Stmt *Body);
3735 StmtResult ActOnDoStmt(SourceLocation DoLoc, Stmt *Body,
3736 SourceLocation WhileLoc, SourceLocation CondLParen,
3737 Expr *Cond, SourceLocation CondRParen);
3738
3739 StmtResult ActOnForStmt(SourceLocation ForLoc,
3740 SourceLocation LParenLoc,
3741 Stmt *First,
3742 ConditionResult Second,
3743 FullExprArg Third,
3744 SourceLocation RParenLoc,
3745 Stmt *Body);
3746 ExprResult CheckObjCForCollectionOperand(SourceLocation forLoc,
3747 Expr *collection);
3748 StmtResult ActOnObjCForCollectionStmt(SourceLocation ForColLoc,
3749 Stmt *First, Expr *collection,
3750 SourceLocation RParenLoc);
3751 StmtResult FinishObjCForCollectionStmt(Stmt *ForCollection, Stmt *Body);
3752
3753 enum BuildForRangeKind {
3754 /// Initial building of a for-range statement.
3755 BFRK_Build,
3756 /// Instantiation or recovery rebuild of a for-range statement. Don't
3757 /// attempt any typo-correction.
3758 BFRK_Rebuild,
3759 /// Determining whether a for-range statement could be built. Avoid any
3760 /// unnecessary or irreversible actions.
3761 BFRK_Check
3762 };
3763
3764 StmtResult ActOnCXXForRangeStmt(Scope *S, SourceLocation ForLoc,
3765 SourceLocation CoawaitLoc,
3766 Stmt *LoopVar,
3767 SourceLocation ColonLoc, Expr *Collection,
3768 SourceLocation RParenLoc,
3769 BuildForRangeKind Kind);
3770 StmtResult BuildCXXForRangeStmt(SourceLocation ForLoc,
3771 SourceLocation CoawaitLoc,
3772 SourceLocation ColonLoc,
3773 Stmt *RangeDecl, Stmt *Begin, Stmt *End,
3774 Expr *Cond, Expr *Inc,
3775 Stmt *LoopVarDecl,
3776 SourceLocation RParenLoc,
3777 BuildForRangeKind Kind);
3778 StmtResult FinishCXXForRangeStmt(Stmt *ForRange, Stmt *Body);
3779
3780 StmtResult ActOnGotoStmt(SourceLocation GotoLoc,
3781 SourceLocation LabelLoc,
3782 LabelDecl *TheDecl);
3783 StmtResult ActOnIndirectGotoStmt(SourceLocation GotoLoc,
3784 SourceLocation StarLoc,
3785 Expr *DestExp);
3786 StmtResult ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope);
3787 StmtResult ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope);
3788
3789 void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope,
3790 CapturedRegionKind Kind, unsigned NumParams);
3791 typedef std::pair<StringRef, QualType> CapturedParamNameType;
3792 void ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope,
3793 CapturedRegionKind Kind,
3794 ArrayRef<CapturedParamNameType> Params);
3795 StmtResult ActOnCapturedRegionEnd(Stmt *S);
3796 void ActOnCapturedRegionError();
3797 RecordDecl *CreateCapturedStmtRecordDecl(CapturedDecl *&CD,
3798 SourceLocation Loc,
3799 unsigned NumParams);
3800 VarDecl *getCopyElisionCandidate(QualType ReturnType, Expr *E,
3801 bool AllowParamOrMoveConstructible);
3802 bool isCopyElisionCandidate(QualType ReturnType, const VarDecl *VD,
3803 bool AllowParamOrMoveConstructible);
3804
3805 StmtResult ActOnReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp,
3806 Scope *CurScope);
3807 StmtResult BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp);
3808 StmtResult ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp);
3809
3810 StmtResult ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple,
3811 bool IsVolatile, unsigned NumOutputs,
3812 unsigned NumInputs, IdentifierInfo **Names,
3813 MultiExprArg Constraints, MultiExprArg Exprs,
3814 Expr *AsmString, MultiExprArg Clobbers,
3815 SourceLocation RParenLoc);
3816
3817 void FillInlineAsmIdentifierInfo(Expr *Res,
3818 llvm::InlineAsmIdentifierInfo &Info);
3819 ExprResult LookupInlineAsmIdentifier(CXXScopeSpec &SS,
3820 SourceLocation TemplateKWLoc,
3821 UnqualifiedId &Id,
3822 bool IsUnevaluatedContext);
3823 bool LookupInlineAsmField(StringRef Base, StringRef Member,
3824 unsigned &Offset, SourceLocation AsmLoc);
3825 ExprResult LookupInlineAsmVarDeclField(Expr *RefExpr, StringRef Member,
3826 SourceLocation AsmLoc);
3827 StmtResult ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc,
3828 ArrayRef<Token> AsmToks,
3829 StringRef AsmString,
3830 unsigned NumOutputs, unsigned NumInputs,
3831 ArrayRef<StringRef> Constraints,
3832 ArrayRef<StringRef> Clobbers,
3833 ArrayRef<Expr*> Exprs,
3834 SourceLocation EndLoc);
3835 LabelDecl *GetOrCreateMSAsmLabel(StringRef ExternalLabelName,
3836 SourceLocation Location,
3837 bool AlwaysCreate);
3838
3839 VarDecl *BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType ExceptionType,
3840 SourceLocation StartLoc,
3841 SourceLocation IdLoc, IdentifierInfo *Id,
3842 bool Invalid = false);
3843
3844 Decl *ActOnObjCExceptionDecl(Scope *S, Declarator &D);
3845
3846 StmtResult ActOnObjCAtCatchStmt(SourceLocation AtLoc, SourceLocation RParen,
3847 Decl *Parm, Stmt *Body);
3848
3849 StmtResult ActOnObjCAtFinallyStmt(SourceLocation AtLoc, Stmt *Body);
3850
3851 StmtResult ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try,
3852 MultiStmtArg Catch, Stmt *Finally);
3853
3854 StmtResult BuildObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw);
3855 StmtResult ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw,
3856 Scope *CurScope);
3857 ExprResult ActOnObjCAtSynchronizedOperand(SourceLocation atLoc,
3858 Expr *operand);
3859 StmtResult ActOnObjCAtSynchronizedStmt(SourceLocation AtLoc,
3860 Expr *SynchExpr,
3861 Stmt *SynchBody);
3862
3863 StmtResult ActOnObjCAutoreleasePoolStmt(SourceLocation AtLoc, Stmt *Body);
3864
3865 VarDecl *BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo,
3866 SourceLocation StartLoc,
3867 SourceLocation IdLoc,
3868 IdentifierInfo *Id);
3869
3870 Decl *ActOnExceptionDeclarator(Scope *S, Declarator &D);
3871
3872 StmtResult ActOnCXXCatchBlock(SourceLocation CatchLoc,
3873 Decl *ExDecl, Stmt *HandlerBlock);
3874 StmtResult ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock,
3875 ArrayRef<Stmt *> Handlers);
3876
3877 StmtResult ActOnSEHTryBlock(bool IsCXXTry, // try (true) or __try (false) ?
3878 SourceLocation TryLoc, Stmt *TryBlock,
3879 Stmt *Handler);
3880 StmtResult ActOnSEHExceptBlock(SourceLocation Loc,
3881 Expr *FilterExpr,
3882 Stmt *Block);
3883 void ActOnStartSEHFinallyBlock();
3884 void ActOnAbortSEHFinallyBlock();
3885 StmtResult ActOnFinishSEHFinallyBlock(SourceLocation Loc, Stmt *Block);
3886 StmtResult ActOnSEHLeaveStmt(SourceLocation Loc, Scope *CurScope);
3887
3888 void DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock);
3889
3890 bool ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const;
3891
3892 /// \brief If it's a file scoped decl that must warn if not used, keep track
3893 /// of it.
3894 void MarkUnusedFileScopedDecl(const DeclaratorDecl *D);
3895
3896 /// DiagnoseUnusedExprResult - If the statement passed in is an expression
3897 /// whose result is unused, warn.
3898 void DiagnoseUnusedExprResult(const Stmt *S);
3899 void DiagnoseUnusedNestedTypedefs(const RecordDecl *D);
3900 void DiagnoseUnusedDecl(const NamedDecl *ND);
3901
3902 /// Emit \p DiagID if statement located on \p StmtLoc has a suspicious null
3903 /// statement as a \p Body, and it is located on the same line.
3904 ///
3905 /// This helps prevent bugs due to typos, such as:
3906 /// if (condition);
3907 /// do_stuff();
3908 void DiagnoseEmptyStmtBody(SourceLocation StmtLoc,
3909 const Stmt *Body,
3910 unsigned DiagID);
3911
3912 /// Warn if a for/while loop statement \p S, which is followed by
3913 /// \p PossibleBody, has a suspicious null statement as a body.
3914 void DiagnoseEmptyLoopBody(const Stmt *S,
3915 const Stmt *PossibleBody);
3916
3917 /// Warn if a value is moved to itself.
3918 void DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr,
3919 SourceLocation OpLoc);
3920
3921 /// \brief Warn if we're implicitly casting from a _Nullable pointer type to a
3922 /// _Nonnull one.
3923 void diagnoseNullableToNonnullConversion(QualType DstType, QualType SrcType,
3924 SourceLocation Loc);
3925
3926 /// Warn when implicitly casting 0 to nullptr.
3927 void diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E);
3928
3929 ParsingDeclState PushParsingDeclaration(sema::DelayedDiagnosticPool &pool) {
3930 return DelayedDiagnostics.push(pool);
3931 }
3932 void PopParsingDeclaration(ParsingDeclState state, Decl *decl);
3933
3934 typedef ProcessingContextState ParsingClassState;
3935 ParsingClassState PushParsingClass() {
3936 return DelayedDiagnostics.pushUndelayed();
3937 }
3938 void PopParsingClass(ParsingClassState state) {
3939 DelayedDiagnostics.popUndelayed(state);
3940 }
3941
3942 void redelayDiagnostics(sema::DelayedDiagnosticPool &pool);
3943
3944 void DiagnoseAvailabilityOfDecl(NamedDecl *D, SourceLocation Loc,
3945 const ObjCInterfaceDecl *UnknownObjCClass,
3946 bool ObjCPropertyAccess,
3947 bool AvoidPartialAvailabilityChecks = false);
3948
3949 bool makeUnavailableInSystemHeader(SourceLocation loc,
3950 UnavailableAttr::ImplicitReason reason);
3951
3952 /// \brief Issue any -Wunguarded-availability warnings in \c FD
3953 void DiagnoseUnguardedAvailabilityViolations(Decl *FD);
3954
3955 //===--------------------------------------------------------------------===//
3956 // Expression Parsing Callbacks: SemaExpr.cpp.
3957
3958 bool CanUseDecl(NamedDecl *D, bool TreatUnavailableAsInvalid);
3959 bool DiagnoseUseOfDecl(NamedDecl *D, SourceLocation Loc,
3960 const ObjCInterfaceDecl *UnknownObjCClass = nullptr,
3961 bool ObjCPropertyAccess = false,
3962 bool AvoidPartialAvailabilityChecks = false);
3963 void NoteDeletedFunction(FunctionDecl *FD);
3964 void NoteDeletedInheritingConstructor(CXXConstructorDecl *CD);
3965 std::string getDeletedOrUnavailableSuffix(const FunctionDecl *FD);
3966 bool DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *PD,
3967 ObjCMethodDecl *Getter,
3968 SourceLocation Loc);
3969 void DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc,
3970 ArrayRef<Expr *> Args);
3971
3972 void PushExpressionEvaluationContext(ExpressionEvaluationContext NewContext,
3973 Decl *LambdaContextDecl = nullptr,
3974 bool IsDecltype = false);
3975 enum ReuseLambdaContextDecl_t { ReuseLambdaContextDecl };
3976 void PushExpressionEvaluationContext(ExpressionEvaluationContext NewContext,
3977 ReuseLambdaContextDecl_t,
3978 bool IsDecltype = false);
3979 void PopExpressionEvaluationContext();
3980
3981 void DiscardCleanupsInEvaluationContext();
3982
3983 ExprResult TransformToPotentiallyEvaluated(Expr *E);
3984 ExprResult HandleExprEvaluationContextForTypeof(Expr *E);
3985
3986 ExprResult ActOnConstantExpression(ExprResult Res);
3987
3988 // Functions for marking a declaration referenced. These functions also
3989 // contain the relevant logic for marking if a reference to a function or
3990 // variable is an odr-use (in the C++11 sense). There are separate variants
3991 // for expressions referring to a decl; these exist because odr-use marking
3992 // needs to be delayed for some constant variables when we build one of the
3993 // named expressions.
3994 //
3995 // MightBeOdrUse indicates whether the use could possibly be an odr-use, and
3996 // should usually be true. This only needs to be set to false if the lack of
3997 // odr-use cannot be determined from the current context (for instance,
3998 // because the name denotes a virtual function and was written without an
3999 // explicit nested-name-specifier).
4000 void MarkAnyDeclReferenced(SourceLocation Loc, Decl *D, bool MightBeOdrUse);
4001 void MarkFunctionReferenced(SourceLocation Loc, FunctionDecl *Func,
4002 bool MightBeOdrUse = true);
4003 void MarkVariableReferenced(SourceLocation Loc, VarDecl *Var);
4004 void MarkDeclRefReferenced(DeclRefExpr *E, const Expr *Base = nullptr);
4005 void MarkMemberReferenced(MemberExpr *E);
4006
4007 void UpdateMarkingForLValueToRValue(Expr *E);
4008 void CleanupVarDeclMarking();
4009
4010 enum TryCaptureKind {
4011 TryCapture_Implicit, TryCapture_ExplicitByVal, TryCapture_ExplicitByRef
4012 };
4013
4014 /// \brief Try to capture the given variable.
4015 ///
4016 /// \param Var The variable to capture.
4017 ///
4018 /// \param Loc The location at which the capture occurs.
4019 ///
4020 /// \param Kind The kind of capture, which may be implicit (for either a
4021 /// block or a lambda), or explicit by-value or by-reference (for a lambda).
4022 ///
4023 /// \param EllipsisLoc The location of the ellipsis, if one is provided in
4024 /// an explicit lambda capture.
4025 ///
4026 /// \param BuildAndDiagnose Whether we are actually supposed to add the
4027 /// captures or diagnose errors. If false, this routine merely check whether
4028 /// the capture can occur without performing the capture itself or complaining
4029 /// if the variable cannot be captured.
4030 ///
4031 /// \param CaptureType Will be set to the type of the field used to capture
4032 /// this variable in the innermost block or lambda. Only valid when the
4033 /// variable can be captured.
4034 ///
4035 /// \param DeclRefType Will be set to the type of a reference to the capture
4036 /// from within the current scope. Only valid when the variable can be
4037 /// captured.
4038 ///
4039 /// \param FunctionScopeIndexToStopAt If non-null, it points to the index
4040 /// of the FunctionScopeInfo stack beyond which we do not attempt to capture.
4041 /// This is useful when enclosing lambdas must speculatively capture
4042 /// variables that may or may not be used in certain specializations of
4043 /// a nested generic lambda.
4044 ///
4045 /// \returns true if an error occurred (i.e., the variable cannot be
4046 /// captured) and false if the capture succeeded.
4047 bool tryCaptureVariable(VarDecl *Var, SourceLocation Loc, TryCaptureKind Kind,
4048 SourceLocation EllipsisLoc, bool BuildAndDiagnose,
4049 QualType &CaptureType,
4050 QualType &DeclRefType,
4051 const unsigned *const FunctionScopeIndexToStopAt);
4052
4053 /// \brief Try to capture the given variable.
4054 bool tryCaptureVariable(VarDecl *Var, SourceLocation Loc,
4055 TryCaptureKind Kind = TryCapture_Implicit,
4056 SourceLocation EllipsisLoc = SourceLocation());
4057
4058 /// \brief Checks if the variable must be captured.
4059 bool NeedToCaptureVariable(VarDecl *Var, SourceLocation Loc);
4060
4061 /// \brief Given a variable, determine the type that a reference to that
4062 /// variable will have in the given scope.
4063 QualType getCapturedDeclRefType(VarDecl *Var, SourceLocation Loc);
4064
4065 /// Mark all of the declarations referenced within a particular AST node as
4066 /// referenced. Used when template instantiation instantiates a non-dependent
4067 /// type -- entities referenced by the type are now referenced.
4068 void MarkDeclarationsReferencedInType(SourceLocation Loc, QualType T);
4069 void MarkDeclarationsReferencedInExpr(Expr *E,
4070 bool SkipLocalVariables = false);
4071
4072 /// \brief Try to recover by turning the given expression into a
4073 /// call. Returns true if recovery was attempted or an error was
4074 /// emitted; this may also leave the ExprResult invalid.
4075 bool tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD,
4076 bool ForceComplain = false,
4077 bool (*IsPlausibleResult)(QualType) = nullptr);
4078
4079 /// \brief Figure out if an expression could be turned into a call.
4080 bool tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy,
4081 UnresolvedSetImpl &NonTemplateOverloads);
4082
4083 /// \brief Conditionally issue a diagnostic based on the current
4084 /// evaluation context.
4085 ///
4086 /// \param Statement If Statement is non-null, delay reporting the
4087 /// diagnostic until the function body is parsed, and then do a basic
4088 /// reachability analysis to determine if the statement is reachable.
4089 /// If it is unreachable, the diagnostic will not be emitted.
4090 bool DiagRuntimeBehavior(SourceLocation Loc, const Stmt *Statement,
4091 const PartialDiagnostic &PD);
4092
4093 // Primary Expressions.
4094 SourceRange getExprRange(Expr *E) const;
4095
4096 ExprResult ActOnIdExpression(
4097 Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
4098 UnqualifiedId &Id, bool HasTrailingLParen, bool IsAddressOfOperand,
4099 std::unique_ptr<CorrectionCandidateCallback> CCC = nullptr,
4100 bool IsInlineAsmIdentifier = false, Token *KeywordReplacement = nullptr);
4101
4102 void DecomposeUnqualifiedId(const UnqualifiedId &Id,
4103 TemplateArgumentListInfo &Buffer,
4104 DeclarationNameInfo &NameInfo,
4105 const TemplateArgumentListInfo *&TemplateArgs);
4106
4107 bool
4108 DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R,
4109 std::unique_ptr<CorrectionCandidateCallback> CCC,
4110 TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr,
4111 ArrayRef<Expr *> Args = None, TypoExpr **Out = nullptr);
4112
4113 ExprResult LookupInObjCMethod(LookupResult &LookUp, Scope *S,
4114 IdentifierInfo *II,
4115 bool AllowBuiltinCreation=false);
4116
4117 ExprResult ActOnDependentIdExpression(const CXXScopeSpec &SS,
4118 SourceLocation TemplateKWLoc,
4119 const DeclarationNameInfo &NameInfo,
4120 bool isAddressOfOperand,
4121 const TemplateArgumentListInfo *TemplateArgs);
4122
4123 ExprResult BuildDeclRefExpr(ValueDecl *D, QualType Ty,
4124 ExprValueKind VK,
4125 SourceLocation Loc,
4126 const CXXScopeSpec *SS = nullptr);
4127 ExprResult
4128 BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK,
4129 const DeclarationNameInfo &NameInfo,
4130 const CXXScopeSpec *SS = nullptr,
4131 NamedDecl *FoundD = nullptr,
4132 const TemplateArgumentListInfo *TemplateArgs = nullptr);
4133 ExprResult
4134 BuildAnonymousStructUnionMemberReference(
4135 const CXXScopeSpec &SS,
4136 SourceLocation nameLoc,
4137 IndirectFieldDecl *indirectField,
4138 DeclAccessPair FoundDecl = DeclAccessPair::make(nullptr, AS_none),
4139 Expr *baseObjectExpr = nullptr,
4140 SourceLocation opLoc = SourceLocation());
4141
4142 ExprResult BuildPossibleImplicitMemberExpr(const CXXScopeSpec &SS,
4143 SourceLocation TemplateKWLoc,
4144 LookupResult &R,
4145 const TemplateArgumentListInfo *TemplateArgs,
4146 const Scope *S);
4147 ExprResult BuildImplicitMemberExpr(const CXXScopeSpec &SS,
4148 SourceLocation TemplateKWLoc,
4149 LookupResult &R,
4150 const TemplateArgumentListInfo *TemplateArgs,
4151 bool IsDefiniteInstance,
4152 const Scope *S);
4153 bool UseArgumentDependentLookup(const CXXScopeSpec &SS,
4154 const LookupResult &R,
4155 bool HasTrailingLParen);
4156
4157 ExprResult
4158 BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS,
4159 const DeclarationNameInfo &NameInfo,
4160 bool IsAddressOfOperand, const Scope *S,
4161 TypeSourceInfo **RecoveryTSI = nullptr);
4162
4163 ExprResult BuildDependentDeclRefExpr(const CXXScopeSpec &SS,
4164 SourceLocation TemplateKWLoc,
4165 const DeclarationNameInfo &NameInfo,
4166 const TemplateArgumentListInfo *TemplateArgs);
4167
4168 ExprResult BuildDeclarationNameExpr(const CXXScopeSpec &SS,
4169 LookupResult &R,
4170 bool NeedsADL,
4171 bool AcceptInvalidDecl = false);
4172 ExprResult BuildDeclarationNameExpr(
4173 const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D,
4174 NamedDecl *FoundD = nullptr,
4175 const TemplateArgumentListInfo *TemplateArgs = nullptr,
4176 bool AcceptInvalidDecl = false);
4177
4178 ExprResult BuildLiteralOperatorCall(LookupResult &R,
4179 DeclarationNameInfo &SuffixInfo,
4180 ArrayRef<Expr *> Args,
4181 SourceLocation LitEndLoc,
4182 TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr);
4183
4184 ExprResult BuildPredefinedExpr(SourceLocation Loc,
4185 PredefinedExpr::IdentType IT);
4186 ExprResult ActOnPredefinedExpr(SourceLocation Loc, tok::TokenKind Kind);
4187 ExprResult ActOnIntegerConstant(SourceLocation Loc, uint64_t Val);
4188
4189 bool CheckLoopHintExpr(Expr *E, SourceLocation Loc);
4190
4191 ExprResult ActOnNumericConstant(const Token &Tok, Scope *UDLScope = nullptr);
4192 ExprResult ActOnCharacterConstant(const Token &Tok,
4193 Scope *UDLScope = nullptr);
4194 ExprResult ActOnParenExpr(SourceLocation L, SourceLocation R, Expr *E);
4195 ExprResult ActOnParenListExpr(SourceLocation L,
4196 SourceLocation R,
4197 MultiExprArg Val);
4198
4199 /// ActOnStringLiteral - The specified tokens were lexed as pasted string
4200 /// fragments (e.g. "foo" "bar" L"baz").
4201 ExprResult ActOnStringLiteral(ArrayRef<Token> StringToks,
4202 Scope *UDLScope = nullptr);
4203
4204 ExprResult ActOnGenericSelectionExpr(SourceLocation KeyLoc,
4205 SourceLocation DefaultLoc,
4206 SourceLocation RParenLoc,
4207 Expr *ControllingExpr,
4208 ArrayRef<ParsedType> ArgTypes,
4209 ArrayRef<Expr *> ArgExprs);
4210 ExprResult CreateGenericSelectionExpr(SourceLocation KeyLoc,
4211 SourceLocation DefaultLoc,
4212 SourceLocation RParenLoc,
4213 Expr *ControllingExpr,
4214 ArrayRef<TypeSourceInfo *> Types,
4215 ArrayRef<Expr *> Exprs);
4216
4217 // Binary/Unary Operators. 'Tok' is the token for the operator.
4218 ExprResult CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc,
4219 Expr *InputExpr);
4220 ExprResult BuildUnaryOp(Scope *S, SourceLocation OpLoc,
4221 UnaryOperatorKind Opc, Expr *Input);
4222 ExprResult ActOnUnaryOp(Scope *S, SourceLocation OpLoc,
4223 tok::TokenKind Op, Expr *Input);
4224
4225 QualType CheckAddressOfOperand(ExprResult &Operand, SourceLocation OpLoc);
4226
4227 ExprResult CreateUnaryExprOrTypeTraitExpr(TypeSourceInfo *TInfo,
4228 SourceLocation OpLoc,
4229 UnaryExprOrTypeTrait ExprKind,
4230 SourceRange R);
4231 ExprResult CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc,
4232 UnaryExprOrTypeTrait ExprKind);
4233 ExprResult
4234 ActOnUnaryExprOrTypeTraitExpr(SourceLocation OpLoc,
4235 UnaryExprOrTypeTrait ExprKind,
4236 bool IsType, void *TyOrEx,
4237 SourceRange ArgRange);
4238
4239 ExprResult CheckPlaceholderExpr(Expr *E);
4240 bool CheckVecStepExpr(Expr *E);
4241
4242 bool CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind);
4243 bool CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc,
4244 SourceRange ExprRange,
4245 UnaryExprOrTypeTrait ExprKind);
4246 ExprResult ActOnSizeofParameterPackExpr(Scope *S,
4247 SourceLocation OpLoc,
4248 IdentifierInfo &Name,
4249 SourceLocation NameLoc,
4250 SourceLocation RParenLoc);
4251 ExprResult ActOnPostfixUnaryOp(Scope *S, SourceLocation OpLoc,
4252 tok::TokenKind Kind, Expr *Input);
4253
4254 ExprResult ActOnArraySubscriptExpr(Scope *S, Expr *Base, SourceLocation LLoc,
4255 Expr *Idx, SourceLocation RLoc);
4256 ExprResult CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc,
4257 Expr *Idx, SourceLocation RLoc);
4258 ExprResult ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc,
4259 Expr *LowerBound, SourceLocation ColonLoc,
4260 Expr *Length, SourceLocation RBLoc);
4261
4262 // This struct is for use by ActOnMemberAccess to allow
4263 // BuildMemberReferenceExpr to be able to reinvoke ActOnMemberAccess after
4264 // changing the access operator from a '.' to a '->' (to see if that is the
4265 // change needed to fix an error about an unknown member, e.g. when the class
4266 // defines a custom operator->).
4267 struct ActOnMemberAccessExtraArgs {
4268 Scope *S;
4269 UnqualifiedId &Id;
4270 Decl *ObjCImpDecl;
4271 };
4272
4273 ExprResult BuildMemberReferenceExpr(
4274 Expr *Base, QualType BaseType, SourceLocation OpLoc, bool IsArrow,
4275 CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
4276 NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo,
4277 const TemplateArgumentListInfo *TemplateArgs,
4278 const Scope *S,
4279 ActOnMemberAccessExtraArgs *ExtraArgs = nullptr);
4280
4281 ExprResult
4282 BuildMemberReferenceExpr(Expr *Base, QualType BaseType, SourceLocation OpLoc,
4283 bool IsArrow, const CXXScopeSpec &SS,
4284 SourceLocation TemplateKWLoc,
4285 NamedDecl *FirstQualifierInScope, LookupResult &R,
4286 const TemplateArgumentListInfo *TemplateArgs,
4287 const Scope *S,
4288 bool SuppressQualifierCheck = false,
4289 ActOnMemberAccessExtraArgs *ExtraArgs = nullptr);
4290
4291 ExprResult BuildFieldReferenceExpr(Expr *BaseExpr, bool IsArrow,
4292 SourceLocation OpLoc,
4293 const CXXScopeSpec &SS, FieldDecl *Field,
4294 DeclAccessPair FoundDecl,
4295 const DeclarationNameInfo &MemberNameInfo);
4296
4297 ExprResult PerformMemberExprBaseConversion(Expr *Base, bool IsArrow);
4298
4299 bool CheckQualifiedMemberReference(Expr *BaseExpr, QualType BaseType,
4300 const CXXScopeSpec &SS,
4301 const LookupResult &R);
4302
4303 ExprResult ActOnDependentMemberExpr(Expr *Base, QualType BaseType,
4304 bool IsArrow, SourceLocation OpLoc,
4305 const CXXScopeSpec &SS,
4306 SourceLocation TemplateKWLoc,
4307 NamedDecl *FirstQualifierInScope,
4308 const DeclarationNameInfo &NameInfo,
4309 const TemplateArgumentListInfo *TemplateArgs);
4310
4311 ExprResult ActOnMemberAccessExpr(Scope *S, Expr *Base,
4312 SourceLocation OpLoc,
4313 tok::TokenKind OpKind,
4314 CXXScopeSpec &SS,
4315 SourceLocation TemplateKWLoc,
4316 UnqualifiedId &Member,
4317 Decl *ObjCImpDecl);
4318
4319 void ActOnDefaultCtorInitializers(Decl *CDtorDecl);
4320 bool ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
4321 FunctionDecl *FDecl,
4322 const FunctionProtoType *Proto,
4323 ArrayRef<Expr *> Args,
4324 SourceLocation RParenLoc,
4325 bool ExecConfig = false);
4326 void CheckStaticArrayArgument(SourceLocation CallLoc,
4327 ParmVarDecl *Param,
4328 const Expr *ArgExpr);
4329
4330 /// ActOnCallExpr - Handle a call to Fn with the specified array of arguments.
4331 /// This provides the location of the left/right parens and a list of comma
4332 /// locations.
4333 ExprResult ActOnCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc,
4334 MultiExprArg ArgExprs, SourceLocation RParenLoc,
4335 Expr *ExecConfig = nullptr,
4336 bool IsExecConfig = false);
4337 ExprResult BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl,
4338 SourceLocation LParenLoc,
4339 ArrayRef<Expr *> Arg,
4340 SourceLocation RParenLoc,
4341 Expr *Config = nullptr,
4342 bool IsExecConfig = false);
4343
4344 ExprResult ActOnCUDAExecConfigExpr(Scope *S, SourceLocation LLLLoc,
4345 MultiExprArg ExecConfig,
4346 SourceLocation GGGLoc);
4347
4348 ExprResult ActOnCastExpr(Scope *S, SourceLocation LParenLoc,
4349 Declarator &D, ParsedType &Ty,
4350 SourceLocation RParenLoc, Expr *CastExpr);
4351 ExprResult BuildCStyleCastExpr(SourceLocation LParenLoc,
4352 TypeSourceInfo *Ty,
4353 SourceLocation RParenLoc,
4354 Expr *Op);
4355 CastKind PrepareScalarCast(ExprResult &src, QualType destType);
4356
4357 /// \brief Build an altivec or OpenCL literal.
4358 ExprResult BuildVectorLiteral(SourceLocation LParenLoc,
4359 SourceLocation RParenLoc, Expr *E,
4360 TypeSourceInfo *TInfo);
4361
4362 ExprResult MaybeConvertParenListExprToParenExpr(Scope *S, Expr *ME);
4363
4364 ExprResult ActOnCompoundLiteral(SourceLocation LParenLoc,
4365 ParsedType Ty,
4366 SourceLocation RParenLoc,
4367 Expr *InitExpr);
4368
4369 ExprResult BuildCompoundLiteralExpr(SourceLocation LParenLoc,
4370 TypeSourceInfo *TInfo,
4371 SourceLocation RParenLoc,
4372 Expr *LiteralExpr);
4373
4374 ExprResult ActOnInitList(SourceLocation LBraceLoc,
4375 MultiExprArg InitArgList,
4376 SourceLocation RBraceLoc);
4377
4378 ExprResult ActOnDesignatedInitializer(Designation &Desig,
4379 SourceLocation Loc,
4380 bool GNUSyntax,
4381 ExprResult Init);
4382
4383private:
4384 static BinaryOperatorKind ConvertTokenKindToBinaryOpcode(tok::TokenKind Kind);
4385
4386public:
4387 ExprResult ActOnBinOp(Scope *S, SourceLocation TokLoc,
4388 tok::TokenKind Kind, Expr *LHSExpr, Expr *RHSExpr);
4389 ExprResult BuildBinOp(Scope *S, SourceLocation OpLoc,
4390 BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr);
4391 ExprResult CreateBuiltinBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc,
4392 Expr *LHSExpr, Expr *RHSExpr);
4393
4394 void DiagnoseCommaOperator(const Expr *LHS, SourceLocation Loc);
4395
4396 /// ActOnConditionalOp - Parse a ?: operation. Note that 'LHS' may be null
4397 /// in the case of a the GNU conditional expr extension.
4398 ExprResult ActOnConditionalOp(SourceLocation QuestionLoc,
4399 SourceLocation ColonLoc,
4400 Expr *CondExpr, Expr *LHSExpr, Expr *RHSExpr);
4401
4402 /// ActOnAddrLabel - Parse the GNU address of label extension: "&&foo".
4403 ExprResult ActOnAddrLabel(SourceLocation OpLoc, SourceLocation LabLoc,
4404 LabelDecl *TheDecl);
4405
4406 void ActOnStartStmtExpr();
4407 ExprResult ActOnStmtExpr(SourceLocation LPLoc, Stmt *SubStmt,
4408 SourceLocation RPLoc); // "({..})"
4409 void ActOnStmtExprError();
4410
4411 // __builtin_offsetof(type, identifier(.identifier|[expr])*)
4412 struct OffsetOfComponent {
4413 SourceLocation LocStart, LocEnd;
4414 bool isBrackets; // true if [expr], false if .ident
4415 union {
4416 IdentifierInfo *IdentInfo;
4417 Expr *E;
4418 } U;
4419 };
4420
4421 /// __builtin_offsetof(type, a.b[123][456].c)
4422 ExprResult BuildBuiltinOffsetOf(SourceLocation BuiltinLoc,
4423 TypeSourceInfo *TInfo,
4424 ArrayRef<OffsetOfComponent> Components,
4425 SourceLocation RParenLoc);
4426 ExprResult ActOnBuiltinOffsetOf(Scope *S,
4427 SourceLocation BuiltinLoc,
4428 SourceLocation TypeLoc,
4429 ParsedType ParsedArgTy,
4430 ArrayRef<OffsetOfComponent> Components,
4431 SourceLocation RParenLoc);
4432
4433 // __builtin_choose_expr(constExpr, expr1, expr2)
4434 ExprResult ActOnChooseExpr(SourceLocation BuiltinLoc,
4435 Expr *CondExpr, Expr *LHSExpr,
4436 Expr *RHSExpr, SourceLocation RPLoc);
4437
4438 // __builtin_va_arg(expr, type)
4439 ExprResult ActOnVAArg(SourceLocation BuiltinLoc, Expr *E, ParsedType Ty,
4440 SourceLocation RPLoc);
4441 ExprResult BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E,
4442 TypeSourceInfo *TInfo, SourceLocation RPLoc);
4443
4444 // __null
4445 ExprResult ActOnGNUNullExpr(SourceLocation TokenLoc);
4446
4447 bool CheckCaseExpression(Expr *E);
4448
4449 /// \brief Describes the result of an "if-exists" condition check.
4450 enum IfExistsResult {
4451 /// \brief The symbol exists.
4452 IER_Exists,
4453
4454 /// \brief The symbol does not exist.
4455 IER_DoesNotExist,
4456
4457 /// \brief The name is a dependent name, so the results will differ
4458 /// from one instantiation to the next.
4459 IER_Dependent,
4460
4461 /// \brief An error occurred.
4462 IER_Error
4463 };
4464
4465 IfExistsResult
4466 CheckMicrosoftIfExistsSymbol(Scope *S, CXXScopeSpec &SS,
4467 const DeclarationNameInfo &TargetNameInfo);
4468
4469 IfExistsResult
4470 CheckMicrosoftIfExistsSymbol(Scope *S, SourceLocation KeywordLoc,
4471 bool IsIfExists, CXXScopeSpec &SS,
4472 UnqualifiedId &Name);
4473
4474 StmtResult BuildMSDependentExistsStmt(SourceLocation KeywordLoc,
4475 bool IsIfExists,
4476 NestedNameSpecifierLoc QualifierLoc,
4477 DeclarationNameInfo NameInfo,
4478 Stmt *Nested);
4479 StmtResult ActOnMSDependentExistsStmt(SourceLocation KeywordLoc,
4480 bool IsIfExists,
4481 CXXScopeSpec &SS, UnqualifiedId &Name,
4482 Stmt *Nested);
4483
4484 //===------------------------- "Block" Extension ------------------------===//
4485
4486 /// ActOnBlockStart - This callback is invoked when a block literal is
4487 /// started.
4488 void ActOnBlockStart(SourceLocation CaretLoc, Scope *CurScope);
4489
4490 /// ActOnBlockArguments - This callback allows processing of block arguments.
4491 /// If there are no arguments, this is still invoked.
4492 void ActOnBlockArguments(SourceLocation CaretLoc, Declarator &ParamInfo,
4493 Scope *CurScope);
4494
4495 /// ActOnBlockError - If there is an error parsing a block, this callback
4496 /// is invoked to pop the information about the block from the action impl.
4497 void ActOnBlockError(SourceLocation CaretLoc, Scope *CurScope);
4498
4499 /// ActOnBlockStmtExpr - This is called when the body of a block statement
4500 /// literal was successfully completed. ^(int x){...}
4501 ExprResult ActOnBlockStmtExpr(SourceLocation CaretLoc, Stmt *Body,
4502 Scope *CurScope);
4503
4504 //===---------------------------- Clang Extensions ----------------------===//
4505
4506 /// __builtin_convertvector(...)
4507 ExprResult ActOnConvertVectorExpr(Expr *E, ParsedType ParsedDestTy,
4508 SourceLocation BuiltinLoc,
4509 SourceLocation RParenLoc);
4510
4511 //===---------------------------- OpenCL Features -----------------------===//
4512
4513 /// __builtin_astype(...)
4514 ExprResult ActOnAsTypeExpr(Expr *E, ParsedType ParsedDestTy,
4515 SourceLocation BuiltinLoc,
4516 SourceLocation RParenLoc);
4517
4518 //===---------------------------- C++ Features --------------------------===//
4519
4520 // Act on C++ namespaces
4521 Decl *ActOnStartNamespaceDef(Scope *S, SourceLocation InlineLoc,
4522 SourceLocation NamespaceLoc,
4523 SourceLocation IdentLoc,
4524 IdentifierInfo *Ident,
4525 SourceLocation LBrace,
4526 AttributeList *AttrList,
4527 UsingDirectiveDecl * &UsingDecl);
4528 void ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace);
4529
4530 NamespaceDecl *getStdNamespace() const;
4531 NamespaceDecl *getOrCreateStdNamespace();
4532
4533 NamespaceDecl *lookupStdExperimentalNamespace();
4534
4535 CXXRecordDecl *getStdBadAlloc() const;
4536 EnumDecl *getStdAlignValT() const;
4537
4538 /// \brief Tests whether Ty is an instance of std::initializer_list and, if
4539 /// it is and Element is not NULL, assigns the element type to Element.
4540 bool isStdInitializerList(QualType Ty, QualType *Element);
4541
4542 /// \brief Looks for the std::initializer_list template and instantiates it
4543 /// with Element, or emits an error if it's not found.
4544 ///
4545 /// \returns The instantiated template, or null on error.
4546 QualType BuildStdInitializerList(QualType Element, SourceLocation Loc);
4547
4548 /// \brief Determine whether Ctor is an initializer-list constructor, as
4549 /// defined in [dcl.init.list]p2.
4550 bool isInitListConstructor(const FunctionDecl *Ctor);
4551
4552 Decl *ActOnUsingDirective(Scope *CurScope,
4553 SourceLocation UsingLoc,
4554 SourceLocation NamespcLoc,
4555 CXXScopeSpec &SS,
4556 SourceLocation IdentLoc,
4557 IdentifierInfo *NamespcName,
4558 AttributeList *AttrList);
4559
4560 void PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir);
4561
4562 Decl *ActOnNamespaceAliasDef(Scope *CurScope,
4563 SourceLocation NamespaceLoc,
4564 SourceLocation AliasLoc,
4565 IdentifierInfo *Alias,
4566 CXXScopeSpec &SS,
4567 SourceLocation IdentLoc,
4568 IdentifierInfo *Ident);
4569
4570 void HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow);
4571 bool CheckUsingShadowDecl(UsingDecl *UD, NamedDecl *Target,
4572 const LookupResult &PreviousDecls,
4573 UsingShadowDecl *&PrevShadow);
4574 UsingShadowDecl *BuildUsingShadowDecl(Scope *S, UsingDecl *UD,
4575 NamedDecl *Target,
4576 UsingShadowDecl *PrevDecl);
4577
4578 bool CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
4579 bool HasTypenameKeyword,
4580 const CXXScopeSpec &SS,
4581 SourceLocation NameLoc,
4582 const LookupResult &Previous);
4583 bool CheckUsingDeclQualifier(SourceLocation UsingLoc,
4584 bool HasTypename,
4585 const CXXScopeSpec &SS,
4586 const DeclarationNameInfo &NameInfo,
4587 SourceLocation NameLoc);
4588
4589 NamedDecl *BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
4590 SourceLocation UsingLoc,
4591 bool HasTypenameKeyword,
4592 SourceLocation TypenameLoc,
4593 CXXScopeSpec &SS,
4594 DeclarationNameInfo NameInfo,
4595 SourceLocation EllipsisLoc,
4596 AttributeList *AttrList,
4597 bool IsInstantiation);
4598 NamedDecl *BuildUsingPackDecl(NamedDecl *InstantiatedFrom,
4599 ArrayRef<NamedDecl *> Expansions);
4600
4601 bool CheckInheritingConstructorUsingDecl(UsingDecl *UD);
4602
4603 /// Given a derived-class using shadow declaration for a constructor and the
4604 /// correspnding base class constructor, find or create the implicit
4605 /// synthesized derived class constructor to use for this initialization.
4606 CXXConstructorDecl *
4607 findInheritingConstructor(SourceLocation Loc, CXXConstructorDecl *BaseCtor,
4608 ConstructorUsingShadowDecl *DerivedShadow);
4609
4610 Decl *ActOnUsingDeclaration(Scope *CurScope,
4611 AccessSpecifier AS,
4612 SourceLocation UsingLoc,
4613 SourceLocation TypenameLoc,
4614 CXXScopeSpec &SS,
4615 UnqualifiedId &Name,
4616 SourceLocation EllipsisLoc,
4617 AttributeList *AttrList);
4618 Decl *ActOnAliasDeclaration(Scope *CurScope,
4619 AccessSpecifier AS,
4620 MultiTemplateParamsArg TemplateParams,
4621 SourceLocation UsingLoc,
4622 UnqualifiedId &Name,
4623 AttributeList *AttrList,
4624 TypeResult Type,
4625 Decl *DeclFromDeclSpec);
4626
4627 /// BuildCXXConstructExpr - Creates a complete call to a constructor,
4628 /// including handling of its default argument expressions.
4629 ///
4630 /// \param ConstructKind - a CXXConstructExpr::ConstructionKind
4631 ExprResult
4632 BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
4633 NamedDecl *FoundDecl,
4634 CXXConstructorDecl *Constructor, MultiExprArg Exprs,
4635 bool HadMultipleCandidates, bool IsListInitialization,
4636 bool IsStdInitListInitialization,
4637 bool RequiresZeroInit, unsigned ConstructKind,
4638 SourceRange ParenRange);
4639
4640 /// Build a CXXConstructExpr whose constructor has already been resolved if
4641 /// it denotes an inherited constructor.
4642 ExprResult
4643 BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
4644 CXXConstructorDecl *Constructor, bool Elidable,
4645 MultiExprArg Exprs,
4646 bool HadMultipleCandidates, bool IsListInitialization,
4647 bool IsStdInitListInitialization,
4648 bool RequiresZeroInit, unsigned ConstructKind,
4649 SourceRange ParenRange);
4650
4651 // FIXME: Can we remove this and have the above BuildCXXConstructExpr check if
4652 // the constructor can be elidable?
4653 ExprResult
4654 BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
4655 NamedDecl *FoundDecl,
4656 CXXConstructorDecl *Constructor, bool Elidable,
4657 MultiExprArg Exprs, bool HadMultipleCandidates,
4658 bool IsListInitialization,
4659 bool IsStdInitListInitialization, bool RequiresZeroInit,
4660 unsigned ConstructKind, SourceRange ParenRange);
4661
4662 ExprResult BuildCXXDefaultInitExpr(SourceLocation Loc, FieldDecl *Field);
4663
4664
4665 /// Instantiate or parse a C++ default argument expression as necessary.
4666 /// Return true on error.
4667 bool CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD,
4668 ParmVarDecl *Param);
4669
4670 /// BuildCXXDefaultArgExpr - Creates a CXXDefaultArgExpr, instantiating
4671 /// the default expr if needed.
4672 ExprResult BuildCXXDefaultArgExpr(SourceLocation CallLoc,
4673 FunctionDecl *FD,
4674 ParmVarDecl *Param);
4675
4676 /// FinalizeVarWithDestructor - Prepare for calling destructor on the
4677 /// constructed variable.
4678 void FinalizeVarWithDestructor(VarDecl *VD, const RecordType *DeclInitType);
4679
4680 /// \brief Helper class that collects exception specifications for
4681 /// implicitly-declared special member functions.
4682 class ImplicitExceptionSpecification {
4683 // Pointer to allow copying
4684 Sema *Self;
4685 // We order exception specifications thus:
4686 // noexcept is the most restrictive, but is only used in C++11.
4687 // throw() comes next.
4688 // Then a throw(collected exceptions)
4689 // Finally no specification, which is expressed as noexcept(false).
4690 // throw(...) is used instead if any called function uses it.
4691 ExceptionSpecificationType ComputedEST;
4692 llvm::SmallPtrSet<CanQualType, 4> ExceptionsSeen;
4693 SmallVector<QualType, 4> Exceptions;
4694
4695 void ClearExceptions() {
4696 ExceptionsSeen.clear();
4697 Exceptions.clear();
4698 }
4699
4700 public:
4701 explicit ImplicitExceptionSpecification(Sema &Self)
4702 : Self(&Self), ComputedEST(EST_BasicNoexcept) {
4703 if (!Self.getLangOpts().CPlusPlus11)
4704 ComputedEST = EST_DynamicNone;
4705 }
4706
4707 /// \brief Get the computed exception specification type.
4708 ExceptionSpecificationType getExceptionSpecType() const {
4709 assert(ComputedEST != EST_ComputedNoexcept &&(static_cast <bool> (ComputedEST != EST_ComputedNoexcept
&& "noexcept(expr) should not be a possible result")
? void (0) : __assert_fail ("ComputedEST != EST_ComputedNoexcept && \"noexcept(expr) should not be a possible result\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 4710, __extension__ __PRETTY_FUNCTION__))
4710 "noexcept(expr) should not be a possible result")(static_cast <bool> (ComputedEST != EST_ComputedNoexcept
&& "noexcept(expr) should not be a possible result")
? void (0) : __assert_fail ("ComputedEST != EST_ComputedNoexcept && \"noexcept(expr) should not be a possible result\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 4710, __extension__ __PRETTY_FUNCTION__))
;
4711 return ComputedEST;
4712 }
4713
4714 /// \brief The number of exceptions in the exception specification.
4715 unsigned size() const { return Exceptions.size(); }
4716
4717 /// \brief The set of exceptions in the exception specification.
4718 const QualType *data() const { return Exceptions.data(); }
4719
4720 /// \brief Integrate another called method into the collected data.
4721 void CalledDecl(SourceLocation CallLoc, const CXXMethodDecl *Method);
4722
4723 /// \brief Integrate an invoked expression into the collected data.
4724 void CalledExpr(Expr *E);
4725
4726 /// \brief Overwrite an EPI's exception specification with this
4727 /// computed exception specification.
4728 FunctionProtoType::ExceptionSpecInfo getExceptionSpec() const {
4729 FunctionProtoType::ExceptionSpecInfo ESI;
4730 ESI.Type = getExceptionSpecType();
4731 if (ESI.Type == EST_Dynamic) {
4732 ESI.Exceptions = Exceptions;
4733 } else if (ESI.Type == EST_None) {
4734 /// C++11 [except.spec]p14:
4735 /// The exception-specification is noexcept(false) if the set of
4736 /// potential exceptions of the special member function contains "any"
4737 ESI.Type = EST_ComputedNoexcept;
4738 ESI.NoexceptExpr = Self->ActOnCXXBoolLiteral(SourceLocation(),
4739 tok::kw_false).get();
4740 }
4741 return ESI;
4742 }
4743 };
4744
4745 /// \brief Determine what sort of exception specification a defaulted
4746 /// copy constructor of a class will have.
4747 ImplicitExceptionSpecification
4748 ComputeDefaultedDefaultCtorExceptionSpec(SourceLocation Loc,
4749 CXXMethodDecl *MD);
4750
4751 /// \brief Determine what sort of exception specification a defaulted
4752 /// default constructor of a class will have, and whether the parameter
4753 /// will be const.
4754 ImplicitExceptionSpecification
4755 ComputeDefaultedCopyCtorExceptionSpec(CXXMethodDecl *MD);
4756
4757 /// \brief Determine what sort of exception specification a defautled
4758 /// copy assignment operator of a class will have, and whether the
4759 /// parameter will be const.
4760 ImplicitExceptionSpecification
4761 ComputeDefaultedCopyAssignmentExceptionSpec(CXXMethodDecl *MD);
4762
4763 /// \brief Determine what sort of exception specification a defaulted move
4764 /// constructor of a class will have.
4765 ImplicitExceptionSpecification
4766 ComputeDefaultedMoveCtorExceptionSpec(CXXMethodDecl *MD);
4767
4768 /// \brief Determine what sort of exception specification a defaulted move
4769 /// assignment operator of a class will have.
4770 ImplicitExceptionSpecification
4771 ComputeDefaultedMoveAssignmentExceptionSpec(CXXMethodDecl *MD);
4772
4773 /// \brief Determine what sort of exception specification a defaulted
4774 /// destructor of a class will have.
4775 ImplicitExceptionSpecification
4776 ComputeDefaultedDtorExceptionSpec(CXXMethodDecl *MD);
4777
4778 /// \brief Determine what sort of exception specification an inheriting
4779 /// constructor of a class will have.
4780 ImplicitExceptionSpecification
4781 ComputeInheritingCtorExceptionSpec(SourceLocation Loc,
4782 CXXConstructorDecl *CD);
4783
4784 /// \brief Evaluate the implicit exception specification for a defaulted
4785 /// special member function.
4786 void EvaluateImplicitExceptionSpec(SourceLocation Loc, CXXMethodDecl *MD);
4787
4788 /// \brief Check the given exception-specification and update the
4789 /// exception specification information with the results.
4790 void checkExceptionSpecification(bool IsTopLevel,
4791 ExceptionSpecificationType EST,
4792 ArrayRef<ParsedType> DynamicExceptions,
4793 ArrayRef<SourceRange> DynamicExceptionRanges,
4794 Expr *NoexceptExpr,
4795 SmallVectorImpl<QualType> &Exceptions,
4796 FunctionProtoType::ExceptionSpecInfo &ESI);
4797
4798 /// \brief Determine if we're in a case where we need to (incorrectly) eagerly
4799 /// parse an exception specification to work around a libstdc++ bug.
4800 bool isLibstdcxxEagerExceptionSpecHack(const Declarator &D);
4801
4802 /// \brief Add an exception-specification to the given member function
4803 /// (or member function template). The exception-specification was parsed
4804 /// after the method itself was declared.
4805 void actOnDelayedExceptionSpecification(Decl *Method,
4806 ExceptionSpecificationType EST,
4807 SourceRange SpecificationRange,
4808 ArrayRef<ParsedType> DynamicExceptions,
4809 ArrayRef<SourceRange> DynamicExceptionRanges,
4810 Expr *NoexceptExpr);
4811
4812 class InheritedConstructorInfo;
4813
4814 /// \brief Determine if a special member function should have a deleted
4815 /// definition when it is defaulted.
4816 bool ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
4817 InheritedConstructorInfo *ICI = nullptr,
4818 bool Diagnose = false);
4819
4820 /// \brief Declare the implicit default constructor for the given class.
4821 ///
4822 /// \param ClassDecl The class declaration into which the implicit
4823 /// default constructor will be added.
4824 ///
4825 /// \returns The implicitly-declared default constructor.
4826 CXXConstructorDecl *DeclareImplicitDefaultConstructor(
4827 CXXRecordDecl *ClassDecl);
4828
4829 /// DefineImplicitDefaultConstructor - Checks for feasibility of
4830 /// defining this constructor as the default constructor.
4831 void DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
4832 CXXConstructorDecl *Constructor);
4833
4834 /// \brief Declare the implicit destructor for the given class.
4835 ///
4836 /// \param ClassDecl The class declaration into which the implicit
4837 /// destructor will be added.
4838 ///
4839 /// \returns The implicitly-declared destructor.
4840 CXXDestructorDecl *DeclareImplicitDestructor(CXXRecordDecl *ClassDecl);
4841
4842 /// DefineImplicitDestructor - Checks for feasibility of
4843 /// defining this destructor as the default destructor.
4844 void DefineImplicitDestructor(SourceLocation CurrentLocation,
4845 CXXDestructorDecl *Destructor);
4846
4847 /// \brief Build an exception spec for destructors that don't have one.
4848 ///
4849 /// C++11 says that user-defined destructors with no exception spec get one
4850 /// that looks as if the destructor was implicitly declared.
4851 void AdjustDestructorExceptionSpec(CXXRecordDecl *ClassDecl,
4852 CXXDestructorDecl *Destructor);
4853
4854 /// \brief Define the specified inheriting constructor.
4855 void DefineInheritingConstructor(SourceLocation UseLoc,
4856 CXXConstructorDecl *Constructor);
4857
4858 /// \brief Declare the implicit copy constructor for the given class.
4859 ///
4860 /// \param ClassDecl The class declaration into which the implicit
4861 /// copy constructor will be added.
4862 ///
4863 /// \returns The implicitly-declared copy constructor.
4864 CXXConstructorDecl *DeclareImplicitCopyConstructor(CXXRecordDecl *ClassDecl);
4865
4866 /// DefineImplicitCopyConstructor - Checks for feasibility of
4867 /// defining this constructor as the copy constructor.
4868 void DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
4869 CXXConstructorDecl *Constructor);
4870
4871 /// \brief Declare the implicit move constructor for the given class.
4872 ///
4873 /// \param ClassDecl The Class declaration into which the implicit
4874 /// move constructor will be added.
4875 ///
4876 /// \returns The implicitly-declared move constructor, or NULL if it wasn't
4877 /// declared.
4878 CXXConstructorDecl *DeclareImplicitMoveConstructor(CXXRecordDecl *ClassDecl);
4879
4880 /// DefineImplicitMoveConstructor - Checks for feasibility of
4881 /// defining this constructor as the move constructor.
4882 void DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
4883 CXXConstructorDecl *Constructor);
4884
4885 /// \brief Declare the implicit copy assignment operator for the given class.
4886 ///
4887 /// \param ClassDecl The class declaration into which the implicit
4888 /// copy assignment operator will be added.
4889 ///
4890 /// \returns The implicitly-declared copy assignment operator.
4891 CXXMethodDecl *DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl);
4892
4893 /// \brief Defines an implicitly-declared copy assignment operator.
4894 void DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
4895 CXXMethodDecl *MethodDecl);
4896
4897 /// \brief Declare the implicit move assignment operator for the given class.
4898 ///
4899 /// \param ClassDecl The Class declaration into which the implicit
4900 /// move assignment operator will be added.
4901 ///
4902 /// \returns The implicitly-declared move assignment operator, or NULL if it
4903 /// wasn't declared.
4904 CXXMethodDecl *DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl);
4905
4906 /// \brief Defines an implicitly-declared move assignment operator.
4907 void DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
4908 CXXMethodDecl *MethodDecl);
4909
4910 /// \brief Force the declaration of any implicitly-declared members of this
4911 /// class.
4912 void ForceDeclarationOfImplicitMembers(CXXRecordDecl *Class);
4913
4914 /// \brief Check a completed declaration of an implicit special member.
4915 void CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD);
4916
4917 /// \brief Determine whether the given function is an implicitly-deleted
4918 /// special member function.
4919 bool isImplicitlyDeleted(FunctionDecl *FD);
4920
4921 /// \brief Check whether 'this' shows up in the type of a static member
4922 /// function after the (naturally empty) cv-qualifier-seq would be.
4923 ///
4924 /// \returns true if an error occurred.
4925 bool checkThisInStaticMemberFunctionType(CXXMethodDecl *Method);
4926
4927 /// \brief Whether this' shows up in the exception specification of a static
4928 /// member function.
4929 bool checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method);
4930
4931 /// \brief Check whether 'this' shows up in the attributes of the given
4932 /// static member function.
4933 ///
4934 /// \returns true if an error occurred.
4935 bool checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method);
4936
4937 /// MaybeBindToTemporary - If the passed in expression has a record type with
4938 /// a non-trivial destructor, this will return CXXBindTemporaryExpr. Otherwise
4939 /// it simply returns the passed in expression.
4940 ExprResult MaybeBindToTemporary(Expr *E);
4941
4942 bool CompleteConstructorCall(CXXConstructorDecl *Constructor,
4943 MultiExprArg ArgsPtr,
4944 SourceLocation Loc,
4945 SmallVectorImpl<Expr*> &ConvertedArgs,
4946 bool AllowExplicit = false,
4947 bool IsListInitialization = false);
4948
4949 ParsedType getInheritingConstructorName(CXXScopeSpec &SS,
4950 SourceLocation NameLoc,
4951 IdentifierInfo &Name);
4952
4953 ParsedType getDestructorName(SourceLocation TildeLoc,
4954 IdentifierInfo &II, SourceLocation NameLoc,
4955 Scope *S, CXXScopeSpec &SS,
4956 ParsedType ObjectType,
4957 bool EnteringContext);
4958
4959 ParsedType getDestructorTypeForDecltype(const DeclSpec &DS,
4960 ParsedType ObjectType);
4961
4962 // Checks that reinterpret casts don't have undefined behavior.
4963 void CheckCompatibleReinterpretCast(QualType SrcType, QualType DestType,
4964 bool IsDereference, SourceRange Range);
4965
4966 /// ActOnCXXNamedCast - Parse {dynamic,static,reinterpret,const}_cast's.
4967 ExprResult ActOnCXXNamedCast(SourceLocation OpLoc,
4968 tok::TokenKind Kind,
4969 SourceLocation LAngleBracketLoc,
4970 Declarator &D,
4971 SourceLocation RAngleBracketLoc,
4972 SourceLocation LParenLoc,
4973 Expr *E,
4974 SourceLocation RParenLoc);
4975
4976 ExprResult BuildCXXNamedCast(SourceLocation OpLoc,
4977 tok::TokenKind Kind,
4978 TypeSourceInfo *Ty,
4979 Expr *E,
4980 SourceRange AngleBrackets,
4981 SourceRange Parens);
4982
4983 ExprResult BuildCXXTypeId(QualType TypeInfoType,
4984 SourceLocation TypeidLoc,
4985 TypeSourceInfo *Operand,
4986 SourceLocation RParenLoc);
4987 ExprResult BuildCXXTypeId(QualType TypeInfoType,
4988 SourceLocation TypeidLoc,
4989 Expr *Operand,
4990 SourceLocation RParenLoc);
4991
4992 /// ActOnCXXTypeid - Parse typeid( something ).
4993 ExprResult ActOnCXXTypeid(SourceLocation OpLoc,
4994 SourceLocation LParenLoc, bool isType,
4995 void *TyOrExpr,
4996 SourceLocation RParenLoc);
4997
4998 ExprResult BuildCXXUuidof(QualType TypeInfoType,
4999 SourceLocation TypeidLoc,
5000 TypeSourceInfo *Operand,
5001 SourceLocation RParenLoc);
5002 ExprResult BuildCXXUuidof(QualType TypeInfoType,
5003 SourceLocation TypeidLoc,
5004 Expr *Operand,
5005 SourceLocation RParenLoc);
5006
5007 /// ActOnCXXUuidof - Parse __uuidof( something ).
5008 ExprResult ActOnCXXUuidof(SourceLocation OpLoc,
5009 SourceLocation LParenLoc, bool isType,
5010 void *TyOrExpr,
5011 SourceLocation RParenLoc);
5012
5013 /// \brief Handle a C++1z fold-expression: ( expr op ... op expr ).
5014 ExprResult ActOnCXXFoldExpr(SourceLocation LParenLoc, Expr *LHS,
5015 tok::TokenKind Operator,
5016 SourceLocation EllipsisLoc, Expr *RHS,
5017 SourceLocation RParenLoc);
5018 ExprResult BuildCXXFoldExpr(SourceLocation LParenLoc, Expr *LHS,
5019 BinaryOperatorKind Operator,
5020 SourceLocation EllipsisLoc, Expr *RHS,
5021 SourceLocation RParenLoc);
5022 ExprResult BuildEmptyCXXFoldExpr(SourceLocation EllipsisLoc,
5023 BinaryOperatorKind Operator);
5024
5025 //// ActOnCXXThis - Parse 'this' pointer.
5026 ExprResult ActOnCXXThis(SourceLocation loc);
5027
5028 /// \brief Try to retrieve the type of the 'this' pointer.
5029 ///
5030 /// \returns The type of 'this', if possible. Otherwise, returns a NULL type.
5031 QualType getCurrentThisType();
5032
5033 /// \brief When non-NULL, the C++ 'this' expression is allowed despite the
5034 /// current context not being a non-static member function. In such cases,
5035 /// this provides the type used for 'this'.
5036 QualType CXXThisTypeOverride;
5037
5038 /// \brief RAII object used to temporarily allow the C++ 'this' expression
5039 /// to be used, with the given qualifiers on the current class type.
5040 class CXXThisScopeRAII {
5041 Sema &S;
5042 QualType OldCXXThisTypeOverride;
5043 bool Enabled;
5044
5045 public:
5046 /// \brief Introduce a new scope where 'this' may be allowed (when enabled),
5047 /// using the given declaration (which is either a class template or a
5048 /// class) along with the given qualifiers.
5049 /// along with the qualifiers placed on '*this'.
5050 CXXThisScopeRAII(Sema &S, Decl *ContextDecl, unsigned CXXThisTypeQuals,
5051 bool Enabled = true);
5052
5053 ~CXXThisScopeRAII();
5054 };
5055
5056 /// \brief Make sure the value of 'this' is actually available in the current
5057 /// context, if it is a potentially evaluated context.
5058 ///
5059 /// \param Loc The location at which the capture of 'this' occurs.
5060 ///
5061 /// \param Explicit Whether 'this' is explicitly captured in a lambda
5062 /// capture list.
5063 ///
5064 /// \param FunctionScopeIndexToStopAt If non-null, it points to the index
5065 /// of the FunctionScopeInfo stack beyond which we do not attempt to capture.
5066 /// This is useful when enclosing lambdas must speculatively capture
5067 /// 'this' that may or may not be used in certain specializations of
5068 /// a nested generic lambda (depending on whether the name resolves to
5069 /// a non-static member function or a static function).
5070 /// \return returns 'true' if failed, 'false' if success.
5071 bool CheckCXXThisCapture(SourceLocation Loc, bool Explicit = false,
5072 bool BuildAndDiagnose = true,
5073 const unsigned *const FunctionScopeIndexToStopAt = nullptr,
5074 bool ByCopy = false);
5075
5076 /// \brief Determine whether the given type is the type of *this that is used
5077 /// outside of the body of a member function for a type that is currently
5078 /// being defined.
5079 bool isThisOutsideMemberFunctionBody(QualType BaseType);
5080
5081 /// ActOnCXXBoolLiteral - Parse {true,false} literals.
5082 ExprResult ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind);
5083
5084
5085 /// ActOnObjCBoolLiteral - Parse {__objc_yes,__objc_no} literals.
5086 ExprResult ActOnObjCBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind);
5087
5088 ExprResult
5089 ActOnObjCAvailabilityCheckExpr(llvm::ArrayRef<AvailabilitySpec> AvailSpecs,
5090 SourceLocation AtLoc, SourceLocation RParen);
5091
5092 /// ActOnCXXNullPtrLiteral - Parse 'nullptr'.
5093 ExprResult ActOnCXXNullPtrLiteral(SourceLocation Loc);
5094
5095 //// ActOnCXXThrow - Parse throw expressions.
5096 ExprResult ActOnCXXThrow(Scope *S, SourceLocation OpLoc, Expr *expr);
5097 ExprResult BuildCXXThrow(SourceLocation OpLoc, Expr *Ex,
5098 bool IsThrownVarInScope);
5099 bool CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ThrowTy, Expr *E);
5100
5101 /// ActOnCXXTypeConstructExpr - Parse construction of a specified type.
5102 /// Can be interpreted either as function-style casting ("int(x)")
5103 /// or class type construction ("ClassType(x,y,z)")
5104 /// or creation of a value-initialized type ("int()").
5105 ExprResult ActOnCXXTypeConstructExpr(ParsedType TypeRep,
5106 SourceLocation LParenLoc,
5107 MultiExprArg Exprs,
5108 SourceLocation RParenLoc);
5109
5110 ExprResult BuildCXXTypeConstructExpr(TypeSourceInfo *Type,
5111 SourceLocation LParenLoc,
5112 MultiExprArg Exprs,
5113 SourceLocation RParenLoc);
5114
5115 /// ActOnCXXNew - Parsed a C++ 'new' expression.
5116 ExprResult ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal,
5117 SourceLocation PlacementLParen,
5118 MultiExprArg PlacementArgs,
5119 SourceLocation PlacementRParen,
5120 SourceRange TypeIdParens, Declarator &D,
5121 Expr *Initializer);
5122 ExprResult BuildCXXNew(SourceRange Range, bool UseGlobal,
5123 SourceLocation PlacementLParen,
5124 MultiExprArg PlacementArgs,
5125 SourceLocation PlacementRParen,
5126 SourceRange TypeIdParens,
5127 QualType AllocType,
5128 TypeSourceInfo *AllocTypeInfo,
5129 Expr *ArraySize,
5130 SourceRange DirectInitRange,
5131 Expr *Initializer);
5132
5133 bool CheckAllocatedType(QualType AllocType, SourceLocation Loc,
5134 SourceRange R);
5135 bool FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range,
5136 bool UseGlobal, QualType AllocType, bool IsArray,
5137 bool &PassAlignment, MultiExprArg PlaceArgs,
5138 FunctionDecl *&OperatorNew,
5139 FunctionDecl *&OperatorDelete);
5140 void DeclareGlobalNewDelete();
5141 void DeclareGlobalAllocationFunction(DeclarationName Name, QualType Return,
5142 ArrayRef<QualType> Params);
5143
5144 bool FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD,
5145 DeclarationName Name, FunctionDecl* &Operator,
5146 bool Diagnose = true);
5147 FunctionDecl *FindUsualDeallocationFunction(SourceLocation StartLoc,
5148 bool CanProvideSize,
5149 bool Overaligned,
5150 DeclarationName Name);
5151 FunctionDecl *FindDeallocationFunctionForDestructor(SourceLocation StartLoc,
5152 CXXRecordDecl *RD);
5153
5154 /// ActOnCXXDelete - Parsed a C++ 'delete' expression
5155 ExprResult ActOnCXXDelete(SourceLocation StartLoc,
5156 bool UseGlobal, bool ArrayForm,
5157 Expr *Operand);
5158 void CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc,
5159 bool IsDelete, bool CallCanBeVirtual,
5160 bool WarnOnNonAbstractTypes,
5161 SourceLocation DtorLoc);
5162
5163 ExprResult ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation LParen,
5164 Expr *Operand, SourceLocation RParen);
5165 ExprResult BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand,
5166 SourceLocation RParen);
5167
5168 /// \brief Parsed one of the type trait support pseudo-functions.
5169 ExprResult ActOnTypeTrait(TypeTrait Kind, SourceLocation KWLoc,
5170 ArrayRef<ParsedType> Args,
5171 SourceLocation RParenLoc);
5172 ExprResult BuildTypeTrait(TypeTrait Kind, SourceLocation KWLoc,
5173 ArrayRef<TypeSourceInfo *> Args,
5174 SourceLocation RParenLoc);
5175
5176 /// ActOnArrayTypeTrait - Parsed one of the binary type trait support
5177 /// pseudo-functions.
5178 ExprResult ActOnArrayTypeTrait(ArrayTypeTrait ATT,
5179 SourceLocation KWLoc,
5180 ParsedType LhsTy,
5181 Expr *DimExpr,
5182 SourceLocation RParen);
5183
5184 ExprResult BuildArrayTypeTrait(ArrayTypeTrait ATT,
5185 SourceLocation KWLoc,
5186 TypeSourceInfo *TSInfo,
5187 Expr *DimExpr,
5188 SourceLocation RParen);
5189
5190 /// ActOnExpressionTrait - Parsed one of the unary type trait support
5191 /// pseudo-functions.
5192 ExprResult ActOnExpressionTrait(ExpressionTrait OET,
5193 SourceLocation KWLoc,
5194 Expr *Queried,
5195 SourceLocation RParen);
5196
5197 ExprResult BuildExpressionTrait(ExpressionTrait OET,
5198 SourceLocation KWLoc,
5199 Expr *Queried,
5200 SourceLocation RParen);
5201
5202 ExprResult ActOnStartCXXMemberReference(Scope *S,
5203 Expr *Base,
5204 SourceLocation OpLoc,
5205 tok::TokenKind OpKind,
5206 ParsedType &ObjectType,
5207 bool &MayBePseudoDestructor);
5208
5209 ExprResult BuildPseudoDestructorExpr(Expr *Base,
5210 SourceLocation OpLoc,
5211 tok::TokenKind OpKind,
5212 const CXXScopeSpec &SS,
5213 TypeSourceInfo *ScopeType,
5214 SourceLocation CCLoc,
5215 SourceLocation TildeLoc,
5216 PseudoDestructorTypeStorage DestroyedType);
5217
5218 ExprResult ActOnPseudoDestructorExpr(Scope *S, Expr *Base,
5219 SourceLocation OpLoc,
5220 tok::TokenKind OpKind,
5221 CXXScopeSpec &SS,
5222 UnqualifiedId &FirstTypeName,
5223 SourceLocation CCLoc,
5224 SourceLocation TildeLoc,
5225 UnqualifiedId &SecondTypeName);
5226
5227 ExprResult ActOnPseudoDestructorExpr(Scope *S, Expr *Base,
5228 SourceLocation OpLoc,
5229 tok::TokenKind OpKind,
5230 SourceLocation TildeLoc,
5231 const DeclSpec& DS);
5232
5233 /// MaybeCreateExprWithCleanups - If the current full-expression
5234 /// requires any cleanups, surround it with a ExprWithCleanups node.
5235 /// Otherwise, just returns the passed-in expression.
5236 Expr *MaybeCreateExprWithCleanups(Expr *SubExpr);
5237 Stmt *MaybeCreateStmtWithCleanups(Stmt *SubStmt);
5238 ExprResult MaybeCreateExprWithCleanups(ExprResult SubExpr);
5239
5240 MaterializeTemporaryExpr *
5241 CreateMaterializeTemporaryExpr(QualType T, Expr *Temporary,
5242 bool BoundToLvalueReference);
5243
5244 ExprResult ActOnFinishFullExpr(Expr *Expr) {
5245 return ActOnFinishFullExpr(Expr, Expr ? Expr->getExprLoc()
5246 : SourceLocation());
5247 }
5248 ExprResult ActOnFinishFullExpr(Expr *Expr, SourceLocation CC,
5249 bool DiscardedValue = false,
5250 bool IsConstexpr = false,
5251 bool IsLambdaInitCaptureInitializer = false);
5252 StmtResult ActOnFinishFullStmt(Stmt *Stmt);
5253
5254 // Marks SS invalid if it represents an incomplete type.
5255 bool RequireCompleteDeclContext(CXXScopeSpec &SS, DeclContext *DC);
5256
5257 DeclContext *computeDeclContext(QualType T);
5258 DeclContext *computeDeclContext(const CXXScopeSpec &SS,
5259 bool EnteringContext = false);
5260 bool isDependentScopeSpecifier(const CXXScopeSpec &SS);
5261 CXXRecordDecl *getCurrentInstantiationOf(NestedNameSpecifier *NNS);
5262
5263 /// \brief The parser has parsed a global nested-name-specifier '::'.
5264 ///
5265 /// \param CCLoc The location of the '::'.
5266 ///
5267 /// \param SS The nested-name-specifier, which will be updated in-place
5268 /// to reflect the parsed nested-name-specifier.
5269 ///
5270 /// \returns true if an error occurred, false otherwise.
5271 bool ActOnCXXGlobalScopeSpecifier(SourceLocation CCLoc, CXXScopeSpec &SS);
5272
5273 /// \brief The parser has parsed a '__super' nested-name-specifier.
5274 ///
5275 /// \param SuperLoc The location of the '__super' keyword.
5276 ///
5277 /// \param ColonColonLoc The location of the '::'.
5278 ///
5279 /// \param SS The nested-name-specifier, which will be updated in-place
5280 /// to reflect the parsed nested-name-specifier.
5281 ///
5282 /// \returns true if an error occurred, false otherwise.
5283 bool ActOnSuperScopeSpecifier(SourceLocation SuperLoc,
5284 SourceLocation ColonColonLoc, CXXScopeSpec &SS);
5285
5286 bool isAcceptableNestedNameSpecifier(const NamedDecl *SD,
5287 bool *CanCorrect = nullptr);
5288 NamedDecl *FindFirstQualifierInScope(Scope *S, NestedNameSpecifier *NNS);
5289
5290 /// \brief Keeps information about an identifier in a nested-name-spec.
5291 ///
5292 struct NestedNameSpecInfo {
5293 /// \brief The type of the object, if we're parsing nested-name-specifier in
5294 /// a member access expression.
5295 ParsedType ObjectType;
5296
5297 /// \brief The identifier preceding the '::'.
5298 IdentifierInfo *Identifier;
5299
5300 /// \brief The location of the identifier.
5301 SourceLocation IdentifierLoc;
5302
5303 /// \brief The location of the '::'.
5304 SourceLocation CCLoc;
5305
5306 /// \brief Creates info object for the most typical case.
5307 NestedNameSpecInfo(IdentifierInfo *II, SourceLocation IdLoc,
5308 SourceLocation ColonColonLoc, ParsedType ObjectType = ParsedType())
5309 : ObjectType(ObjectType), Identifier(II), IdentifierLoc(IdLoc),
5310 CCLoc(ColonColonLoc) {
5311 }
5312
5313 NestedNameSpecInfo(IdentifierInfo *II, SourceLocation IdLoc,
5314 SourceLocation ColonColonLoc, QualType ObjectType)
5315 : ObjectType(ParsedType::make(ObjectType)), Identifier(II),
5316 IdentifierLoc(IdLoc), CCLoc(ColonColonLoc) {
5317 }
5318 };
5319
5320 bool isNonTypeNestedNameSpecifier(Scope *S, CXXScopeSpec &SS,
5321 NestedNameSpecInfo &IdInfo);
5322
5323 bool BuildCXXNestedNameSpecifier(Scope *S,
5324 NestedNameSpecInfo &IdInfo,
5325 bool EnteringContext,
5326 CXXScopeSpec &SS,
5327 NamedDecl *ScopeLookupResult,
5328 bool ErrorRecoveryLookup,
5329 bool *IsCorrectedToColon = nullptr,
5330 bool OnlyNamespace = false);
5331
5332 /// \brief The parser has parsed a nested-name-specifier 'identifier::'.
5333 ///
5334 /// \param S The scope in which this nested-name-specifier occurs.
5335 ///
5336 /// \param IdInfo Parser information about an identifier in the
5337 /// nested-name-spec.
5338 ///
5339 /// \param EnteringContext Whether we're entering the context nominated by
5340 /// this nested-name-specifier.
5341 ///
5342 /// \param SS The nested-name-specifier, which is both an input
5343 /// parameter (the nested-name-specifier before this type) and an
5344 /// output parameter (containing the full nested-name-specifier,
5345 /// including this new type).
5346 ///
5347 /// \param ErrorRecoveryLookup If true, then this method is called to improve
5348 /// error recovery. In this case do not emit error message.
5349 ///
5350 /// \param IsCorrectedToColon If not null, suggestions to replace '::' -> ':'
5351 /// are allowed. The bool value pointed by this parameter is set to 'true'
5352 /// if the identifier is treated as if it was followed by ':', not '::'.
5353 ///
5354 /// \param OnlyNamespace If true, only considers namespaces in lookup.
5355 ///
5356 /// \returns true if an error occurred, false otherwise.
5357 bool ActOnCXXNestedNameSpecifier(Scope *S,
5358 NestedNameSpecInfo &IdInfo,
5359 bool EnteringContext,
5360 CXXScopeSpec &SS,
5361 bool ErrorRecoveryLookup = false,
5362 bool *IsCorrectedToColon = nullptr,
5363 bool OnlyNamespace = false);
5364
5365 ExprResult ActOnDecltypeExpression(Expr *E);
5366
5367 bool ActOnCXXNestedNameSpecifierDecltype(CXXScopeSpec &SS,
5368 const DeclSpec &DS,
5369 SourceLocation ColonColonLoc);
5370
5371 bool IsInvalidUnlessNestedName(Scope *S, CXXScopeSpec &SS,
5372 NestedNameSpecInfo &IdInfo,
5373 bool EnteringContext);
5374
5375 /// \brief The parser has parsed a nested-name-specifier
5376 /// 'template[opt] template-name < template-args >::'.
5377 ///
5378 /// \param S The scope in which this nested-name-specifier occurs.
5379 ///
5380 /// \param SS The nested-name-specifier, which is both an input
5381 /// parameter (the nested-name-specifier before this type) and an
5382 /// output parameter (containing the full nested-name-specifier,
5383 /// including this new type).
5384 ///
5385 /// \param TemplateKWLoc the location of the 'template' keyword, if any.
5386 /// \param TemplateName the template name.
5387 /// \param TemplateNameLoc The location of the template name.
5388 /// \param LAngleLoc The location of the opening angle bracket ('<').
5389 /// \param TemplateArgs The template arguments.
5390 /// \param RAngleLoc The location of the closing angle bracket ('>').
5391 /// \param CCLoc The location of the '::'.
5392 ///
5393 /// \param EnteringContext Whether we're entering the context of the
5394 /// nested-name-specifier.
5395 ///
5396 ///
5397 /// \returns true if an error occurred, false otherwise.
5398 bool ActOnCXXNestedNameSpecifier(Scope *S,
5399 CXXScopeSpec &SS,
5400 SourceLocation TemplateKWLoc,
5401 TemplateTy TemplateName,
5402 SourceLocation TemplateNameLoc,
5403 SourceLocation LAngleLoc,
5404 ASTTemplateArgsPtr TemplateArgs,
5405 SourceLocation RAngleLoc,
5406 SourceLocation CCLoc,
5407 bool EnteringContext);
5408
5409 /// \brief Given a C++ nested-name-specifier, produce an annotation value
5410 /// that the parser can use later to reconstruct the given
5411 /// nested-name-specifier.
5412 ///
5413 /// \param SS A nested-name-specifier.
5414 ///
5415 /// \returns A pointer containing all of the information in the
5416 /// nested-name-specifier \p SS.
5417 void *SaveNestedNameSpecifierAnnotation(CXXScopeSpec &SS);
5418
5419 /// \brief Given an annotation pointer for a nested-name-specifier, restore
5420 /// the nested-name-specifier structure.
5421 ///
5422 /// \param Annotation The annotation pointer, produced by
5423 /// \c SaveNestedNameSpecifierAnnotation().
5424 ///
5425 /// \param AnnotationRange The source range corresponding to the annotation.
5426 ///
5427 /// \param SS The nested-name-specifier that will be updated with the contents
5428 /// of the annotation pointer.
5429 void RestoreNestedNameSpecifierAnnotation(void *Annotation,
5430 SourceRange AnnotationRange,
5431 CXXScopeSpec &SS);
5432
5433 bool ShouldEnterDeclaratorScope(Scope *S, const CXXScopeSpec &SS);
5434
5435 /// ActOnCXXEnterDeclaratorScope - Called when a C++ scope specifier (global
5436 /// scope or nested-name-specifier) is parsed, part of a declarator-id.
5437 /// After this method is called, according to [C++ 3.4.3p3], names should be
5438 /// looked up in the declarator-id's scope, until the declarator is parsed and
5439 /// ActOnCXXExitDeclaratorScope is called.
5440 /// The 'SS' should be a non-empty valid CXXScopeSpec.
5441 bool ActOnCXXEnterDeclaratorScope(Scope *S, CXXScopeSpec &SS);
5442
5443 /// ActOnCXXExitDeclaratorScope - Called when a declarator that previously
5444 /// invoked ActOnCXXEnterDeclaratorScope(), is finished. 'SS' is the same
5445 /// CXXScopeSpec that was passed to ActOnCXXEnterDeclaratorScope as well.
5446 /// Used to indicate that names should revert to being looked up in the
5447 /// defining scope.
5448 void ActOnCXXExitDeclaratorScope(Scope *S, const CXXScopeSpec &SS);
5449
5450 /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse an
5451 /// initializer for the declaration 'Dcl'.
5452 /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
5453 /// static data member of class X, names should be looked up in the scope of
5454 /// class X.
5455 void ActOnCXXEnterDeclInitializer(Scope *S, Decl *Dcl);
5456
5457 /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
5458 /// initializer for the declaration 'Dcl'.
5459 void ActOnCXXExitDeclInitializer(Scope *S, Decl *Dcl);
5460
5461 /// \brief Create a new lambda closure type.
5462 CXXRecordDecl *createLambdaClosureType(SourceRange IntroducerRange,
5463 TypeSourceInfo *Info,
5464 bool KnownDependent,
5465 LambdaCaptureDefault CaptureDefault);
5466
5467 /// \brief Start the definition of a lambda expression.
5468 CXXMethodDecl *startLambdaDefinition(CXXRecordDecl *Class,
5469 SourceRange IntroducerRange,
5470 TypeSourceInfo *MethodType,
5471 SourceLocation EndLoc,
5472 ArrayRef<ParmVarDecl *> Params,
5473 bool IsConstexprSpecified);
5474
5475 /// \brief Endow the lambda scope info with the relevant properties.
5476 void buildLambdaScope(sema::LambdaScopeInfo *LSI,
5477 CXXMethodDecl *CallOperator,
5478 SourceRange IntroducerRange,
5479 LambdaCaptureDefault CaptureDefault,
5480 SourceLocation CaptureDefaultLoc,
5481 bool ExplicitParams,
5482 bool ExplicitResultType,
5483 bool Mutable);
5484
5485 /// \brief Perform initialization analysis of the init-capture and perform
5486 /// any implicit conversions such as an lvalue-to-rvalue conversion if
5487 /// not being used to initialize a reference.
5488 ParsedType actOnLambdaInitCaptureInitialization(
5489 SourceLocation Loc, bool ByRef, IdentifierInfo *Id,
5490 LambdaCaptureInitKind InitKind, Expr *&Init) {
5491 return ParsedType::make(buildLambdaInitCaptureInitialization(
5492 Loc, ByRef, Id, InitKind != LambdaCaptureInitKind::CopyInit, Init));
5493 }
5494 QualType buildLambdaInitCaptureInitialization(SourceLocation Loc, bool ByRef,
5495 IdentifierInfo *Id,
5496 bool DirectInit, Expr *&Init);
5497
5498 /// \brief Create a dummy variable within the declcontext of the lambda's
5499 /// call operator, for name lookup purposes for a lambda init capture.
5500 ///
5501 /// CodeGen handles emission of lambda captures, ignoring these dummy
5502 /// variables appropriately.
5503 VarDecl *createLambdaInitCaptureVarDecl(SourceLocation Loc,
5504 QualType InitCaptureType,
5505 IdentifierInfo *Id,
5506 unsigned InitStyle, Expr *Init);
5507
5508 /// \brief Build the implicit field for an init-capture.
5509 FieldDecl *buildInitCaptureField(sema::LambdaScopeInfo *LSI, VarDecl *Var);
5510
5511 /// \brief Note that we have finished the explicit captures for the
5512 /// given lambda.
5513 void finishLambdaExplicitCaptures(sema::LambdaScopeInfo *LSI);
5514
5515 /// \brief Introduce the lambda parameters into scope.
5516 void addLambdaParameters(CXXMethodDecl *CallOperator, Scope *CurScope);
5517
5518 /// \brief Deduce a block or lambda's return type based on the return
5519 /// statements present in the body.
5520 void deduceClosureReturnType(sema::CapturingScopeInfo &CSI);
5521
5522 /// ActOnStartOfLambdaDefinition - This is called just before we start
5523 /// parsing the body of a lambda; it analyzes the explicit captures and
5524 /// arguments, and sets up various data-structures for the body of the
5525 /// lambda.
5526 void ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro,
5527 Declarator &ParamInfo, Scope *CurScope);
5528
5529 /// ActOnLambdaError - If there is an error parsing a lambda, this callback
5530 /// is invoked to pop the information about the lambda.
5531 void ActOnLambdaError(SourceLocation StartLoc, Scope *CurScope,
5532 bool IsInstantiation = false);
5533
5534 /// ActOnLambdaExpr - This is called when the body of a lambda expression
5535 /// was successfully completed.
5536 ExprResult ActOnLambdaExpr(SourceLocation StartLoc, Stmt *Body,
5537 Scope *CurScope);
5538
5539 /// \brief Does copying/destroying the captured variable have side effects?
5540 bool CaptureHasSideEffects(const sema::LambdaScopeInfo::Capture &From);
5541
5542 /// \brief Diagnose if an explicit lambda capture is unused.
5543 void DiagnoseUnusedLambdaCapture(const sema::LambdaScopeInfo::Capture &From);
5544
5545 /// \brief Complete a lambda-expression having processed and attached the
5546 /// lambda body.
5547 ExprResult BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc,
5548 sema::LambdaScopeInfo *LSI);
5549
5550 /// \brief Define the "body" of the conversion from a lambda object to a
5551 /// function pointer.
5552 ///
5553 /// This routine doesn't actually define a sensible body; rather, it fills
5554 /// in the initialization expression needed to copy the lambda object into
5555 /// the block, and IR generation actually generates the real body of the
5556 /// block pointer conversion.
5557 void DefineImplicitLambdaToFunctionPointerConversion(
5558 SourceLocation CurrentLoc, CXXConversionDecl *Conv);
5559
5560 /// \brief Define the "body" of the conversion from a lambda object to a
5561 /// block pointer.
5562 ///
5563 /// This routine doesn't actually define a sensible body; rather, it fills
5564 /// in the initialization expression needed to copy the lambda object into
5565 /// the block, and IR generation actually generates the real body of the
5566 /// block pointer conversion.
5567 void DefineImplicitLambdaToBlockPointerConversion(SourceLocation CurrentLoc,
5568 CXXConversionDecl *Conv);
5569
5570 ExprResult BuildBlockForLambdaConversion(SourceLocation CurrentLocation,
5571 SourceLocation ConvLocation,
5572 CXXConversionDecl *Conv,
5573 Expr *Src);
5574
5575 // ParseObjCStringLiteral - Parse Objective-C string literals.
5576 ExprResult ParseObjCStringLiteral(SourceLocation *AtLocs,
5577 ArrayRef<Expr *> Strings);
5578
5579 ExprResult BuildObjCStringLiteral(SourceLocation AtLoc, StringLiteral *S);
5580
5581 /// BuildObjCNumericLiteral - builds an ObjCBoxedExpr AST node for the
5582 /// numeric literal expression. Type of the expression will be "NSNumber *"
5583 /// or "id" if NSNumber is unavailable.
5584 ExprResult BuildObjCNumericLiteral(SourceLocation AtLoc, Expr *Number);
5585 ExprResult ActOnObjCBoolLiteral(SourceLocation AtLoc, SourceLocation ValueLoc,
5586 bool Value);
5587 ExprResult BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements);
5588
5589 /// BuildObjCBoxedExpr - builds an ObjCBoxedExpr AST node for the
5590 /// '@' prefixed parenthesized expression. The type of the expression will
5591 /// either be "NSNumber *", "NSString *" or "NSValue *" depending on the type
5592 /// of ValueType, which is allowed to be a built-in numeric type, "char *",
5593 /// "const char *" or C structure with attribute 'objc_boxable'.
5594 ExprResult BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr);
5595
5596 ExprResult BuildObjCSubscriptExpression(SourceLocation RB, Expr *BaseExpr,
5597 Expr *IndexExpr,
5598 ObjCMethodDecl *getterMethod,
5599 ObjCMethodDecl *setterMethod);
5600
5601 ExprResult BuildObjCDictionaryLiteral(SourceRange SR,
5602 MutableArrayRef<ObjCDictionaryElement> Elements);
5603
5604 ExprResult BuildObjCEncodeExpression(SourceLocation AtLoc,
5605 TypeSourceInfo *EncodedTypeInfo,
5606 SourceLocation RParenLoc);
5607 ExprResult BuildCXXMemberCallExpr(Expr *Exp, NamedDecl *FoundDecl,
5608 CXXConversionDecl *Method,
5609 bool HadMultipleCandidates);
5610
5611 ExprResult ParseObjCEncodeExpression(SourceLocation AtLoc,
5612 SourceLocation EncodeLoc,
5613 SourceLocation LParenLoc,
5614 ParsedType Ty,
5615 SourceLocation RParenLoc);
5616
5617 /// ParseObjCSelectorExpression - Build selector expression for \@selector
5618 ExprResult ParseObjCSelectorExpression(Selector Sel,
5619 SourceLocation AtLoc,
5620 SourceLocation SelLoc,
5621 SourceLocation LParenLoc,
5622 SourceLocation RParenLoc,
5623 bool WarnMultipleSelectors);
5624
5625 /// ParseObjCProtocolExpression - Build protocol expression for \@protocol
5626 ExprResult ParseObjCProtocolExpression(IdentifierInfo * ProtocolName,
5627 SourceLocation AtLoc,
5628 SourceLocation ProtoLoc,
5629 SourceLocation LParenLoc,
5630 SourceLocation ProtoIdLoc,
5631 SourceLocation RParenLoc);
5632
5633 //===--------------------------------------------------------------------===//
5634 // C++ Declarations
5635 //
5636 Decl *ActOnStartLinkageSpecification(Scope *S,
5637 SourceLocation ExternLoc,
5638 Expr *LangStr,
5639 SourceLocation LBraceLoc);
5640 Decl *ActOnFinishLinkageSpecification(Scope *S,
5641 Decl *LinkageSpec,
5642 SourceLocation RBraceLoc);
5643
5644
5645 //===--------------------------------------------------------------------===//
5646 // C++ Classes
5647 //
5648 bool isCurrentClassName(const IdentifierInfo &II, Scope *S,
5649 const CXXScopeSpec *SS = nullptr);
5650 bool isCurrentClassNameTypo(IdentifierInfo *&II, const CXXScopeSpec *SS);
5651
5652 bool ActOnAccessSpecifier(AccessSpecifier Access,
5653 SourceLocation ASLoc,
5654 SourceLocation ColonLoc,
5655 AttributeList *Attrs = nullptr);
5656
5657 NamedDecl *ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS,
5658 Declarator &D,
5659 MultiTemplateParamsArg TemplateParameterLists,
5660 Expr *BitfieldWidth, const VirtSpecifiers &VS,
5661 InClassInitStyle InitStyle);
5662
5663 void ActOnStartCXXInClassMemberInitializer();
5664 void ActOnFinishCXXInClassMemberInitializer(Decl *VarDecl,
5665 SourceLocation EqualLoc,
5666 Expr *Init);
5667
5668 MemInitResult ActOnMemInitializer(Decl *ConstructorD,
5669 Scope *S,
5670 CXXScopeSpec &SS,
5671 IdentifierInfo *MemberOrBase,
5672 ParsedType TemplateTypeTy,
5673 const DeclSpec &DS,
5674 SourceLocation IdLoc,
5675 SourceLocation LParenLoc,
5676 ArrayRef<Expr *> Args,
5677 SourceLocation RParenLoc,
5678 SourceLocation EllipsisLoc);
5679
5680 MemInitResult ActOnMemInitializer(Decl *ConstructorD,
5681 Scope *S,
5682 CXXScopeSpec &SS,
5683 IdentifierInfo *MemberOrBase,
5684 ParsedType TemplateTypeTy,
5685 const DeclSpec &DS,
5686 SourceLocation IdLoc,
5687 Expr *InitList,
5688 SourceLocation EllipsisLoc);
5689
5690 MemInitResult BuildMemInitializer(Decl *ConstructorD,
5691 Scope *S,
5692 CXXScopeSpec &SS,
5693 IdentifierInfo *MemberOrBase,
5694 ParsedType TemplateTypeTy,
5695 const DeclSpec &DS,
5696 SourceLocation IdLoc,
5697 Expr *Init,
5698 SourceLocation EllipsisLoc);
5699
5700 MemInitResult BuildMemberInitializer(ValueDecl *Member,
5701 Expr *Init,
5702 SourceLocation IdLoc);
5703
5704 MemInitResult BuildBaseInitializer(QualType BaseType,
5705 TypeSourceInfo *BaseTInfo,
5706 Expr *Init,
5707 CXXRecordDecl *ClassDecl,
5708 SourceLocation EllipsisLoc);
5709
5710 MemInitResult BuildDelegatingInitializer(TypeSourceInfo *TInfo,
5711 Expr *Init,
5712 CXXRecordDecl *ClassDecl);
5713
5714 bool SetDelegatingInitializer(CXXConstructorDecl *Constructor,
5715 CXXCtorInitializer *Initializer);
5716
5717 bool SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors,
5718 ArrayRef<CXXCtorInitializer *> Initializers = None);
5719
5720 void SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation);
5721
5722
5723 /// MarkBaseAndMemberDestructorsReferenced - Given a record decl,
5724 /// mark all the non-trivial destructors of its members and bases as
5725 /// referenced.
5726 void MarkBaseAndMemberDestructorsReferenced(SourceLocation Loc,
5727 CXXRecordDecl *Record);
5728
5729 /// \brief The list of classes whose vtables have been used within
5730 /// this translation unit, and the source locations at which the
5731 /// first use occurred.
5732 typedef std::pair<CXXRecordDecl*, SourceLocation> VTableUse;
5733
5734 /// \brief The list of vtables that are required but have not yet been
5735 /// materialized.
5736 SmallVector<VTableUse, 16> VTableUses;
5737
5738 /// \brief The set of classes whose vtables have been used within
5739 /// this translation unit, and a bit that will be true if the vtable is
5740 /// required to be emitted (otherwise, it should be emitted only if needed
5741 /// by code generation).
5742 llvm::DenseMap<CXXRecordDecl *, bool> VTablesUsed;
5743
5744 /// \brief Load any externally-stored vtable uses.
5745 void LoadExternalVTableUses();
5746
5747 /// \brief Note that the vtable for the given class was used at the
5748 /// given location.
5749 void MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
5750 bool DefinitionRequired = false);
5751
5752 /// \brief Mark the exception specifications of all virtual member functions
5753 /// in the given class as needed.
5754 void MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,
5755 const CXXRecordDecl *RD);
5756
5757 /// MarkVirtualMembersReferenced - Will mark all members of the given
5758 /// CXXRecordDecl referenced.
5759 void MarkVirtualMembersReferenced(SourceLocation Loc,
5760 const CXXRecordDecl *RD);
5761
5762 /// \brief Define all of the vtables that have been used in this
5763 /// translation unit and reference any virtual members used by those
5764 /// vtables.
5765 ///
5766 /// \returns true if any work was done, false otherwise.
5767 bool DefineUsedVTables();
5768
5769 void AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl);
5770
5771 void ActOnMemInitializers(Decl *ConstructorDecl,
5772 SourceLocation ColonLoc,
5773 ArrayRef<CXXCtorInitializer*> MemInits,
5774 bool AnyErrors);
5775
5776 /// \brief Check class-level dllimport/dllexport attribute. The caller must
5777 /// ensure that referenceDLLExportedClassMethods is called some point later
5778 /// when all outer classes of Class are complete.
5779 void checkClassLevelDLLAttribute(CXXRecordDecl *Class);
5780
5781 void referenceDLLExportedClassMethods();
5782
5783 void propagateDLLAttrToBaseClassTemplate(
5784 CXXRecordDecl *Class, Attr *ClassAttr,
5785 ClassTemplateSpecializationDecl *BaseTemplateSpec,
5786 SourceLocation BaseLoc);
5787
5788 void CheckCompletedCXXClass(CXXRecordDecl *Record);
5789 void ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
5790 Decl *TagDecl,
5791 SourceLocation LBrac,
5792 SourceLocation RBrac,
5793 AttributeList *AttrList);
5794 void ActOnFinishCXXMemberDecls();
5795 void ActOnFinishCXXNonNestedClass(Decl *D);
5796
5797 void ActOnReenterCXXMethodParameter(Scope *S, ParmVarDecl *Param);
5798 unsigned ActOnReenterTemplateScope(Scope *S, Decl *Template);
5799 void ActOnStartDelayedMemberDeclarations(Scope *S, Decl *Record);
5800 void ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *Method);
5801 void ActOnDelayedCXXMethodParameter(Scope *S, Decl *Param);
5802 void ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *Record);
5803 void ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *Method);
5804 void ActOnFinishDelayedMemberInitializers(Decl *Record);
5805 void MarkAsLateParsedTemplate(FunctionDecl *FD, Decl *FnD,
5806 CachedTokens &Toks);
5807 void UnmarkAsLateParsedTemplate(FunctionDecl *FD);
5808 bool IsInsideALocalClassWithinATemplateFunction();
5809
5810 Decl *ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
5811 Expr *AssertExpr,
5812 Expr *AssertMessageExpr,
5813 SourceLocation RParenLoc);
5814 Decl *BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,
5815 Expr *AssertExpr,
5816 StringLiteral *AssertMessageExpr,
5817 SourceLocation RParenLoc,
5818 bool Failed);
5819
5820 FriendDecl *CheckFriendTypeDecl(SourceLocation LocStart,
5821 SourceLocation FriendLoc,
5822 TypeSourceInfo *TSInfo);
5823 Decl *ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
5824 MultiTemplateParamsArg TemplateParams);
5825 NamedDecl *ActOnFriendFunctionDecl(Scope *S, Declarator &D,
5826 MultiTemplateParamsArg TemplateParams);
5827
5828 QualType CheckConstructorDeclarator(Declarator &D, QualType R,
5829 StorageClass& SC);
5830 void CheckConstructor(CXXConstructorDecl *Constructor);
5831 QualType CheckDestructorDeclarator(Declarator &D, QualType R,
5832 StorageClass& SC);
5833 bool CheckDestructor(CXXDestructorDecl *Destructor);
5834 void CheckConversionDeclarator(Declarator &D, QualType &R,
5835 StorageClass& SC);
5836 Decl *ActOnConversionDeclarator(CXXConversionDecl *Conversion);
5837 void CheckDeductionGuideDeclarator(Declarator &D, QualType &R,
5838 StorageClass &SC);
5839 void CheckDeductionGuideTemplate(FunctionTemplateDecl *TD);
5840
5841 void CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD);
5842 void CheckExplicitlyDefaultedMemberExceptionSpec(CXXMethodDecl *MD,
5843 const FunctionProtoType *T);
5844 void CheckDelayedMemberExceptionSpecs();
5845
5846 //===--------------------------------------------------------------------===//
5847 // C++ Derived Classes
5848 //
5849
5850 /// ActOnBaseSpecifier - Parsed a base specifier
5851 CXXBaseSpecifier *CheckBaseSpecifier(CXXRecordDecl *Class,
5852 SourceRange SpecifierRange,
5853 bool Virtual, AccessSpecifier Access,
5854 TypeSourceInfo *TInfo,
5855 SourceLocation EllipsisLoc);
5856
5857 BaseResult ActOnBaseSpecifier(Decl *classdecl,
5858 SourceRange SpecifierRange,
5859 ParsedAttributes &Attrs,
5860 bool Virtual, AccessSpecifier Access,
5861 ParsedType basetype,
5862 SourceLocation BaseLoc,
5863 SourceLocation EllipsisLoc);
5864
5865 bool AttachBaseSpecifiers(CXXRecordDecl *Class,
5866 MutableArrayRef<CXXBaseSpecifier *> Bases);
5867 void ActOnBaseSpecifiers(Decl *ClassDecl,
5868 MutableArrayRef<CXXBaseSpecifier *> Bases);
5869
5870 bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base);
5871 bool IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base,
5872 CXXBasePaths &Paths);
5873
5874 // FIXME: I don't like this name.
5875 void BuildBasePathArray(const CXXBasePaths &Paths, CXXCastPath &BasePath);
5876
5877 bool CheckDerivedToBaseConversion(QualType Derived, QualType Base,
5878 SourceLocation Loc, SourceRange Range,
5879 CXXCastPath *BasePath = nullptr,
5880 bool IgnoreAccess = false);
5881 bool CheckDerivedToBaseConversion(QualType Derived, QualType Base,
5882 unsigned InaccessibleBaseID,
5883 unsigned AmbigiousBaseConvID,
5884 SourceLocation Loc, SourceRange Range,
5885 DeclarationName Name,
5886 CXXCastPath *BasePath,
5887 bool IgnoreAccess = false);
5888
5889 std::string getAmbiguousPathsDisplayString(CXXBasePaths &Paths);
5890
5891 bool CheckOverridingFunctionAttributes(const CXXMethodDecl *New,
5892 const CXXMethodDecl *Old);
5893
5894 /// CheckOverridingFunctionReturnType - Checks whether the return types are
5895 /// covariant, according to C++ [class.virtual]p5.
5896 bool CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
5897 const CXXMethodDecl *Old);
5898
5899 /// CheckOverridingFunctionExceptionSpec - Checks whether the exception
5900 /// spec is a subset of base spec.
5901 bool CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New,
5902 const CXXMethodDecl *Old);
5903
5904 bool CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange);
5905
5906 /// CheckOverrideControl - Check C++11 override control semantics.
5907 void CheckOverrideControl(NamedDecl *D);
5908
5909 /// DiagnoseAbsenceOfOverrideControl - Diagnose if 'override' keyword was
5910 /// not used in the declaration of an overriding method.
5911 void DiagnoseAbsenceOfOverrideControl(NamedDecl *D);
5912
5913 /// CheckForFunctionMarkedFinal - Checks whether a virtual member function
5914 /// overrides a virtual member function marked 'final', according to
5915 /// C++11 [class.virtual]p4.
5916 bool CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
5917 const CXXMethodDecl *Old);
5918
5919
5920 //===--------------------------------------------------------------------===//
5921 // C++ Access Control
5922 //
5923
5924 enum AccessResult {
5925 AR_accessible,
5926 AR_inaccessible,
5927 AR_dependent,
5928 AR_delayed
5929 };
5930
5931 bool SetMemberAccessSpecifier(NamedDecl *MemberDecl,
5932 NamedDecl *PrevMemberDecl,
5933 AccessSpecifier LexicalAS);
5934
5935 AccessResult CheckUnresolvedMemberAccess(UnresolvedMemberExpr *E,
5936 DeclAccessPair FoundDecl);
5937 AccessResult CheckUnresolvedLookupAccess(UnresolvedLookupExpr *E,
5938 DeclAccessPair FoundDecl);
5939 AccessResult CheckAllocationAccess(SourceLocation OperatorLoc,
5940 SourceRange PlacementRange,
5941 CXXRecordDecl *NamingClass,
5942 DeclAccessPair FoundDecl,
5943 bool Diagnose = true);
5944 AccessResult CheckConstructorAccess(SourceLocation Loc,
5945 CXXConstructorDecl *D,
5946 DeclAccessPair FoundDecl,
5947 const InitializedEntity &Entity,
5948 bool IsCopyBindingRefToTemp = false);
5949 AccessResult CheckConstructorAccess(SourceLocation Loc,
5950 CXXConstructorDecl *D,
5951 DeclAccessPair FoundDecl,
5952 const InitializedEntity &Entity,
5953 const PartialDiagnostic &PDiag);
5954 AccessResult CheckDestructorAccess(SourceLocation Loc,
5955 CXXDestructorDecl *Dtor,
5956 const PartialDiagnostic &PDiag,
5957 QualType objectType = QualType());
5958 AccessResult CheckFriendAccess(NamedDecl *D);
5959 AccessResult CheckMemberAccess(SourceLocation UseLoc,
5960 CXXRecordDecl *NamingClass,
5961 DeclAccessPair Found);
5962 AccessResult CheckMemberOperatorAccess(SourceLocation Loc,
5963 Expr *ObjectExpr,
5964 Expr *ArgExpr,
5965 DeclAccessPair FoundDecl);
5966 AccessResult CheckAddressOfMemberAccess(Expr *OvlExpr,
5967 DeclAccessPair FoundDecl);
5968 AccessResult CheckBaseClassAccess(SourceLocation AccessLoc,
5969 QualType Base, QualType Derived,
5970 const CXXBasePath &Path,
5971 unsigned DiagID,
5972 bool ForceCheck = false,
5973 bool ForceUnprivileged = false);
5974 void CheckLookupAccess(const LookupResult &R);
5975 bool IsSimplyAccessible(NamedDecl *decl, DeclContext *Ctx);
5976 bool isSpecialMemberAccessibleForDeletion(CXXMethodDecl *decl,
5977 AccessSpecifier access,
5978 QualType objectType);
5979
5980 void HandleDependentAccessCheck(const DependentDiagnostic &DD,
5981 const MultiLevelTemplateArgumentList &TemplateArgs);
5982 void PerformDependentDiagnostics(const DeclContext *Pattern,
5983 const MultiLevelTemplateArgumentList &TemplateArgs);
5984
5985 void HandleDelayedAccessCheck(sema::DelayedDiagnostic &DD, Decl *Ctx);
5986
5987 /// \brief When true, access checking violations are treated as SFINAE
5988 /// failures rather than hard errors.
5989 bool AccessCheckingSFINAE;
5990
5991 enum AbstractDiagSelID {
5992 AbstractNone = -1,
5993 AbstractReturnType,
5994 AbstractParamType,
5995 AbstractVariableType,
5996 AbstractFieldType,
5997 AbstractIvarType,
5998 AbstractSynthesizedIvarType,
5999 AbstractArrayType
6000 };
6001
6002 bool isAbstractType(SourceLocation Loc, QualType T);
6003 bool RequireNonAbstractType(SourceLocation Loc, QualType T,
6004 TypeDiagnoser &Diagnoser);
6005 template <typename... Ts>
6006 bool RequireNonAbstractType(SourceLocation Loc, QualType T, unsigned DiagID,
6007 const Ts &...Args) {
6008 BoundTypeDiagnoser<Ts...> Diagnoser(DiagID, Args...);
6009 return RequireNonAbstractType(Loc, T, Diagnoser);
6010 }
6011
6012 void DiagnoseAbstractType(const CXXRecordDecl *RD);
6013
6014 //===--------------------------------------------------------------------===//
6015 // C++ Overloaded Operators [C++ 13.5]
6016 //
6017
6018 bool CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl);
6019
6020 bool CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl);
6021
6022 //===--------------------------------------------------------------------===//
6023 // C++ Templates [C++ 14]
6024 //
6025 void FilterAcceptableTemplateNames(LookupResult &R,
6026 bool AllowFunctionTemplates = true);
6027 bool hasAnyAcceptableTemplateNames(LookupResult &R,
6028 bool AllowFunctionTemplates = true);
6029
6030 void LookupTemplateName(LookupResult &R, Scope *S, CXXScopeSpec &SS,
6031 QualType ObjectType, bool EnteringContext,
6032 bool &MemberOfUnknownSpecialization);
6033
6034 TemplateNameKind isTemplateName(Scope *S,
6035 CXXScopeSpec &SS,
6036 bool hasTemplateKeyword,
6037 UnqualifiedId &Name,
6038 ParsedType ObjectType,
6039 bool EnteringContext,
6040 TemplateTy &Template,
6041 bool &MemberOfUnknownSpecialization);
6042
6043 /// Determine whether a particular identifier might be the name in a C++1z
6044 /// deduction-guide declaration.
6045 bool isDeductionGuideName(Scope *S, const IdentifierInfo &Name,
6046 SourceLocation NameLoc,
6047 ParsedTemplateTy *Template = nullptr);
6048
6049 bool DiagnoseUnknownTemplateName(const IdentifierInfo &II,
6050 SourceLocation IILoc,
6051 Scope *S,
6052 const CXXScopeSpec *SS,
6053 TemplateTy &SuggestedTemplate,
6054 TemplateNameKind &SuggestedKind);
6055
6056 bool DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation,
6057 NamedDecl *Instantiation,
6058 bool InstantiatedFromMember,
6059 const NamedDecl *Pattern,
6060 const NamedDecl *PatternDef,
6061 TemplateSpecializationKind TSK,
6062 bool Complain = true);
6063
6064 void DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl);
6065 TemplateDecl *AdjustDeclIfTemplate(Decl *&Decl);
6066
6067 Decl *ActOnTypeParameter(Scope *S, bool Typename,
6068 SourceLocation EllipsisLoc,
6069 SourceLocation KeyLoc,
6070 IdentifierInfo *ParamName,
6071 SourceLocation ParamNameLoc,
6072 unsigned Depth, unsigned Position,
6073 SourceLocation EqualLoc,
6074 ParsedType DefaultArg);
6075
6076 QualType CheckNonTypeTemplateParameterType(TypeSourceInfo *&TSI,
6077 SourceLocation Loc);
6078 QualType CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc);
6079
6080 Decl *ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
6081 unsigned Depth,
6082 unsigned Position,
6083 SourceLocation EqualLoc,
6084 Expr *DefaultArg);
6085 Decl *ActOnTemplateTemplateParameter(Scope *S,
6086 SourceLocation TmpLoc,
6087 TemplateParameterList *Params,
6088 SourceLocation EllipsisLoc,
6089 IdentifierInfo *ParamName,
6090 SourceLocation ParamNameLoc,
6091 unsigned Depth,
6092 unsigned Position,
6093 SourceLocation EqualLoc,
6094 ParsedTemplateArgument DefaultArg);
6095
6096 TemplateParameterList *
6097 ActOnTemplateParameterList(unsigned Depth,
6098 SourceLocation ExportLoc,
6099 SourceLocation TemplateLoc,
6100 SourceLocation LAngleLoc,
6101 ArrayRef<NamedDecl *> Params,
6102 SourceLocation RAngleLoc,
6103 Expr *RequiresClause);
6104
6105 /// \brief The context in which we are checking a template parameter list.
6106 enum TemplateParamListContext {
6107 TPC_ClassTemplate,
6108 TPC_VarTemplate,
6109 TPC_FunctionTemplate,
6110 TPC_ClassTemplateMember,
6111 TPC_FriendClassTemplate,
6112 TPC_FriendFunctionTemplate,
6113 TPC_FriendFunctionTemplateDefinition,
6114 TPC_TypeAliasTemplate
6115 };
6116
6117 bool CheckTemplateParameterList(TemplateParameterList *NewParams,
6118 TemplateParameterList *OldParams,
6119 TemplateParamListContext TPC);
6120 TemplateParameterList *MatchTemplateParametersToScopeSpecifier(
6121 SourceLocation DeclStartLoc, SourceLocation DeclLoc,
6122 const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId,
6123 ArrayRef<TemplateParameterList *> ParamLists,
6124 bool IsFriend, bool &IsMemberSpecialization, bool &Invalid);
6125
6126 DeclResult CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK,
6127 SourceLocation KWLoc, CXXScopeSpec &SS,
6128 IdentifierInfo *Name, SourceLocation NameLoc,
6129 AttributeList *Attr,
6130 TemplateParameterList *TemplateParams,
6131 AccessSpecifier AS,
6132 SourceLocation ModulePrivateLoc,
6133 SourceLocation FriendLoc,
6134 unsigned NumOuterTemplateParamLists,
6135 TemplateParameterList **OuterTemplateParamLists,
6136 SkipBodyInfo *SkipBody = nullptr);
6137
6138 TemplateArgumentLoc getTrivialTemplateArgumentLoc(const TemplateArgument &Arg,
6139 QualType NTTPType,
6140 SourceLocation Loc);
6141
6142 void translateTemplateArguments(const ASTTemplateArgsPtr &In,
6143 TemplateArgumentListInfo &Out);
6144
6145 void NoteAllFoundTemplates(TemplateName Name);
6146
6147 QualType CheckTemplateIdType(TemplateName Template,
6148 SourceLocation TemplateLoc,
6149 TemplateArgumentListInfo &TemplateArgs);
6150
6151 TypeResult
6152 ActOnTemplateIdType(CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
6153 TemplateTy Template, IdentifierInfo *TemplateII,
6154 SourceLocation TemplateIILoc,
6155 SourceLocation LAngleLoc,
6156 ASTTemplateArgsPtr TemplateArgs,
6157 SourceLocation RAngleLoc,
6158 bool IsCtorOrDtorName = false,
6159 bool IsClassName = false);
6160
6161 /// \brief Parsed an elaborated-type-specifier that refers to a template-id,
6162 /// such as \c class T::template apply<U>.
6163 TypeResult ActOnTagTemplateIdType(TagUseKind TUK,
6164 TypeSpecifierType TagSpec,
6165 SourceLocation TagLoc,
6166 CXXScopeSpec &SS,
6167 SourceLocation TemplateKWLoc,
6168 TemplateTy TemplateD,
6169 SourceLocation TemplateLoc,
6170 SourceLocation LAngleLoc,
6171 ASTTemplateArgsPtr TemplateArgsIn,
6172 SourceLocation RAngleLoc);
6173
6174 DeclResult ActOnVarTemplateSpecialization(
6175 Scope *S, Declarator &D, TypeSourceInfo *DI,
6176 SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams,
6177 StorageClass SC, bool IsPartialSpecialization);
6178
6179 DeclResult CheckVarTemplateId(VarTemplateDecl *Template,
6180 SourceLocation TemplateLoc,
6181 SourceLocation TemplateNameLoc,
6182 const TemplateArgumentListInfo &TemplateArgs);
6183
6184 ExprResult CheckVarTemplateId(const CXXScopeSpec &SS,
6185 const DeclarationNameInfo &NameInfo,
6186 VarTemplateDecl *Template,
6187 SourceLocation TemplateLoc,
6188 const TemplateArgumentListInfo *TemplateArgs);
6189
6190 ExprResult BuildTemplateIdExpr(const CXXScopeSpec &SS,
6191 SourceLocation TemplateKWLoc,
6192 LookupResult &R,
6193 bool RequiresADL,
6194 const TemplateArgumentListInfo *TemplateArgs);
6195
6196 ExprResult BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS,
6197 SourceLocation TemplateKWLoc,
6198 const DeclarationNameInfo &NameInfo,
6199 const TemplateArgumentListInfo *TemplateArgs);
6200
6201 TemplateNameKind ActOnDependentTemplateName(
6202 Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
6203 UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext,
6204 TemplateTy &Template, bool AllowInjectedClassName = false);
6205
6206 DeclResult
6207 ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK,
6208 SourceLocation KWLoc,
6209 SourceLocation ModulePrivateLoc,
6210 TemplateIdAnnotation &TemplateId,
6211 AttributeList *Attr,
6212 MultiTemplateParamsArg TemplateParameterLists,
6213 SkipBodyInfo *SkipBody = nullptr);
6214
6215 bool CheckTemplatePartialSpecializationArgs(SourceLocation Loc,
6216 TemplateDecl *PrimaryTemplate,
6217 unsigned NumExplicitArgs,
6218 ArrayRef<TemplateArgument> Args);
6219 void CheckTemplatePartialSpecialization(
6220 ClassTemplatePartialSpecializationDecl *Partial);
6221 void CheckTemplatePartialSpecialization(
6222 VarTemplatePartialSpecializationDecl *Partial);
6223
6224 Decl *ActOnTemplateDeclarator(Scope *S,
6225 MultiTemplateParamsArg TemplateParameterLists,
6226 Declarator &D);
6227
6228 bool
6229 CheckSpecializationInstantiationRedecl(SourceLocation NewLoc,
6230 TemplateSpecializationKind NewTSK,
6231 NamedDecl *PrevDecl,
6232 TemplateSpecializationKind PrevTSK,
6233 SourceLocation PrevPtOfInstantiation,
6234 bool &SuppressNew);
6235
6236 bool CheckDependentFunctionTemplateSpecialization(FunctionDecl *FD,
6237 const TemplateArgumentListInfo &ExplicitTemplateArgs,
6238 LookupResult &Previous);
6239
6240 bool CheckFunctionTemplateSpecialization(FunctionDecl *FD,
6241 TemplateArgumentListInfo *ExplicitTemplateArgs,
6242 LookupResult &Previous);
6243 bool CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous);
6244 void CompleteMemberSpecialization(NamedDecl *Member, LookupResult &Previous);
6245
6246 DeclResult
6247 ActOnExplicitInstantiation(Scope *S,
6248 SourceLocation ExternLoc,
6249 SourceLocation TemplateLoc,
6250 unsigned TagSpec,
6251 SourceLocation KWLoc,
6252 const CXXScopeSpec &SS,
6253 TemplateTy Template,
6254 SourceLocation TemplateNameLoc,
6255 SourceLocation LAngleLoc,
6256 ASTTemplateArgsPtr TemplateArgs,
6257 SourceLocation RAngleLoc,
6258 AttributeList *Attr);
6259
6260 DeclResult
6261 ActOnExplicitInstantiation(Scope *S,
6262 SourceLocation ExternLoc,
6263 SourceLocation TemplateLoc,
6264 unsigned TagSpec,
6265 SourceLocation KWLoc,
6266 CXXScopeSpec &SS,
6267 IdentifierInfo *Name,
6268 SourceLocation NameLoc,
6269 AttributeList *Attr);
6270
6271 DeclResult ActOnExplicitInstantiation(Scope *S,
6272 SourceLocation ExternLoc,
6273 SourceLocation TemplateLoc,
6274 Declarator &D);
6275
6276 TemplateArgumentLoc
6277 SubstDefaultTemplateArgumentIfAvailable(TemplateDecl *Template,
6278 SourceLocation TemplateLoc,
6279 SourceLocation RAngleLoc,
6280 Decl *Param,
6281 SmallVectorImpl<TemplateArgument>
6282 &Converted,
6283 bool &HasDefaultArg);
6284
6285 /// \brief Specifies the context in which a particular template
6286 /// argument is being checked.
6287 enum CheckTemplateArgumentKind {
6288 /// \brief The template argument was specified in the code or was
6289 /// instantiated with some deduced template arguments.
6290 CTAK_Specified,
6291
6292 /// \brief The template argument was deduced via template argument
6293 /// deduction.
6294 CTAK_Deduced,
6295
6296 /// \brief The template argument was deduced from an array bound
6297 /// via template argument deduction.
6298 CTAK_DeducedFromArrayBound
6299 };
6300
6301 bool CheckTemplateArgument(NamedDecl *Param,
6302 TemplateArgumentLoc &Arg,
6303 NamedDecl *Template,
6304 SourceLocation TemplateLoc,
6305 SourceLocation RAngleLoc,
6306 unsigned ArgumentPackIndex,
6307 SmallVectorImpl<TemplateArgument> &Converted,
6308 CheckTemplateArgumentKind CTAK = CTAK_Specified);
6309
6310 /// \brief Check that the given template arguments can be be provided to
6311 /// the given template, converting the arguments along the way.
6312 ///
6313 /// \param Template The template to which the template arguments are being
6314 /// provided.
6315 ///
6316 /// \param TemplateLoc The location of the template name in the source.
6317 ///
6318 /// \param TemplateArgs The list of template arguments. If the template is
6319 /// a template template parameter, this function may extend the set of
6320 /// template arguments to also include substituted, defaulted template
6321 /// arguments.
6322 ///
6323 /// \param PartialTemplateArgs True if the list of template arguments is
6324 /// intentionally partial, e.g., because we're checking just the initial
6325 /// set of template arguments.
6326 ///
6327 /// \param Converted Will receive the converted, canonicalized template
6328 /// arguments.
6329 ///
6330 /// \param UpdateArgsWithConversions If \c true, update \p TemplateArgs to
6331 /// contain the converted forms of the template arguments as written.
6332 /// Otherwise, \p TemplateArgs will not be modified.
6333 ///
6334 /// \returns true if an error occurred, false otherwise.
6335 bool CheckTemplateArgumentList(TemplateDecl *Template,
6336 SourceLocation TemplateLoc,
6337 TemplateArgumentListInfo &TemplateArgs,
6338 bool PartialTemplateArgs,
6339 SmallVectorImpl<TemplateArgument> &Converted,
6340 bool UpdateArgsWithConversions = true);
6341
6342 bool CheckTemplateTypeArgument(TemplateTypeParmDecl *Param,
6343 TemplateArgumentLoc &Arg,
6344 SmallVectorImpl<TemplateArgument> &Converted);
6345
6346 bool CheckTemplateArgument(TemplateTypeParmDecl *Param,
6347 TypeSourceInfo *Arg);
6348 ExprResult CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
6349 QualType InstantiatedParamType, Expr *Arg,
6350 TemplateArgument &Converted,
6351 CheckTemplateArgumentKind CTAK = CTAK_Specified);
6352 bool CheckTemplateArgument(TemplateTemplateParmDecl *Param,
6353 TemplateArgumentLoc &Arg,
6354 unsigned ArgumentPackIndex);
6355
6356 ExprResult
6357 BuildExpressionFromDeclTemplateArgument(const TemplateArgument &Arg,
6358 QualType ParamType,
6359 SourceLocation Loc);
6360 ExprResult
6361 BuildExpressionFromIntegralTemplateArgument(const TemplateArgument &Arg,
6362 SourceLocation Loc);
6363
6364 /// \brief Enumeration describing how template parameter lists are compared
6365 /// for equality.
6366 enum TemplateParameterListEqualKind {
6367 /// \brief We are matching the template parameter lists of two templates
6368 /// that might be redeclarations.
6369 ///
6370 /// \code
6371 /// template<typename T> struct X;
6372 /// template<typename T> struct X;
6373 /// \endcode
6374 TPL_TemplateMatch,
6375
6376 /// \brief We are matching the template parameter lists of two template
6377 /// template parameters as part of matching the template parameter lists
6378 /// of two templates that might be redeclarations.
6379 ///
6380 /// \code
6381 /// template<template<int I> class TT> struct X;
6382 /// template<template<int Value> class Other> struct X;
6383 /// \endcode
6384 TPL_TemplateTemplateParmMatch,
6385
6386 /// \brief We are matching the template parameter lists of a template
6387 /// template argument against the template parameter lists of a template
6388 /// template parameter.
6389 ///
6390 /// \code
6391 /// template<template<int Value> class Metafun> struct X;
6392 /// template<int Value> struct integer_c;
6393 /// X<integer_c> xic;
6394 /// \endcode
6395 TPL_TemplateTemplateArgumentMatch
6396 };
6397
6398 bool TemplateParameterListsAreEqual(TemplateParameterList *New,
6399 TemplateParameterList *Old,
6400 bool Complain,
6401 TemplateParameterListEqualKind Kind,
6402 SourceLocation TemplateArgLoc
6403 = SourceLocation());
6404
6405 bool CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams);
6406
6407 /// \brief Called when the parser has parsed a C++ typename
6408 /// specifier, e.g., "typename T::type".
6409 ///
6410 /// \param S The scope in which this typename type occurs.
6411 /// \param TypenameLoc the location of the 'typename' keyword
6412 /// \param SS the nested-name-specifier following the typename (e.g., 'T::').
6413 /// \param II the identifier we're retrieving (e.g., 'type' in the example).
6414 /// \param IdLoc the location of the identifier.
6415 TypeResult
6416 ActOnTypenameType(Scope *S, SourceLocation TypenameLoc,
6417 const CXXScopeSpec &SS, const IdentifierInfo &II,
6418 SourceLocation IdLoc);
6419
6420 /// \brief Called when the parser has parsed a C++ typename
6421 /// specifier that ends in a template-id, e.g.,
6422 /// "typename MetaFun::template apply<T1, T2>".
6423 ///
6424 /// \param S The scope in which this typename type occurs.
6425 /// \param TypenameLoc the location of the 'typename' keyword
6426 /// \param SS the nested-name-specifier following the typename (e.g., 'T::').
6427 /// \param TemplateLoc the location of the 'template' keyword, if any.
6428 /// \param TemplateName The template name.
6429 /// \param TemplateII The identifier used to name the template.
6430 /// \param TemplateIILoc The location of the template name.
6431 /// \param LAngleLoc The location of the opening angle bracket ('<').
6432 /// \param TemplateArgs The template arguments.
6433 /// \param RAngleLoc The location of the closing angle bracket ('>').
6434 TypeResult
6435 ActOnTypenameType(Scope *S, SourceLocation TypenameLoc,
6436 const CXXScopeSpec &SS,
6437 SourceLocation TemplateLoc,
6438 TemplateTy TemplateName,
6439 IdentifierInfo *TemplateII,
6440 SourceLocation TemplateIILoc,
6441 SourceLocation LAngleLoc,
6442 ASTTemplateArgsPtr TemplateArgs,
6443 SourceLocation RAngleLoc);
6444
6445 QualType CheckTypenameType(ElaboratedTypeKeyword Keyword,
6446 SourceLocation KeywordLoc,
6447 NestedNameSpecifierLoc QualifierLoc,
6448 const IdentifierInfo &II,
6449 SourceLocation IILoc);
6450
6451 TypeSourceInfo *RebuildTypeInCurrentInstantiation(TypeSourceInfo *T,
6452 SourceLocation Loc,
6453 DeclarationName Name);
6454 bool RebuildNestedNameSpecifierInCurrentInstantiation(CXXScopeSpec &SS);
6455
6456 ExprResult RebuildExprInCurrentInstantiation(Expr *E);
6457 bool RebuildTemplateParamsInCurrentInstantiation(
6458 TemplateParameterList *Params);
6459
6460 std::string
6461 getTemplateArgumentBindingsText(const TemplateParameterList *Params,
6462 const TemplateArgumentList &Args);
6463
6464 std::string
6465 getTemplateArgumentBindingsText(const TemplateParameterList *Params,
6466 const TemplateArgument *Args,
6467 unsigned NumArgs);
6468
6469 //===--------------------------------------------------------------------===//
6470 // C++ Variadic Templates (C++0x [temp.variadic])
6471 //===--------------------------------------------------------------------===//
6472
6473 /// Determine whether an unexpanded parameter pack might be permitted in this
6474 /// location. Useful for error recovery.
6475 bool isUnexpandedParameterPackPermitted();
6476
6477 /// \brief The context in which an unexpanded parameter pack is
6478 /// being diagnosed.
6479 ///
6480 /// Note that the values of this enumeration line up with the first
6481 /// argument to the \c err_unexpanded_parameter_pack diagnostic.
6482 enum UnexpandedParameterPackContext {
6483 /// \brief An arbitrary expression.
6484 UPPC_Expression = 0,
6485
6486 /// \brief The base type of a class type.
6487 UPPC_BaseType,
6488
6489 /// \brief The type of an arbitrary declaration.
6490 UPPC_DeclarationType,
6491
6492 /// \brief The type of a data member.
6493 UPPC_DataMemberType,
6494
6495 /// \brief The size of a bit-field.
6496 UPPC_BitFieldWidth,
6497
6498 /// \brief The expression in a static assertion.
6499 UPPC_StaticAssertExpression,
6500
6501 /// \brief The fixed underlying type of an enumeration.
6502 UPPC_FixedUnderlyingType,
6503
6504 /// \brief The enumerator value.
6505 UPPC_EnumeratorValue,
6506
6507 /// \brief A using declaration.
6508 UPPC_UsingDeclaration,
6509
6510 /// \brief A friend declaration.
6511 UPPC_FriendDeclaration,
6512
6513 /// \brief A declaration qualifier.
6514 UPPC_DeclarationQualifier,
6515
6516 /// \brief An initializer.
6517 UPPC_Initializer,
6518
6519 /// \brief A default argument.
6520 UPPC_DefaultArgument,
6521
6522 /// \brief The type of a non-type template parameter.
6523 UPPC_NonTypeTemplateParameterType,
6524
6525 /// \brief The type of an exception.
6526 UPPC_ExceptionType,
6527
6528 /// \brief Partial specialization.
6529 UPPC_PartialSpecialization,
6530
6531 /// \brief Microsoft __if_exists.
6532 UPPC_IfExists,
6533
6534 /// \brief Microsoft __if_not_exists.
6535 UPPC_IfNotExists,
6536
6537 /// \brief Lambda expression.
6538 UPPC_Lambda,
6539
6540 /// \brief Block expression,
6541 UPPC_Block
6542 };
6543
6544 /// \brief Diagnose unexpanded parameter packs.
6545 ///
6546 /// \param Loc The location at which we should emit the diagnostic.
6547 ///
6548 /// \param UPPC The context in which we are diagnosing unexpanded
6549 /// parameter packs.
6550 ///
6551 /// \param Unexpanded the set of unexpanded parameter packs.
6552 ///
6553 /// \returns true if an error occurred, false otherwise.
6554 bool DiagnoseUnexpandedParameterPacks(SourceLocation Loc,
6555 UnexpandedParameterPackContext UPPC,
6556 ArrayRef<UnexpandedParameterPack> Unexpanded);
6557
6558 /// \brief If the given type contains an unexpanded parameter pack,
6559 /// diagnose the error.
6560 ///
6561 /// \param Loc The source location where a diagnostc should be emitted.
6562 ///
6563 /// \param T The type that is being checked for unexpanded parameter
6564 /// packs.
6565 ///
6566 /// \returns true if an error occurred, false otherwise.
6567 bool DiagnoseUnexpandedParameterPack(SourceLocation Loc, TypeSourceInfo *T,
6568 UnexpandedParameterPackContext UPPC);
6569
6570 /// \brief If the given expression contains an unexpanded parameter
6571 /// pack, diagnose the error.
6572 ///
6573 /// \param E The expression that is being checked for unexpanded
6574 /// parameter packs.
6575 ///
6576 /// \returns true if an error occurred, false otherwise.
6577 bool DiagnoseUnexpandedParameterPack(Expr *E,
6578 UnexpandedParameterPackContext UPPC = UPPC_Expression);
6579
6580 /// \brief If the given nested-name-specifier contains an unexpanded
6581 /// parameter pack, diagnose the error.
6582 ///
6583 /// \param SS The nested-name-specifier that is being checked for
6584 /// unexpanded parameter packs.
6585 ///
6586 /// \returns true if an error occurred, false otherwise.
6587 bool DiagnoseUnexpandedParameterPack(const CXXScopeSpec &SS,
6588 UnexpandedParameterPackContext UPPC);
6589
6590 /// \brief If the given name contains an unexpanded parameter pack,
6591 /// diagnose the error.
6592 ///
6593 /// \param NameInfo The name (with source location information) that
6594 /// is being checked for unexpanded parameter packs.
6595 ///
6596 /// \returns true if an error occurred, false otherwise.
6597 bool DiagnoseUnexpandedParameterPack(const DeclarationNameInfo &NameInfo,
6598 UnexpandedParameterPackContext UPPC);
6599
6600 /// \brief If the given template name contains an unexpanded parameter pack,
6601 /// diagnose the error.
6602 ///
6603 /// \param Loc The location of the template name.
6604 ///
6605 /// \param Template The template name that is being checked for unexpanded
6606 /// parameter packs.
6607 ///
6608 /// \returns true if an error occurred, false otherwise.
6609 bool DiagnoseUnexpandedParameterPack(SourceLocation Loc,
6610 TemplateName Template,
6611 UnexpandedParameterPackContext UPPC);
6612
6613 /// \brief If the given template argument contains an unexpanded parameter
6614 /// pack, diagnose the error.
6615 ///
6616 /// \param Arg The template argument that is being checked for unexpanded
6617 /// parameter packs.
6618 ///
6619 /// \returns true if an error occurred, false otherwise.
6620 bool DiagnoseUnexpandedParameterPack(TemplateArgumentLoc Arg,
6621 UnexpandedParameterPackContext UPPC);
6622
6623 /// \brief Collect the set of unexpanded parameter packs within the given
6624 /// template argument.
6625 ///
6626 /// \param Arg The template argument that will be traversed to find
6627 /// unexpanded parameter packs.
6628 void collectUnexpandedParameterPacks(TemplateArgument Arg,
6629 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
6630
6631 /// \brief Collect the set of unexpanded parameter packs within the given
6632 /// template argument.
6633 ///
6634 /// \param Arg The template argument that will be traversed to find
6635 /// unexpanded parameter packs.
6636 void collectUnexpandedParameterPacks(TemplateArgumentLoc Arg,
6637 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
6638
6639 /// \brief Collect the set of unexpanded parameter packs within the given
6640 /// type.
6641 ///
6642 /// \param T The type that will be traversed to find
6643 /// unexpanded parameter packs.
6644 void collectUnexpandedParameterPacks(QualType T,
6645 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
6646
6647 /// \brief Collect the set of unexpanded parameter packs within the given
6648 /// type.
6649 ///
6650 /// \param TL The type that will be traversed to find
6651 /// unexpanded parameter packs.
6652 void collectUnexpandedParameterPacks(TypeLoc TL,
6653 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
6654
6655 /// \brief Collect the set of unexpanded parameter packs within the given
6656 /// nested-name-specifier.
6657 ///
6658 /// \param NNS The nested-name-specifier that will be traversed to find
6659 /// unexpanded parameter packs.
6660 void collectUnexpandedParameterPacks(NestedNameSpecifierLoc NNS,
6661 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
6662
6663 /// \brief Collect the set of unexpanded parameter packs within the given
6664 /// name.
6665 ///
6666 /// \param NameInfo The name that will be traversed to find
6667 /// unexpanded parameter packs.
6668 void collectUnexpandedParameterPacks(const DeclarationNameInfo &NameInfo,
6669 SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
6670
6671 /// \brief Invoked when parsing a template argument followed by an
6672 /// ellipsis, which creates a pack expansion.
6673 ///
6674 /// \param Arg The template argument preceding the ellipsis, which
6675 /// may already be invalid.
6676 ///
6677 /// \param EllipsisLoc The location of the ellipsis.
6678 ParsedTemplateArgument ActOnPackExpansion(const ParsedTemplateArgument &Arg,
6679 SourceLocation EllipsisLoc);
6680
6681 /// \brief Invoked when parsing a type followed by an ellipsis, which
6682 /// creates a pack expansion.
6683 ///
6684 /// \param Type The type preceding the ellipsis, which will become
6685 /// the pattern of the pack expansion.
6686 ///
6687 /// \param EllipsisLoc The location of the ellipsis.
6688 TypeResult ActOnPackExpansion(ParsedType Type, SourceLocation EllipsisLoc);
6689
6690 /// \brief Construct a pack expansion type from the pattern of the pack
6691 /// expansion.
6692 TypeSourceInfo *CheckPackExpansion(TypeSourceInfo *Pattern,
6693 SourceLocation EllipsisLoc,
6694 Optional<unsigned> NumExpansions);
6695
6696 /// \brief Construct a pack expansion type from the pattern of the pack
6697 /// expansion.
6698 QualType CheckPackExpansion(QualType Pattern,
6699 SourceRange PatternRange,
6700 SourceLocation EllipsisLoc,
6701 Optional<unsigned> NumExpansions);
6702
6703 /// \brief Invoked when parsing an expression followed by an ellipsis, which
6704 /// creates a pack expansion.
6705 ///
6706 /// \param Pattern The expression preceding the ellipsis, which will become
6707 /// the pattern of the pack expansion.
6708 ///
6709 /// \param EllipsisLoc The location of the ellipsis.
6710 ExprResult ActOnPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc);
6711
6712 /// \brief Invoked when parsing an expression followed by an ellipsis, which
6713 /// creates a pack expansion.
6714 ///
6715 /// \param Pattern The expression preceding the ellipsis, which will become
6716 /// the pattern of the pack expansion.
6717 ///
6718 /// \param EllipsisLoc The location of the ellipsis.
6719 ExprResult CheckPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc,
6720 Optional<unsigned> NumExpansions);
6721
6722 /// \brief Determine whether we could expand a pack expansion with the
6723 /// given set of parameter packs into separate arguments by repeatedly
6724 /// transforming the pattern.
6725 ///
6726 /// \param EllipsisLoc The location of the ellipsis that identifies the
6727 /// pack expansion.
6728 ///
6729 /// \param PatternRange The source range that covers the entire pattern of
6730 /// the pack expansion.
6731 ///
6732 /// \param Unexpanded The set of unexpanded parameter packs within the
6733 /// pattern.
6734 ///
6735 /// \param ShouldExpand Will be set to \c true if the transformer should
6736 /// expand the corresponding pack expansions into separate arguments. When
6737 /// set, \c NumExpansions must also be set.
6738 ///
6739 /// \param RetainExpansion Whether the caller should add an unexpanded
6740 /// pack expansion after all of the expanded arguments. This is used
6741 /// when extending explicitly-specified template argument packs per
6742 /// C++0x [temp.arg.explicit]p9.
6743 ///
6744 /// \param NumExpansions The number of separate arguments that will be in
6745 /// the expanded form of the corresponding pack expansion. This is both an
6746 /// input and an output parameter, which can be set by the caller if the
6747 /// number of expansions is known a priori (e.g., due to a prior substitution)
6748 /// and will be set by the callee when the number of expansions is known.
6749 /// The callee must set this value when \c ShouldExpand is \c true; it may
6750 /// set this value in other cases.
6751 ///
6752 /// \returns true if an error occurred (e.g., because the parameter packs
6753 /// are to be instantiated with arguments of different lengths), false
6754 /// otherwise. If false, \c ShouldExpand (and possibly \c NumExpansions)
6755 /// must be set.
6756 bool CheckParameterPacksForExpansion(SourceLocation EllipsisLoc,
6757 SourceRange PatternRange,
6758 ArrayRef<UnexpandedParameterPack> Unexpanded,
6759 const MultiLevelTemplateArgumentList &TemplateArgs,
6760 bool &ShouldExpand,
6761 bool &RetainExpansion,
6762 Optional<unsigned> &NumExpansions);
6763
6764 /// \brief Determine the number of arguments in the given pack expansion
6765 /// type.
6766 ///
6767 /// This routine assumes that the number of arguments in the expansion is
6768 /// consistent across all of the unexpanded parameter packs in its pattern.
6769 ///
6770 /// Returns an empty Optional if the type can't be expanded.
6771 Optional<unsigned> getNumArgumentsInExpansion(QualType T,
6772 const MultiLevelTemplateArgumentList &TemplateArgs);
6773
6774 /// \brief Determine whether the given declarator contains any unexpanded
6775 /// parameter packs.
6776 ///
6777 /// This routine is used by the parser to disambiguate function declarators
6778 /// with an ellipsis prior to the ')', e.g.,
6779 ///
6780 /// \code
6781 /// void f(T...);
6782 /// \endcode
6783 ///
6784 /// To determine whether we have an (unnamed) function parameter pack or
6785 /// a variadic function.
6786 ///
6787 /// \returns true if the declarator contains any unexpanded parameter packs,
6788 /// false otherwise.
6789 bool containsUnexpandedParameterPacks(Declarator &D);
6790
6791 /// \brief Returns the pattern of the pack expansion for a template argument.
6792 ///
6793 /// \param OrigLoc The template argument to expand.
6794 ///
6795 /// \param Ellipsis Will be set to the location of the ellipsis.
6796 ///
6797 /// \param NumExpansions Will be set to the number of expansions that will
6798 /// be generated from this pack expansion, if known a priori.
6799 TemplateArgumentLoc getTemplateArgumentPackExpansionPattern(
6800 TemplateArgumentLoc OrigLoc,
6801 SourceLocation &Ellipsis,
6802 Optional<unsigned> &NumExpansions) const;
6803
6804 /// Given a template argument that contains an unexpanded parameter pack, but
6805 /// which has already been substituted, attempt to determine the number of
6806 /// elements that will be produced once this argument is fully-expanded.
6807 ///
6808 /// This is intended for use when transforming 'sizeof...(Arg)' in order to
6809 /// avoid actually expanding the pack where possible.
6810 Optional<unsigned> getFullyPackExpandedSize(TemplateArgument Arg);
6811
6812 //===--------------------------------------------------------------------===//
6813 // C++ Template Argument Deduction (C++ [temp.deduct])
6814 //===--------------------------------------------------------------------===//
6815
6816 /// Adjust the type \p ArgFunctionType to match the calling convention,
6817 /// noreturn, and optionally the exception specification of \p FunctionType.
6818 /// Deduction often wants to ignore these properties when matching function
6819 /// types.
6820 QualType adjustCCAndNoReturn(QualType ArgFunctionType, QualType FunctionType,
6821 bool AdjustExceptionSpec = false);
6822
6823 /// \brief Describes the result of template argument deduction.
6824 ///
6825 /// The TemplateDeductionResult enumeration describes the result of
6826 /// template argument deduction, as returned from
6827 /// DeduceTemplateArguments(). The separate TemplateDeductionInfo
6828 /// structure provides additional information about the results of
6829 /// template argument deduction, e.g., the deduced template argument
6830 /// list (if successful) or the specific template parameters or
6831 /// deduced arguments that were involved in the failure.
6832 enum TemplateDeductionResult {
6833 /// \brief Template argument deduction was successful.
6834 TDK_Success = 0,
6835 /// \brief The declaration was invalid; do nothing.
6836 TDK_Invalid,
6837 /// \brief Template argument deduction exceeded the maximum template
6838 /// instantiation depth (which has already been diagnosed).
6839 TDK_InstantiationDepth,
6840 /// \brief Template argument deduction did not deduce a value
6841 /// for every template parameter.
6842 TDK_Incomplete,
6843 /// \brief Template argument deduction produced inconsistent
6844 /// deduced values for the given template parameter.
6845 TDK_Inconsistent,
6846 /// \brief Template argument deduction failed due to inconsistent
6847 /// cv-qualifiers on a template parameter type that would
6848 /// otherwise be deduced, e.g., we tried to deduce T in "const T"
6849 /// but were given a non-const "X".
6850 TDK_Underqualified,
6851 /// \brief Substitution of the deduced template argument values
6852 /// resulted in an error.
6853 TDK_SubstitutionFailure,
6854 /// \brief After substituting deduced template arguments, a dependent
6855 /// parameter type did not match the corresponding argument.
6856 TDK_DeducedMismatch,
6857 /// \brief After substituting deduced template arguments, an element of
6858 /// a dependent parameter type did not match the corresponding element
6859 /// of the corresponding argument (when deducing from an initializer list).
6860 TDK_DeducedMismatchNested,
6861 /// \brief A non-depnedent component of the parameter did not match the
6862 /// corresponding component of the argument.
6863 TDK_NonDeducedMismatch,
6864 /// \brief When performing template argument deduction for a function
6865 /// template, there were too many call arguments.
6866 TDK_TooManyArguments,
6867 /// \brief When performing template argument deduction for a function
6868 /// template, there were too few call arguments.
6869 TDK_TooFewArguments,
6870 /// \brief The explicitly-specified template arguments were not valid
6871 /// template arguments for the given template.
6872 TDK_InvalidExplicitArguments,
6873 /// \brief Checking non-dependent argument conversions failed.
6874 TDK_NonDependentConversionFailure,
6875 /// \brief Deduction failed; that's all we know.
6876 TDK_MiscellaneousDeductionFailure,
6877 /// \brief CUDA Target attributes do not match.
6878 TDK_CUDATargetMismatch
6879 };
6880
6881 TemplateDeductionResult
6882 DeduceTemplateArguments(ClassTemplatePartialSpecializationDecl *Partial,
6883 const TemplateArgumentList &TemplateArgs,
6884 sema::TemplateDeductionInfo &Info);
6885
6886 TemplateDeductionResult
6887 DeduceTemplateArguments(VarTemplatePartialSpecializationDecl *Partial,
6888 const TemplateArgumentList &TemplateArgs,
6889 sema::TemplateDeductionInfo &Info);
6890
6891 TemplateDeductionResult SubstituteExplicitTemplateArguments(
6892 FunctionTemplateDecl *FunctionTemplate,
6893 TemplateArgumentListInfo &ExplicitTemplateArgs,
6894 SmallVectorImpl<DeducedTemplateArgument> &Deduced,
6895 SmallVectorImpl<QualType> &ParamTypes, QualType *FunctionType,
6896 sema::TemplateDeductionInfo &Info);
6897
6898 /// brief A function argument from which we performed template argument
6899 // deduction for a call.
6900 struct OriginalCallArg {
6901 OriginalCallArg(QualType OriginalParamType, bool DecomposedParam,
6902 unsigned ArgIdx, QualType OriginalArgType)
6903 : OriginalParamType(OriginalParamType),
6904 DecomposedParam(DecomposedParam), ArgIdx(ArgIdx),
6905 OriginalArgType(OriginalArgType) {}
6906
6907 QualType OriginalParamType;
6908 bool DecomposedParam;
6909 unsigned ArgIdx;
6910 QualType OriginalArgType;
6911 };
6912
6913 TemplateDeductionResult FinishTemplateArgumentDeduction(
6914 FunctionTemplateDecl *FunctionTemplate,
6915 SmallVectorImpl<DeducedTemplateArgument> &Deduced,
6916 unsigned NumExplicitlySpecified, FunctionDecl *&Specialization,
6917 sema::TemplateDeductionInfo &Info,
6918 SmallVectorImpl<OriginalCallArg> const *OriginalCallArgs = nullptr,
6919 bool PartialOverloading = false,
6920 llvm::function_ref<bool()> CheckNonDependent = []{ return false; });
6921
6922 TemplateDeductionResult DeduceTemplateArguments(
6923 FunctionTemplateDecl *FunctionTemplate,
6924 TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args,
6925 FunctionDecl *&Specialization, sema::TemplateDeductionInfo &Info,
6926 bool PartialOverloading,
6927 llvm::function_ref<bool(ArrayRef<QualType>)> CheckNonDependent);
6928
6929 TemplateDeductionResult
6930 DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
6931 TemplateArgumentListInfo *ExplicitTemplateArgs,
6932 QualType ArgFunctionType,
6933 FunctionDecl *&Specialization,
6934 sema::TemplateDeductionInfo &Info,
6935 bool IsAddressOfFunction = false);
6936
6937 TemplateDeductionResult
6938 DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
6939 QualType ToType,
6940 CXXConversionDecl *&Specialization,
6941 sema::TemplateDeductionInfo &Info);
6942
6943 TemplateDeductionResult
6944 DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
6945 TemplateArgumentListInfo *ExplicitTemplateArgs,
6946 FunctionDecl *&Specialization,
6947 sema::TemplateDeductionInfo &Info,
6948 bool IsAddressOfFunction = false);
6949
6950 /// \brief Substitute Replacement for \p auto in \p TypeWithAuto
6951 QualType SubstAutoType(QualType TypeWithAuto, QualType Replacement);
6952 /// \brief Substitute Replacement for auto in TypeWithAuto
6953 TypeSourceInfo* SubstAutoTypeSourceInfo(TypeSourceInfo *TypeWithAuto,
6954 QualType Replacement);
6955 /// \brief Completely replace the \c auto in \p TypeWithAuto by
6956 /// \p Replacement. This does not retain any \c auto type sugar.
6957 QualType ReplaceAutoType(QualType TypeWithAuto, QualType Replacement);
6958
6959 /// \brief Result type of DeduceAutoType.
6960 enum DeduceAutoResult {
6961 DAR_Succeeded,
6962 DAR_Failed,
6963 DAR_FailedAlreadyDiagnosed
6964 };
6965
6966 DeduceAutoResult
6967 DeduceAutoType(TypeSourceInfo *AutoType, Expr *&Initializer, QualType &Result,
6968 Optional<unsigned> DependentDeductionDepth = None);
6969 DeduceAutoResult
6970 DeduceAutoType(TypeLoc AutoTypeLoc, Expr *&Initializer, QualType &Result,
6971 Optional<unsigned> DependentDeductionDepth = None);
6972 void DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init);
6973 bool DeduceReturnType(FunctionDecl *FD, SourceLocation Loc,
6974 bool Diagnose = true);
6975
6976 /// \brief Declare implicit deduction guides for a class template if we've
6977 /// not already done so.
6978 void DeclareImplicitDeductionGuides(TemplateDecl *Template,
6979 SourceLocation Loc);
6980
6981 QualType DeduceTemplateSpecializationFromInitializer(
6982 TypeSourceInfo *TInfo, const InitializedEntity &Entity,
6983 const InitializationKind &Kind, MultiExprArg Init);
6984
6985 QualType deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name,
6986 QualType Type, TypeSourceInfo *TSI,
6987 SourceRange Range, bool DirectInit,
6988 Expr *Init);
6989
6990 TypeLoc getReturnTypeLoc(FunctionDecl *FD) const;
6991
6992 bool DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD,
6993 SourceLocation ReturnLoc,
6994 Expr *&RetExpr, AutoType *AT);
6995
6996 FunctionTemplateDecl *getMoreSpecializedTemplate(FunctionTemplateDecl *FT1,
6997 FunctionTemplateDecl *FT2,
6998 SourceLocation Loc,
6999 TemplatePartialOrderingContext TPOC,
7000 unsigned NumCallArguments1,
7001 unsigned NumCallArguments2);
7002 UnresolvedSetIterator
7003 getMostSpecialized(UnresolvedSetIterator SBegin, UnresolvedSetIterator SEnd,
7004 TemplateSpecCandidateSet &FailedCandidates,
7005 SourceLocation Loc,
7006 const PartialDiagnostic &NoneDiag,
7007 const PartialDiagnostic &AmbigDiag,
7008 const PartialDiagnostic &CandidateDiag,
7009 bool Complain = true, QualType TargetType = QualType());
7010
7011 ClassTemplatePartialSpecializationDecl *
7012 getMoreSpecializedPartialSpecialization(
7013 ClassTemplatePartialSpecializationDecl *PS1,
7014 ClassTemplatePartialSpecializationDecl *PS2,
7015 SourceLocation Loc);
7016
7017 bool isMoreSpecializedThanPrimary(ClassTemplatePartialSpecializationDecl *T,
7018 sema::TemplateDeductionInfo &Info);
7019
7020 VarTemplatePartialSpecializationDecl *getMoreSpecializedPartialSpecialization(
7021 VarTemplatePartialSpecializationDecl *PS1,
7022 VarTemplatePartialSpecializationDecl *PS2, SourceLocation Loc);
7023
7024 bool isMoreSpecializedThanPrimary(VarTemplatePartialSpecializationDecl *T,
7025 sema::TemplateDeductionInfo &Info);
7026
7027 bool isTemplateTemplateParameterAtLeastAsSpecializedAs(
7028 TemplateParameterList *P, TemplateDecl *AArg, SourceLocation Loc);
7029
7030 void MarkUsedTemplateParameters(const TemplateArgumentList &TemplateArgs,
7031 bool OnlyDeduced,
7032 unsigned Depth,
7033 llvm::SmallBitVector &Used);
7034 void MarkDeducedTemplateParameters(
7035 const FunctionTemplateDecl *FunctionTemplate,
7036 llvm::SmallBitVector &Deduced) {
7037 return MarkDeducedTemplateParameters(Context, FunctionTemplate, Deduced);
7038 }
7039 static void MarkDeducedTemplateParameters(ASTContext &Ctx,
7040 const FunctionTemplateDecl *FunctionTemplate,
7041 llvm::SmallBitVector &Deduced);
7042
7043 //===--------------------------------------------------------------------===//
7044 // C++ Template Instantiation
7045 //
7046
7047 MultiLevelTemplateArgumentList
7048 getTemplateInstantiationArgs(NamedDecl *D,
7049 const TemplateArgumentList *Innermost = nullptr,
7050 bool RelativeToPrimary = false,
7051 const FunctionDecl *Pattern = nullptr);
7052
7053 /// A context in which code is being synthesized (where a source location
7054 /// alone is not sufficient to identify the context). This covers template
7055 /// instantiation and various forms of implicitly-generated functions.
7056 struct CodeSynthesisContext {
7057 /// \brief The kind of template instantiation we are performing
7058 enum SynthesisKind {
7059 /// We are instantiating a template declaration. The entity is
7060 /// the declaration we're instantiating (e.g., a CXXRecordDecl).
7061 TemplateInstantiation,
7062
7063 /// We are instantiating a default argument for a template
7064 /// parameter. The Entity is the template parameter whose argument is
7065 /// being instantiated, the Template is the template, and the
7066 /// TemplateArgs/NumTemplateArguments provide the template arguments as
7067 /// specified.
7068 DefaultTemplateArgumentInstantiation,
7069
7070 /// We are instantiating a default argument for a function.
7071 /// The Entity is the ParmVarDecl, and TemplateArgs/NumTemplateArgs
7072 /// provides the template arguments as specified.
7073 DefaultFunctionArgumentInstantiation,
7074
7075 /// We are substituting explicit template arguments provided for
7076 /// a function template. The entity is a FunctionTemplateDecl.
7077 ExplicitTemplateArgumentSubstitution,
7078
7079 /// We are substituting template argument determined as part of
7080 /// template argument deduction for either a class template
7081 /// partial specialization or a function template. The
7082 /// Entity is either a {Class|Var}TemplatePartialSpecializationDecl or
7083 /// a TemplateDecl.
7084 DeducedTemplateArgumentSubstitution,
7085
7086 /// We are substituting prior template arguments into a new
7087 /// template parameter. The template parameter itself is either a
7088 /// NonTypeTemplateParmDecl or a TemplateTemplateParmDecl.
7089 PriorTemplateArgumentSubstitution,
7090
7091 /// We are checking the validity of a default template argument that
7092 /// has been used when naming a template-id.
7093 DefaultTemplateArgumentChecking,
7094
7095 /// We are instantiating the exception specification for a function
7096 /// template which was deferred until it was needed.
7097 ExceptionSpecInstantiation,
7098
7099 /// We are declaring an implicit special member function.
7100 DeclaringSpecialMember,
7101
7102 /// We are defining a synthesized function (such as a defaulted special
7103 /// member).
7104 DefiningSynthesizedFunction,
7105 } Kind;
7106
7107 /// \brief Was the enclosing context a non-instantiation SFINAE context?
7108 bool SavedInNonInstantiationSFINAEContext;
7109
7110 /// \brief The point of instantiation or synthesis within the source code.
7111 SourceLocation PointOfInstantiation;
7112
7113 /// \brief The entity that is being synthesized.
7114 Decl *Entity;
7115
7116 /// \brief The template (or partial specialization) in which we are
7117 /// performing the instantiation, for substitutions of prior template
7118 /// arguments.
7119 NamedDecl *Template;
7120
7121 /// \brief The list of template arguments we are substituting, if they
7122 /// are not part of the entity.
7123 const TemplateArgument *TemplateArgs;
7124
7125 // FIXME: Wrap this union around more members, or perhaps store the
7126 // kind-specific members in the RAII object owning the context.
7127 union {
7128 /// \brief The number of template arguments in TemplateArgs.
7129 unsigned NumTemplateArgs;
7130
7131 /// \brief The special member being declared or defined.
7132 CXXSpecialMember SpecialMember;
7133 };
7134
7135 ArrayRef<TemplateArgument> template_arguments() const {
7136 assert(Kind != DeclaringSpecialMember)(static_cast <bool> (Kind != DeclaringSpecialMember) ? void
(0) : __assert_fail ("Kind != DeclaringSpecialMember", "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 7136, __extension__ __PRETTY_FUNCTION__))
;
7137 return {TemplateArgs, NumTemplateArgs};
7138 }
7139
7140 /// \brief The template deduction info object associated with the
7141 /// substitution or checking of explicit or deduced template arguments.
7142 sema::TemplateDeductionInfo *DeductionInfo;
7143
7144 /// \brief The source range that covers the construct that cause
7145 /// the instantiation, e.g., the template-id that causes a class
7146 /// template instantiation.
7147 SourceRange InstantiationRange;
7148
7149 CodeSynthesisContext()
7150 : Kind(TemplateInstantiation), Entity(nullptr), Template(nullptr),
7151 TemplateArgs(nullptr), NumTemplateArgs(0), DeductionInfo(nullptr) {}
7152
7153 /// \brief Determines whether this template is an actual instantiation
7154 /// that should be counted toward the maximum instantiation depth.
7155 bool isInstantiationRecord() const;
7156 };
7157
7158 /// \brief List of active code synthesis contexts.
7159 ///
7160 /// This vector is treated as a stack. As synthesis of one entity requires
7161 /// synthesis of another, additional contexts are pushed onto the stack.
7162 SmallVector<CodeSynthesisContext, 16> CodeSynthesisContexts;
7163
7164 /// Specializations whose definitions are currently being instantiated.
7165 llvm::DenseSet<std::pair<Decl *, unsigned>> InstantiatingSpecializations;
7166
7167 /// Non-dependent types used in templates that have already been instantiated
7168 /// by some template instantiation.
7169 llvm::DenseSet<QualType> InstantiatedNonDependentTypes;
7170
7171 /// \brief Extra modules inspected when performing a lookup during a template
7172 /// instantiation. Computed lazily.
7173 SmallVector<Module*, 16> CodeSynthesisContextLookupModules;
7174
7175 /// \brief Cache of additional modules that should be used for name lookup
7176 /// within the current template instantiation. Computed lazily; use
7177 /// getLookupModules() to get a complete set.
7178 llvm::DenseSet<Module*> LookupModulesCache;
7179
7180 /// \brief Get the set of additional modules that should be checked during
7181 /// name lookup. A module and its imports become visible when instanting a
7182 /// template defined within it.
7183 llvm::DenseSet<Module*> &getLookupModules();
7184
7185 /// \brief Map from the most recent declaration of a namespace to the most
7186 /// recent visible declaration of that namespace.
7187 llvm::DenseMap<NamedDecl*, NamedDecl*> VisibleNamespaceCache;
7188
7189 /// \brief Whether we are in a SFINAE context that is not associated with
7190 /// template instantiation.
7191 ///
7192 /// This is used when setting up a SFINAE trap (\c see SFINAETrap) outside
7193 /// of a template instantiation or template argument deduction.
7194 bool InNonInstantiationSFINAEContext;
7195
7196 /// \brief The number of \p CodeSynthesisContexts that are not template
7197 /// instantiations and, therefore, should not be counted as part of the
7198 /// instantiation depth.
7199 ///
7200 /// When the instantiation depth reaches the user-configurable limit
7201 /// \p LangOptions::InstantiationDepth we will abort instantiation.
7202 // FIXME: Should we have a similar limit for other forms of synthesis?
7203 unsigned NonInstantiationEntries;
7204
7205 /// \brief The depth of the context stack at the point when the most recent
7206 /// error or warning was produced.
7207 ///
7208 /// This value is used to suppress printing of redundant context stacks
7209 /// when there are multiple errors or warnings in the same instantiation.
7210 // FIXME: Does this belong in Sema? It's tough to implement it anywhere else.
7211 unsigned LastEmittedCodeSynthesisContextDepth = 0;
7212
7213 /// \brief The current index into pack expansion arguments that will be
7214 /// used for substitution of parameter packs.
7215 ///
7216 /// The pack expansion index will be -1 to indicate that parameter packs
7217 /// should be instantiated as themselves. Otherwise, the index specifies
7218 /// which argument within the parameter pack will be used for substitution.
7219 int ArgumentPackSubstitutionIndex;
7220
7221 /// \brief RAII object used to change the argument pack substitution index
7222 /// within a \c Sema object.
7223 ///
7224 /// See \c ArgumentPackSubstitutionIndex for more information.
7225 class ArgumentPackSubstitutionIndexRAII {
7226 Sema &Self;
7227 int OldSubstitutionIndex;
7228
7229 public:
7230 ArgumentPackSubstitutionIndexRAII(Sema &Self, int NewSubstitutionIndex)
7231 : Self(Self), OldSubstitutionIndex(Self.ArgumentPackSubstitutionIndex) {
7232 Self.ArgumentPackSubstitutionIndex = NewSubstitutionIndex;
7233 }
7234
7235 ~ArgumentPackSubstitutionIndexRAII() {
7236 Self.ArgumentPackSubstitutionIndex = OldSubstitutionIndex;
7237 }
7238 };
7239
7240 friend class ArgumentPackSubstitutionRAII;
7241
7242 /// \brief For each declaration that involved template argument deduction, the
7243 /// set of diagnostics that were suppressed during that template argument
7244 /// deduction.
7245 ///
7246 /// FIXME: Serialize this structure to the AST file.
7247 typedef llvm::DenseMap<Decl *, SmallVector<PartialDiagnosticAt, 1> >
7248 SuppressedDiagnosticsMap;
7249 SuppressedDiagnosticsMap SuppressedDiagnostics;
7250
7251 /// \brief A stack object to be created when performing template
7252 /// instantiation.
7253 ///
7254 /// Construction of an object of type \c InstantiatingTemplate
7255 /// pushes the current instantiation onto the stack of active
7256 /// instantiations. If the size of this stack exceeds the maximum
7257 /// number of recursive template instantiations, construction
7258 /// produces an error and evaluates true.
7259 ///
7260 /// Destruction of this object will pop the named instantiation off
7261 /// the stack.
7262 struct InstantiatingTemplate {
7263 /// \brief Note that we are instantiating a class template,
7264 /// function template, variable template, alias template,
7265 /// or a member thereof.
7266 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
7267 Decl *Entity,
7268 SourceRange InstantiationRange = SourceRange());
7269
7270 struct ExceptionSpecification {};
7271 /// \brief Note that we are instantiating an exception specification
7272 /// of a function template.
7273 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
7274 FunctionDecl *Entity, ExceptionSpecification,
7275 SourceRange InstantiationRange = SourceRange());
7276
7277 /// \brief Note that we are instantiating a default argument in a
7278 /// template-id.
7279 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
7280 TemplateParameter Param, TemplateDecl *Template,
7281 ArrayRef<TemplateArgument> TemplateArgs,
7282 SourceRange InstantiationRange = SourceRange());
7283
7284 /// \brief Note that we are substituting either explicitly-specified or
7285 /// deduced template arguments during function template argument deduction.
7286 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
7287 FunctionTemplateDecl *FunctionTemplate,
7288 ArrayRef<TemplateArgument> TemplateArgs,
7289 CodeSynthesisContext::SynthesisKind Kind,
7290 sema::TemplateDeductionInfo &DeductionInfo,
7291 SourceRange InstantiationRange = SourceRange());
7292
7293 /// \brief Note that we are instantiating as part of template
7294 /// argument deduction for a class template declaration.
7295 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
7296 TemplateDecl *Template,
7297 ArrayRef<TemplateArgument> TemplateArgs,
7298 sema::TemplateDeductionInfo &DeductionInfo,
7299 SourceRange InstantiationRange = SourceRange());
7300
7301 /// \brief Note that we are instantiating as part of template
7302 /// argument deduction for a class template partial
7303 /// specialization.
7304 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
7305 ClassTemplatePartialSpecializationDecl *PartialSpec,
7306 ArrayRef<TemplateArgument> TemplateArgs,
7307 sema::TemplateDeductionInfo &DeductionInfo,
7308 SourceRange InstantiationRange = SourceRange());
7309
7310 /// \brief Note that we are instantiating as part of template
7311 /// argument deduction for a variable template partial
7312 /// specialization.
7313 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
7314 VarTemplatePartialSpecializationDecl *PartialSpec,
7315 ArrayRef<TemplateArgument> TemplateArgs,
7316 sema::TemplateDeductionInfo &DeductionInfo,
7317 SourceRange InstantiationRange = SourceRange());
7318
7319 /// \brief Note that we are instantiating a default argument for a function
7320 /// parameter.
7321 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
7322 ParmVarDecl *Param,
7323 ArrayRef<TemplateArgument> TemplateArgs,
7324 SourceRange InstantiationRange = SourceRange());
7325
7326 /// \brief Note that we are substituting prior template arguments into a
7327 /// non-type parameter.
7328 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
7329 NamedDecl *Template,
7330 NonTypeTemplateParmDecl *Param,
7331 ArrayRef<TemplateArgument> TemplateArgs,
7332 SourceRange InstantiationRange);
7333
7334 /// \brief Note that we are substituting prior template arguments into a
7335 /// template template parameter.
7336 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
7337 NamedDecl *Template,
7338 TemplateTemplateParmDecl *Param,
7339 ArrayRef<TemplateArgument> TemplateArgs,
7340 SourceRange InstantiationRange);
7341
7342 /// \brief Note that we are checking the default template argument
7343 /// against the template parameter for a given template-id.
7344 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
7345 TemplateDecl *Template,
7346 NamedDecl *Param,
7347 ArrayRef<TemplateArgument> TemplateArgs,
7348 SourceRange InstantiationRange);
7349
7350
7351 /// \brief Note that we have finished instantiating this template.
7352 void Clear();
7353
7354 ~InstantiatingTemplate() { Clear(); }
7355
7356 /// \brief Determines whether we have exceeded the maximum
7357 /// recursive template instantiations.
7358 bool isInvalid() const { return Invalid; }
7359
7360 /// \brief Determine whether we are already instantiating this
7361 /// specialization in some surrounding active instantiation.
7362 bool isAlreadyInstantiating() const { return AlreadyInstantiating; }
7363
7364 private:
7365 Sema &SemaRef;
7366 bool Invalid;
7367 bool AlreadyInstantiating;
7368 bool CheckInstantiationDepth(SourceLocation PointOfInstantiation,
7369 SourceRange InstantiationRange);
7370
7371 InstantiatingTemplate(
7372 Sema &SemaRef, CodeSynthesisContext::SynthesisKind Kind,
7373 SourceLocation PointOfInstantiation, SourceRange InstantiationRange,
7374 Decl *Entity, NamedDecl *Template = nullptr,
7375 ArrayRef<TemplateArgument> TemplateArgs = None,
7376 sema::TemplateDeductionInfo *DeductionInfo = nullptr);
7377
7378 InstantiatingTemplate(const InstantiatingTemplate&) = delete;
7379
7380 InstantiatingTemplate&
7381 operator=(const InstantiatingTemplate&) = delete;
7382 };
7383
7384 void pushCodeSynthesisContext(CodeSynthesisContext Ctx);
7385 void popCodeSynthesisContext();
7386
7387 /// Determine whether we are currently performing template instantiation.
7388 bool inTemplateInstantiation() const {
7389 return CodeSynthesisContexts.size() > NonInstantiationEntries;
7390 }
7391
7392 void PrintContextStack() {
7393 if (!CodeSynthesisContexts.empty() &&
7394 CodeSynthesisContexts.size() != LastEmittedCodeSynthesisContextDepth) {
7395 PrintInstantiationStack();
7396 LastEmittedCodeSynthesisContextDepth = CodeSynthesisContexts.size();
7397 }
7398 if (PragmaAttributeCurrentTargetDecl)
7399 PrintPragmaAttributeInstantiationPoint();
7400 }
7401 void PrintInstantiationStack();
7402
7403 void PrintPragmaAttributeInstantiationPoint();
7404
7405 /// \brief Determines whether we are currently in a context where
7406 /// template argument substitution failures are not considered
7407 /// errors.
7408 ///
7409 /// \returns An empty \c Optional if we're not in a SFINAE context.
7410 /// Otherwise, contains a pointer that, if non-NULL, contains the nearest
7411 /// template-deduction context object, which can be used to capture
7412 /// diagnostics that will be suppressed.
7413 Optional<sema::TemplateDeductionInfo *> isSFINAEContext() const;
7414
7415 /// \brief Determines whether we are currently in a context that
7416 /// is not evaluated as per C++ [expr] p5.
7417 bool isUnevaluatedContext() const {
7418 assert(!ExprEvalContexts.empty() &&(static_cast <bool> (!ExprEvalContexts.empty() &&
"Must be in an expression evaluation context") ? void (0) : __assert_fail
("!ExprEvalContexts.empty() && \"Must be in an expression evaluation context\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 7419, __extension__ __PRETTY_FUNCTION__))
7419 "Must be in an expression evaluation context")(static_cast <bool> (!ExprEvalContexts.empty() &&
"Must be in an expression evaluation context") ? void (0) : __assert_fail
("!ExprEvalContexts.empty() && \"Must be in an expression evaluation context\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 7419, __extension__ __PRETTY_FUNCTION__))
;
7420 return ExprEvalContexts.back().isUnevaluated();
7421 }
7422
7423 /// \brief RAII class used to determine whether SFINAE has
7424 /// trapped any errors that occur during template argument
7425 /// deduction.
7426 class SFINAETrap {
7427 Sema &SemaRef;
7428 unsigned PrevSFINAEErrors;
7429 bool PrevInNonInstantiationSFINAEContext;
7430 bool PrevAccessCheckingSFINAE;
7431 bool PrevLastDiagnosticIgnored;
7432
7433 public:
7434 explicit SFINAETrap(Sema &SemaRef, bool AccessCheckingSFINAE = false)
7435 : SemaRef(SemaRef), PrevSFINAEErrors(SemaRef.NumSFINAEErrors),
7436 PrevInNonInstantiationSFINAEContext(
7437 SemaRef.InNonInstantiationSFINAEContext),
7438 PrevAccessCheckingSFINAE(SemaRef.AccessCheckingSFINAE),
7439 PrevLastDiagnosticIgnored(
7440 SemaRef.getDiagnostics().isLastDiagnosticIgnored())
7441 {
7442 if (!SemaRef.isSFINAEContext())
7443 SemaRef.InNonInstantiationSFINAEContext = true;
7444 SemaRef.AccessCheckingSFINAE = AccessCheckingSFINAE;
7445 }
7446
7447 ~SFINAETrap() {
7448 SemaRef.NumSFINAEErrors = PrevSFINAEErrors;
7449 SemaRef.InNonInstantiationSFINAEContext
7450 = PrevInNonInstantiationSFINAEContext;
7451 SemaRef.AccessCheckingSFINAE = PrevAccessCheckingSFINAE;
7452 SemaRef.getDiagnostics().setLastDiagnosticIgnored(
7453 PrevLastDiagnosticIgnored);
7454 }
7455
7456 /// \brief Determine whether any SFINAE errors have been trapped.
7457 bool hasErrorOccurred() const {
7458 return SemaRef.NumSFINAEErrors > PrevSFINAEErrors;
7459 }
7460 };
7461
7462 /// \brief RAII class used to indicate that we are performing provisional
7463 /// semantic analysis to determine the validity of a construct, so
7464 /// typo-correction and diagnostics in the immediate context (not within
7465 /// implicitly-instantiated templates) should be suppressed.
7466 class TentativeAnalysisScope {
7467 Sema &SemaRef;
7468 // FIXME: Using a SFINAETrap for this is a hack.
7469 SFINAETrap Trap;
7470 bool PrevDisableTypoCorrection;
7471 public:
7472 explicit TentativeAnalysisScope(Sema &SemaRef)
7473 : SemaRef(SemaRef), Trap(SemaRef, true),
7474 PrevDisableTypoCorrection(SemaRef.DisableTypoCorrection) {
7475 SemaRef.DisableTypoCorrection = true;
7476 }
7477 ~TentativeAnalysisScope() {
7478 SemaRef.DisableTypoCorrection = PrevDisableTypoCorrection;
7479 }
7480 };
7481
7482 /// \brief The current instantiation scope used to store local
7483 /// variables.
7484 LocalInstantiationScope *CurrentInstantiationScope;
7485
7486 /// \brief Tracks whether we are in a context where typo correction is
7487 /// disabled.
7488 bool DisableTypoCorrection;
7489
7490 /// \brief The number of typos corrected by CorrectTypo.
7491 unsigned TyposCorrected;
7492
7493 typedef llvm::SmallSet<SourceLocation, 2> SrcLocSet;
7494 typedef llvm::DenseMap<IdentifierInfo *, SrcLocSet> IdentifierSourceLocations;
7495
7496 /// \brief A cache containing identifiers for which typo correction failed and
7497 /// their locations, so that repeated attempts to correct an identifier in a
7498 /// given location are ignored if typo correction already failed for it.
7499 IdentifierSourceLocations TypoCorrectionFailures;
7500
7501 /// \brief Worker object for performing CFG-based warnings.
7502 sema::AnalysisBasedWarnings AnalysisWarnings;
7503 threadSafety::BeforeSet *ThreadSafetyDeclCache;
7504
7505 /// \brief An entity for which implicit template instantiation is required.
7506 ///
7507 /// The source location associated with the declaration is the first place in
7508 /// the source code where the declaration was "used". It is not necessarily
7509 /// the point of instantiation (which will be either before or after the
7510 /// namespace-scope declaration that triggered this implicit instantiation),
7511 /// However, it is the location that diagnostics should generally refer to,
7512 /// because users will need to know what code triggered the instantiation.
7513 typedef std::pair<ValueDecl *, SourceLocation> PendingImplicitInstantiation;
7514
7515 /// \brief The queue of implicit template instantiations that are required
7516 /// but have not yet been performed.
7517 std::deque<PendingImplicitInstantiation> PendingInstantiations;
7518
7519 class GlobalEagerInstantiationScope {
7520 public:
7521 GlobalEagerInstantiationScope(Sema &S, bool Enabled)
7522 : S(S), Enabled(Enabled) {
7523 if (!Enabled) return;
7524
7525 SavedPendingInstantiations.swap(S.PendingInstantiations);
7526 SavedVTableUses.swap(S.VTableUses);
7527 }
7528
7529 void perform() {
7530 if (Enabled) {
19
Assuming the condition is true
20
Taking true branch
7531 S.DefineUsedVTables();
7532 S.PerformPendingInstantiations();
21
Calling 'Sema::PerformPendingInstantiations'
7533 }
7534 }
7535
7536 ~GlobalEagerInstantiationScope() {
7537 if (!Enabled) return;
7538
7539 // Restore the set of pending vtables.
7540 assert(S.VTableUses.empty() &&(static_cast <bool> (S.VTableUses.empty() && "VTableUses should be empty before it is discarded."
) ? void (0) : __assert_fail ("S.VTableUses.empty() && \"VTableUses should be empty before it is discarded.\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 7541, __extension__ __PRETTY_FUNCTION__))
7541 "VTableUses should be empty before it is discarded.")(static_cast <bool> (S.VTableUses.empty() && "VTableUses should be empty before it is discarded."
) ? void (0) : __assert_fail ("S.VTableUses.empty() && \"VTableUses should be empty before it is discarded.\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 7541, __extension__ __PRETTY_FUNCTION__))
;
7542 S.VTableUses.swap(SavedVTableUses);
7543
7544 // Restore the set of pending implicit instantiations.
7545 assert(S.PendingInstantiations.empty() &&(static_cast <bool> (S.PendingInstantiations.empty() &&
"PendingInstantiations should be empty before it is discarded."
) ? void (0) : __assert_fail ("S.PendingInstantiations.empty() && \"PendingInstantiations should be empty before it is discarded.\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 7546, __extension__ __PRETTY_FUNCTION__))
7546 "PendingInstantiations should be empty before it is discarded.")(static_cast <bool> (S.PendingInstantiations.empty() &&
"PendingInstantiations should be empty before it is discarded."
) ? void (0) : __assert_fail ("S.PendingInstantiations.empty() && \"PendingInstantiations should be empty before it is discarded.\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 7546, __extension__ __PRETTY_FUNCTION__))
;
7547 S.PendingInstantiations.swap(SavedPendingInstantiations);
7548 }
7549
7550 private:
7551 Sema &S;
7552 SmallVector<VTableUse, 16> SavedVTableUses;
7553 std::deque<PendingImplicitInstantiation> SavedPendingInstantiations;
7554 bool Enabled;
7555 };
7556
7557 /// \brief The queue of implicit template instantiations that are required
7558 /// and must be performed within the current local scope.
7559 ///
7560 /// This queue is only used for member functions of local classes in
7561 /// templates, which must be instantiated in the same scope as their
7562 /// enclosing function, so that they can reference function-local
7563 /// types, static variables, enumerators, etc.
7564 std::deque<PendingImplicitInstantiation> PendingLocalImplicitInstantiations;
7565
7566 class LocalEagerInstantiationScope {
7567 public:
7568 LocalEagerInstantiationScope(Sema &S) : S(S) {
7569 SavedPendingLocalImplicitInstantiations.swap(
7570 S.PendingLocalImplicitInstantiations);
7571 }
7572
7573 void perform() { S.PerformPendingInstantiations(/*LocalOnly=*/true); }
7574
7575 ~LocalEagerInstantiationScope() {
7576 assert(S.PendingLocalImplicitInstantiations.empty() &&(static_cast <bool> (S.PendingLocalImplicitInstantiations
.empty() && "there shouldn't be any pending local implicit instantiations"
) ? void (0) : __assert_fail ("S.PendingLocalImplicitInstantiations.empty() && \"there shouldn't be any pending local implicit instantiations\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 7577, __extension__ __PRETTY_FUNCTION__))
7577 "there shouldn't be any pending local implicit instantiations")(static_cast <bool> (S.PendingLocalImplicitInstantiations
.empty() && "there shouldn't be any pending local implicit instantiations"
) ? void (0) : __assert_fail ("S.PendingLocalImplicitInstantiations.empty() && \"there shouldn't be any pending local implicit instantiations\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 7577, __extension__ __PRETTY_FUNCTION__))
;
7578 SavedPendingLocalImplicitInstantiations.swap(
7579 S.PendingLocalImplicitInstantiations);
7580 }
7581
7582 private:
7583 Sema &S;
7584 std::deque<PendingImplicitInstantiation>
7585 SavedPendingLocalImplicitInstantiations;
7586 };
7587
7588 /// A helper class for building up ExtParameterInfos.
7589 class ExtParameterInfoBuilder {
7590 SmallVector<FunctionProtoType::ExtParameterInfo, 16> Infos;
7591 bool HasInteresting = false;
7592
7593 public:
7594 /// Set the ExtParameterInfo for the parameter at the given index,
7595 ///
7596 void set(unsigned index, FunctionProtoType::ExtParameterInfo info) {
7597 assert(Infos.size() <= index)(static_cast <bool> (Infos.size() <= index) ? void (
0) : __assert_fail ("Infos.size() <= index", "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 7597, __extension__ __PRETTY_FUNCTION__))
;
7598 Infos.resize(index);
7599 Infos.push_back(info);
7600
7601 if (!HasInteresting)
7602 HasInteresting = (info != FunctionProtoType::ExtParameterInfo());
7603 }
7604
7605 /// Return a pointer (suitable for setting in an ExtProtoInfo) to the
7606 /// ExtParameterInfo array we've built up.
7607 const FunctionProtoType::ExtParameterInfo *
7608 getPointerOrNull(unsigned numParams) {
7609 if (!HasInteresting) return nullptr;
7610 Infos.resize(numParams);
7611 return Infos.data();
7612 }
7613 };
7614
7615 void PerformPendingInstantiations(bool LocalOnly = false);
7616
7617 TypeSourceInfo *SubstType(TypeSourceInfo *T,
7618 const MultiLevelTemplateArgumentList &TemplateArgs,
7619 SourceLocation Loc, DeclarationName Entity,
7620 bool AllowDeducedTST = false);
7621
7622 QualType SubstType(QualType T,
7623 const MultiLevelTemplateArgumentList &TemplateArgs,
7624 SourceLocation Loc, DeclarationName Entity);
7625
7626 TypeSourceInfo *SubstType(TypeLoc TL,
7627 const MultiLevelTemplateArgumentList &TemplateArgs,
7628 SourceLocation Loc, DeclarationName Entity);
7629
7630 TypeSourceInfo *SubstFunctionDeclType(TypeSourceInfo *T,
7631 const MultiLevelTemplateArgumentList &TemplateArgs,
7632 SourceLocation Loc,
7633 DeclarationName Entity,
7634 CXXRecordDecl *ThisContext,
7635 unsigned ThisTypeQuals);
7636 void SubstExceptionSpec(FunctionDecl *New, const FunctionProtoType *Proto,
7637 const MultiLevelTemplateArgumentList &Args);
7638 bool SubstExceptionSpec(SourceLocation Loc,
7639 FunctionProtoType::ExceptionSpecInfo &ESI,
7640 SmallVectorImpl<QualType> &ExceptionStorage,
7641 const MultiLevelTemplateArgumentList &Args);
7642 ParmVarDecl *SubstParmVarDecl(ParmVarDecl *D,
7643 const MultiLevelTemplateArgumentList &TemplateArgs,
7644 int indexAdjustment,
7645 Optional<unsigned> NumExpansions,
7646 bool ExpectParameterPack);
7647 bool SubstParmTypes(SourceLocation Loc, ArrayRef<ParmVarDecl *> Params,
7648 const FunctionProtoType::ExtParameterInfo *ExtParamInfos,
7649 const MultiLevelTemplateArgumentList &TemplateArgs,
7650 SmallVectorImpl<QualType> &ParamTypes,
7651 SmallVectorImpl<ParmVarDecl *> *OutParams,
7652 ExtParameterInfoBuilder &ParamInfos);
7653 ExprResult SubstExpr(Expr *E,
7654 const MultiLevelTemplateArgumentList &TemplateArgs);
7655
7656 /// \brief Substitute the given template arguments into a list of
7657 /// expressions, expanding pack expansions if required.
7658 ///
7659 /// \param Exprs The list of expressions to substitute into.
7660 ///
7661 /// \param IsCall Whether this is some form of call, in which case
7662 /// default arguments will be dropped.
7663 ///
7664 /// \param TemplateArgs The set of template arguments to substitute.
7665 ///
7666 /// \param Outputs Will receive all of the substituted arguments.
7667 ///
7668 /// \returns true if an error occurred, false otherwise.
7669 bool SubstExprs(ArrayRef<Expr *> Exprs, bool IsCall,
7670 const MultiLevelTemplateArgumentList &TemplateArgs,
7671 SmallVectorImpl<Expr *> &Outputs);
7672
7673 StmtResult SubstStmt(Stmt *S,
7674 const MultiLevelTemplateArgumentList &TemplateArgs);
7675
7676 Decl *SubstDecl(Decl *D, DeclContext *Owner,
7677 const MultiLevelTemplateArgumentList &TemplateArgs);
7678
7679 ExprResult SubstInitializer(Expr *E,
7680 const MultiLevelTemplateArgumentList &TemplateArgs,
7681 bool CXXDirectInit);
7682
7683 bool
7684 SubstBaseSpecifiers(CXXRecordDecl *Instantiation,
7685 CXXRecordDecl *Pattern,
7686 const MultiLevelTemplateArgumentList &TemplateArgs);
7687
7688 bool
7689 InstantiateClass(SourceLocation PointOfInstantiation,
7690 CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern,
7691 const MultiLevelTemplateArgumentList &TemplateArgs,
7692 TemplateSpecializationKind TSK,
7693 bool Complain = true);
7694
7695 bool InstantiateEnum(SourceLocation PointOfInstantiation,
7696 EnumDecl *Instantiation, EnumDecl *Pattern,
7697 const MultiLevelTemplateArgumentList &TemplateArgs,
7698 TemplateSpecializationKind TSK);
7699
7700 bool InstantiateInClassInitializer(
7701 SourceLocation PointOfInstantiation, FieldDecl *Instantiation,
7702 FieldDecl *Pattern, const MultiLevelTemplateArgumentList &TemplateArgs);
7703
7704 struct LateInstantiatedAttribute {
7705 const Attr *TmplAttr;
7706 LocalInstantiationScope *Scope;
7707 Decl *NewDecl;
7708
7709 LateInstantiatedAttribute(const Attr *A, LocalInstantiationScope *S,
7710 Decl *D)
7711 : TmplAttr(A), Scope(S), NewDecl(D)
7712 { }
7713 };
7714 typedef SmallVector<LateInstantiatedAttribute, 16> LateInstantiatedAttrVec;
7715
7716 void InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
7717 const Decl *Pattern, Decl *Inst,
7718 LateInstantiatedAttrVec *LateAttrs = nullptr,
7719 LocalInstantiationScope *OuterMostScope = nullptr);
7720
7721 void
7722 InstantiateAttrsForDecl(const MultiLevelTemplateArgumentList &TemplateArgs,
7723 const Decl *Pattern, Decl *Inst,
7724 LateInstantiatedAttrVec *LateAttrs = nullptr,
7725 LocalInstantiationScope *OuterMostScope = nullptr);
7726
7727 bool usesPartialOrExplicitSpecialization(
7728 SourceLocation Loc, ClassTemplateSpecializationDecl *ClassTemplateSpec);
7729
7730 bool
7731 InstantiateClassTemplateSpecialization(SourceLocation PointOfInstantiation,
7732 ClassTemplateSpecializationDecl *ClassTemplateSpec,
7733 TemplateSpecializationKind TSK,
7734 bool Complain = true);
7735
7736 void InstantiateClassMembers(SourceLocation PointOfInstantiation,
7737 CXXRecordDecl *Instantiation,
7738 const MultiLevelTemplateArgumentList &TemplateArgs,
7739 TemplateSpecializationKind TSK);
7740
7741 void InstantiateClassTemplateSpecializationMembers(
7742 SourceLocation PointOfInstantiation,
7743 ClassTemplateSpecializationDecl *ClassTemplateSpec,
7744 TemplateSpecializationKind TSK);
7745
7746 NestedNameSpecifierLoc
7747 SubstNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS,
7748 const MultiLevelTemplateArgumentList &TemplateArgs);
7749
7750 DeclarationNameInfo
7751 SubstDeclarationNameInfo(const DeclarationNameInfo &NameInfo,
7752 const MultiLevelTemplateArgumentList &TemplateArgs);
7753 TemplateName
7754 SubstTemplateName(NestedNameSpecifierLoc QualifierLoc, TemplateName Name,
7755 SourceLocation Loc,
7756 const MultiLevelTemplateArgumentList &TemplateArgs);
7757 bool Subst(const TemplateArgumentLoc *Args, unsigned NumArgs,
7758 TemplateArgumentListInfo &Result,
7759 const MultiLevelTemplateArgumentList &TemplateArgs);
7760
7761 void InstantiateExceptionSpec(SourceLocation PointOfInstantiation,
7762 FunctionDecl *Function);
7763 void InstantiateFunctionDefinition(SourceLocation PointOfInstantiation,
7764 FunctionDecl *Function,
7765 bool Recursive = false,
7766 bool DefinitionRequired = false,
7767 bool AtEndOfTU = false);
7768 VarTemplateSpecializationDecl *BuildVarTemplateInstantiation(
7769 VarTemplateDecl *VarTemplate, VarDecl *FromVar,
7770 const TemplateArgumentList &TemplateArgList,
7771 const TemplateArgumentListInfo &TemplateArgsInfo,
7772 SmallVectorImpl<TemplateArgument> &Converted,
7773 SourceLocation PointOfInstantiation, void *InsertPos,
7774 LateInstantiatedAttrVec *LateAttrs = nullptr,
7775 LocalInstantiationScope *StartingScope = nullptr);
7776 VarTemplateSpecializationDecl *CompleteVarTemplateSpecializationDecl(
7777 VarTemplateSpecializationDecl *VarSpec, VarDecl *PatternDecl,
7778 const MultiLevelTemplateArgumentList &TemplateArgs);
7779 void
7780 BuildVariableInstantiation(VarDecl *NewVar, VarDecl *OldVar,
7781 const MultiLevelTemplateArgumentList &TemplateArgs,
7782 LateInstantiatedAttrVec *LateAttrs,
7783 DeclContext *Owner,
7784 LocalInstantiationScope *StartingScope,
7785 bool InstantiatingVarTemplate = false);
7786 void InstantiateVariableInitializer(
7787 VarDecl *Var, VarDecl *OldVar,
7788 const MultiLevelTemplateArgumentList &TemplateArgs);
7789 void InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
7790 VarDecl *Var, bool Recursive = false,
7791 bool DefinitionRequired = false,
7792 bool AtEndOfTU = false);
7793 void InstantiateStaticDataMemberDefinition(
7794 SourceLocation PointOfInstantiation,
7795 VarDecl *Var,
7796 bool Recursive = false,
7797 bool DefinitionRequired = false);
7798
7799 void InstantiateMemInitializers(CXXConstructorDecl *New,
7800 const CXXConstructorDecl *Tmpl,
7801 const MultiLevelTemplateArgumentList &TemplateArgs);
7802
7803 NamedDecl *FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D,
7804 const MultiLevelTemplateArgumentList &TemplateArgs,
7805 bool FindingInstantiatedContext = false);
7806 DeclContext *FindInstantiatedContext(SourceLocation Loc, DeclContext *DC,
7807 const MultiLevelTemplateArgumentList &TemplateArgs);
7808
7809 // Objective-C declarations.
7810 enum ObjCContainerKind {
7811 OCK_None = -1,
7812 OCK_Interface = 0,
7813 OCK_Protocol,
7814 OCK_Category,
7815 OCK_ClassExtension,
7816 OCK_Implementation,
7817 OCK_CategoryImplementation
7818 };
7819 ObjCContainerKind getObjCContainerKind() const;
7820
7821 DeclResult actOnObjCTypeParam(Scope *S,
7822 ObjCTypeParamVariance variance,
7823 SourceLocation varianceLoc,
7824 unsigned index,
7825 IdentifierInfo *paramName,
7826 SourceLocation paramLoc,
7827 SourceLocation colonLoc,
7828 ParsedType typeBound);
7829
7830 ObjCTypeParamList *actOnObjCTypeParamList(Scope *S, SourceLocation lAngleLoc,
7831 ArrayRef<Decl *> typeParams,
7832 SourceLocation rAngleLoc);
7833 void popObjCTypeParamList(Scope *S, ObjCTypeParamList *typeParamList);
7834
7835 Decl *ActOnStartClassInterface(Scope *S,
7836 SourceLocation AtInterfaceLoc,
7837 IdentifierInfo *ClassName,
7838 SourceLocation ClassLoc,
7839 ObjCTypeParamList *typeParamList,
7840 IdentifierInfo *SuperName,
7841 SourceLocation SuperLoc,
7842 ArrayRef<ParsedType> SuperTypeArgs,
7843 SourceRange SuperTypeArgsRange,
7844 Decl * const *ProtoRefs,
7845 unsigned NumProtoRefs,
7846 const SourceLocation *ProtoLocs,
7847 SourceLocation EndProtoLoc,
7848 AttributeList *AttrList);
7849
7850 void ActOnSuperClassOfClassInterface(Scope *S,
7851 SourceLocation AtInterfaceLoc,
7852 ObjCInterfaceDecl *IDecl,
7853 IdentifierInfo *ClassName,
7854 SourceLocation ClassLoc,
7855 IdentifierInfo *SuperName,
7856 SourceLocation SuperLoc,
7857 ArrayRef<ParsedType> SuperTypeArgs,
7858 SourceRange SuperTypeArgsRange);
7859
7860 void ActOnTypedefedProtocols(SmallVectorImpl<Decl *> &ProtocolRefs,
7861 SmallVectorImpl<SourceLocation> &ProtocolLocs,
7862 IdentifierInfo *SuperName,
7863 SourceLocation SuperLoc);
7864
7865 Decl *ActOnCompatibilityAlias(
7866 SourceLocation AtCompatibilityAliasLoc,
7867 IdentifierInfo *AliasName, SourceLocation AliasLocation,
7868 IdentifierInfo *ClassName, SourceLocation ClassLocation);
7869
7870 bool CheckForwardProtocolDeclarationForCircularDependency(
7871 IdentifierInfo *PName,
7872 SourceLocation &PLoc, SourceLocation PrevLoc,
7873 const ObjCList<ObjCProtocolDecl> &PList);
7874
7875 Decl *ActOnStartProtocolInterface(
7876 SourceLocation AtProtoInterfaceLoc,
7877 IdentifierInfo *ProtocolName, SourceLocation ProtocolLoc,
7878 Decl * const *ProtoRefNames, unsigned NumProtoRefs,
7879 const SourceLocation *ProtoLocs,
7880 SourceLocation EndProtoLoc,
7881 AttributeList *AttrList);
7882
7883 Decl *ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc,
7884 IdentifierInfo *ClassName,
7885 SourceLocation ClassLoc,
7886 ObjCTypeParamList *typeParamList,
7887 IdentifierInfo *CategoryName,
7888 SourceLocation CategoryLoc,
7889 Decl * const *ProtoRefs,
7890 unsigned NumProtoRefs,
7891 const SourceLocation *ProtoLocs,
7892 SourceLocation EndProtoLoc,
7893 AttributeList *AttrList);
7894
7895 Decl *ActOnStartClassImplementation(
7896 SourceLocation AtClassImplLoc,
7897 IdentifierInfo *ClassName, SourceLocation ClassLoc,
7898 IdentifierInfo *SuperClassname,
7899 SourceLocation SuperClassLoc);
7900
7901 Decl *ActOnStartCategoryImplementation(SourceLocation AtCatImplLoc,
7902 IdentifierInfo *ClassName,
7903 SourceLocation ClassLoc,
7904 IdentifierInfo *CatName,
7905 SourceLocation CatLoc);
7906
7907 DeclGroupPtrTy ActOnFinishObjCImplementation(Decl *ObjCImpDecl,
7908 ArrayRef<Decl *> Decls);
7909
7910 DeclGroupPtrTy ActOnForwardClassDeclaration(SourceLocation Loc,
7911 IdentifierInfo **IdentList,
7912 SourceLocation *IdentLocs,
7913 ArrayRef<ObjCTypeParamList *> TypeParamLists,
7914 unsigned NumElts);
7915
7916 DeclGroupPtrTy ActOnForwardProtocolDeclaration(SourceLocation AtProtoclLoc,
7917 ArrayRef<IdentifierLocPair> IdentList,
7918 AttributeList *attrList);
7919
7920 void FindProtocolDeclaration(bool WarnOnDeclarations, bool ForObjCContainer,
7921 ArrayRef<IdentifierLocPair> ProtocolId,
7922 SmallVectorImpl<Decl *> &Protocols);
7923
7924 void DiagnoseTypeArgsAndProtocols(IdentifierInfo *ProtocolId,
7925 SourceLocation ProtocolLoc,
7926 IdentifierInfo *TypeArgId,
7927 SourceLocation TypeArgLoc,
7928 bool SelectProtocolFirst = false);
7929
7930 /// Given a list of identifiers (and their locations), resolve the
7931 /// names to either Objective-C protocol qualifiers or type
7932 /// arguments, as appropriate.
7933 void actOnObjCTypeArgsOrProtocolQualifiers(
7934 Scope *S,
7935 ParsedType baseType,
7936 SourceLocation lAngleLoc,
7937 ArrayRef<IdentifierInfo *> identifiers,
7938 ArrayRef<SourceLocation> identifierLocs,
7939 SourceLocation rAngleLoc,
7940 SourceLocation &typeArgsLAngleLoc,
7941 SmallVectorImpl<ParsedType> &typeArgs,
7942 SourceLocation &typeArgsRAngleLoc,
7943 SourceLocation &protocolLAngleLoc,
7944 SmallVectorImpl<Decl *> &protocols,
7945 SourceLocation &protocolRAngleLoc,
7946 bool warnOnIncompleteProtocols);
7947
7948 /// Build a an Objective-C protocol-qualified 'id' type where no
7949 /// base type was specified.
7950 TypeResult actOnObjCProtocolQualifierType(
7951 SourceLocation lAngleLoc,
7952 ArrayRef<Decl *> protocols,
7953 ArrayRef<SourceLocation> protocolLocs,
7954 SourceLocation rAngleLoc);
7955
7956 /// Build a specialized and/or protocol-qualified Objective-C type.
7957 TypeResult actOnObjCTypeArgsAndProtocolQualifiers(
7958 Scope *S,
7959 SourceLocation Loc,
7960 ParsedType BaseType,
7961 SourceLocation TypeArgsLAngleLoc,
7962 ArrayRef<ParsedType> TypeArgs,
7963 SourceLocation TypeArgsRAngleLoc,
7964 SourceLocation ProtocolLAngleLoc,
7965 ArrayRef<Decl *> Protocols,
7966 ArrayRef<SourceLocation> ProtocolLocs,
7967 SourceLocation ProtocolRAngleLoc);
7968
7969 /// Build an Objective-C type parameter type.
7970 QualType BuildObjCTypeParamType(const ObjCTypeParamDecl *Decl,
7971 SourceLocation ProtocolLAngleLoc,
7972 ArrayRef<ObjCProtocolDecl *> Protocols,
7973 ArrayRef<SourceLocation> ProtocolLocs,
7974 SourceLocation ProtocolRAngleLoc,
7975 bool FailOnError = false);
7976
7977 /// Build an Objective-C object pointer type.
7978 QualType BuildObjCObjectType(QualType BaseType,
7979 SourceLocation Loc,
7980 SourceLocation TypeArgsLAngleLoc,
7981 ArrayRef<TypeSourceInfo *> TypeArgs,
7982 SourceLocation TypeArgsRAngleLoc,
7983 SourceLocation ProtocolLAngleLoc,
7984 ArrayRef<ObjCProtocolDecl *> Protocols,
7985 ArrayRef<SourceLocation> ProtocolLocs,
7986 SourceLocation ProtocolRAngleLoc,
7987 bool FailOnError = false);
7988
7989 /// Check the application of the Objective-C '__kindof' qualifier to
7990 /// the given type.
7991 bool checkObjCKindOfType(QualType &type, SourceLocation loc);
7992
7993 /// Ensure attributes are consistent with type.
7994 /// \param [in, out] Attributes The attributes to check; they will
7995 /// be modified to be consistent with \p PropertyTy.
7996 void CheckObjCPropertyAttributes(Decl *PropertyPtrTy,
7997 SourceLocation Loc,
7998 unsigned &Attributes,
7999 bool propertyInPrimaryClass);
8000
8001 /// Process the specified property declaration and create decls for the
8002 /// setters and getters as needed.
8003 /// \param property The property declaration being processed
8004 void ProcessPropertyDecl(ObjCPropertyDecl *property);
8005
8006
8007 void DiagnosePropertyMismatch(ObjCPropertyDecl *Property,
8008 ObjCPropertyDecl *SuperProperty,
8009 const IdentifierInfo *Name,
8010 bool OverridingProtocolProperty);
8011
8012 void DiagnoseClassExtensionDupMethods(ObjCCategoryDecl *CAT,
8013 ObjCInterfaceDecl *ID);
8014
8015 Decl *ActOnAtEnd(Scope *S, SourceRange AtEnd,
8016 ArrayRef<Decl *> allMethods = None,
8017 ArrayRef<DeclGroupPtrTy> allTUVars = None);
8018
8019 Decl *ActOnProperty(Scope *S, SourceLocation AtLoc,
8020 SourceLocation LParenLoc,
8021 FieldDeclarator &FD, ObjCDeclSpec &ODS,
8022 Selector GetterSel, Selector SetterSel,
8023 tok::ObjCKeywordKind MethodImplKind,
8024 DeclContext *lexicalDC = nullptr);
8025
8026 Decl *ActOnPropertyImplDecl(Scope *S,
8027 SourceLocation AtLoc,
8028 SourceLocation PropertyLoc,
8029 bool ImplKind,
8030 IdentifierInfo *PropertyId,
8031 IdentifierInfo *PropertyIvar,
8032 SourceLocation PropertyIvarLoc,
8033 ObjCPropertyQueryKind QueryKind);
8034
8035 enum ObjCSpecialMethodKind {
8036 OSMK_None,
8037 OSMK_Alloc,
8038 OSMK_New,
8039 OSMK_Copy,
8040 OSMK_RetainingInit,
8041 OSMK_NonRetainingInit
8042 };
8043
8044 struct ObjCArgInfo {
8045 IdentifierInfo *Name;
8046 SourceLocation NameLoc;
8047 // The Type is null if no type was specified, and the DeclSpec is invalid
8048 // in this case.
8049 ParsedType Type;
8050 ObjCDeclSpec DeclSpec;
8051
8052 /// ArgAttrs - Attribute list for this argument.
8053 AttributeList *ArgAttrs;
8054 };
8055
8056 Decl *ActOnMethodDeclaration(
8057 Scope *S,
8058 SourceLocation BeginLoc, // location of the + or -.
8059 SourceLocation EndLoc, // location of the ; or {.
8060 tok::TokenKind MethodType,
8061 ObjCDeclSpec &ReturnQT, ParsedType ReturnType,
8062 ArrayRef<SourceLocation> SelectorLocs, Selector Sel,
8063 // optional arguments. The number of types/arguments is obtained
8064 // from the Sel.getNumArgs().
8065 ObjCArgInfo *ArgInfo,
8066 DeclaratorChunk::ParamInfo *CParamInfo, unsigned CNumArgs, // c-style args
8067 AttributeList *AttrList, tok::ObjCKeywordKind MethodImplKind,
8068 bool isVariadic, bool MethodDefinition);
8069
8070 ObjCMethodDecl *LookupMethodInQualifiedType(Selector Sel,
8071 const ObjCObjectPointerType *OPT,
8072 bool IsInstance);
8073 ObjCMethodDecl *LookupMethodInObjectType(Selector Sel, QualType Ty,
8074 bool IsInstance);
8075
8076 bool CheckARCMethodDecl(ObjCMethodDecl *method);
8077 bool inferObjCARCLifetime(ValueDecl *decl);
8078
8079 ExprResult
8080 HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT,
8081 Expr *BaseExpr,
8082 SourceLocation OpLoc,
8083 DeclarationName MemberName,
8084 SourceLocation MemberLoc,
8085 SourceLocation SuperLoc, QualType SuperType,
8086 bool Super);
8087
8088 ExprResult
8089 ActOnClassPropertyRefExpr(IdentifierInfo &receiverName,
8090 IdentifierInfo &propertyName,
8091 SourceLocation receiverNameLoc,
8092 SourceLocation propertyNameLoc);
8093
8094 ObjCMethodDecl *tryCaptureObjCSelf(SourceLocation Loc);
8095
8096 /// \brief Describes the kind of message expression indicated by a message
8097 /// send that starts with an identifier.
8098 enum ObjCMessageKind {
8099 /// \brief The message is sent to 'super'.
8100 ObjCSuperMessage,
8101 /// \brief The message is an instance message.
8102 ObjCInstanceMessage,
8103 /// \brief The message is a class message, and the identifier is a type
8104 /// name.
8105 ObjCClassMessage
8106 };
8107
8108 ObjCMessageKind getObjCMessageKind(Scope *S,
8109 IdentifierInfo *Name,
8110 SourceLocation NameLoc,
8111 bool IsSuper,
8112 bool HasTrailingDot,
8113 ParsedType &ReceiverType);
8114
8115 ExprResult ActOnSuperMessage(Scope *S, SourceLocation SuperLoc,
8116 Selector Sel,
8117 SourceLocation LBracLoc,
8118 ArrayRef<SourceLocation> SelectorLocs,
8119 SourceLocation RBracLoc,
8120 MultiExprArg Args);
8121
8122 ExprResult BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo,
8123 QualType ReceiverType,
8124 SourceLocation SuperLoc,
8125 Selector Sel,
8126 ObjCMethodDecl *Method,
8127 SourceLocation LBracLoc,
8128 ArrayRef<SourceLocation> SelectorLocs,
8129 SourceLocation RBracLoc,
8130 MultiExprArg Args,
8131 bool isImplicit = false);
8132
8133 ExprResult BuildClassMessageImplicit(QualType ReceiverType,
8134 bool isSuperReceiver,
8135 SourceLocation Loc,
8136 Selector Sel,
8137 ObjCMethodDecl *Method,
8138 MultiExprArg Args);
8139
8140 ExprResult ActOnClassMessage(Scope *S,
8141 ParsedType Receiver,
8142 Selector Sel,
8143 SourceLocation LBracLoc,
8144 ArrayRef<SourceLocation> SelectorLocs,
8145 SourceLocation RBracLoc,
8146 MultiExprArg Args);
8147
8148 ExprResult BuildInstanceMessage(Expr *Receiver,
8149 QualType ReceiverType,
8150 SourceLocation SuperLoc,
8151 Selector Sel,
8152 ObjCMethodDecl *Method,
8153 SourceLocation LBracLoc,
8154 ArrayRef<SourceLocation> SelectorLocs,
8155 SourceLocation RBracLoc,
8156 MultiExprArg Args,
8157 bool isImplicit = false);
8158
8159 ExprResult BuildInstanceMessageImplicit(Expr *Receiver,
8160 QualType ReceiverType,
8161 SourceLocation Loc,
8162 Selector Sel,
8163 ObjCMethodDecl *Method,
8164 MultiExprArg Args);
8165
8166 ExprResult ActOnInstanceMessage(Scope *S,
8167 Expr *Receiver,
8168 Selector Sel,
8169 SourceLocation LBracLoc,
8170 ArrayRef<SourceLocation> SelectorLocs,
8171 SourceLocation RBracLoc,
8172 MultiExprArg Args);
8173
8174 ExprResult BuildObjCBridgedCast(SourceLocation LParenLoc,
8175 ObjCBridgeCastKind Kind,
8176 SourceLocation BridgeKeywordLoc,
8177 TypeSourceInfo *TSInfo,
8178 Expr *SubExpr);
8179
8180 ExprResult ActOnObjCBridgedCast(Scope *S,
8181 SourceLocation LParenLoc,
8182 ObjCBridgeCastKind Kind,
8183 SourceLocation BridgeKeywordLoc,
8184 ParsedType Type,
8185 SourceLocation RParenLoc,
8186 Expr *SubExpr);
8187
8188 void CheckTollFreeBridgeCast(QualType castType, Expr *castExpr);
8189
8190 void CheckObjCBridgeRelatedCast(QualType castType, Expr *castExpr);
8191
8192 bool CheckTollFreeBridgeStaticCast(QualType castType, Expr *castExpr,
8193 CastKind &Kind);
8194
8195 bool checkObjCBridgeRelatedComponents(SourceLocation Loc,
8196 QualType DestType, QualType SrcType,
8197 ObjCInterfaceDecl *&RelatedClass,
8198 ObjCMethodDecl *&ClassMethod,
8199 ObjCMethodDecl *&InstanceMethod,
8200 TypedefNameDecl *&TDNDecl,
8201 bool CfToNs, bool Diagnose = true);
8202
8203 bool CheckObjCBridgeRelatedConversions(SourceLocation Loc,
8204 QualType DestType, QualType SrcType,
8205 Expr *&SrcExpr, bool Diagnose = true);
8206
8207 bool ConversionToObjCStringLiteralCheck(QualType DstType, Expr *&SrcExpr,
8208 bool Diagnose = true);
8209
8210 bool checkInitMethod(ObjCMethodDecl *method, QualType receiverTypeIfCall);
8211
8212 /// \brief Check whether the given new method is a valid override of the
8213 /// given overridden method, and set any properties that should be inherited.
8214 void CheckObjCMethodOverride(ObjCMethodDecl *NewMethod,
8215 const ObjCMethodDecl *Overridden);
8216
8217 /// \brief Describes the compatibility of a result type with its method.
8218 enum ResultTypeCompatibilityKind {
8219 RTC_Compatible,
8220 RTC_Incompatible,
8221 RTC_Unknown
8222 };
8223
8224 void CheckObjCMethodOverrides(ObjCMethodDecl *ObjCMethod,
8225 ObjCInterfaceDecl *CurrentClass,
8226 ResultTypeCompatibilityKind RTC);
8227
8228 enum PragmaOptionsAlignKind {
8229 POAK_Native, // #pragma options align=native
8230 POAK_Natural, // #pragma options align=natural
8231 POAK_Packed, // #pragma options align=packed
8232 POAK_Power, // #pragma options align=power
8233 POAK_Mac68k, // #pragma options align=mac68k
8234 POAK_Reset // #pragma options align=reset
8235 };
8236
8237 /// ActOnPragmaClangSection - Called on well formed \#pragma clang section
8238 void ActOnPragmaClangSection(SourceLocation PragmaLoc,
8239 PragmaClangSectionAction Action,
8240 PragmaClangSectionKind SecKind, StringRef SecName);
8241
8242 /// ActOnPragmaOptionsAlign - Called on well formed \#pragma options align.
8243 void ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind,
8244 SourceLocation PragmaLoc);
8245
8246 /// ActOnPragmaPack - Called on well formed \#pragma pack(...).
8247 void ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action,
8248 StringRef SlotLabel, Expr *Alignment);
8249
8250 enum class PragmaPackDiagnoseKind {
8251 NonDefaultStateAtInclude,
8252 ChangedStateAtExit
8253 };
8254
8255 void DiagnoseNonDefaultPragmaPack(PragmaPackDiagnoseKind Kind,
8256 SourceLocation IncludeLoc);
8257 void DiagnoseUnterminatedPragmaPack();
8258
8259 /// ActOnPragmaMSStruct - Called on well formed \#pragma ms_struct [on|off].
8260 void ActOnPragmaMSStruct(PragmaMSStructKind Kind);
8261
8262 /// ActOnPragmaMSComment - Called on well formed
8263 /// \#pragma comment(kind, "arg").
8264 void ActOnPragmaMSComment(SourceLocation CommentLoc, PragmaMSCommentKind Kind,
8265 StringRef Arg);
8266
8267 /// ActOnPragmaMSPointersToMembers - called on well formed \#pragma
8268 /// pointers_to_members(representation method[, general purpose
8269 /// representation]).
8270 void ActOnPragmaMSPointersToMembers(
8271 LangOptions::PragmaMSPointersToMembersKind Kind,
8272 SourceLocation PragmaLoc);
8273
8274 /// \brief Called on well formed \#pragma vtordisp().
8275 void ActOnPragmaMSVtorDisp(PragmaMsStackAction Action,
8276 SourceLocation PragmaLoc,
8277 MSVtorDispAttr::Mode Value);
8278
8279 enum PragmaSectionKind {
8280 PSK_DataSeg,
8281 PSK_BSSSeg,
8282 PSK_ConstSeg,
8283 PSK_CodeSeg,
8284 };
8285
8286 bool UnifySection(StringRef SectionName,
8287 int SectionFlags,
8288 DeclaratorDecl *TheDecl);
8289 bool UnifySection(StringRef SectionName,
8290 int SectionFlags,
8291 SourceLocation PragmaSectionLocation);
8292
8293 /// \brief Called on well formed \#pragma bss_seg/data_seg/const_seg/code_seg.
8294 void ActOnPragmaMSSeg(SourceLocation PragmaLocation,
8295 PragmaMsStackAction Action,
8296 llvm::StringRef StackSlotLabel,
8297 StringLiteral *SegmentName,
8298 llvm::StringRef PragmaName);
8299
8300 /// \brief Called on well formed \#pragma section().
8301 void ActOnPragmaMSSection(SourceLocation PragmaLocation,
8302 int SectionFlags, StringLiteral *SegmentName);
8303
8304 /// \brief Called on well-formed \#pragma init_seg().
8305 void ActOnPragmaMSInitSeg(SourceLocation PragmaLocation,
8306 StringLiteral *SegmentName);
8307
8308 /// \brief Called on #pragma clang __debug dump II
8309 void ActOnPragmaDump(Scope *S, SourceLocation Loc, IdentifierInfo *II);
8310
8311 /// ActOnPragmaDetectMismatch - Call on well-formed \#pragma detect_mismatch
8312 void ActOnPragmaDetectMismatch(SourceLocation Loc, StringRef Name,
8313 StringRef Value);
8314
8315 /// ActOnPragmaUnused - Called on well-formed '\#pragma unused'.
8316 void ActOnPragmaUnused(const Token &Identifier,
8317 Scope *curScope,
8318 SourceLocation PragmaLoc);
8319
8320 /// ActOnPragmaVisibility - Called on well formed \#pragma GCC visibility... .
8321 void ActOnPragmaVisibility(const IdentifierInfo* VisType,
8322 SourceLocation PragmaLoc);
8323
8324 NamedDecl *DeclClonePragmaWeak(NamedDecl *ND, IdentifierInfo *II,
8325 SourceLocation Loc);
8326 void DeclApplyPragmaWeak(Scope *S, NamedDecl *ND, WeakInfo &W);
8327
8328 /// ActOnPragmaWeakID - Called on well formed \#pragma weak ident.
8329 void ActOnPragmaWeakID(IdentifierInfo* WeakName,
8330 SourceLocation PragmaLoc,
8331 SourceLocation WeakNameLoc);
8332
8333 /// ActOnPragmaRedefineExtname - Called on well formed
8334 /// \#pragma redefine_extname oldname newname.
8335 void ActOnPragmaRedefineExtname(IdentifierInfo* WeakName,
8336 IdentifierInfo* AliasName,
8337 SourceLocation PragmaLoc,
8338 SourceLocation WeakNameLoc,
8339 SourceLocation AliasNameLoc);
8340
8341 /// ActOnPragmaWeakAlias - Called on well formed \#pragma weak ident = ident.
8342 void ActOnPragmaWeakAlias(IdentifierInfo* WeakName,
8343 IdentifierInfo* AliasName,
8344 SourceLocation PragmaLoc,
8345 SourceLocation WeakNameLoc,
8346 SourceLocation AliasNameLoc);
8347
8348 /// ActOnPragmaFPContract - Called on well formed
8349 /// \#pragma {STDC,OPENCL} FP_CONTRACT and
8350 /// \#pragma clang fp contract
8351 void ActOnPragmaFPContract(LangOptions::FPContractModeKind FPC);
8352
8353 /// AddAlignmentAttributesForRecord - Adds any needed alignment attributes to
8354 /// a the record decl, to handle '\#pragma pack' and '\#pragma options align'.
8355 void AddAlignmentAttributesForRecord(RecordDecl *RD);
8356
8357 /// AddMsStructLayoutForRecord - Adds ms_struct layout attribute to record.
8358 void AddMsStructLayoutForRecord(RecordDecl *RD);
8359
8360 /// FreePackedContext - Deallocate and null out PackContext.
8361 void FreePackedContext();
8362
8363 /// PushNamespaceVisibilityAttr - Note that we've entered a
8364 /// namespace with a visibility attribute.
8365 void PushNamespaceVisibilityAttr(const VisibilityAttr *Attr,
8366 SourceLocation Loc);
8367
8368 /// AddPushedVisibilityAttribute - If '\#pragma GCC visibility' was used,
8369 /// add an appropriate visibility attribute.
8370 void AddPushedVisibilityAttribute(Decl *RD);
8371
8372 /// PopPragmaVisibility - Pop the top element of the visibility stack; used
8373 /// for '\#pragma GCC visibility' and visibility attributes on namespaces.
8374 void PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc);
8375
8376 /// FreeVisContext - Deallocate and null out VisContext.
8377 void FreeVisContext();
8378
8379 /// AddCFAuditedAttribute - Check whether we're currently within
8380 /// '\#pragma clang arc_cf_code_audited' and, if so, consider adding
8381 /// the appropriate attribute.
8382 void AddCFAuditedAttribute(Decl *D);
8383
8384 /// \brief Called on well-formed '\#pragma clang attribute push'.
8385 void ActOnPragmaAttributePush(AttributeList &Attribute,
8386 SourceLocation PragmaLoc,
8387 attr::ParsedSubjectMatchRuleSet Rules);
8388
8389 /// \brief Called on well-formed '\#pragma clang attribute pop'.
8390 void ActOnPragmaAttributePop(SourceLocation PragmaLoc);
8391
8392 /// \brief Adds the attributes that have been specified using the
8393 /// '\#pragma clang attribute push' directives to the given declaration.
8394 void AddPragmaAttributes(Scope *S, Decl *D);
8395
8396 void DiagnoseUnterminatedPragmaAttribute();
8397
8398 /// \brief Called on well formed \#pragma clang optimize.
8399 void ActOnPragmaOptimize(bool On, SourceLocation PragmaLoc);
8400
8401 /// \brief Get the location for the currently active "\#pragma clang optimize
8402 /// off". If this location is invalid, then the state of the pragma is "on".
8403 SourceLocation getOptimizeOffPragmaLocation() const {
8404 return OptimizeOffPragmaLocation;
8405 }
8406
8407 /// \brief Only called on function definitions; if there is a pragma in scope
8408 /// with the effect of a range-based optnone, consider marking the function
8409 /// with attribute optnone.
8410 void AddRangeBasedOptnone(FunctionDecl *FD);
8411
8412 /// \brief Adds the 'optnone' attribute to the function declaration if there
8413 /// are no conflicts; Loc represents the location causing the 'optnone'
8414 /// attribute to be added (usually because of a pragma).
8415 void AddOptnoneAttributeIfNoConflicts(FunctionDecl *FD, SourceLocation Loc);
8416
8417 /// AddAlignedAttr - Adds an aligned attribute to a particular declaration.
8418 void AddAlignedAttr(SourceRange AttrRange, Decl *D, Expr *E,
8419 unsigned SpellingListIndex, bool IsPackExpansion);
8420 void AddAlignedAttr(SourceRange AttrRange, Decl *D, TypeSourceInfo *T,
8421 unsigned SpellingListIndex, bool IsPackExpansion);
8422
8423 /// AddAssumeAlignedAttr - Adds an assume_aligned attribute to a particular
8424 /// declaration.
8425 void AddAssumeAlignedAttr(SourceRange AttrRange, Decl *D, Expr *E, Expr *OE,
8426 unsigned SpellingListIndex);
8427
8428 /// AddAllocAlignAttr - Adds an alloc_align attribute to a particular
8429 /// declaration.
8430 void AddAllocAlignAttr(SourceRange AttrRange, Decl *D, Expr *ParamExpr,
8431 unsigned SpellingListIndex);
8432
8433 /// AddAlignValueAttr - Adds an align_value attribute to a particular
8434 /// declaration.
8435 void AddAlignValueAttr(SourceRange AttrRange, Decl *D, Expr *E,
8436 unsigned SpellingListIndex);
8437
8438 /// AddLaunchBoundsAttr - Adds a launch_bounds attribute to a particular
8439 /// declaration.
8440 void AddLaunchBoundsAttr(SourceRange AttrRange, Decl *D, Expr *MaxThreads,
8441 Expr *MinBlocks, unsigned SpellingListIndex);
8442
8443 /// AddModeAttr - Adds a mode attribute to a particular declaration.
8444 void AddModeAttr(SourceRange AttrRange, Decl *D, IdentifierInfo *Name,
8445 unsigned SpellingListIndex, bool InInstantiation = false);
8446
8447 void AddParameterABIAttr(SourceRange AttrRange, Decl *D,
8448 ParameterABI ABI, unsigned SpellingListIndex);
8449
8450 void AddNSConsumedAttr(SourceRange AttrRange, Decl *D,
8451 unsigned SpellingListIndex, bool isNSConsumed,
8452 bool isTemplateInstantiation);
8453
8454 bool checkNSReturnsRetainedReturnType(SourceLocation loc, QualType type);
8455
8456 //===--------------------------------------------------------------------===//
8457 // C++ Coroutines TS
8458 //
8459 bool ActOnCoroutineBodyStart(Scope *S, SourceLocation KwLoc,
8460 StringRef Keyword);
8461 ExprResult ActOnCoawaitExpr(Scope *S, SourceLocation KwLoc, Expr *E);
8462 ExprResult ActOnCoyieldExpr(Scope *S, SourceLocation KwLoc, Expr *E);
8463 StmtResult ActOnCoreturnStmt(Scope *S, SourceLocation KwLoc, Expr *E);
8464
8465 ExprResult BuildResolvedCoawaitExpr(SourceLocation KwLoc, Expr *E,
8466 bool IsImplicit = false);
8467 ExprResult BuildUnresolvedCoawaitExpr(SourceLocation KwLoc, Expr *E,
8468 UnresolvedLookupExpr* Lookup);
8469 ExprResult BuildCoyieldExpr(SourceLocation KwLoc, Expr *E);
8470 StmtResult BuildCoreturnStmt(SourceLocation KwLoc, Expr *E,
8471 bool IsImplicit = false);
8472 StmtResult BuildCoroutineBodyStmt(CoroutineBodyStmt::CtorArgs);
8473 VarDecl *buildCoroutinePromise(SourceLocation Loc);
8474 void CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body);
8475
8476 //===--------------------------------------------------------------------===//
8477 // OpenCL extensions.
8478 //
8479private:
8480 std::string CurrOpenCLExtension;
8481 /// Extensions required by an OpenCL type.
8482 llvm::DenseMap<const Type*, std::set<std::string>> OpenCLTypeExtMap;
8483 /// Extensions required by an OpenCL declaration.
8484 llvm::DenseMap<const Decl*, std::set<std::string>> OpenCLDeclExtMap;
8485public:
8486 llvm::StringRef getCurrentOpenCLExtension() const {
8487 return CurrOpenCLExtension;
8488 }
8489 void setCurrentOpenCLExtension(llvm::StringRef Ext) {
8490 CurrOpenCLExtension = Ext;
8491 }
8492
8493 /// \brief Set OpenCL extensions for a type which can only be used when these
8494 /// OpenCL extensions are enabled. If \p Exts is empty, do nothing.
8495 /// \param Exts A space separated list of OpenCL extensions.
8496 void setOpenCLExtensionForType(QualType T, llvm::StringRef Exts);
8497
8498 /// \brief Set OpenCL extensions for a declaration which can only be
8499 /// used when these OpenCL extensions are enabled. If \p Exts is empty, do
8500 /// nothing.
8501 /// \param Exts A space separated list of OpenCL extensions.
8502 void setOpenCLExtensionForDecl(Decl *FD, llvm::StringRef Exts);
8503
8504 /// \brief Set current OpenCL extensions for a type which can only be used
8505 /// when these OpenCL extensions are enabled. If current OpenCL extension is
8506 /// empty, do nothing.
8507 void setCurrentOpenCLExtensionForType(QualType T);
8508
8509 /// \brief Set current OpenCL extensions for a declaration which
8510 /// can only be used when these OpenCL extensions are enabled. If current
8511 /// OpenCL extension is empty, do nothing.
8512 void setCurrentOpenCLExtensionForDecl(Decl *FD);
8513
8514 bool isOpenCLDisabledDecl(Decl *FD);
8515
8516 /// \brief Check if type \p T corresponding to declaration specifier \p DS
8517 /// is disabled due to required OpenCL extensions being disabled. If so,
8518 /// emit diagnostics.
8519 /// \return true if type is disabled.
8520 bool checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType T);
8521
8522 /// \brief Check if declaration \p D used by expression \p E
8523 /// is disabled due to required OpenCL extensions being disabled. If so,
8524 /// emit diagnostics.
8525 /// \return true if type is disabled.
8526 bool checkOpenCLDisabledDecl(const NamedDecl &D, const Expr &E);
8527
8528 //===--------------------------------------------------------------------===//
8529 // OpenMP directives and clauses.
8530 //
8531private:
8532 void *VarDataSharingAttributesStack;
8533 /// Set to true inside '#pragma omp declare target' region.
8534 bool IsInOpenMPDeclareTargetContext = false;
8535 /// \brief Initialization of data-sharing attributes stack.
8536 void InitDataSharingAttributesStack();
8537 void DestroyDataSharingAttributesStack();
8538 ExprResult
8539 VerifyPositiveIntegerConstantInClause(Expr *Op, OpenMPClauseKind CKind,
8540 bool StrictlyPositive = true);
8541 /// Returns OpenMP nesting level for current directive.
8542 unsigned getOpenMPNestingLevel() const;
8543
8544 /// Push new OpenMP function region for non-capturing function.
8545 void pushOpenMPFunctionRegion();
8546
8547 /// Pop OpenMP function region for non-capturing function.
8548 void popOpenMPFunctionRegion(const sema::FunctionScopeInfo *OldFSI);
8549
8550 /// Checks if a type or a declaration is disabled due to the owning extension
8551 /// being disabled, and emits diagnostic messages if it is disabled.
8552 /// \param D type or declaration to be checked.
8553 /// \param DiagLoc source location for the diagnostic message.
8554 /// \param DiagInfo information to be emitted for the diagnostic message.
8555 /// \param SrcRange source range of the declaration.
8556 /// \param Map maps type or declaration to the extensions.
8557 /// \param Selector selects diagnostic message: 0 for type and 1 for
8558 /// declaration.
8559 /// \return true if the type or declaration is disabled.
8560 template <typename T, typename DiagLocT, typename DiagInfoT, typename MapT>
8561 bool checkOpenCLDisabledTypeOrDecl(T D, DiagLocT DiagLoc, DiagInfoT DiagInfo,
8562 MapT &Map, unsigned Selector = 0,
8563 SourceRange SrcRange = SourceRange());
8564
8565public:
8566 /// \brief Return true if the provided declaration \a VD should be captured by
8567 /// reference.
8568 /// \param Level Relative level of nested OpenMP construct for that the check
8569 /// is performed.
8570 bool IsOpenMPCapturedByRef(ValueDecl *D, unsigned Level);
8571
8572 /// \brief Check if the specified variable is used in one of the private
8573 /// clauses (private, firstprivate, lastprivate, reduction etc.) in OpenMP
8574 /// constructs.
8575 VarDecl *IsOpenMPCapturedDecl(ValueDecl *D);
8576 ExprResult getOpenMPCapturedExpr(VarDecl *Capture, ExprValueKind VK,
8577 ExprObjectKind OK, SourceLocation Loc);
8578
8579 /// \brief Check if the specified variable is used in 'private' clause.
8580 /// \param Level Relative level of nested OpenMP construct for that the check
8581 /// is performed.
8582 bool isOpenMPPrivateDecl(ValueDecl *D, unsigned Level);
8583
8584 /// Sets OpenMP capture kind (OMPC_private, OMPC_firstprivate, OMPC_map etc.)
8585 /// for \p FD based on DSA for the provided corresponding captured declaration
8586 /// \p D.
8587 void setOpenMPCaptureKind(FieldDecl *FD, ValueDecl *D, unsigned Level);
8588
8589 /// \brief Check if the specified variable is captured by 'target' directive.
8590 /// \param Level Relative level of nested OpenMP construct for that the check
8591 /// is performed.
8592 bool isOpenMPTargetCapturedDecl(ValueDecl *D, unsigned Level);
8593
8594 ExprResult PerformOpenMPImplicitIntegerConversion(SourceLocation OpLoc,
8595 Expr *Op);
8596 /// \brief Called on start of new data sharing attribute block.
8597 void StartOpenMPDSABlock(OpenMPDirectiveKind K,
8598 const DeclarationNameInfo &DirName, Scope *CurScope,
8599 SourceLocation Loc);
8600 /// \brief Start analysis of clauses.
8601 void StartOpenMPClause(OpenMPClauseKind K);
8602 /// \brief End analysis of clauses.
8603 void EndOpenMPClause();
8604 /// \brief Called on end of data sharing attribute block.
8605 void EndOpenMPDSABlock(Stmt *CurDirective);
8606
8607 /// \brief Check if the current region is an OpenMP loop region and if it is,
8608 /// mark loop control variable, used in \p Init for loop initialization, as
8609 /// private by default.
8610 /// \param Init First part of the for loop.
8611 void ActOnOpenMPLoopInitialization(SourceLocation ForLoc, Stmt *Init);
8612
8613 // OpenMP directives and clauses.
8614 /// \brief Called on correct id-expression from the '#pragma omp
8615 /// threadprivate'.
8616 ExprResult ActOnOpenMPIdExpression(Scope *CurScope,
8617 CXXScopeSpec &ScopeSpec,
8618 const DeclarationNameInfo &Id);
8619 /// \brief Called on well-formed '#pragma omp threadprivate'.
8620 DeclGroupPtrTy ActOnOpenMPThreadprivateDirective(
8621 SourceLocation Loc,
8622 ArrayRef<Expr *> VarList);
8623 /// \brief Builds a new OpenMPThreadPrivateDecl and checks its correctness.
8624 OMPThreadPrivateDecl *CheckOMPThreadPrivateDecl(
8625 SourceLocation Loc,
8626 ArrayRef<Expr *> VarList);
8627 /// \brief Check if the specified type is allowed to be used in 'omp declare
8628 /// reduction' construct.
8629 QualType ActOnOpenMPDeclareReductionType(SourceLocation TyLoc,
8630 TypeResult ParsedType);
8631 /// \brief Called on start of '#pragma omp declare reduction'.
8632 DeclGroupPtrTy ActOnOpenMPDeclareReductionDirectiveStart(
8633 Scope *S, DeclContext *DC, DeclarationName Name,
8634 ArrayRef<std::pair<QualType, SourceLocation>> ReductionTypes,
8635 AccessSpecifier AS, Decl *PrevDeclInScope = nullptr);
8636 /// \brief Initialize declare reduction construct initializer.
8637 void ActOnOpenMPDeclareReductionCombinerStart(Scope *S, Decl *D);
8638 /// \brief Finish current declare reduction construct initializer.
8639 void ActOnOpenMPDeclareReductionCombinerEnd(Decl *D, Expr *Combiner);
8640 /// \brief Initialize declare reduction construct initializer.
8641 /// \return omp_priv variable.
8642 VarDecl *ActOnOpenMPDeclareReductionInitializerStart(Scope *S, Decl *D);
8643 /// \brief Finish current declare reduction construct initializer.
8644 void ActOnOpenMPDeclareReductionInitializerEnd(Decl *D, Expr *Initializer,
8645 VarDecl *OmpPrivParm);
8646 /// \brief Called at the end of '#pragma omp declare reduction'.
8647 DeclGroupPtrTy ActOnOpenMPDeclareReductionDirectiveEnd(
8648 Scope *S, DeclGroupPtrTy DeclReductions, bool IsValid);
8649
8650 /// Called on the start of target region i.e. '#pragma omp declare target'.
8651 bool ActOnStartOpenMPDeclareTargetDirective(SourceLocation Loc);
8652 /// Called at the end of target region i.e. '#pragme omp end declare target'.
8653 void ActOnFinishOpenMPDeclareTargetDirective();
8654 /// Called on correct id-expression from the '#pragma omp declare target'.
8655 void ActOnOpenMPDeclareTargetName(Scope *CurScope, CXXScopeSpec &ScopeSpec,
8656 const DeclarationNameInfo &Id,
8657 OMPDeclareTargetDeclAttr::MapTypeTy MT,
8658 NamedDeclSetType &SameDirectiveDecls);
8659 /// Check declaration inside target region.
8660 void checkDeclIsAllowedInOpenMPTarget(Expr *E, Decl *D);
8661 /// Return true inside OpenMP declare target region.
8662 bool isInOpenMPDeclareTargetContext() const {
8663 return IsInOpenMPDeclareTargetContext;
8664 }
8665 /// Return true inside OpenMP target region.
8666 bool isInOpenMPTargetExecutionDirective() const;
8667 /// Return true if (un)supported features for the current target should be
8668 /// diagnosed if OpenMP (offloading) is enabled.
8669 bool shouldDiagnoseTargetSupportFromOpenMP() const {
8670 return !getLangOpts().OpenMPIsDevice || isInOpenMPDeclareTargetContext() ||
8671 isInOpenMPTargetExecutionDirective();
8672 }
8673
8674 /// Return the number of captured regions created for an OpenMP directive.
8675 static int getOpenMPCaptureLevels(OpenMPDirectiveKind Kind);
8676
8677 /// \brief Initialization of captured region for OpenMP region.
8678 void ActOnOpenMPRegionStart(OpenMPDirectiveKind DKind, Scope *CurScope);
8679 /// \brief End of OpenMP region.
8680 ///
8681 /// \param S Statement associated with the current OpenMP region.
8682 /// \param Clauses List of clauses for the current OpenMP region.
8683 ///
8684 /// \returns Statement for finished OpenMP region.
8685 StmtResult ActOnOpenMPRegionEnd(StmtResult S, ArrayRef<OMPClause *> Clauses);
8686 StmtResult ActOnOpenMPExecutableDirective(
8687 OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName,
8688 OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses,
8689 Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc);
8690 /// \brief Called on well-formed '\#pragma omp parallel' after parsing
8691 /// of the associated statement.
8692 StmtResult ActOnOpenMPParallelDirective(ArrayRef<OMPClause *> Clauses,
8693 Stmt *AStmt,
8694 SourceLocation StartLoc,
8695 SourceLocation EndLoc);
8696 /// \brief Called on well-formed '\#pragma omp simd' after parsing
8697 /// of the associated statement.
8698 StmtResult ActOnOpenMPSimdDirective(
8699 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8700 SourceLocation EndLoc,
8701 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8702 /// \brief Called on well-formed '\#pragma omp for' after parsing
8703 /// of the associated statement.
8704 StmtResult ActOnOpenMPForDirective(
8705 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8706 SourceLocation EndLoc,
8707 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8708 /// \brief Called on well-formed '\#pragma omp for simd' after parsing
8709 /// of the associated statement.
8710 StmtResult ActOnOpenMPForSimdDirective(
8711 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8712 SourceLocation EndLoc,
8713 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8714 /// \brief Called on well-formed '\#pragma omp sections' after parsing
8715 /// of the associated statement.
8716 StmtResult ActOnOpenMPSectionsDirective(ArrayRef<OMPClause *> Clauses,
8717 Stmt *AStmt, SourceLocation StartLoc,
8718 SourceLocation EndLoc);
8719 /// \brief Called on well-formed '\#pragma omp section' after parsing of the
8720 /// associated statement.
8721 StmtResult ActOnOpenMPSectionDirective(Stmt *AStmt, SourceLocation StartLoc,
8722 SourceLocation EndLoc);
8723 /// \brief Called on well-formed '\#pragma omp single' after parsing of the
8724 /// associated statement.
8725 StmtResult ActOnOpenMPSingleDirective(ArrayRef<OMPClause *> Clauses,
8726 Stmt *AStmt, SourceLocation StartLoc,
8727 SourceLocation EndLoc);
8728 /// \brief Called on well-formed '\#pragma omp master' after parsing of the
8729 /// associated statement.
8730 StmtResult ActOnOpenMPMasterDirective(Stmt *AStmt, SourceLocation StartLoc,
8731 SourceLocation EndLoc);
8732 /// \brief Called on well-formed '\#pragma omp critical' after parsing of the
8733 /// associated statement.
8734 StmtResult ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName,
8735 ArrayRef<OMPClause *> Clauses,
8736 Stmt *AStmt, SourceLocation StartLoc,
8737 SourceLocation EndLoc);
8738 /// \brief Called on well-formed '\#pragma omp parallel for' after parsing
8739 /// of the associated statement.
8740 StmtResult ActOnOpenMPParallelForDirective(
8741 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8742 SourceLocation EndLoc,
8743 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8744 /// \brief Called on well-formed '\#pragma omp parallel for simd' after
8745 /// parsing of the associated statement.
8746 StmtResult ActOnOpenMPParallelForSimdDirective(
8747 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8748 SourceLocation EndLoc,
8749 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8750 /// \brief Called on well-formed '\#pragma omp parallel sections' after
8751 /// parsing of the associated statement.
8752 StmtResult ActOnOpenMPParallelSectionsDirective(ArrayRef<OMPClause *> Clauses,
8753 Stmt *AStmt,
8754 SourceLocation StartLoc,
8755 SourceLocation EndLoc);
8756 /// \brief Called on well-formed '\#pragma omp task' after parsing of the
8757 /// associated statement.
8758 StmtResult ActOnOpenMPTaskDirective(ArrayRef<OMPClause *> Clauses,
8759 Stmt *AStmt, SourceLocation StartLoc,
8760 SourceLocation EndLoc);
8761 /// \brief Called on well-formed '\#pragma omp taskyield'.
8762 StmtResult ActOnOpenMPTaskyieldDirective(SourceLocation StartLoc,
8763 SourceLocation EndLoc);
8764 /// \brief Called on well-formed '\#pragma omp barrier'.
8765 StmtResult ActOnOpenMPBarrierDirective(SourceLocation StartLoc,
8766 SourceLocation EndLoc);
8767 /// \brief Called on well-formed '\#pragma omp taskwait'.
8768 StmtResult ActOnOpenMPTaskwaitDirective(SourceLocation StartLoc,
8769 SourceLocation EndLoc);
8770 /// \brief Called on well-formed '\#pragma omp taskgroup'.
8771 StmtResult ActOnOpenMPTaskgroupDirective(ArrayRef<OMPClause *> Clauses,
8772 Stmt *AStmt, SourceLocation StartLoc,
8773 SourceLocation EndLoc);
8774 /// \brief Called on well-formed '\#pragma omp flush'.
8775 StmtResult ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses,
8776 SourceLocation StartLoc,
8777 SourceLocation EndLoc);
8778 /// \brief Called on well-formed '\#pragma omp ordered' after parsing of the
8779 /// associated statement.
8780 StmtResult ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses,
8781 Stmt *AStmt, SourceLocation StartLoc,
8782 SourceLocation EndLoc);
8783 /// \brief Called on well-formed '\#pragma omp atomic' after parsing of the
8784 /// associated statement.
8785 StmtResult ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses,
8786 Stmt *AStmt, SourceLocation StartLoc,
8787 SourceLocation EndLoc);
8788 /// \brief Called on well-formed '\#pragma omp target' after parsing of the
8789 /// associated statement.
8790 StmtResult ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses,
8791 Stmt *AStmt, SourceLocation StartLoc,
8792 SourceLocation EndLoc);
8793 /// \brief Called on well-formed '\#pragma omp target data' after parsing of
8794 /// the associated statement.
8795 StmtResult ActOnOpenMPTargetDataDirective(ArrayRef<OMPClause *> Clauses,
8796 Stmt *AStmt, SourceLocation StartLoc,
8797 SourceLocation EndLoc);
8798 /// \brief Called on well-formed '\#pragma omp target enter data' after
8799 /// parsing of the associated statement.
8800 StmtResult ActOnOpenMPTargetEnterDataDirective(ArrayRef<OMPClause *> Clauses,
8801 SourceLocation StartLoc,
8802 SourceLocation EndLoc,
8803 Stmt *AStmt);
8804 /// \brief Called on well-formed '\#pragma omp target exit data' after
8805 /// parsing of the associated statement.
8806 StmtResult ActOnOpenMPTargetExitDataDirective(ArrayRef<OMPClause *> Clauses,
8807 SourceLocation StartLoc,
8808 SourceLocation EndLoc,
8809 Stmt *AStmt);
8810 /// \brief Called on well-formed '\#pragma omp target parallel' after
8811 /// parsing of the associated statement.
8812 StmtResult ActOnOpenMPTargetParallelDirective(ArrayRef<OMPClause *> Clauses,
8813 Stmt *AStmt,
8814 SourceLocation StartLoc,
8815 SourceLocation EndLoc);
8816 /// \brief Called on well-formed '\#pragma omp target parallel for' after
8817 /// parsing of the associated statement.
8818 StmtResult ActOnOpenMPTargetParallelForDirective(
8819 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8820 SourceLocation EndLoc,
8821 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8822 /// \brief Called on well-formed '\#pragma omp teams' after parsing of the
8823 /// associated statement.
8824 StmtResult ActOnOpenMPTeamsDirective(ArrayRef<OMPClause *> Clauses,
8825 Stmt *AStmt, SourceLocation StartLoc,
8826 SourceLocation EndLoc);
8827 /// \brief Called on well-formed '\#pragma omp cancellation point'.
8828 StmtResult
8829 ActOnOpenMPCancellationPointDirective(SourceLocation StartLoc,
8830 SourceLocation EndLoc,
8831 OpenMPDirectiveKind CancelRegion);
8832 /// \brief Called on well-formed '\#pragma omp cancel'.
8833 StmtResult ActOnOpenMPCancelDirective(ArrayRef<OMPClause *> Clauses,
8834 SourceLocation StartLoc,
8835 SourceLocation EndLoc,
8836 OpenMPDirectiveKind CancelRegion);
8837 /// \brief Called on well-formed '\#pragma omp taskloop' after parsing of the
8838 /// associated statement.
8839 StmtResult ActOnOpenMPTaskLoopDirective(
8840 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8841 SourceLocation EndLoc,
8842 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8843 /// \brief Called on well-formed '\#pragma omp taskloop simd' after parsing of
8844 /// the associated statement.
8845 StmtResult ActOnOpenMPTaskLoopSimdDirective(
8846 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8847 SourceLocation EndLoc,
8848 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8849 /// \brief Called on well-formed '\#pragma omp distribute' after parsing
8850 /// of the associated statement.
8851 StmtResult ActOnOpenMPDistributeDirective(
8852 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8853 SourceLocation EndLoc,
8854 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8855 /// \brief Called on well-formed '\#pragma omp target update'.
8856 StmtResult ActOnOpenMPTargetUpdateDirective(ArrayRef<OMPClause *> Clauses,
8857 SourceLocation StartLoc,
8858 SourceLocation EndLoc,
8859 Stmt *AStmt);
8860 /// \brief Called on well-formed '\#pragma omp distribute parallel for' after
8861 /// parsing of the associated statement.
8862 StmtResult ActOnOpenMPDistributeParallelForDirective(
8863 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8864 SourceLocation EndLoc,
8865 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8866 /// \brief Called on well-formed '\#pragma omp distribute parallel for simd'
8867 /// after parsing of the associated statement.
8868 StmtResult ActOnOpenMPDistributeParallelForSimdDirective(
8869 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8870 SourceLocation EndLoc,
8871 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8872 /// \brief Called on well-formed '\#pragma omp distribute simd' after
8873 /// parsing of the associated statement.
8874 StmtResult ActOnOpenMPDistributeSimdDirective(
8875 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8876 SourceLocation EndLoc,
8877 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8878 /// \brief Called on well-formed '\#pragma omp target parallel for simd' after
8879 /// parsing of the associated statement.
8880 StmtResult ActOnOpenMPTargetParallelForSimdDirective(
8881 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8882 SourceLocation EndLoc,
8883 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8884 /// \brief Called on well-formed '\#pragma omp target simd' after parsing of
8885 /// the associated statement.
8886 StmtResult ActOnOpenMPTargetSimdDirective(
8887 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8888 SourceLocation EndLoc,
8889 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8890 /// Called on well-formed '\#pragma omp teams distribute' after parsing of
8891 /// the associated statement.
8892 StmtResult ActOnOpenMPTeamsDistributeDirective(
8893 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8894 SourceLocation EndLoc,
8895 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8896 /// Called on well-formed '\#pragma omp teams distribute simd' after parsing
8897 /// of the associated statement.
8898 StmtResult ActOnOpenMPTeamsDistributeSimdDirective(
8899 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8900 SourceLocation EndLoc,
8901 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8902 /// Called on well-formed '\#pragma omp teams distribute parallel for simd'
8903 /// after parsing of the associated statement.
8904 StmtResult ActOnOpenMPTeamsDistributeParallelForSimdDirective(
8905 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8906 SourceLocation EndLoc,
8907 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8908 /// Called on well-formed '\#pragma omp teams distribute parallel for'
8909 /// after parsing of the associated statement.
8910 StmtResult ActOnOpenMPTeamsDistributeParallelForDirective(
8911 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8912 SourceLocation EndLoc,
8913 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8914 /// Called on well-formed '\#pragma omp target teams' after parsing of the
8915 /// associated statement.
8916 StmtResult ActOnOpenMPTargetTeamsDirective(ArrayRef<OMPClause *> Clauses,
8917 Stmt *AStmt,
8918 SourceLocation StartLoc,
8919 SourceLocation EndLoc);
8920 /// Called on well-formed '\#pragma omp target teams distribute' after parsing
8921 /// of the associated statement.
8922 StmtResult ActOnOpenMPTargetTeamsDistributeDirective(
8923 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8924 SourceLocation EndLoc,
8925 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8926 /// Called on well-formed '\#pragma omp target teams distribute parallel for'
8927 /// after parsing of the associated statement.
8928 StmtResult ActOnOpenMPTargetTeamsDistributeParallelForDirective(
8929 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8930 SourceLocation EndLoc,
8931 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8932 /// Called on well-formed '\#pragma omp target teams distribute parallel for
8933 /// simd' after parsing of the associated statement.
8934 StmtResult ActOnOpenMPTargetTeamsDistributeParallelForSimdDirective(
8935 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8936 SourceLocation EndLoc,
8937 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8938 /// Called on well-formed '\#pragma omp target teams distribute simd' after
8939 /// parsing of the associated statement.
8940 StmtResult ActOnOpenMPTargetTeamsDistributeSimdDirective(
8941 ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
8942 SourceLocation EndLoc,
8943 llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
8944
8945 /// Checks correctness of linear modifiers.
8946 bool CheckOpenMPLinearModifier(OpenMPLinearClauseKind LinKind,
8947 SourceLocation LinLoc);
8948 /// Checks that the specified declaration matches requirements for the linear
8949 /// decls.
8950 bool CheckOpenMPLinearDecl(ValueDecl *D, SourceLocation ELoc,
8951 OpenMPLinearClauseKind LinKind, QualType Type);
8952
8953 /// \brief Called on well-formed '\#pragma omp declare simd' after parsing of
8954 /// the associated method/function.
8955 DeclGroupPtrTy ActOnOpenMPDeclareSimdDirective(
8956 DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS,
8957 Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds,
8958 ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears,
8959 ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR);
8960
8961 OMPClause *ActOnOpenMPSingleExprClause(OpenMPClauseKind Kind,
8962 Expr *Expr,
8963 SourceLocation StartLoc,
8964 SourceLocation LParenLoc,
8965 SourceLocation EndLoc);
8966 /// \brief Called on well-formed 'if' clause.
8967 OMPClause *ActOnOpenMPIfClause(OpenMPDirectiveKind NameModifier,
8968 Expr *Condition, SourceLocation StartLoc,
8969 SourceLocation LParenLoc,
8970 SourceLocation NameModifierLoc,
8971 SourceLocation ColonLoc,
8972 SourceLocation EndLoc);
8973 /// \brief Called on well-formed 'final' clause.
8974 OMPClause *ActOnOpenMPFinalClause(Expr *Condition, SourceLocation StartLoc,
8975 SourceLocation LParenLoc,
8976 SourceLocation EndLoc);
8977 /// \brief Called on well-formed 'num_threads' clause.
8978 OMPClause *ActOnOpenMPNumThreadsClause(Expr *NumThreads,
8979 SourceLocation StartLoc,
8980 SourceLocation LParenLoc,
8981 SourceLocation EndLoc);
8982 /// \brief Called on well-formed 'safelen' clause.
8983 OMPClause *ActOnOpenMPSafelenClause(Expr *Length,
8984 SourceLocation StartLoc,
8985 SourceLocation LParenLoc,
8986 SourceLocation EndLoc);
8987 /// \brief Called on well-formed 'simdlen' clause.
8988 OMPClause *ActOnOpenMPSimdlenClause(Expr *Length, SourceLocation StartLoc,
8989 SourceLocation LParenLoc,
8990 SourceLocation EndLoc);
8991 /// \brief Called on well-formed 'collapse' clause.
8992 OMPClause *ActOnOpenMPCollapseClause(Expr *NumForLoops,
8993 SourceLocation StartLoc,
8994 SourceLocation LParenLoc,
8995 SourceLocation EndLoc);
8996 /// \brief Called on well-formed 'ordered' clause.
8997 OMPClause *
8998 ActOnOpenMPOrderedClause(SourceLocation StartLoc, SourceLocation EndLoc,
8999 SourceLocation LParenLoc = SourceLocation(),
9000 Expr *NumForLoops = nullptr);
9001 /// \brief Called on well-formed 'grainsize' clause.
9002 OMPClause *ActOnOpenMPGrainsizeClause(Expr *Size, SourceLocation StartLoc,
9003 SourceLocation LParenLoc,
9004 SourceLocation EndLoc);
9005 /// \brief Called on well-formed 'num_tasks' clause.
9006 OMPClause *ActOnOpenMPNumTasksClause(Expr *NumTasks, SourceLocation StartLoc,
9007 SourceLocation LParenLoc,
9008 SourceLocation EndLoc);
9009 /// \brief Called on well-formed 'hint' clause.
9010 OMPClause *ActOnOpenMPHintClause(Expr *Hint, SourceLocation StartLoc,
9011 SourceLocation LParenLoc,
9012 SourceLocation EndLoc);
9013
9014 OMPClause *ActOnOpenMPSimpleClause(OpenMPClauseKind Kind,
9015 unsigned Argument,
9016 SourceLocation ArgumentLoc,
9017 SourceLocation StartLoc,
9018 SourceLocation LParenLoc,
9019 SourceLocation EndLoc);
9020 /// \brief Called on well-formed 'default' clause.
9021 OMPClause *ActOnOpenMPDefaultClause(OpenMPDefaultClauseKind Kind,
9022 SourceLocation KindLoc,
9023 SourceLocation StartLoc,
9024 SourceLocation LParenLoc,
9025 SourceLocation EndLoc);
9026 /// \brief Called on well-formed 'proc_bind' clause.
9027 OMPClause *ActOnOpenMPProcBindClause(OpenMPProcBindClauseKind Kind,
9028 SourceLocation KindLoc,
9029 SourceLocation StartLoc,
9030 SourceLocation LParenLoc,
9031 SourceLocation EndLoc);
9032
9033 OMPClause *ActOnOpenMPSingleExprWithArgClause(
9034 OpenMPClauseKind Kind, ArrayRef<unsigned> Arguments, Expr *Expr,
9035 SourceLocation StartLoc, SourceLocation LParenLoc,
9036 ArrayRef<SourceLocation> ArgumentsLoc, SourceLocation DelimLoc,
9037 SourceLocation EndLoc);
9038 /// \brief Called on well-formed 'schedule' clause.
9039 OMPClause *ActOnOpenMPScheduleClause(
9040 OpenMPScheduleClauseModifier M1, OpenMPScheduleClauseModifier M2,
9041 OpenMPScheduleClauseKind Kind, Expr *ChunkSize, SourceLocation StartLoc,
9042 SourceLocation LParenLoc, SourceLocation M1Loc, SourceLocation M2Loc,
9043 SourceLocation KindLoc, SourceLocation CommaLoc, SourceLocation EndLoc);
9044
9045 OMPClause *ActOnOpenMPClause(OpenMPClauseKind Kind, SourceLocation StartLoc,
9046 SourceLocation EndLoc);
9047 /// \brief Called on well-formed 'nowait' clause.
9048 OMPClause *ActOnOpenMPNowaitClause(SourceLocation StartLoc,
9049 SourceLocation EndLoc);
9050 /// \brief Called on well-formed 'untied' clause.
9051 OMPClause *ActOnOpenMPUntiedClause(SourceLocation StartLoc,
9052 SourceLocation EndLoc);
9053 /// \brief Called on well-formed 'mergeable' clause.
9054 OMPClause *ActOnOpenMPMergeableClause(SourceLocation StartLoc,
9055 SourceLocation EndLoc);
9056 /// \brief Called on well-formed 'read' clause.
9057 OMPClause *ActOnOpenMPReadClause(SourceLocation StartLoc,
9058 SourceLocation EndLoc);
9059 /// \brief Called on well-formed 'write' clause.
9060 OMPClause *ActOnOpenMPWriteClause(SourceLocation StartLoc,
9061 SourceLocation EndLoc);
9062 /// \brief Called on well-formed 'update' clause.
9063 OMPClause *ActOnOpenMPUpdateClause(SourceLocation StartLoc,
9064 SourceLocation EndLoc);
9065 /// \brief Called on well-formed 'capture' clause.
9066 OMPClause *ActOnOpenMPCaptureClause(SourceLocation StartLoc,
9067 SourceLocation EndLoc);
9068 /// \brief Called on well-formed 'seq_cst' clause.
9069 OMPClause *ActOnOpenMPSeqCstClause(SourceLocation StartLoc,
9070 SourceLocation EndLoc);
9071 /// \brief Called on well-formed 'threads' clause.
9072 OMPClause *ActOnOpenMPThreadsClause(SourceLocation StartLoc,
9073 SourceLocation EndLoc);
9074 /// \brief Called on well-formed 'simd' clause.
9075 OMPClause *ActOnOpenMPSIMDClause(SourceLocation StartLoc,
9076 SourceLocation EndLoc);
9077 /// \brief Called on well-formed 'nogroup' clause.
9078 OMPClause *ActOnOpenMPNogroupClause(SourceLocation StartLoc,
9079 SourceLocation EndLoc);
9080
9081 OMPClause *ActOnOpenMPVarListClause(
9082 OpenMPClauseKind Kind, ArrayRef<Expr *> Vars, Expr *TailExpr,
9083 SourceLocation StartLoc, SourceLocation LParenLoc,
9084 SourceLocation ColonLoc, SourceLocation EndLoc,
9085 CXXScopeSpec &ReductionIdScopeSpec,
9086 const DeclarationNameInfo &ReductionId, OpenMPDependClauseKind DepKind,
9087 OpenMPLinearClauseKind LinKind, OpenMPMapClauseKind MapTypeModifier,
9088 OpenMPMapClauseKind MapType, bool IsMapTypeImplicit,
9089 SourceLocation DepLinMapLoc);
9090 /// \brief Called on well-formed 'private' clause.
9091 OMPClause *ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList,
9092 SourceLocation StartLoc,
9093 SourceLocation LParenLoc,
9094 SourceLocation EndLoc);
9095 /// \brief Called on well-formed 'firstprivate' clause.
9096 OMPClause *ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList,
9097 SourceLocation StartLoc,
9098 SourceLocation LParenLoc,
9099 SourceLocation EndLoc);
9100 /// \brief Called on well-formed 'lastprivate' clause.
9101 OMPClause *ActOnOpenMPLastprivateClause(ArrayRef<Expr *> VarList,
9102 SourceLocation StartLoc,
9103 SourceLocation LParenLoc,
9104 SourceLocation EndLoc);
9105 /// \brief Called on well-formed 'shared' clause.
9106 OMPClause *ActOnOpenMPSharedClause(ArrayRef<Expr *> VarList,
9107 SourceLocation StartLoc,
9108 SourceLocation LParenLoc,
9109 SourceLocation EndLoc);
9110 /// \brief Called on well-formed 'reduction' clause.
9111 OMPClause *ActOnOpenMPReductionClause(
9112 ArrayRef<Expr *> VarList, SourceLocation StartLoc,
9113 SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc,
9114 CXXScopeSpec &ReductionIdScopeSpec,
9115 const DeclarationNameInfo &ReductionId,
9116 ArrayRef<Expr *> UnresolvedReductions = llvm::None);
9117 /// Called on well-formed 'task_reduction' clause.
9118 OMPClause *ActOnOpenMPTaskReductionClause(
9119 ArrayRef<Expr *> VarList, SourceLocation StartLoc,
9120 SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc,
9121 CXXScopeSpec &ReductionIdScopeSpec,
9122 const DeclarationNameInfo &ReductionId,
9123 ArrayRef<Expr *> UnresolvedReductions = llvm::None);
9124 /// Called on well-formed 'in_reduction' clause.
9125 OMPClause *ActOnOpenMPInReductionClause(
9126 ArrayRef<Expr *> VarList, SourceLocation StartLoc,
9127 SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc,
9128 CXXScopeSpec &ReductionIdScopeSpec,
9129 const DeclarationNameInfo &ReductionId,
9130 ArrayRef<Expr *> UnresolvedReductions = llvm::None);
9131 /// \brief Called on well-formed 'linear' clause.
9132 OMPClause *
9133 ActOnOpenMPLinearClause(ArrayRef<Expr *> VarList, Expr *Step,
9134 SourceLocation StartLoc, SourceLocation LParenLoc,
9135 OpenMPLinearClauseKind LinKind, SourceLocation LinLoc,
9136 SourceLocation ColonLoc, SourceLocation EndLoc);
9137 /// \brief Called on well-formed 'aligned' clause.
9138 OMPClause *ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList,
9139 Expr *Alignment,
9140 SourceLocation StartLoc,
9141 SourceLocation LParenLoc,
9142 SourceLocation ColonLoc,
9143 SourceLocation EndLoc);
9144 /// \brief Called on well-formed 'copyin' clause.
9145 OMPClause *ActOnOpenMPCopyinClause(ArrayRef<Expr *> VarList,
9146 SourceLocation StartLoc,
9147 SourceLocation LParenLoc,
9148 SourceLocation EndLoc);
9149 /// \brief Called on well-formed 'copyprivate' clause.
9150 OMPClause *ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList,
9151 SourceLocation StartLoc,
9152 SourceLocation LParenLoc,
9153 SourceLocation EndLoc);
9154 /// \brief Called on well-formed 'flush' pseudo clause.
9155 OMPClause *ActOnOpenMPFlushClause(ArrayRef<Expr *> VarList,
9156 SourceLocation StartLoc,
9157 SourceLocation LParenLoc,
9158 SourceLocation EndLoc);
9159 /// \brief Called on well-formed 'depend' clause.
9160 OMPClause *
9161 ActOnOpenMPDependClause(OpenMPDependClauseKind DepKind, SourceLocation DepLoc,
9162 SourceLocation ColonLoc, ArrayRef<Expr *> VarList,
9163 SourceLocation StartLoc, SourceLocation LParenLoc,
9164 SourceLocation EndLoc);
9165 /// \brief Called on well-formed 'device' clause.
9166 OMPClause *ActOnOpenMPDeviceClause(Expr *Device, SourceLocation StartLoc,
9167 SourceLocation LParenLoc,
9168 SourceLocation EndLoc);
9169 /// \brief Called on well-formed 'map' clause.
9170 OMPClause *
9171 ActOnOpenMPMapClause(OpenMPMapClauseKind MapTypeModifier,
9172 OpenMPMapClauseKind MapType, bool IsMapTypeImplicit,
9173 SourceLocation MapLoc, SourceLocation ColonLoc,
9174 ArrayRef<Expr *> VarList, SourceLocation StartLoc,
9175 SourceLocation LParenLoc, SourceLocation EndLoc);
9176 /// \brief Called on well-formed 'num_teams' clause.
9177 OMPClause *ActOnOpenMPNumTeamsClause(Expr *NumTeams, SourceLocation StartLoc,
9178 SourceLocation LParenLoc,
9179 SourceLocation EndLoc);
9180 /// \brief Called on well-formed 'thread_limit' clause.
9181 OMPClause *ActOnOpenMPThreadLimitClause(Expr *ThreadLimit,
9182 SourceLocation StartLoc,
9183 SourceLocation LParenLoc,
9184 SourceLocation EndLoc);
9185 /// \brief Called on well-formed 'priority' clause.
9186 OMPClause *ActOnOpenMPPriorityClause(Expr *Priority, SourceLocation StartLoc,
9187 SourceLocation LParenLoc,
9188 SourceLocation EndLoc);
9189 /// \brief Called on well-formed 'dist_schedule' clause.
9190 OMPClause *ActOnOpenMPDistScheduleClause(
9191 OpenMPDistScheduleClauseKind Kind, Expr *ChunkSize,
9192 SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation KindLoc,
9193 SourceLocation CommaLoc, SourceLocation EndLoc);
9194 /// \brief Called on well-formed 'defaultmap' clause.
9195 OMPClause *ActOnOpenMPDefaultmapClause(
9196 OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind,
9197 SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc,
9198 SourceLocation KindLoc, SourceLocation EndLoc);
9199 /// \brief Called on well-formed 'to' clause.
9200 OMPClause *ActOnOpenMPToClause(ArrayRef<Expr *> VarList,
9201 SourceLocation StartLoc,
9202 SourceLocation LParenLoc,
9203 SourceLocation EndLoc);
9204 /// \brief Called on well-formed 'from' clause.
9205 OMPClause *ActOnOpenMPFromClause(ArrayRef<Expr *> VarList,
9206 SourceLocation StartLoc,
9207 SourceLocation LParenLoc,
9208 SourceLocation EndLoc);
9209 /// Called on well-formed 'use_device_ptr' clause.
9210 OMPClause *ActOnOpenMPUseDevicePtrClause(ArrayRef<Expr *> VarList,
9211 SourceLocation StartLoc,
9212 SourceLocation LParenLoc,
9213 SourceLocation EndLoc);
9214 /// Called on well-formed 'is_device_ptr' clause.
9215 OMPClause *ActOnOpenMPIsDevicePtrClause(ArrayRef<Expr *> VarList,
9216 SourceLocation StartLoc,
9217 SourceLocation LParenLoc,
9218 SourceLocation EndLoc);
9219
9220 /// \brief The kind of conversion being performed.
9221 enum CheckedConversionKind {
9222 /// \brief An implicit conversion.
9223 CCK_ImplicitConversion,
9224 /// \brief A C-style cast.
9225 CCK_CStyleCast,
9226 /// \brief A functional-style cast.
9227 CCK_FunctionalCast,
9228 /// \brief A cast other than a C-style cast.
9229 CCK_OtherCast
9230 };
9231
9232 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit
9233 /// cast. If there is already an implicit cast, merge into the existing one.
9234 /// If isLvalue, the result of the cast is an lvalue.
9235 ExprResult ImpCastExprToType(Expr *E, QualType Type, CastKind CK,
9236 ExprValueKind VK = VK_RValue,
9237 const CXXCastPath *BasePath = nullptr,
9238 CheckedConversionKind CCK
9239 = CCK_ImplicitConversion);
9240
9241 /// ScalarTypeToBooleanCastKind - Returns the cast kind corresponding
9242 /// to the conversion from scalar type ScalarTy to the Boolean type.
9243 static CastKind ScalarTypeToBooleanCastKind(QualType ScalarTy);
9244
9245 /// IgnoredValueConversions - Given that an expression's result is
9246 /// syntactically ignored, perform any conversions that are
9247 /// required.
9248 ExprResult IgnoredValueConversions(Expr *E);
9249
9250 // UsualUnaryConversions - promotes integers (C99 6.3.1.1p2) and converts
9251 // functions and arrays to their respective pointers (C99 6.3.2.1).
9252 ExprResult UsualUnaryConversions(Expr *E);
9253
9254 /// CallExprUnaryConversions - a special case of an unary conversion
9255 /// performed on a function designator of a call expression.
9256 ExprResult CallExprUnaryConversions(Expr *E);
9257
9258 // DefaultFunctionArrayConversion - converts functions and arrays
9259 // to their respective pointers (C99 6.3.2.1).
9260 ExprResult DefaultFunctionArrayConversion(Expr *E, bool Diagnose = true);
9261
9262 // DefaultFunctionArrayLvalueConversion - converts functions and
9263 // arrays to their respective pointers and performs the
9264 // lvalue-to-rvalue conversion.
9265 ExprResult DefaultFunctionArrayLvalueConversion(Expr *E,
9266 bool Diagnose = true);
9267
9268 // DefaultLvalueConversion - performs lvalue-to-rvalue conversion on
9269 // the operand. This is DefaultFunctionArrayLvalueConversion,
9270 // except that it assumes the operand isn't of function or array
9271 // type.
9272 ExprResult DefaultLvalueConversion(Expr *E);
9273
9274 // DefaultArgumentPromotion (C99 6.5.2.2p6). Used for function calls that
9275 // do not have a prototype. Integer promotions are performed on each
9276 // argument, and arguments that have type float are promoted to double.
9277 ExprResult DefaultArgumentPromotion(Expr *E);
9278
9279 /// If \p E is a prvalue denoting an unmaterialized temporary, materialize
9280 /// it as an xvalue. In C++98, the result will still be a prvalue, because
9281 /// we don't have xvalues there.
9282 ExprResult TemporaryMaterializationConversion(Expr *E);
9283
9284 // Used for emitting the right warning by DefaultVariadicArgumentPromotion
9285 enum VariadicCallType {
9286 VariadicFunction,
9287 VariadicBlock,
9288 VariadicMethod,
9289 VariadicConstructor,
9290 VariadicDoesNotApply
9291 };
9292
9293 VariadicCallType getVariadicCallType(FunctionDecl *FDecl,
9294 const FunctionProtoType *Proto,
9295 Expr *Fn);
9296
9297 // Used for determining in which context a type is allowed to be passed to a
9298 // vararg function.
9299 enum VarArgKind {
9300 VAK_Valid,
9301 VAK_ValidInCXX11,
9302 VAK_Undefined,
9303 VAK_MSVCUndefined,
9304 VAK_Invalid
9305 };
9306
9307 // Determines which VarArgKind fits an expression.
9308 VarArgKind isValidVarArgType(const QualType &Ty);
9309
9310 /// Check to see if the given expression is a valid argument to a variadic
9311 /// function, issuing a diagnostic if not.
9312 void checkVariadicArgument(const Expr *E, VariadicCallType CT);
9313
9314 /// Check to see if a given expression could have '.c_str()' called on it.
9315 bool hasCStrMethod(const Expr *E);
9316
9317 /// GatherArgumentsForCall - Collector argument expressions for various
9318 /// form of call prototypes.
9319 bool GatherArgumentsForCall(SourceLocation CallLoc, FunctionDecl *FDecl,
9320 const FunctionProtoType *Proto,
9321 unsigned FirstParam, ArrayRef<Expr *> Args,
9322 SmallVectorImpl<Expr *> &AllArgs,
9323 VariadicCallType CallType = VariadicDoesNotApply,
9324 bool AllowExplicit = false,
9325 bool IsListInitialization = false);
9326
9327 // DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but
9328 // will create a runtime trap if the resulting type is not a POD type.
9329 ExprResult DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT,
9330 FunctionDecl *FDecl);
9331
9332 // UsualArithmeticConversions - performs the UsualUnaryConversions on it's
9333 // operands and then handles various conversions that are common to binary
9334 // operators (C99 6.3.1.8). If both operands aren't arithmetic, this
9335 // routine returns the first non-arithmetic type found. The client is
9336 // responsible for emitting appropriate error diagnostics.
9337 QualType UsualArithmeticConversions(ExprResult &LHS, ExprResult &RHS,
9338 bool IsCompAssign = false);
9339
9340 /// AssignConvertType - All of the 'assignment' semantic checks return this
9341 /// enum to indicate whether the assignment was allowed. These checks are
9342 /// done for simple assignments, as well as initialization, return from
9343 /// function, argument passing, etc. The query is phrased in terms of a
9344 /// source and destination type.
9345 enum AssignConvertType {
9346 /// Compatible - the types are compatible according to the standard.
9347 Compatible,
9348
9349 /// PointerToInt - The assignment converts a pointer to an int, which we
9350 /// accept as an extension.
9351 PointerToInt,
9352
9353 /// IntToPointer - The assignment converts an int to a pointer, which we
9354 /// accept as an extension.
9355 IntToPointer,
9356
9357 /// FunctionVoidPointer - The assignment is between a function pointer and
9358 /// void*, which the standard doesn't allow, but we accept as an extension.
9359 FunctionVoidPointer,
9360
9361 /// IncompatiblePointer - The assignment is between two pointers types that
9362 /// are not compatible, but we accept them as an extension.
9363 IncompatiblePointer,
9364
9365 /// IncompatiblePointerSign - The assignment is between two pointers types
9366 /// which point to integers which have a different sign, but are otherwise
9367 /// identical. This is a subset of the above, but broken out because it's by
9368 /// far the most common case of incompatible pointers.
9369 IncompatiblePointerSign,
9370
9371 /// CompatiblePointerDiscardsQualifiers - The assignment discards
9372 /// c/v/r qualifiers, which we accept as an extension.
9373 CompatiblePointerDiscardsQualifiers,
9374
9375 /// IncompatiblePointerDiscardsQualifiers - The assignment
9376 /// discards qualifiers that we don't permit to be discarded,
9377 /// like address spaces.
9378 IncompatiblePointerDiscardsQualifiers,
9379
9380 /// IncompatibleNestedPointerQualifiers - The assignment is between two
9381 /// nested pointer types, and the qualifiers other than the first two
9382 /// levels differ e.g. char ** -> const char **, but we accept them as an
9383 /// extension.
9384 IncompatibleNestedPointerQualifiers,
9385
9386 /// IncompatibleVectors - The assignment is between two vector types that
9387 /// have the same size, which we accept as an extension.
9388 IncompatibleVectors,
9389
9390 /// IntToBlockPointer - The assignment converts an int to a block
9391 /// pointer. We disallow this.
9392 IntToBlockPointer,
9393
9394 /// IncompatibleBlockPointer - The assignment is between two block
9395 /// pointers types that are not compatible.
9396 IncompatibleBlockPointer,
9397
9398 /// IncompatibleObjCQualifiedId - The assignment is between a qualified
9399 /// id type and something else (that is incompatible with it). For example,
9400 /// "id <XXX>" = "Foo *", where "Foo *" doesn't implement the XXX protocol.
9401 IncompatibleObjCQualifiedId,
9402
9403 /// IncompatibleObjCWeakRef - Assigning a weak-unavailable object to an
9404 /// object with __weak qualifier.
9405 IncompatibleObjCWeakRef,
9406
9407 /// Incompatible - We reject this conversion outright, it is invalid to
9408 /// represent it in the AST.
9409 Incompatible
9410 };
9411
9412 /// DiagnoseAssignmentResult - Emit a diagnostic, if required, for the
9413 /// assignment conversion type specified by ConvTy. This returns true if the
9414 /// conversion was invalid or false if the conversion was accepted.
9415 bool DiagnoseAssignmentResult(AssignConvertType ConvTy,
9416 SourceLocation Loc,
9417 QualType DstType, QualType SrcType,
9418 Expr *SrcExpr, AssignmentAction Action,
9419 bool *Complained = nullptr);
9420
9421 /// IsValueInFlagEnum - Determine if a value is allowed as part of a flag
9422 /// enum. If AllowMask is true, then we also allow the complement of a valid
9423 /// value, to be used as a mask.
9424 bool IsValueInFlagEnum(const EnumDecl *ED, const llvm::APInt &Val,
9425 bool AllowMask) const;
9426
9427 /// DiagnoseAssignmentEnum - Warn if assignment to enum is a constant
9428 /// integer not in the range of enum values.
9429 void DiagnoseAssignmentEnum(QualType DstType, QualType SrcType,
9430 Expr *SrcExpr);
9431
9432 /// CheckAssignmentConstraints - Perform type checking for assignment,
9433 /// argument passing, variable initialization, and function return values.
9434 /// C99 6.5.16.
9435 AssignConvertType CheckAssignmentConstraints(SourceLocation Loc,
9436 QualType LHSType,
9437 QualType RHSType);
9438
9439 /// Check assignment constraints and optionally prepare for a conversion of
9440 /// the RHS to the LHS type. The conversion is prepared for if ConvertRHS
9441 /// is true.
9442 AssignConvertType CheckAssignmentConstraints(QualType LHSType,
9443 ExprResult &RHS,
9444 CastKind &Kind,
9445 bool ConvertRHS = true);
9446
9447 /// Check assignment constraints for an assignment of RHS to LHSType.
9448 ///
9449 /// \param LHSType The destination type for the assignment.
9450 /// \param RHS The source expression for the assignment.
9451 /// \param Diagnose If \c true, diagnostics may be produced when checking
9452 /// for assignability. If a diagnostic is produced, \p RHS will be
9453 /// set to ExprError(). Note that this function may still return
9454 /// without producing a diagnostic, even for an invalid assignment.
9455 /// \param DiagnoseCFAudited If \c true, the target is a function parameter
9456 /// in an audited Core Foundation API and does not need to be checked
9457 /// for ARC retain issues.
9458 /// \param ConvertRHS If \c true, \p RHS will be updated to model the
9459 /// conversions necessary to perform the assignment. If \c false,
9460 /// \p Diagnose must also be \c false.
9461 AssignConvertType CheckSingleAssignmentConstraints(
9462 QualType LHSType, ExprResult &RHS, bool Diagnose = true,
9463 bool DiagnoseCFAudited = false, bool ConvertRHS = true);
9464
9465 // \brief If the lhs type is a transparent union, check whether we
9466 // can initialize the transparent union with the given expression.
9467 AssignConvertType CheckTransparentUnionArgumentConstraints(QualType ArgType,
9468 ExprResult &RHS);
9469
9470 bool IsStringLiteralToNonConstPointerConversion(Expr *From, QualType ToType);
9471
9472 bool CheckExceptionSpecCompatibility(Expr *From, QualType ToType);
9473
9474 ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
9475 AssignmentAction Action,
9476 bool AllowExplicit = false);
9477 ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
9478 AssignmentAction Action,
9479 bool AllowExplicit,
9480 ImplicitConversionSequence& ICS);
9481 ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
9482 const ImplicitConversionSequence& ICS,
9483 AssignmentAction Action,
9484 CheckedConversionKind CCK
9485 = CCK_ImplicitConversion);
9486 ExprResult PerformImplicitConversion(Expr *From, QualType ToType,
9487 const StandardConversionSequence& SCS,
9488 AssignmentAction Action,
9489 CheckedConversionKind CCK);
9490
9491 /// the following "Check" methods will return a valid/converted QualType
9492 /// or a null QualType (indicating an error diagnostic was issued).
9493
9494 /// type checking binary operators (subroutines of CreateBuiltinBinOp).
9495 QualType InvalidOperands(SourceLocation Loc, ExprResult &LHS,
9496 ExprResult &RHS);
9497 QualType InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS,
9498 ExprResult &RHS);
9499 QualType CheckPointerToMemberOperands( // C++ 5.5
9500 ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK,
9501 SourceLocation OpLoc, bool isIndirect);
9502 QualType CheckMultiplyDivideOperands( // C99 6.5.5
9503 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign,
9504 bool IsDivide);
9505 QualType CheckRemainderOperands( // C99 6.5.5
9506 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
9507 bool IsCompAssign = false);
9508 QualType CheckAdditionOperands( // C99 6.5.6
9509 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
9510 BinaryOperatorKind Opc, QualType* CompLHSTy = nullptr);
9511 QualType CheckSubtractionOperands( // C99 6.5.6
9512 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
9513 QualType* CompLHSTy = nullptr);
9514 QualType CheckShiftOperands( // C99 6.5.7
9515 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
9516 BinaryOperatorKind Opc, bool IsCompAssign = false);
9517 QualType CheckCompareOperands( // C99 6.5.8/9
9518 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
9519 BinaryOperatorKind Opc, bool isRelational);
9520 QualType CheckBitwiseOperands( // C99 6.5.[10...12]
9521 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
9522 BinaryOperatorKind Opc);
9523 QualType CheckLogicalOperands( // C99 6.5.[13,14]
9524 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
9525 BinaryOperatorKind Opc);
9526 // CheckAssignmentOperands is used for both simple and compound assignment.
9527 // For simple assignment, pass both expressions and a null converted type.
9528 // For compound assignment, pass both expressions and the converted type.
9529 QualType CheckAssignmentOperands( // C99 6.5.16.[1,2]
9530 Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType);
9531
9532 ExprResult checkPseudoObjectIncDec(Scope *S, SourceLocation OpLoc,
9533 UnaryOperatorKind Opcode, Expr *Op);
9534 ExprResult checkPseudoObjectAssignment(Scope *S, SourceLocation OpLoc,
9535 BinaryOperatorKind Opcode,
9536 Expr *LHS, Expr *RHS);
9537 ExprResult checkPseudoObjectRValue(Expr *E);
9538 Expr *recreateSyntacticForm(PseudoObjectExpr *E);
9539
9540 QualType CheckConditionalOperands( // C99 6.5.15
9541 ExprResult &Cond, ExprResult &LHS, ExprResult &RHS,
9542 ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc);
9543 QualType CXXCheckConditionalOperands( // C++ 5.16
9544 ExprResult &cond, ExprResult &lhs, ExprResult &rhs,
9545 ExprValueKind &VK, ExprObjectKind &OK, SourceLocation questionLoc);
9546 QualType FindCompositePointerType(SourceLocation Loc, Expr *&E1, Expr *&E2,
9547 bool ConvertArgs = true);
9548 QualType FindCompositePointerType(SourceLocation Loc,
9549 ExprResult &E1, ExprResult &E2,
9550 bool ConvertArgs = true) {
9551 Expr *E1Tmp = E1.get(), *E2Tmp = E2.get();
9552 QualType Composite =
9553 FindCompositePointerType(Loc, E1Tmp, E2Tmp, ConvertArgs);
9554 E1 = E1Tmp;
9555 E2 = E2Tmp;
9556 return Composite;
9557 }
9558
9559 QualType FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS,
9560 SourceLocation QuestionLoc);
9561
9562 bool DiagnoseConditionalForNull(Expr *LHSExpr, Expr *RHSExpr,
9563 SourceLocation QuestionLoc);
9564
9565 void DiagnoseAlwaysNonNullPointer(Expr *E,
9566 Expr::NullPointerConstantKind NullType,
9567 bool IsEqual, SourceRange Range);
9568
9569 /// type checking for vector binary operators.
9570 QualType CheckVectorOperands(ExprResult &LHS, ExprResult &RHS,
9571 SourceLocation Loc, bool IsCompAssign,
9572 bool AllowBothBool, bool AllowBoolConversion);
9573 QualType GetSignedVectorType(QualType V);
9574 QualType CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS,
9575 SourceLocation Loc, bool isRelational);
9576 QualType CheckVectorLogicalOperands(ExprResult &LHS, ExprResult &RHS,
9577 SourceLocation Loc);
9578
9579 bool areLaxCompatibleVectorTypes(QualType srcType, QualType destType);
9580 bool isLaxVectorConversion(QualType srcType, QualType destType);
9581
9582 /// type checking declaration initializers (C99 6.7.8)
9583 bool CheckForConstantInitializer(Expr *e, QualType t);
9584
9585 // type checking C++ declaration initializers (C++ [dcl.init]).
9586
9587 /// ReferenceCompareResult - Expresses the result of comparing two
9588 /// types (cv1 T1 and cv2 T2) to determine their compatibility for the
9589 /// purposes of initialization by reference (C++ [dcl.init.ref]p4).
9590 enum ReferenceCompareResult {
9591 /// Ref_Incompatible - The two types are incompatible, so direct
9592 /// reference binding is not possible.
9593 Ref_Incompatible = 0,
9594 /// Ref_Related - The two types are reference-related, which means
9595 /// that their unqualified forms (T1 and T2) are either the same
9596 /// or T1 is a base class of T2.
9597 Ref_Related,
9598 /// Ref_Compatible - The two types are reference-compatible.
9599 Ref_Compatible
9600 };
9601
9602 ReferenceCompareResult CompareReferenceRelationship(SourceLocation Loc,
9603 QualType T1, QualType T2,
9604 bool &DerivedToBase,
9605 bool &ObjCConversion,
9606 bool &ObjCLifetimeConversion);
9607
9608 ExprResult checkUnknownAnyCast(SourceRange TypeRange, QualType CastType,
9609 Expr *CastExpr, CastKind &CastKind,
9610 ExprValueKind &VK, CXXCastPath &Path);
9611
9612 /// \brief Force an expression with unknown-type to an expression of the
9613 /// given type.
9614 ExprResult forceUnknownAnyToType(Expr *E, QualType ToType);
9615
9616 /// \brief Type-check an expression that's being passed to an
9617 /// __unknown_anytype parameter.
9618 ExprResult checkUnknownAnyArg(SourceLocation callLoc,
9619 Expr *result, QualType &paramType);
9620
9621 // CheckVectorCast - check type constraints for vectors.
9622 // Since vectors are an extension, there are no C standard reference for this.
9623 // We allow casting between vectors and integer datatypes of the same size.
9624 // returns true if the cast is invalid
9625 bool CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty,
9626 CastKind &Kind);
9627
9628 /// \brief Prepare `SplattedExpr` for a vector splat operation, adding
9629 /// implicit casts if necessary.
9630 ExprResult prepareVectorSplat(QualType VectorTy, Expr *SplattedExpr);
9631
9632 // CheckExtVectorCast - check type constraints for extended vectors.
9633 // Since vectors are an extension, there are no C standard reference for this.
9634 // We allow casting between vectors and integer datatypes of the same size,
9635 // or vectors and the element type of that vector.
9636 // returns the cast expr
9637 ExprResult CheckExtVectorCast(SourceRange R, QualType DestTy, Expr *CastExpr,
9638 CastKind &Kind);
9639
9640 ExprResult BuildCXXFunctionalCastExpr(TypeSourceInfo *TInfo, QualType Type,
9641 SourceLocation LParenLoc,
9642 Expr *CastExpr,
9643 SourceLocation RParenLoc);
9644
9645 enum ARCConversionResult { ACR_okay, ACR_unbridged, ACR_error };
9646
9647 /// \brief Checks for invalid conversions and casts between
9648 /// retainable pointers and other pointer kinds for ARC and Weak.
9649 ARCConversionResult CheckObjCConversion(SourceRange castRange,
9650 QualType castType, Expr *&op,
9651 CheckedConversionKind CCK,
9652 bool Diagnose = true,
9653 bool DiagnoseCFAudited = false,
9654 BinaryOperatorKind Opc = BO_PtrMemD
9655 );
9656
9657 Expr *stripARCUnbridgedCast(Expr *e);
9658 void diagnoseARCUnbridgedCast(Expr *e);
9659
9660 bool CheckObjCARCUnavailableWeakConversion(QualType castType,
9661 QualType ExprType);
9662
9663 /// checkRetainCycles - Check whether an Objective-C message send
9664 /// might create an obvious retain cycle.
9665 void checkRetainCycles(ObjCMessageExpr *msg);
9666 void checkRetainCycles(Expr *receiver, Expr *argument);
9667 void checkRetainCycles(VarDecl *Var, Expr *Init);
9668
9669 /// checkUnsafeAssigns - Check whether +1 expr is being assigned
9670 /// to weak/__unsafe_unretained type.
9671 bool checkUnsafeAssigns(SourceLocation Loc, QualType LHS, Expr *RHS);
9672
9673 /// checkUnsafeExprAssigns - Check whether +1 expr is being assigned
9674 /// to weak/__unsafe_unretained expression.
9675 void checkUnsafeExprAssigns(SourceLocation Loc, Expr *LHS, Expr *RHS);
9676
9677 /// CheckMessageArgumentTypes - Check types in an Obj-C message send.
9678 /// \param Method - May be null.
9679 /// \param [out] ReturnType - The return type of the send.
9680 /// \return true iff there were any incompatible types.
9681 bool CheckMessageArgumentTypes(QualType ReceiverType,
9682 MultiExprArg Args, Selector Sel,
9683 ArrayRef<SourceLocation> SelectorLocs,
9684 ObjCMethodDecl *Method, bool isClassMessage,
9685 bool isSuperMessage,
9686 SourceLocation lbrac, SourceLocation rbrac,
9687 SourceRange RecRange,
9688 QualType &ReturnType, ExprValueKind &VK);
9689
9690 /// \brief Determine the result of a message send expression based on
9691 /// the type of the receiver, the method expected to receive the message,
9692 /// and the form of the message send.
9693 QualType getMessageSendResultType(QualType ReceiverType,
9694 ObjCMethodDecl *Method,
9695 bool isClassMessage, bool isSuperMessage);
9696
9697 /// \brief If the given expression involves a message send to a method
9698 /// with a related result type, emit a note describing what happened.
9699 void EmitRelatedResultTypeNote(const Expr *E);
9700
9701 /// \brief Given that we had incompatible pointer types in a return
9702 /// statement, check whether we're in a method with a related result
9703 /// type, and if so, emit a note describing what happened.
9704 void EmitRelatedResultTypeNoteForReturn(QualType destType);
9705
9706 class ConditionResult {
9707 Decl *ConditionVar;
9708 FullExprArg Condition;
9709 bool Invalid;
9710 bool HasKnownValue;
9711 bool KnownValue;
9712
9713 friend class Sema;
9714 ConditionResult(Sema &S, Decl *ConditionVar, FullExprArg Condition,
9715 bool IsConstexpr)
9716 : ConditionVar(ConditionVar), Condition(Condition), Invalid(false),
9717 HasKnownValue(IsConstexpr && Condition.get() &&
9718 !Condition.get()->isValueDependent()),
9719 KnownValue(HasKnownValue &&
9720 !!Condition.get()->EvaluateKnownConstInt(S.Context)) {}
9721 explicit ConditionResult(bool Invalid)
9722 : ConditionVar(nullptr), Condition(nullptr), Invalid(Invalid),
9723 HasKnownValue(false), KnownValue(false) {}
9724
9725 public:
9726 ConditionResult() : ConditionResult(false) {}
9727 bool isInvalid() const { return Invalid; }
9728 std::pair<VarDecl *, Expr *> get() const {
9729 return std::make_pair(cast_or_null<VarDecl>(ConditionVar),
9730 Condition.get());
9731 }
9732 llvm::Optional<bool> getKnownValue() const {
9733 if (!HasKnownValue)
9734 return None;
9735 return KnownValue;
9736 }
9737 };
9738 static ConditionResult ConditionError() { return ConditionResult(true); }
9739
9740 enum class ConditionKind {
9741 Boolean, ///< A boolean condition, from 'if', 'while', 'for', or 'do'.
9742 ConstexprIf, ///< A constant boolean condition from 'if constexpr'.
9743 Switch ///< An integral condition for a 'switch' statement.
9744 };
9745
9746 ConditionResult ActOnCondition(Scope *S, SourceLocation Loc,
9747 Expr *SubExpr, ConditionKind CK);
9748
9749 ConditionResult ActOnConditionVariable(Decl *ConditionVar,
9750 SourceLocation StmtLoc,
9751 ConditionKind CK);
9752
9753 DeclResult ActOnCXXConditionDeclaration(Scope *S, Declarator &D);
9754
9755 ExprResult CheckConditionVariable(VarDecl *ConditionVar,
9756 SourceLocation StmtLoc,
9757 ConditionKind CK);
9758 ExprResult CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond);
9759
9760 /// CheckBooleanCondition - Diagnose problems involving the use of
9761 /// the given expression as a boolean condition (e.g. in an if
9762 /// statement). Also performs the standard function and array
9763 /// decays, possibly changing the input variable.
9764 ///
9765 /// \param Loc - A location associated with the condition, e.g. the
9766 /// 'if' keyword.
9767 /// \return true iff there were any errors
9768 ExprResult CheckBooleanCondition(SourceLocation Loc, Expr *E,
9769 bool IsConstexpr = false);
9770
9771 /// DiagnoseAssignmentAsCondition - Given that an expression is
9772 /// being used as a boolean condition, warn if it's an assignment.
9773 void DiagnoseAssignmentAsCondition(Expr *E);
9774
9775 /// \brief Redundant parentheses over an equality comparison can indicate
9776 /// that the user intended an assignment used as condition.
9777 void DiagnoseEqualityWithExtraParens(ParenExpr *ParenE);
9778
9779 /// CheckCXXBooleanCondition - Returns true if conversion to bool is invalid.
9780 ExprResult CheckCXXBooleanCondition(Expr *CondExpr, bool IsConstexpr = false);
9781
9782 /// ConvertIntegerToTypeWarnOnOverflow - Convert the specified APInt to have
9783 /// the specified width and sign. If an overflow occurs, detect it and emit
9784 /// the specified diagnostic.
9785 void ConvertIntegerToTypeWarnOnOverflow(llvm::APSInt &OldVal,
9786 unsigned NewWidth, bool NewSign,
9787 SourceLocation Loc, unsigned DiagID);
9788
9789 /// Checks that the Objective-C declaration is declared in the global scope.
9790 /// Emits an error and marks the declaration as invalid if it's not declared
9791 /// in the global scope.
9792 bool CheckObjCDeclScope(Decl *D);
9793
9794 /// \brief Abstract base class used for diagnosing integer constant
9795 /// expression violations.
9796 class VerifyICEDiagnoser {
9797 public:
9798 bool Suppress;
9799
9800 VerifyICEDiagnoser(bool Suppress = false) : Suppress(Suppress) { }
9801
9802 virtual void diagnoseNotICE(Sema &S, SourceLocation Loc, SourceRange SR) =0;
9803 virtual void diagnoseFold(Sema &S, SourceLocation Loc, SourceRange SR);
9804 virtual ~VerifyICEDiagnoser() { }
9805 };
9806
9807 /// VerifyIntegerConstantExpression - Verifies that an expression is an ICE,
9808 /// and reports the appropriate diagnostics. Returns false on success.
9809 /// Can optionally return the value of the expression.
9810 ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
9811 VerifyICEDiagnoser &Diagnoser,
9812 bool AllowFold = true);
9813 ExprResult VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
9814 unsigned DiagID,
9815 bool AllowFold = true);
9816 ExprResult VerifyIntegerConstantExpression(Expr *E,
9817 llvm::APSInt *Result = nullptr);
9818
9819 /// VerifyBitField - verifies that a bit field expression is an ICE and has
9820 /// the correct width, and that the field type is valid.
9821 /// Returns false on success.
9822 /// Can optionally return whether the bit-field is of width 0
9823 ExprResult VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName,
9824 QualType FieldTy, bool IsMsStruct,
9825 Expr *BitWidth, bool *ZeroWidth = nullptr);
9826
9827private:
9828 unsigned ForceCUDAHostDeviceDepth = 0;
9829
9830public:
9831 /// Increments our count of the number of times we've seen a pragma forcing
9832 /// functions to be __host__ __device__. So long as this count is greater
9833 /// than zero, all functions encountered will be __host__ __device__.
9834 void PushForceCUDAHostDevice();
9835
9836 /// Decrements our count of the number of times we've seen a pragma forcing
9837 /// functions to be __host__ __device__. Returns false if the count is 0
9838 /// before incrementing, so you can emit an error.
9839 bool PopForceCUDAHostDevice();
9840
9841 /// Diagnostics that are emitted only if we discover that the given function
9842 /// must be codegen'ed. Because handling these correctly adds overhead to
9843 /// compilation, this is currently only enabled for CUDA compilations.
9844 llvm::DenseMap<CanonicalDeclPtr<FunctionDecl>,
9845 std::vector<PartialDiagnosticAt>>
9846 CUDADeferredDiags;
9847
9848 /// A pair of a canonical FunctionDecl and a SourceLocation. When used as the
9849 /// key in a hashtable, both the FD and location are hashed.
9850 struct FunctionDeclAndLoc {
9851 CanonicalDeclPtr<FunctionDecl> FD;
9852 SourceLocation Loc;
9853 };
9854
9855 /// FunctionDecls and SourceLocations for which CheckCUDACall has emitted a
9856 /// (maybe deferred) "bad call" diagnostic. We use this to avoid emitting the
9857 /// same deferred diag twice.
9858 llvm::DenseSet<FunctionDeclAndLoc> LocsWithCUDACallDiags;
9859
9860 /// An inverse call graph, mapping known-emitted functions to one of their
9861 /// known-emitted callers (plus the location of the call).
9862 ///
9863 /// Functions that we can tell a priori must be emitted aren't added to this
9864 /// map.
9865 llvm::DenseMap</* Callee = */ CanonicalDeclPtr<FunctionDecl>,
9866 /* Caller = */ FunctionDeclAndLoc>
9867 CUDAKnownEmittedFns;
9868
9869 /// A partial call graph maintained during CUDA compilation to support
9870 /// deferred diagnostics.
9871 ///
9872 /// Functions are only added here if, at the time they're considered, they are
9873 /// not known-emitted. As soon as we discover that a function is
9874 /// known-emitted, we remove it and everything it transitively calls from this
9875 /// set and add those functions to CUDAKnownEmittedFns.
9876 llvm::DenseMap</* Caller = */ CanonicalDeclPtr<FunctionDecl>,
9877 /* Callees = */ llvm::MapVector<CanonicalDeclPtr<FunctionDecl>,
9878 SourceLocation>>
9879 CUDACallGraph;
9880
9881 /// Diagnostic builder for CUDA errors which may or may not be deferred.
9882 ///
9883 /// In CUDA, there exist constructs (e.g. variable-length arrays, try/catch)
9884 /// which are not allowed to appear inside __device__ functions and are
9885 /// allowed to appear in __host__ __device__ functions only if the host+device
9886 /// function is never codegen'ed.
9887 ///
9888 /// To handle this, we use the notion of "deferred diagnostics", where we
9889 /// attach a diagnostic to a FunctionDecl that's emitted iff it's codegen'ed.
9890 ///
9891 /// This class lets you emit either a regular diagnostic, a deferred
9892 /// diagnostic, or no diagnostic at all, according to an argument you pass to
9893 /// its constructor, thus simplifying the process of creating these "maybe
9894 /// deferred" diagnostics.
9895 class CUDADiagBuilder {
9896 public:
9897 enum Kind {
9898 /// Emit no diagnostics.
9899 K_Nop,
9900 /// Emit the diagnostic immediately (i.e., behave like Sema::Diag()).
9901 K_Immediate,
9902 /// Emit the diagnostic immediately, and, if it's a warning or error, also
9903 /// emit a call stack showing how this function can be reached by an a
9904 /// priori known-emitted function.
9905 K_ImmediateWithCallStack,
9906 /// Create a deferred diagnostic, which is emitted only if the function
9907 /// it's attached to is codegen'ed. Also emit a call stack as with
9908 /// K_ImmediateWithCallStack.
9909 K_Deferred
9910 };
9911
9912 CUDADiagBuilder(Kind K, SourceLocation Loc, unsigned DiagID,
9913 FunctionDecl *Fn, Sema &S);
9914 ~CUDADiagBuilder();
9915
9916 /// Convertible to bool: True if we immediately emitted an error, false if
9917 /// we didn't emit an error or we created a deferred error.
9918 ///
9919 /// Example usage:
9920 ///
9921 /// if (CUDADiagBuilder(...) << foo << bar)
9922 /// return ExprError();
9923 ///
9924 /// But see CUDADiagIfDeviceCode() and CUDADiagIfHostCode() -- you probably
9925 /// want to use these instead of creating a CUDADiagBuilder yourself.
9926 operator bool() const { return ImmediateDiag.hasValue(); }
9927
9928 template <typename T>
9929 friend const CUDADiagBuilder &operator<<(const CUDADiagBuilder &Diag,
9930 const T &Value) {
9931 if (Diag.ImmediateDiag.hasValue())
9932 *Diag.ImmediateDiag << Value;
9933 else if (Diag.PartialDiag.hasValue())
9934 *Diag.PartialDiag << Value;
9935 return Diag;
9936 }
9937
9938 private:
9939 Sema &S;
9940 SourceLocation Loc;
9941 unsigned DiagID;
9942 FunctionDecl *Fn;
9943 bool ShowCallStack;
9944
9945 // Invariant: At most one of these Optionals has a value.
9946 // FIXME: Switch these to a Variant once that exists.
9947 llvm::Optional<SemaDiagnosticBuilder> ImmediateDiag;
9948 llvm::Optional<PartialDiagnostic> PartialDiag;
9949 };
9950
9951 /// Creates a CUDADiagBuilder that emits the diagnostic if the current context
9952 /// is "used as device code".
9953 ///
9954 /// - If CurContext is a __host__ function, does not emit any diagnostics.
9955 /// - If CurContext is a __device__ or __global__ function, emits the
9956 /// diagnostics immediately.
9957 /// - If CurContext is a __host__ __device__ function and we are compiling for
9958 /// the device, creates a diagnostic which is emitted if and when we realize
9959 /// that the function will be codegen'ed.
9960 ///
9961 /// Example usage:
9962 ///
9963 /// // Variable-length arrays are not allowed in CUDA device code.
9964 /// if (CUDADiagIfDeviceCode(Loc, diag::err_cuda_vla) << CurrentCUDATarget())
9965 /// return ExprError();
9966 /// // Otherwise, continue parsing as normal.
9967 CUDADiagBuilder CUDADiagIfDeviceCode(SourceLocation Loc, unsigned DiagID);
9968
9969 /// Creates a CUDADiagBuilder that emits the diagnostic if the current context
9970 /// is "used as host code".
9971 ///
9972 /// Same as CUDADiagIfDeviceCode, with "host" and "device" switched.
9973 CUDADiagBuilder CUDADiagIfHostCode(SourceLocation Loc, unsigned DiagID);
9974
9975 enum CUDAFunctionTarget {
9976 CFT_Device,
9977 CFT_Global,
9978 CFT_Host,
9979 CFT_HostDevice,
9980 CFT_InvalidTarget
9981 };
9982
9983 /// Determines whether the given function is a CUDA device/host/kernel/etc.
9984 /// function.
9985 ///
9986 /// Use this rather than examining the function's attributes yourself -- you
9987 /// will get it wrong. Returns CFT_Host if D is null.
9988 CUDAFunctionTarget IdentifyCUDATarget(const FunctionDecl *D,
9989 bool IgnoreImplicitHDAttr = false);
9990 CUDAFunctionTarget IdentifyCUDATarget(const AttributeList *Attr);
9991
9992 /// Gets the CUDA target for the current context.
9993 CUDAFunctionTarget CurrentCUDATarget() {
9994 return IdentifyCUDATarget(dyn_cast<FunctionDecl>(CurContext));
9995 }
9996
9997 // CUDA function call preference. Must be ordered numerically from
9998 // worst to best.
9999 enum CUDAFunctionPreference {
10000 CFP_Never, // Invalid caller/callee combination.
10001 CFP_WrongSide, // Calls from host-device to host or device
10002 // function that do not match current compilation
10003 // mode.
10004 CFP_HostDevice, // Any calls to host/device functions.
10005 CFP_SameSide, // Calls from host-device to host or device
10006 // function matching current compilation mode.
10007 CFP_Native, // host-to-host or device-to-device calls.
10008 };
10009
10010 /// Identifies relative preference of a given Caller/Callee
10011 /// combination, based on their host/device attributes.
10012 /// \param Caller function which needs address of \p Callee.
10013 /// nullptr in case of global context.
10014 /// \param Callee target function
10015 ///
10016 /// \returns preference value for particular Caller/Callee combination.
10017 CUDAFunctionPreference IdentifyCUDAPreference(const FunctionDecl *Caller,
10018 const FunctionDecl *Callee);
10019
10020 /// Determines whether Caller may invoke Callee, based on their CUDA
10021 /// host/device attributes. Returns false if the call is not allowed.
10022 ///
10023 /// Note: Will return true for CFP_WrongSide calls. These may appear in
10024 /// semantically correct CUDA programs, but only if they're never codegen'ed.
10025 bool IsAllowedCUDACall(const FunctionDecl *Caller,
10026 const FunctionDecl *Callee) {
10027 return IdentifyCUDAPreference(Caller, Callee) != CFP_Never;
10028 }
10029
10030 /// May add implicit CUDAHostAttr and CUDADeviceAttr attributes to FD,
10031 /// depending on FD and the current compilation settings.
10032 void maybeAddCUDAHostDeviceAttrs(FunctionDecl *FD,
10033 const LookupResult &Previous);
10034
10035public:
10036 /// Check whether we're allowed to call Callee from the current context.
10037 ///
10038 /// - If the call is never allowed in a semantically-correct program
10039 /// (CFP_Never), emits an error and returns false.
10040 ///
10041 /// - If the call is allowed in semantically-correct programs, but only if
10042 /// it's never codegen'ed (CFP_WrongSide), creates a deferred diagnostic to
10043 /// be emitted if and when the caller is codegen'ed, and returns true.
10044 ///
10045 /// Will only create deferred diagnostics for a given SourceLocation once,
10046 /// so you can safely call this multiple times without generating duplicate
10047 /// deferred errors.
10048 ///
10049 /// - Otherwise, returns true without emitting any diagnostics.
10050 bool CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee);
10051
10052 /// Set __device__ or __host__ __device__ attributes on the given lambda
10053 /// operator() method.
10054 ///
10055 /// CUDA lambdas declared inside __device__ or __global__ functions inherit
10056 /// the __device__ attribute. Similarly, lambdas inside __host__ __device__
10057 /// functions become __host__ __device__ themselves.
10058 void CUDASetLambdaAttrs(CXXMethodDecl *Method);
10059
10060 /// Finds a function in \p Matches with highest calling priority
10061 /// from \p Caller context and erases all functions with lower
10062 /// calling priority.
10063 void EraseUnwantedCUDAMatches(
10064 const FunctionDecl *Caller,
10065 SmallVectorImpl<std::pair<DeclAccessPair, FunctionDecl *>> &Matches);
10066
10067 /// Given a implicit special member, infer its CUDA target from the
10068 /// calls it needs to make to underlying base/field special members.
10069 /// \param ClassDecl the class for which the member is being created.
10070 /// \param CSM the kind of special member.
10071 /// \param MemberDecl the special member itself.
10072 /// \param ConstRHS true if this is a copy operation with a const object on
10073 /// its RHS.
10074 /// \param Diagnose true if this call should emit diagnostics.
10075 /// \return true if there was an error inferring.
10076 /// The result of this call is implicit CUDA target attribute(s) attached to
10077 /// the member declaration.
10078 bool inferCUDATargetForImplicitSpecialMember(CXXRecordDecl *ClassDecl,
10079 CXXSpecialMember CSM,
10080 CXXMethodDecl *MemberDecl,
10081 bool ConstRHS,
10082 bool Diagnose);
10083
10084 /// \return true if \p CD can be considered empty according to CUDA
10085 /// (E.2.3.1 in CUDA 7.5 Programming guide).
10086 bool isEmptyCudaConstructor(SourceLocation Loc, CXXConstructorDecl *CD);
10087 bool isEmptyCudaDestructor(SourceLocation Loc, CXXDestructorDecl *CD);
10088
10089 /// Check whether NewFD is a valid overload for CUDA. Emits
10090 /// diagnostics and invalidates NewFD if not.
10091 void checkCUDATargetOverload(FunctionDecl *NewFD,
10092 const LookupResult &Previous);
10093 /// Copies target attributes from the template TD to the function FD.
10094 void inheritCUDATargetAttrs(FunctionDecl *FD, const FunctionTemplateDecl &TD);
10095
10096 /// \name Code completion
10097 //@{
10098 /// \brief Describes the context in which code completion occurs.
10099 enum ParserCompletionContext {
10100 /// \brief Code completion occurs at top-level or namespace context.
10101 PCC_Namespace,
10102 /// \brief Code completion occurs within a class, struct, or union.
10103 PCC_Class,
10104 /// \brief Code completion occurs within an Objective-C interface, protocol,
10105 /// or category.
10106 PCC_ObjCInterface,
10107 /// \brief Code completion occurs within an Objective-C implementation or
10108 /// category implementation
10109 PCC_ObjCImplementation,
10110 /// \brief Code completion occurs within the list of instance variables
10111 /// in an Objective-C interface, protocol, category, or implementation.
10112 PCC_ObjCInstanceVariableList,
10113 /// \brief Code completion occurs following one or more template
10114 /// headers.
10115 PCC_Template,
10116 /// \brief Code completion occurs following one or more template
10117 /// headers within a class.
10118 PCC_MemberTemplate,
10119 /// \brief Code completion occurs within an expression.
10120 PCC_Expression,
10121 /// \brief Code completion occurs within a statement, which may
10122 /// also be an expression or a declaration.
10123 PCC_Statement,
10124 /// \brief Code completion occurs at the beginning of the
10125 /// initialization statement (or expression) in a for loop.
10126 PCC_ForInit,
10127 /// \brief Code completion occurs within the condition of an if,
10128 /// while, switch, or for statement.
10129 PCC_Condition,
10130 /// \brief Code completion occurs within the body of a function on a
10131 /// recovery path, where we do not have a specific handle on our position
10132 /// in the grammar.
10133 PCC_RecoveryInFunction,
10134 /// \brief Code completion occurs where only a type is permitted.
10135 PCC_Type,
10136 /// \brief Code completion occurs in a parenthesized expression, which
10137 /// might also be a type cast.
10138 PCC_ParenthesizedExpression,
10139 /// \brief Code completion occurs within a sequence of declaration
10140 /// specifiers within a function, method, or block.
10141 PCC_LocalDeclarationSpecifiers
10142 };
10143
10144 void CodeCompleteModuleImport(SourceLocation ImportLoc, ModuleIdPath Path);
10145 void CodeCompleteOrdinaryName(Scope *S,
10146 ParserCompletionContext CompletionContext);
10147 void CodeCompleteDeclSpec(Scope *S, DeclSpec &DS,
10148 bool AllowNonIdentifiers,
10149 bool AllowNestedNameSpecifiers);
10150
10151 struct CodeCompleteExpressionData;
10152 void CodeCompleteExpression(Scope *S,
10153 const CodeCompleteExpressionData &Data);
10154 void CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base,
10155 SourceLocation OpLoc, bool IsArrow,
10156 bool IsBaseExprStatement);
10157 void CodeCompletePostfixExpression(Scope *S, ExprResult LHS);
10158 void CodeCompleteTag(Scope *S, unsigned TagSpec);
10159 void CodeCompleteTypeQualifiers(DeclSpec &DS);
10160 void CodeCompleteFunctionQualifiers(DeclSpec &DS, Declarator &D,
10161 const VirtSpecifiers *VS = nullptr);
10162 void CodeCompleteBracketDeclarator(Scope *S);
10163 void CodeCompleteCase(Scope *S);
10164 void CodeCompleteCall(Scope *S, Expr *Fn, ArrayRef<Expr *> Args);
10165 void CodeCompleteConstructor(Scope *S, QualType Type, SourceLocation Loc,
10166 ArrayRef<Expr *> Args);
10167 void CodeCompleteInitializer(Scope *S, Decl *D);
10168 void CodeCompleteReturn(Scope *S);
10169 void CodeCompleteAfterIf(Scope *S);
10170 void CodeCompleteAssignmentRHS(Scope *S, Expr *LHS);
10171
10172 void CodeCompleteQualifiedId(Scope *S, CXXScopeSpec &SS,
10173 bool EnteringContext);
10174 void CodeCompleteUsing(Scope *S);
10175 void CodeCompleteUsingDirective(Scope *S);
10176 void CodeCompleteNamespaceDecl(Scope *S);
10177 void CodeCompleteNamespaceAliasDecl(Scope *S);
10178 void CodeCompleteOperatorName(Scope *S);
10179 void CodeCompleteConstructorInitializer(
10180 Decl *Constructor,
10181 ArrayRef<CXXCtorInitializer *> Initializers);
10182
10183 void CodeCompleteLambdaIntroducer(Scope *S, LambdaIntroducer &Intro,
10184 bool AfterAmpersand);
10185
10186 void CodeCompleteObjCAtDirective(Scope *S);
10187 void CodeCompleteObjCAtVisibility(Scope *S);
10188 void CodeCompleteObjCAtStatement(Scope *S);
10189 void CodeCompleteObjCAtExpression(Scope *S);
10190 void CodeCompleteObjCPropertyFlags(Scope *S, ObjCDeclSpec &ODS);
10191 void CodeCompleteObjCPropertyGetter(Scope *S);
10192 void CodeCompleteObjCPropertySetter(Scope *S);
10193 void CodeCompleteObjCPassingType(Scope *S, ObjCDeclSpec &DS,
10194 bool IsParameter);
10195 void CodeCompleteObjCMessageReceiver(Scope *S);
10196 void CodeCompleteObjCSuperMessage(Scope *S, SourceLocation SuperLoc,
10197 ArrayRef<IdentifierInfo *> SelIdents,
10198 bool AtArgumentExpression);
10199 void CodeCompleteObjCClassMessage(Scope *S, ParsedType Receiver,
10200 ArrayRef<IdentifierInfo *> SelIdents,
10201 bool AtArgumentExpression,
10202 bool IsSuper = false);
10203 void CodeCompleteObjCInstanceMessage(Scope *S, Expr *Receiver,
10204 ArrayRef<IdentifierInfo *> SelIdents,
10205 bool AtArgumentExpression,
10206 ObjCInterfaceDecl *Super = nullptr);
10207 void CodeCompleteObjCForCollection(Scope *S,
10208 DeclGroupPtrTy IterationVar);
10209 void CodeCompleteObjCSelector(Scope *S,
10210 ArrayRef<IdentifierInfo *> SelIdents);
10211 void CodeCompleteObjCProtocolReferences(
10212 ArrayRef<IdentifierLocPair> Protocols);
10213 void CodeCompleteObjCProtocolDecl(Scope *S);
10214 void CodeCompleteObjCInterfaceDecl(Scope *S);
10215 void CodeCompleteObjCSuperclass(Scope *S,
10216 IdentifierInfo *ClassName,
10217 SourceLocation ClassNameLoc);
10218 void CodeCompleteObjCImplementationDecl(Scope *S);
10219 void CodeCompleteObjCInterfaceCategory(Scope *S,
10220 IdentifierInfo *ClassName,
10221 SourceLocation ClassNameLoc);
10222 void CodeCompleteObjCImplementationCategory(Scope *S,
10223 IdentifierInfo *ClassName,
10224 SourceLocation ClassNameLoc);
10225 void CodeCompleteObjCPropertyDefinition(Scope *S);
10226 void CodeCompleteObjCPropertySynthesizeIvar(Scope *S,
10227 IdentifierInfo *PropertyName);
10228 void CodeCompleteObjCMethodDecl(Scope *S, Optional<bool> IsInstanceMethod,
10229 ParsedType ReturnType);
10230 void CodeCompleteObjCMethodDeclSelector(Scope *S,
10231 bool IsInstanceMethod,
10232 bool AtParameterName,
10233 ParsedType ReturnType,
10234 ArrayRef<IdentifierInfo *> SelIdents);
10235 void CodeCompleteObjCClassPropertyRefExpr(Scope *S, IdentifierInfo &ClassName,
10236 SourceLocation ClassNameLoc,
10237 bool IsBaseExprStatement);
10238 void CodeCompletePreprocessorDirective(bool InConditional);
10239 void CodeCompleteInPreprocessorConditionalExclusion(Scope *S);
10240 void CodeCompletePreprocessorMacroName(bool IsDefinition);
10241 void CodeCompletePreprocessorExpression();
10242 void CodeCompletePreprocessorMacroArgument(Scope *S,
10243 IdentifierInfo *Macro,
10244 MacroInfo *MacroInfo,
10245 unsigned Argument);
10246 void CodeCompleteNaturalLanguage();
10247 void CodeCompleteAvailabilityPlatformName();
10248 void GatherGlobalCodeCompletions(CodeCompletionAllocator &Allocator,
10249 CodeCompletionTUInfo &CCTUInfo,
10250 SmallVectorImpl<CodeCompletionResult> &Results);
10251 //@}
10252
10253 //===--------------------------------------------------------------------===//
10254 // Extra semantic analysis beyond the C type system
10255
10256public:
10257 SourceLocation getLocationOfStringLiteralByte(const StringLiteral *SL,
10258 unsigned ByteNo) const;
10259
10260private:
10261 void CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr,
10262 const ArraySubscriptExpr *ASE=nullptr,
10263 bool AllowOnePastEnd=true, bool IndexNegated=false);
10264 void CheckArrayAccess(const Expr *E);
10265 // Used to grab the relevant information from a FormatAttr and a
10266 // FunctionDeclaration.
10267 struct FormatStringInfo {
10268 unsigned FormatIdx;
10269 unsigned FirstDataArg;
10270 bool HasVAListArg;
10271 };
10272
10273 static bool getFormatStringInfo(const FormatAttr *Format, bool IsCXXMember,
10274 FormatStringInfo *FSI);
10275 bool CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall,
10276 const FunctionProtoType *Proto);
10277 bool CheckObjCMethodCall(ObjCMethodDecl *Method, SourceLocation loc,
10278 ArrayRef<const Expr *> Args);
10279 bool CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall,
10280 const FunctionProtoType *Proto);
10281 bool CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto);
10282 void CheckConstructorCall(FunctionDecl *FDecl,
10283 ArrayRef<const Expr *> Args,
10284 const FunctionProtoType *Proto,
10285 SourceLocation Loc);
10286
10287 void checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto,
10288 const Expr *ThisArg, ArrayRef<const Expr *> Args,
10289 bool IsMemberFunction, SourceLocation Loc, SourceRange Range,
10290 VariadicCallType CallType);
10291
10292 bool CheckObjCString(Expr *Arg);
10293 ExprResult CheckOSLogFormatStringArg(Expr *Arg);
10294
10295 ExprResult CheckBuiltinFunctionCall(FunctionDecl *FDecl,
10296 unsigned BuiltinID, CallExpr *TheCall);
10297
10298 bool CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall,
10299 unsigned MaxWidth);
10300 bool CheckNeonBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
10301 bool CheckARMBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
10302
10303 bool CheckAArch64BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
10304 bool CheckMipsBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
10305 bool CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
10306 bool CheckX86BuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall);
10307 bool CheckX86BuiltinGatherScatterScale(unsigned BuiltinID, CallExpr *TheCall);
10308 bool CheckX86BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
10309 bool CheckPPCBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
10310
10311 bool SemaBuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall);
10312 bool SemaBuiltinVAStartARMMicrosoft(CallExpr *Call);
10313 bool SemaBuiltinUnorderedCompare(CallExpr *TheCall);
10314 bool SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs);
10315 bool SemaBuiltinVSX(CallExpr *TheCall);
10316 bool SemaBuiltinOSLogFormat(CallExpr *TheCall);
10317
10318public:
10319 // Used by C++ template instantiation.
10320 ExprResult SemaBuiltinShuffleVector(CallExpr *TheCall);
10321 ExprResult SemaConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo,
10322 SourceLocation BuiltinLoc,
10323 SourceLocation RParenLoc);
10324
10325private:
10326 bool SemaBuiltinPrefetch(CallExpr *TheCall);
10327 bool SemaBuiltinAllocaWithAlign(CallExpr *TheCall);
10328 bool SemaBuiltinAssume(CallExpr *TheCall);
10329 bool SemaBuiltinAssumeAligned(CallExpr *TheCall);
10330 bool SemaBuiltinLongjmp(CallExpr *TheCall);
10331 bool SemaBuiltinSetjmp(CallExpr *TheCall);
10332 ExprResult SemaBuiltinAtomicOverloaded(ExprResult TheCallResult);
10333 ExprResult SemaBuiltinNontemporalOverloaded(ExprResult TheCallResult);
10334 ExprResult SemaAtomicOpsOverloaded(ExprResult TheCallResult,
10335 AtomicExpr::AtomicOp Op);
10336 bool SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum,
10337 llvm::APSInt &Result);
10338 bool SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum,
10339 int Low, int High);
10340 bool SemaBuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum,
10341 unsigned Multiple);
10342 bool SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall,
10343 int ArgNum, unsigned ExpectedFieldNum,
10344 bool AllowName);
10345public:
10346 enum FormatStringType {
10347 FST_Scanf,
10348 FST_Printf,
10349 FST_NSString,
10350 FST_Strftime,
10351 FST_Strfmon,
10352 FST_Kprintf,
10353 FST_FreeBSDKPrintf,
10354 FST_OSTrace,
10355 FST_OSLog,
10356 FST_Unknown
10357 };
10358 static FormatStringType GetFormatStringType(const FormatAttr *Format);
10359
10360 bool FormatStringHasSArg(const StringLiteral *FExpr);
10361
10362 static bool GetFormatNSStringIdx(const FormatAttr *Format, unsigned &Idx);
10363
10364private:
10365 bool CheckFormatArguments(const FormatAttr *Format,
10366 ArrayRef<const Expr *> Args,
10367 bool IsCXXMember,
10368 VariadicCallType CallType,
10369 SourceLocation Loc, SourceRange Range,
10370 llvm::SmallBitVector &CheckedVarArgs);
10371 bool CheckFormatArguments(ArrayRef<const Expr *> Args,
10372 bool HasVAListArg, unsigned format_idx,
10373 unsigned firstDataArg, FormatStringType Type,
10374 VariadicCallType CallType,
10375 SourceLocation Loc, SourceRange range,
10376 llvm::SmallBitVector &CheckedVarArgs);
10377
10378 void CheckAbsoluteValueFunction(const CallExpr *Call,
10379 const FunctionDecl *FDecl);
10380
10381 void CheckMaxUnsignedZero(const CallExpr *Call, const FunctionDecl *FDecl);
10382
10383 void CheckMemaccessArguments(const CallExpr *Call,
10384 unsigned BId,
10385 IdentifierInfo *FnName);
10386
10387 void CheckStrlcpycatArguments(const CallExpr *Call,
10388 IdentifierInfo *FnName);
10389
10390 void CheckStrncatArguments(const CallExpr *Call,
10391 IdentifierInfo *FnName);
10392
10393 void CheckReturnValExpr(Expr *RetValExp, QualType lhsType,
10394 SourceLocation ReturnLoc,
10395 bool isObjCMethod = false,
10396 const AttrVec *Attrs = nullptr,
10397 const FunctionDecl *FD = nullptr);
10398
10399 void CheckFloatComparison(SourceLocation Loc, Expr* LHS, Expr* RHS);
10400 void CheckImplicitConversions(Expr *E, SourceLocation CC = SourceLocation());
10401 void CheckBoolLikeConversion(Expr *E, SourceLocation CC);
10402 void CheckForIntOverflow(Expr *E);
10403 void CheckUnsequencedOperations(Expr *E);
10404
10405 /// \brief Perform semantic checks on a completed expression. This will either
10406 /// be a full-expression or a default argument expression.
10407 void CheckCompletedExpr(Expr *E, SourceLocation CheckLoc = SourceLocation(),
10408 bool IsConstexpr = false);
10409
10410 void CheckBitFieldInitialization(SourceLocation InitLoc, FieldDecl *Field,
10411 Expr *Init);
10412
10413 /// Check if there is a field shadowing.
10414 void CheckShadowInheritedFields(const SourceLocation &Loc,
10415 DeclarationName FieldName,
10416 const CXXRecordDecl *RD);
10417
10418 /// \brief Check if the given expression contains 'break' or 'continue'
10419 /// statement that produces control flow different from GCC.
10420 void CheckBreakContinueBinding(Expr *E);
10421
10422 /// \brief Check whether receiver is mutable ObjC container which
10423 /// attempts to add itself into the container
10424 void CheckObjCCircularContainer(ObjCMessageExpr *Message);
10425
10426 void AnalyzeDeleteExprMismatch(const CXXDeleteExpr *DE);
10427 void AnalyzeDeleteExprMismatch(FieldDecl *Field, SourceLocation DeleteLoc,
10428 bool DeleteWasArrayForm);
10429public:
10430 /// \brief Register a magic integral constant to be used as a type tag.
10431 void RegisterTypeTagForDatatype(const IdentifierInfo *ArgumentKind,
10432 uint64_t MagicValue, QualType Type,
10433 bool LayoutCompatible, bool MustBeNull);
10434
10435 struct TypeTagData {
10436 TypeTagData() {}
10437
10438 TypeTagData(QualType Type, bool LayoutCompatible, bool MustBeNull) :
10439 Type(Type), LayoutCompatible(LayoutCompatible),
10440 MustBeNull(MustBeNull)
10441 {}
10442
10443 QualType Type;
10444
10445 /// If true, \c Type should be compared with other expression's types for
10446 /// layout-compatibility.
10447 unsigned LayoutCompatible : 1;
10448 unsigned MustBeNull : 1;
10449 };
10450
10451 /// A pair of ArgumentKind identifier and magic value. This uniquely
10452 /// identifies the magic value.
10453 typedef std::pair<const IdentifierInfo *, uint64_t> TypeTagMagicValue;
10454
10455private:
10456 /// \brief A map from magic value to type information.
10457 std::unique_ptr<llvm::DenseMap<TypeTagMagicValue, TypeTagData>>
10458 TypeTagForDatatypeMagicValues;
10459
10460 /// \brief Peform checks on a call of a function with argument_with_type_tag
10461 /// or pointer_with_type_tag attributes.
10462 void CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr,
10463 const ArrayRef<const Expr *> ExprArgs,
10464 SourceLocation CallSiteLoc);
10465
10466 /// \brief Check if we are taking the address of a packed field
10467 /// as this may be a problem if the pointer value is dereferenced.
10468 void CheckAddressOfPackedMember(Expr *rhs);
10469
10470 /// \brief The parser's current scope.
10471 ///
10472 /// The parser maintains this state here.
10473 Scope *CurScope;
10474
10475 mutable IdentifierInfo *Ident_super;
10476 mutable IdentifierInfo *Ident___float128;
10477
10478 /// Nullability type specifiers.
10479 IdentifierInfo *Ident__Nonnull = nullptr;
10480 IdentifierInfo *Ident__Nullable = nullptr;
10481 IdentifierInfo *Ident__Null_unspecified = nullptr;
10482
10483 IdentifierInfo *Ident_NSError = nullptr;
10484
10485 /// \brief The handler for the FileChanged preprocessor events.
10486 ///
10487 /// Used for diagnostics that implement custom semantic analysis for #include
10488 /// directives, like -Wpragma-pack.
10489 sema::SemaPPCallbacks *SemaPPCallbackHandler;
10490
10491protected:
10492 friend class Parser;
10493 friend class InitializationSequence;
10494 friend class ASTReader;
10495 friend class ASTDeclReader;
10496 friend class ASTWriter;
10497
10498public:
10499 /// Retrieve the keyword associated
10500 IdentifierInfo *getNullabilityKeyword(NullabilityKind nullability);
10501
10502 /// The struct behind the CFErrorRef pointer.
10503 RecordDecl *CFError = nullptr;
10504
10505 /// Retrieve the identifier "NSError".
10506 IdentifierInfo *getNSErrorIdent();
10507
10508 /// \brief Retrieve the parser's current scope.
10509 ///
10510 /// This routine must only be used when it is certain that semantic analysis
10511 /// and the parser are in precisely the same context, which is not the case
10512 /// when, e.g., we are performing any kind of template instantiation.
10513 /// Therefore, the only safe places to use this scope are in the parser
10514 /// itself and in routines directly invoked from the parser and *never* from
10515 /// template substitution or instantiation.
10516 Scope *getCurScope() const { return CurScope; }
10517
10518 void incrementMSManglingNumber() const {
10519 return CurScope->incrementMSManglingNumber();
10520 }
10521
10522 IdentifierInfo *getSuperIdentifier() const;
10523 IdentifierInfo *getFloat128Identifier() const;
10524
10525 Decl *getObjCDeclContext() const;
10526
10527 DeclContext *getCurLexicalContext() const {
10528 return OriginalLexicalContext ? OriginalLexicalContext : CurContext;
10529 }
10530
10531 const DeclContext *getCurObjCLexicalContext() const {
10532 const DeclContext *DC = getCurLexicalContext();
10533 // A category implicitly has the attribute of the interface.
10534 if (const ObjCCategoryDecl *CatD = dyn_cast<ObjCCategoryDecl>(DC))
10535 DC = CatD->getClassInterface();
10536 return DC;
10537 }
10538
10539 /// \brief To be used for checking whether the arguments being passed to
10540 /// function exceeds the number of parameters expected for it.
10541 static bool TooManyArguments(size_t NumParams, size_t NumArgs,
10542 bool PartialOverloading = false) {
10543 // We check whether we're just after a comma in code-completion.
10544 if (NumArgs > 0 && PartialOverloading)
10545 return NumArgs + 1 > NumParams; // If so, we view as an extra argument.
10546 return NumArgs > NumParams;
10547 }
10548
10549 // Emitting members of dllexported classes is delayed until the class
10550 // (including field initializers) is fully parsed.
10551 SmallVector<CXXRecordDecl*, 4> DelayedDllExportClasses;
10552
10553private:
10554 class SavePendingParsedClassStateRAII {
10555 public:
10556 SavePendingParsedClassStateRAII(Sema &S) : S(S) { swapSavedState(); }
10557
10558 ~SavePendingParsedClassStateRAII() {
10559 assert(S.DelayedExceptionSpecChecks.empty() &&(static_cast <bool> (S.DelayedExceptionSpecChecks.empty
() && "there shouldn't be any pending delayed exception spec checks"
) ? void (0) : __assert_fail ("S.DelayedExceptionSpecChecks.empty() && \"there shouldn't be any pending delayed exception spec checks\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 10560, __extension__ __PRETTY_FUNCTION__))
10560 "there shouldn't be any pending delayed exception spec checks")(static_cast <bool> (S.DelayedExceptionSpecChecks.empty
() && "there shouldn't be any pending delayed exception spec checks"
) ? void (0) : __assert_fail ("S.DelayedExceptionSpecChecks.empty() && \"there shouldn't be any pending delayed exception spec checks\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 10560, __extension__ __PRETTY_FUNCTION__))
;
10561 assert(S.DelayedDefaultedMemberExceptionSpecs.empty() &&(static_cast <bool> (S.DelayedDefaultedMemberExceptionSpecs
.empty() && "there shouldn't be any pending delayed defaulted member "
"exception specs") ? void (0) : __assert_fail ("S.DelayedDefaultedMemberExceptionSpecs.empty() && \"there shouldn't be any pending delayed defaulted member \" \"exception specs\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 10563, __extension__ __PRETTY_FUNCTION__))
10562 "there shouldn't be any pending delayed defaulted member "(static_cast <bool> (S.DelayedDefaultedMemberExceptionSpecs
.empty() && "there shouldn't be any pending delayed defaulted member "
"exception specs") ? void (0) : __assert_fail ("S.DelayedDefaultedMemberExceptionSpecs.empty() && \"there shouldn't be any pending delayed defaulted member \" \"exception specs\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 10563, __extension__ __PRETTY_FUNCTION__))
10563 "exception specs")(static_cast <bool> (S.DelayedDefaultedMemberExceptionSpecs
.empty() && "there shouldn't be any pending delayed defaulted member "
"exception specs") ? void (0) : __assert_fail ("S.DelayedDefaultedMemberExceptionSpecs.empty() && \"there shouldn't be any pending delayed defaulted member \" \"exception specs\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 10563, __extension__ __PRETTY_FUNCTION__))
;
10564 assert(S.DelayedDllExportClasses.empty() &&(static_cast <bool> (S.DelayedDllExportClasses.empty() &&
"there shouldn't be any pending delayed DLL export classes")
? void (0) : __assert_fail ("S.DelayedDllExportClasses.empty() && \"there shouldn't be any pending delayed DLL export classes\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 10565, __extension__ __PRETTY_FUNCTION__))
10565 "there shouldn't be any pending delayed DLL export classes")(static_cast <bool> (S.DelayedDllExportClasses.empty() &&
"there shouldn't be any pending delayed DLL export classes")
? void (0) : __assert_fail ("S.DelayedDllExportClasses.empty() && \"there shouldn't be any pending delayed DLL export classes\""
, "/build/llvm-toolchain-snapshot-6.0~svn319413/tools/clang/include/clang/Sema/Sema.h"
, 10565, __extension__ __PRETTY_FUNCTION__))
;
10566 swapSavedState();
10567 }
10568
10569 private:
10570 Sema &S;
10571 decltype(DelayedExceptionSpecChecks) SavedExceptionSpecChecks;
10572 decltype(DelayedDefaultedMemberExceptionSpecs)
10573 SavedDefaultedMemberExceptionSpecs;
10574 decltype(DelayedDllExportClasses) SavedDllExportClasses;
10575
10576 void swapSavedState() {
10577 SavedExceptionSpecChecks.swap(S.DelayedExceptionSpecChecks);
10578 SavedDefaultedMemberExceptionSpecs.swap(
10579 S.DelayedDefaultedMemberExceptionSpecs);
10580 SavedDllExportClasses.swap(S.DelayedDllExportClasses);
10581 }
10582 };
10583
10584 /// \brief Helper class that collects misaligned member designations and
10585 /// their location info for delayed diagnostics.
10586 struct MisalignedMember {
10587 Expr *E;
10588 RecordDecl *RD;
10589 ValueDecl *MD;
10590 CharUnits Alignment;
10591
10592 MisalignedMember() : E(), RD(), MD(), Alignment() {}
10593 MisalignedMember(Expr *E, RecordDecl *RD, ValueDecl *MD,
10594 CharUnits Alignment)
10595 : E(E), RD(RD), MD(MD), Alignment(Alignment) {}
10596 explicit MisalignedMember(Expr *E)
10597 : MisalignedMember(E, nullptr, nullptr, CharUnits()) {}
10598
10599 bool operator==(const MisalignedMember &m) { return this->E == m.E; }
10600 };
10601 /// \brief Small set of gathered accesses to potentially misaligned members
10602 /// due to the packed attribute.
10603 SmallVector<MisalignedMember, 4> MisalignedMembers;
10604
10605 /// \brief Adds an expression to the set of gathered misaligned members.
10606 void AddPotentialMisalignedMembers(Expr *E, RecordDecl *RD, ValueDecl *MD,
10607 CharUnits Alignment);
10608
10609public:
10610 /// \brief Diagnoses the current set of gathered accesses. This typically
10611 /// happens at full expression level. The set is cleared after emitting the
10612 /// diagnostics.
10613 void DiagnoseMisalignedMembers();
10614
10615 /// \brief This function checks if the expression is in the sef of potentially
10616 /// misaligned members and it is converted to some pointer type T with lower
10617 /// or equal alignment requirements. If so it removes it. This is used when
10618 /// we do not want to diagnose such misaligned access (e.g. in conversions to
10619 /// void*).
10620 void DiscardMisalignedMemberAddress(const Type *T, Expr *E);
10621
10622 /// \brief This function calls Action when it determines that E designates a
10623 /// misaligned member due to the packed attribute. This is used to emit
10624 /// local diagnostics like in reference binding.
10625 void RefersToMemberWithReducedAlignment(
10626 Expr *E,
10627 llvm::function_ref<void(Expr *, RecordDecl *, FieldDecl *, CharUnits)>
10628 Action);
10629};
10630
10631/// \brief RAII object that enters a new expression evaluation context.
10632class EnterExpressionEvaluationContext {
10633 Sema &Actions;
10634 bool Entered = true;
10635
10636public:
10637
10638 EnterExpressionEvaluationContext(Sema &Actions,
10639 Sema::ExpressionEvaluationContext NewContext,
10640 Decl *LambdaContextDecl = nullptr,
10641 bool IsDecltype = false,
10642 bool ShouldEnter = true)
10643 : Actions(Actions), Entered(ShouldEnter) {
10644 if (Entered)
10645 Actions.PushExpressionEvaluationContext(NewContext, LambdaContextDecl,
10646 IsDecltype);
10647 }
10648 EnterExpressionEvaluationContext(Sema &Actions,
10649 Sema::ExpressionEvaluationContext NewContext,
10650 Sema::ReuseLambdaContextDecl_t,
10651 bool IsDecltype = false)
10652 : Actions(Actions) {
10653 Actions.PushExpressionEvaluationContext(NewContext,
10654 Sema::ReuseLambdaContextDecl,
10655 IsDecltype);
10656 }
10657
10658 enum InitListTag { InitList };
10659 EnterExpressionEvaluationContext(Sema &Actions, InitListTag,
10660 bool ShouldEnter = true)
10661 : Actions(Actions), Entered(false) {
10662 // In C++11 onwards, narrowing checks are performed on the contents of
10663 // braced-init-lists, even when they occur within unevaluated operands.
10664 // Therefore we still need to instantiate constexpr functions used in such
10665 // a context.
10666 if (ShouldEnter && Actions.isUnevaluatedContext() &&
10667 Actions.getLangOpts().CPlusPlus11) {
10668 Actions.PushExpressionEvaluationContext(
10669 Sema::ExpressionEvaluationContext::UnevaluatedList, nullptr, false);
10670 Entered = true;
10671 }
10672 }
10673
10674 ~EnterExpressionEvaluationContext() {
10675 if (Entered)
10676 Actions.PopExpressionEvaluationContext();
10677 }
10678};
10679
10680DeductionFailureInfo
10681MakeDeductionFailureInfo(ASTContext &Context, Sema::TemplateDeductionResult TDK,
10682 sema::TemplateDeductionInfo &Info);
10683
10684/// \brief Contains a late templated function.
10685/// Will be parsed at the end of the translation unit, used by Sema & Parser.
10686struct LateParsedTemplate {
10687 CachedTokens Toks;
10688 /// \brief The template function declaration to be late parsed.
10689 Decl *D;
10690};
10691
10692} // end namespace clang
10693
10694namespace llvm {
10695// Hash a FunctionDeclAndLoc by looking at both its FunctionDecl and its
10696// SourceLocation.
10697template <> struct DenseMapInfo<clang::Sema::FunctionDeclAndLoc> {
10698 using FunctionDeclAndLoc = clang::Sema::FunctionDeclAndLoc;
10699 using FDBaseInfo = DenseMapInfo<clang::CanonicalDeclPtr<clang::FunctionDecl>>;
10700
10701 static FunctionDeclAndLoc getEmptyKey() {
10702 return {FDBaseInfo::getEmptyKey(), clang::SourceLocation()};
10703 }
10704
10705 static FunctionDeclAndLoc getTombstoneKey() {
10706 return {FDBaseInfo::getTombstoneKey(), clang::SourceLocation()};
10707 }
10708
10709 static unsigned getHashValue(const FunctionDeclAndLoc &FDL) {
10710 return hash_combine(FDBaseInfo::getHashValue(FDL.FD),
10711 FDL.Loc.getRawEncoding());
10712 }
10713
10714 static bool isEqual(const FunctionDeclAndLoc &LHS,
10715 const FunctionDeclAndLoc &RHS) {
10716 return LHS.FD == RHS.FD && LHS.Loc == RHS.Loc;
10717 }
10718};
10719} // namespace llvm
10720
10721#endif