1 //===--- SemaDecl.cpp - Semantic Analysis for Declarations ----------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements semantic analysis for declarations.
10 //
11 //===----------------------------------------------------------------------===//
12
13 #include "TypeLocBuilder.h"
14 #include "clang/AST/ASTConsumer.h"
15 #include "clang/AST/ASTContext.h"
16 #include "clang/AST/ASTLambda.h"
17 #include "clang/AST/CXXInheritance.h"
18 #include "clang/AST/CharUnits.h"
19 #include "clang/AST/CommentDiagnostic.h"
20 #include "clang/AST/DeclCXX.h"
21 #include "clang/AST/DeclObjC.h"
22 #include "clang/AST/DeclTemplate.h"
23 #include "clang/AST/EvaluatedExprVisitor.h"
24 #include "clang/AST/Expr.h"
25 #include "clang/AST/ExprCXX.h"
26 #include "clang/AST/NonTrivialTypeVisitor.h"
27 #include "clang/AST/StmtCXX.h"
28 #include "clang/Basic/Builtins.h"
29 #include "clang/Basic/PartialDiagnostic.h"
30 #include "clang/Basic/SourceManager.h"
31 #include "clang/Basic/TargetInfo.h"
32 #include "clang/Lex/HeaderSearch.h" // TODO: Sema shouldn't depend on Lex
33 #include "clang/Lex/Lexer.h" // TODO: Extract static functions to fix layering.
34 #include "clang/Lex/ModuleLoader.h" // TODO: Sema shouldn't depend on Lex
35 #include "clang/Lex/Preprocessor.h" // Included for isCodeCompletionEnabled()
36 #include "clang/Sema/CXXFieldCollector.h"
37 #include "clang/Sema/DeclSpec.h"
38 #include "clang/Sema/DelayedDiagnostic.h"
39 #include "clang/Sema/Initialization.h"
40 #include "clang/Sema/Lookup.h"
41 #include "clang/Sema/ParsedTemplate.h"
42 #include "clang/Sema/Scope.h"
43 #include "clang/Sema/ScopeInfo.h"
44 #include "clang/Sema/SemaInternal.h"
45 #include "clang/Sema/Template.h"
46 #include "llvm/ADT/SmallString.h"
47 #include "llvm/ADT/Triple.h"
48 #include <algorithm>
49 #include <cstring>
50 #include <functional>
51 #include <unordered_map>
52
53 using namespace clang;
54 using namespace sema;
55
ConvertDeclToDeclGroup(Decl * Ptr,Decl * OwnedType)56 Sema::DeclGroupPtrTy Sema::ConvertDeclToDeclGroup(Decl *Ptr, Decl *OwnedType) {
57 if (OwnedType) {
58 Decl *Group[2] = { OwnedType, Ptr };
59 return DeclGroupPtrTy::make(DeclGroupRef::Create(Context, Group, 2));
60 }
61
62 return DeclGroupPtrTy::make(DeclGroupRef(Ptr));
63 }
64
65 namespace {
66
67 class TypeNameValidatorCCC final : public CorrectionCandidateCallback {
68 public:
TypeNameValidatorCCC(bool AllowInvalid,bool WantClass=false,bool AllowTemplates=false,bool AllowNonTemplates=true)69 TypeNameValidatorCCC(bool AllowInvalid, bool WantClass = false,
70 bool AllowTemplates = false,
71 bool AllowNonTemplates = true)
72 : AllowInvalidDecl(AllowInvalid), WantClassName(WantClass),
73 AllowTemplates(AllowTemplates), AllowNonTemplates(AllowNonTemplates) {
74 WantExpressionKeywords = false;
75 WantCXXNamedCasts = false;
76 WantRemainingKeywords = false;
77 }
78
ValidateCandidate(const TypoCorrection & candidate)79 bool ValidateCandidate(const TypoCorrection &candidate) override {
80 if (NamedDecl *ND = candidate.getCorrectionDecl()) {
81 if (!AllowInvalidDecl && ND->isInvalidDecl())
82 return false;
83
84 if (getAsTypeTemplateDecl(ND))
85 return AllowTemplates;
86
87 bool IsType = isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND);
88 if (!IsType)
89 return false;
90
91 if (AllowNonTemplates)
92 return true;
93
94 // An injected-class-name of a class template (specialization) is valid
95 // as a template or as a non-template.
96 if (AllowTemplates) {
97 auto *RD = dyn_cast<CXXRecordDecl>(ND);
98 if (!RD || !RD->isInjectedClassName())
99 return false;
100 RD = cast<CXXRecordDecl>(RD->getDeclContext());
101 return RD->getDescribedClassTemplate() ||
102 isa<ClassTemplateSpecializationDecl>(RD);
103 }
104
105 return false;
106 }
107
108 return !WantClassName && candidate.isKeyword();
109 }
110
clone()111 std::unique_ptr<CorrectionCandidateCallback> clone() override {
112 return std::make_unique<TypeNameValidatorCCC>(*this);
113 }
114
115 private:
116 bool AllowInvalidDecl;
117 bool WantClassName;
118 bool AllowTemplates;
119 bool AllowNonTemplates;
120 };
121
122 } // end anonymous namespace
123
124 /// Determine whether the token kind starts a simple-type-specifier.
isSimpleTypeSpecifier(tok::TokenKind Kind) const125 bool Sema::isSimpleTypeSpecifier(tok::TokenKind Kind) const {
126 switch (Kind) {
127 // FIXME: Take into account the current language when deciding whether a
128 // token kind is a valid type specifier
129 case tok::kw_short:
130 case tok::kw_long:
131 case tok::kw___int64:
132 case tok::kw___int128:
133 case tok::kw_signed:
134 case tok::kw_unsigned:
135 case tok::kw_void:
136 case tok::kw_char:
137 case tok::kw_int:
138 case tok::kw_half:
139 case tok::kw_float:
140 case tok::kw_double:
141 case tok::kw___bf16:
142 case tok::kw__Float16:
143 case tok::kw___float128:
144 case tok::kw_wchar_t:
145 case tok::kw_bool:
146 case tok::kw___underlying_type:
147 case tok::kw___auto_type:
148 return true;
149
150 case tok::annot_typename:
151 case tok::kw_char16_t:
152 case tok::kw_char32_t:
153 case tok::kw_typeof:
154 case tok::annot_decltype:
155 case tok::kw_decltype:
156 return getLangOpts().CPlusPlus;
157
158 case tok::kw_char8_t:
159 return getLangOpts().Char8;
160
161 default:
162 break;
163 }
164
165 return false;
166 }
167
168 namespace {
169 enum class UnqualifiedTypeNameLookupResult {
170 NotFound,
171 FoundNonType,
172 FoundType
173 };
174 } // end anonymous namespace
175
176 /// Tries to perform unqualified lookup of the type decls in bases for
177 /// dependent class.
178 /// \return \a NotFound if no any decls is found, \a FoundNotType if found not a
179 /// type decl, \a FoundType if only type decls are found.
180 static UnqualifiedTypeNameLookupResult
lookupUnqualifiedTypeNameInBase(Sema & S,const IdentifierInfo & II,SourceLocation NameLoc,const CXXRecordDecl * RD)181 lookupUnqualifiedTypeNameInBase(Sema &S, const IdentifierInfo &II,
182 SourceLocation NameLoc,
183 const CXXRecordDecl *RD) {
184 if (!RD->hasDefinition())
185 return UnqualifiedTypeNameLookupResult::NotFound;
186 // Look for type decls in base classes.
187 UnqualifiedTypeNameLookupResult FoundTypeDecl =
188 UnqualifiedTypeNameLookupResult::NotFound;
189 for (const auto &Base : RD->bases()) {
190 const CXXRecordDecl *BaseRD = nullptr;
191 if (auto *BaseTT = Base.getType()->getAs<TagType>())
192 BaseRD = BaseTT->getAsCXXRecordDecl();
193 else if (auto *TST = Base.getType()->getAs<TemplateSpecializationType>()) {
194 // Look for type decls in dependent base classes that have known primary
195 // templates.
196 if (!TST || !TST->isDependentType())
197 continue;
198 auto *TD = TST->getTemplateName().getAsTemplateDecl();
199 if (!TD)
200 continue;
201 if (auto *BasePrimaryTemplate =
202 dyn_cast_or_null<CXXRecordDecl>(TD->getTemplatedDecl())) {
203 if (BasePrimaryTemplate->getCanonicalDecl() != RD->getCanonicalDecl())
204 BaseRD = BasePrimaryTemplate;
205 else if (auto *CTD = dyn_cast<ClassTemplateDecl>(TD)) {
206 if (const ClassTemplatePartialSpecializationDecl *PS =
207 CTD->findPartialSpecialization(Base.getType()))
208 if (PS->getCanonicalDecl() != RD->getCanonicalDecl())
209 BaseRD = PS;
210 }
211 }
212 }
213 if (BaseRD) {
214 for (NamedDecl *ND : BaseRD->lookup(&II)) {
215 if (!isa<TypeDecl>(ND))
216 return UnqualifiedTypeNameLookupResult::FoundNonType;
217 FoundTypeDecl = UnqualifiedTypeNameLookupResult::FoundType;
218 }
219 if (FoundTypeDecl == UnqualifiedTypeNameLookupResult::NotFound) {
220 switch (lookupUnqualifiedTypeNameInBase(S, II, NameLoc, BaseRD)) {
221 case UnqualifiedTypeNameLookupResult::FoundNonType:
222 return UnqualifiedTypeNameLookupResult::FoundNonType;
223 case UnqualifiedTypeNameLookupResult::FoundType:
224 FoundTypeDecl = UnqualifiedTypeNameLookupResult::FoundType;
225 break;
226 case UnqualifiedTypeNameLookupResult::NotFound:
227 break;
228 }
229 }
230 }
231 }
232
233 return FoundTypeDecl;
234 }
235
recoverFromTypeInKnownDependentBase(Sema & S,const IdentifierInfo & II,SourceLocation NameLoc)236 static ParsedType recoverFromTypeInKnownDependentBase(Sema &S,
237 const IdentifierInfo &II,
238 SourceLocation NameLoc) {
239 // Lookup in the parent class template context, if any.
240 const CXXRecordDecl *RD = nullptr;
241 UnqualifiedTypeNameLookupResult FoundTypeDecl =
242 UnqualifiedTypeNameLookupResult::NotFound;
243 for (DeclContext *DC = S.CurContext;
244 DC && FoundTypeDecl == UnqualifiedTypeNameLookupResult::NotFound;
245 DC = DC->getParent()) {
246 // Look for type decls in dependent base classes that have known primary
247 // templates.
248 RD = dyn_cast<CXXRecordDecl>(DC);
249 if (RD && RD->getDescribedClassTemplate())
250 FoundTypeDecl = lookupUnqualifiedTypeNameInBase(S, II, NameLoc, RD);
251 }
252 if (FoundTypeDecl != UnqualifiedTypeNameLookupResult::FoundType)
253 return nullptr;
254
255 // We found some types in dependent base classes. Recover as if the user
256 // wrote 'typename MyClass::II' instead of 'II'. We'll fully resolve the
257 // lookup during template instantiation.
258 S.Diag(NameLoc, diag::ext_found_in_dependent_base) << &II;
259
260 ASTContext &Context = S.Context;
261 auto *NNS = NestedNameSpecifier::Create(Context, nullptr, false,
262 cast<Type>(Context.getRecordType(RD)));
263 QualType T = Context.getDependentNameType(ETK_Typename, NNS, &II);
264
265 CXXScopeSpec SS;
266 SS.MakeTrivial(Context, NNS, SourceRange(NameLoc));
267
268 TypeLocBuilder Builder;
269 DependentNameTypeLoc DepTL = Builder.push<DependentNameTypeLoc>(T);
270 DepTL.setNameLoc(NameLoc);
271 DepTL.setElaboratedKeywordLoc(SourceLocation());
272 DepTL.setQualifierLoc(SS.getWithLocInContext(Context));
273 return S.CreateParsedType(T, Builder.getTypeSourceInfo(Context, T));
274 }
275
276 /// If the identifier refers to a type name within this scope,
277 /// return the declaration of that type.
278 ///
279 /// This routine performs ordinary name lookup of the identifier II
280 /// within the given scope, with optional C++ scope specifier SS, to
281 /// determine whether the name refers to a type. If so, returns an
282 /// opaque pointer (actually a QualType) corresponding to that
283 /// type. Otherwise, returns NULL.
getTypeName(const IdentifierInfo & II,SourceLocation NameLoc,Scope * S,CXXScopeSpec * SS,bool isClassName,bool HasTrailingDot,ParsedType ObjectTypePtr,bool IsCtorOrDtorName,bool WantNontrivialTypeSourceInfo,bool IsClassTemplateDeductionContext,IdentifierInfo ** CorrectedII)284 ParsedType Sema::getTypeName(const IdentifierInfo &II, SourceLocation NameLoc,
285 Scope *S, CXXScopeSpec *SS,
286 bool isClassName, bool HasTrailingDot,
287 ParsedType ObjectTypePtr,
288 bool IsCtorOrDtorName,
289 bool WantNontrivialTypeSourceInfo,
290 bool IsClassTemplateDeductionContext,
291 IdentifierInfo **CorrectedII) {
292 // FIXME: Consider allowing this outside C++1z mode as an extension.
293 bool AllowDeducedTemplate = IsClassTemplateDeductionContext &&
294 getLangOpts().CPlusPlus17 && !IsCtorOrDtorName &&
295 !isClassName && !HasTrailingDot;
296
297 // Determine where we will perform name lookup.
298 DeclContext *LookupCtx = nullptr;
299 if (ObjectTypePtr) {
300 QualType ObjectType = ObjectTypePtr.get();
301 if (ObjectType->isRecordType())
302 LookupCtx = computeDeclContext(ObjectType);
303 } else if (SS && SS->isNotEmpty()) {
304 LookupCtx = computeDeclContext(*SS, false);
305
306 if (!LookupCtx) {
307 if (isDependentScopeSpecifier(*SS)) {
308 // C++ [temp.res]p3:
309 // A qualified-id that refers to a type and in which the
310 // nested-name-specifier depends on a template-parameter (14.6.2)
311 // shall be prefixed by the keyword typename to indicate that the
312 // qualified-id denotes a type, forming an
313 // elaborated-type-specifier (7.1.5.3).
314 //
315 // We therefore do not perform any name lookup if the result would
316 // refer to a member of an unknown specialization.
317 if (!isClassName && !IsCtorOrDtorName)
318 return nullptr;
319
320 // We know from the grammar that this name refers to a type,
321 // so build a dependent node to describe the type.
322 if (WantNontrivialTypeSourceInfo)
323 return ActOnTypenameType(S, SourceLocation(), *SS, II, NameLoc).get();
324
325 NestedNameSpecifierLoc QualifierLoc = SS->getWithLocInContext(Context);
326 QualType T = CheckTypenameType(ETK_None, SourceLocation(), QualifierLoc,
327 II, NameLoc);
328 return ParsedType::make(T);
329 }
330
331 return nullptr;
332 }
333
334 if (!LookupCtx->isDependentContext() &&
335 RequireCompleteDeclContext(*SS, LookupCtx))
336 return nullptr;
337 }
338
339 // FIXME: LookupNestedNameSpecifierName isn't the right kind of
340 // lookup for class-names.
341 LookupNameKind Kind = isClassName ? LookupNestedNameSpecifierName :
342 LookupOrdinaryName;
343 LookupResult Result(*this, &II, NameLoc, Kind);
344 if (LookupCtx) {
345 // Perform "qualified" name lookup into the declaration context we
346 // computed, which is either the type of the base of a member access
347 // expression or the declaration context associated with a prior
348 // nested-name-specifier.
349 LookupQualifiedName(Result, LookupCtx);
350
351 if (ObjectTypePtr && Result.empty()) {
352 // C++ [basic.lookup.classref]p3:
353 // If the unqualified-id is ~type-name, the type-name is looked up
354 // in the context of the entire postfix-expression. If the type T of
355 // the object expression is of a class type C, the type-name is also
356 // looked up in the scope of class C. At least one of the lookups shall
357 // find a name that refers to (possibly cv-qualified) T.
358 LookupName(Result, S);
359 }
360 } else {
361 // Perform unqualified name lookup.
362 LookupName(Result, S);
363
364 // For unqualified lookup in a class template in MSVC mode, look into
365 // dependent base classes where the primary class template is known.
366 if (Result.empty() && getLangOpts().MSVCCompat && (!SS || SS->isEmpty())) {
367 if (ParsedType TypeInBase =
368 recoverFromTypeInKnownDependentBase(*this, II, NameLoc))
369 return TypeInBase;
370 }
371 }
372
373 NamedDecl *IIDecl = nullptr;
374 switch (Result.getResultKind()) {
375 case LookupResult::NotFound:
376 case LookupResult::NotFoundInCurrentInstantiation:
377 if (CorrectedII) {
378 TypeNameValidatorCCC CCC(/*AllowInvalid=*/true, isClassName,
379 AllowDeducedTemplate);
380 TypoCorrection Correction = CorrectTypo(Result.getLookupNameInfo(), Kind,
381 S, SS, CCC, CTK_ErrorRecovery);
382 IdentifierInfo *NewII = Correction.getCorrectionAsIdentifierInfo();
383 TemplateTy Template;
384 bool MemberOfUnknownSpecialization;
385 UnqualifiedId TemplateName;
386 TemplateName.setIdentifier(NewII, NameLoc);
387 NestedNameSpecifier *NNS = Correction.getCorrectionSpecifier();
388 CXXScopeSpec NewSS, *NewSSPtr = SS;
389 if (SS && NNS) {
390 NewSS.MakeTrivial(Context, NNS, SourceRange(NameLoc));
391 NewSSPtr = &NewSS;
392 }
393 if (Correction && (NNS || NewII != &II) &&
394 // Ignore a correction to a template type as the to-be-corrected
395 // identifier is not a template (typo correction for template names
396 // is handled elsewhere).
397 !(getLangOpts().CPlusPlus && NewSSPtr &&
398 isTemplateName(S, *NewSSPtr, false, TemplateName, nullptr, false,
399 Template, MemberOfUnknownSpecialization))) {
400 ParsedType Ty = getTypeName(*NewII, NameLoc, S, NewSSPtr,
401 isClassName, HasTrailingDot, ObjectTypePtr,
402 IsCtorOrDtorName,
403 WantNontrivialTypeSourceInfo,
404 IsClassTemplateDeductionContext);
405 if (Ty) {
406 diagnoseTypo(Correction,
407 PDiag(diag::err_unknown_type_or_class_name_suggest)
408 << Result.getLookupName() << isClassName);
409 if (SS && NNS)
410 SS->MakeTrivial(Context, NNS, SourceRange(NameLoc));
411 *CorrectedII = NewII;
412 return Ty;
413 }
414 }
415 }
416 // If typo correction failed or was not performed, fall through
417 LLVM_FALLTHROUGH;
418 case LookupResult::FoundOverloaded:
419 case LookupResult::FoundUnresolvedValue:
420 Result.suppressDiagnostics();
421 return nullptr;
422
423 case LookupResult::Ambiguous:
424 // Recover from type-hiding ambiguities by hiding the type. We'll
425 // do the lookup again when looking for an object, and we can
426 // diagnose the error then. If we don't do this, then the error
427 // about hiding the type will be immediately followed by an error
428 // that only makes sense if the identifier was treated like a type.
429 if (Result.getAmbiguityKind() == LookupResult::AmbiguousTagHiding) {
430 Result.suppressDiagnostics();
431 return nullptr;
432 }
433
434 // Look to see if we have a type anywhere in the list of results.
435 for (LookupResult::iterator Res = Result.begin(), ResEnd = Result.end();
436 Res != ResEnd; ++Res) {
437 if (isa<TypeDecl>(*Res) || isa<ObjCInterfaceDecl>(*Res) ||
438 (AllowDeducedTemplate && getAsTypeTemplateDecl(*Res))) {
439 if (!IIDecl ||
440 (*Res)->getLocation().getRawEncoding() <
441 IIDecl->getLocation().getRawEncoding())
442 IIDecl = *Res;
443 }
444 }
445
446 if (!IIDecl) {
447 // None of the entities we found is a type, so there is no way
448 // to even assume that the result is a type. In this case, don't
449 // complain about the ambiguity. The parser will either try to
450 // perform this lookup again (e.g., as an object name), which
451 // will produce the ambiguity, or will complain that it expected
452 // a type name.
453 Result.suppressDiagnostics();
454 return nullptr;
455 }
456
457 // We found a type within the ambiguous lookup; diagnose the
458 // ambiguity and then return that type. This might be the right
459 // answer, or it might not be, but it suppresses any attempt to
460 // perform the name lookup again.
461 break;
462
463 case LookupResult::Found:
464 IIDecl = Result.getFoundDecl();
465 break;
466 }
467
468 assert(IIDecl && "Didn't find decl");
469
470 QualType T;
471 if (TypeDecl *TD = dyn_cast<TypeDecl>(IIDecl)) {
472 // C++ [class.qual]p2: A lookup that would find the injected-class-name
473 // instead names the constructors of the class, except when naming a class.
474 // This is ill-formed when we're not actually forming a ctor or dtor name.
475 auto *LookupRD = dyn_cast_or_null<CXXRecordDecl>(LookupCtx);
476 auto *FoundRD = dyn_cast<CXXRecordDecl>(TD);
477 if (!isClassName && !IsCtorOrDtorName && LookupRD && FoundRD &&
478 FoundRD->isInjectedClassName() &&
479 declaresSameEntity(LookupRD, cast<Decl>(FoundRD->getParent())))
480 Diag(NameLoc, diag::err_out_of_line_qualified_id_type_names_constructor)
481 << &II << /*Type*/1;
482
483 DiagnoseUseOfDecl(IIDecl, NameLoc);
484
485 T = Context.getTypeDeclType(TD);
486 MarkAnyDeclReferenced(TD->getLocation(), TD, /*OdrUse=*/false);
487 } else if (ObjCInterfaceDecl *IDecl = dyn_cast<ObjCInterfaceDecl>(IIDecl)) {
488 (void)DiagnoseUseOfDecl(IDecl, NameLoc);
489 if (!HasTrailingDot)
490 T = Context.getObjCInterfaceType(IDecl);
491 } else if (AllowDeducedTemplate) {
492 if (auto *TD = getAsTypeTemplateDecl(IIDecl))
493 T = Context.getDeducedTemplateSpecializationType(TemplateName(TD),
494 QualType(), false);
495 }
496
497 if (T.isNull()) {
498 // If it's not plausibly a type, suppress diagnostics.
499 Result.suppressDiagnostics();
500 return nullptr;
501 }
502
503 // NOTE: avoid constructing an ElaboratedType(Loc) if this is a
504 // constructor or destructor name (in such a case, the scope specifier
505 // will be attached to the enclosing Expr or Decl node).
506 if (SS && SS->isNotEmpty() && !IsCtorOrDtorName &&
507 !isa<ObjCInterfaceDecl>(IIDecl)) {
508 if (WantNontrivialTypeSourceInfo) {
509 // Construct a type with type-source information.
510 TypeLocBuilder Builder;
511 Builder.pushTypeSpec(T).setNameLoc(NameLoc);
512
513 T = getElaboratedType(ETK_None, *SS, T);
514 ElaboratedTypeLoc ElabTL = Builder.push<ElaboratedTypeLoc>(T);
515 ElabTL.setElaboratedKeywordLoc(SourceLocation());
516 ElabTL.setQualifierLoc(SS->getWithLocInContext(Context));
517 return CreateParsedType(T, Builder.getTypeSourceInfo(Context, T));
518 } else {
519 T = getElaboratedType(ETK_None, *SS, T);
520 }
521 }
522
523 return ParsedType::make(T);
524 }
525
526 // Builds a fake NNS for the given decl context.
527 static NestedNameSpecifier *
synthesizeCurrentNestedNameSpecifier(ASTContext & Context,DeclContext * DC)528 synthesizeCurrentNestedNameSpecifier(ASTContext &Context, DeclContext *DC) {
529 for (;; DC = DC->getLookupParent()) {
530 DC = DC->getPrimaryContext();
531 auto *ND = dyn_cast<NamespaceDecl>(DC);
532 if (ND && !ND->isInline() && !ND->isAnonymousNamespace())
533 return NestedNameSpecifier::Create(Context, nullptr, ND);
534 else if (auto *RD = dyn_cast<CXXRecordDecl>(DC))
535 return NestedNameSpecifier::Create(Context, nullptr, RD->isTemplateDecl(),
536 RD->getTypeForDecl());
537 else if (isa<TranslationUnitDecl>(DC))
538 return NestedNameSpecifier::GlobalSpecifier(Context);
539 }
540 llvm_unreachable("something isn't in TU scope?");
541 }
542
543 /// Find the parent class with dependent bases of the innermost enclosing method
544 /// context. Do not look for enclosing CXXRecordDecls directly, or we will end
545 /// up allowing unqualified dependent type names at class-level, which MSVC
546 /// correctly rejects.
547 static const CXXRecordDecl *
findRecordWithDependentBasesOfEnclosingMethod(const DeclContext * DC)548 findRecordWithDependentBasesOfEnclosingMethod(const DeclContext *DC) {
549 for (; DC && DC->isDependentContext(); DC = DC->getLookupParent()) {
550 DC = DC->getPrimaryContext();
551 if (const auto *MD = dyn_cast<CXXMethodDecl>(DC))
552 if (MD->getParent()->hasAnyDependentBases())
553 return MD->getParent();
554 }
555 return nullptr;
556 }
557
ActOnMSVCUnknownTypeName(const IdentifierInfo & II,SourceLocation NameLoc,bool IsTemplateTypeArg)558 ParsedType Sema::ActOnMSVCUnknownTypeName(const IdentifierInfo &II,
559 SourceLocation NameLoc,
560 bool IsTemplateTypeArg) {
561 assert(getLangOpts().MSVCCompat && "shouldn't be called in non-MSVC mode");
562
563 NestedNameSpecifier *NNS = nullptr;
564 if (IsTemplateTypeArg && getCurScope()->isTemplateParamScope()) {
565 // If we weren't able to parse a default template argument, delay lookup
566 // until instantiation time by making a non-dependent DependentTypeName. We
567 // pretend we saw a NestedNameSpecifier referring to the current scope, and
568 // lookup is retried.
569 // FIXME: This hurts our diagnostic quality, since we get errors like "no
570 // type named 'Foo' in 'current_namespace'" when the user didn't write any
571 // name specifiers.
572 NNS = synthesizeCurrentNestedNameSpecifier(Context, CurContext);
573 Diag(NameLoc, diag::ext_ms_delayed_template_argument) << &II;
574 } else if (const CXXRecordDecl *RD =
575 findRecordWithDependentBasesOfEnclosingMethod(CurContext)) {
576 // Build a DependentNameType that will perform lookup into RD at
577 // instantiation time.
578 NNS = NestedNameSpecifier::Create(Context, nullptr, RD->isTemplateDecl(),
579 RD->getTypeForDecl());
580
581 // Diagnose that this identifier was undeclared, and retry the lookup during
582 // template instantiation.
583 Diag(NameLoc, diag::ext_undeclared_unqual_id_with_dependent_base) << &II
584 << RD;
585 } else {
586 // This is not a situation that we should recover from.
587 return ParsedType();
588 }
589
590 QualType T = Context.getDependentNameType(ETK_None, NNS, &II);
591
592 // Build type location information. We synthesized the qualifier, so we have
593 // to build a fake NestedNameSpecifierLoc.
594 NestedNameSpecifierLocBuilder NNSLocBuilder;
595 NNSLocBuilder.MakeTrivial(Context, NNS, SourceRange(NameLoc));
596 NestedNameSpecifierLoc QualifierLoc = NNSLocBuilder.getWithLocInContext(Context);
597
598 TypeLocBuilder Builder;
599 DependentNameTypeLoc DepTL = Builder.push<DependentNameTypeLoc>(T);
600 DepTL.setNameLoc(NameLoc);
601 DepTL.setElaboratedKeywordLoc(SourceLocation());
602 DepTL.setQualifierLoc(QualifierLoc);
603 return CreateParsedType(T, Builder.getTypeSourceInfo(Context, T));
604 }
605
606 /// isTagName() - This method is called *for error recovery purposes only*
607 /// to determine if the specified name is a valid tag name ("struct foo"). If
608 /// so, this returns the TST for the tag corresponding to it (TST_enum,
609 /// TST_union, TST_struct, TST_interface, TST_class). This is used to diagnose
610 /// cases in C where the user forgot to specify the tag.
isTagName(IdentifierInfo & II,Scope * S)611 DeclSpec::TST Sema::isTagName(IdentifierInfo &II, Scope *S) {
612 // Do a tag name lookup in this scope.
613 LookupResult R(*this, &II, SourceLocation(), LookupTagName);
614 LookupName(R, S, false);
615 R.suppressDiagnostics();
616 if (R.getResultKind() == LookupResult::Found)
617 if (const TagDecl *TD = R.getAsSingle<TagDecl>()) {
618 switch (TD->getTagKind()) {
619 case TTK_Struct: return DeclSpec::TST_struct;
620 case TTK_Interface: return DeclSpec::TST_interface;
621 case TTK_Union: return DeclSpec::TST_union;
622 case TTK_Class: return DeclSpec::TST_class;
623 case TTK_Enum: return DeclSpec::TST_enum;
624 }
625 }
626
627 return DeclSpec::TST_unspecified;
628 }
629
630 /// isMicrosoftMissingTypename - In Microsoft mode, within class scope,
631 /// if a CXXScopeSpec's type is equal to the type of one of the base classes
632 /// then downgrade the missing typename error to a warning.
633 /// This is needed for MSVC compatibility; Example:
634 /// @code
635 /// template<class T> class A {
636 /// public:
637 /// typedef int TYPE;
638 /// };
639 /// template<class T> class B : public A<T> {
640 /// public:
641 /// A<T>::TYPE a; // no typename required because A<T> is a base class.
642 /// };
643 /// @endcode
isMicrosoftMissingTypename(const CXXScopeSpec * SS,Scope * S)644 bool Sema::isMicrosoftMissingTypename(const CXXScopeSpec *SS, Scope *S) {
645 if (CurContext->isRecord()) {
646 if (SS->getScopeRep()->getKind() == NestedNameSpecifier::Super)
647 return true;
648
649 const Type *Ty = SS->getScopeRep()->getAsType();
650
651 CXXRecordDecl *RD = cast<CXXRecordDecl>(CurContext);
652 for (const auto &Base : RD->bases())
653 if (Ty && Context.hasSameUnqualifiedType(QualType(Ty, 1), Base.getType()))
654 return true;
655 return S->isFunctionPrototypeScope();
656 }
657 return CurContext->isFunctionOrMethod() || S->isFunctionPrototypeScope();
658 }
659
DiagnoseUnknownTypeName(IdentifierInfo * & II,SourceLocation IILoc,Scope * S,CXXScopeSpec * SS,ParsedType & SuggestedType,bool IsTemplateName)660 void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II,
661 SourceLocation IILoc,
662 Scope *S,
663 CXXScopeSpec *SS,
664 ParsedType &SuggestedType,
665 bool IsTemplateName) {
666 // Don't report typename errors for editor placeholders.
667 if (II->isEditorPlaceholder())
668 return;
669 // We don't have anything to suggest (yet).
670 SuggestedType = nullptr;
671
672 // There may have been a typo in the name of the type. Look up typo
673 // results, in case we have something that we can suggest.
674 TypeNameValidatorCCC CCC(/*AllowInvalid=*/false, /*WantClass=*/false,
675 /*AllowTemplates=*/IsTemplateName,
676 /*AllowNonTemplates=*/!IsTemplateName);
677 if (TypoCorrection Corrected =
678 CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS,
679 CCC, CTK_ErrorRecovery)) {
680 // FIXME: Support error recovery for the template-name case.
681 bool CanRecover = !IsTemplateName;
682 if (Corrected.isKeyword()) {
683 // We corrected to a keyword.
684 diagnoseTypo(Corrected,
685 PDiag(IsTemplateName ? diag::err_no_template_suggest
686 : diag::err_unknown_typename_suggest)
687 << II);
688 II = Corrected.getCorrectionAsIdentifierInfo();
689 } else {
690 // We found a similarly-named type or interface; suggest that.
691 if (!SS || !SS->isSet()) {
692 diagnoseTypo(Corrected,
693 PDiag(IsTemplateName ? diag::err_no_template_suggest
694 : diag::err_unknown_typename_suggest)
695 << II, CanRecover);
696 } else if (DeclContext *DC = computeDeclContext(*SS, false)) {
697 std::string CorrectedStr(Corrected.getAsString(getLangOpts()));
698 bool DroppedSpecifier = Corrected.WillReplaceSpecifier() &&
699 II->getName().equals(CorrectedStr);
700 diagnoseTypo(Corrected,
701 PDiag(IsTemplateName
702 ? diag::err_no_member_template_suggest
703 : diag::err_unknown_nested_typename_suggest)
704 << II << DC << DroppedSpecifier << SS->getRange(),
705 CanRecover);
706 } else {
707 llvm_unreachable("could not have corrected a typo here");
708 }
709
710 if (!CanRecover)
711 return;
712
713 CXXScopeSpec tmpSS;
714 if (Corrected.getCorrectionSpecifier())
715 tmpSS.MakeTrivial(Context, Corrected.getCorrectionSpecifier(),
716 SourceRange(IILoc));
717 // FIXME: Support class template argument deduction here.
718 SuggestedType =
719 getTypeName(*Corrected.getCorrectionAsIdentifierInfo(), IILoc, S,
720 tmpSS.isSet() ? &tmpSS : SS, false, false, nullptr,
721 /*IsCtorOrDtorName=*/false,
722 /*WantNontrivialTypeSourceInfo=*/true);
723 }
724 return;
725 }
726
727 if (getLangOpts().CPlusPlus && !IsTemplateName) {
728 // See if II is a class template that the user forgot to pass arguments to.
729 UnqualifiedId Name;
730 Name.setIdentifier(II, IILoc);
731 CXXScopeSpec EmptySS;
732 TemplateTy TemplateResult;
733 bool MemberOfUnknownSpecialization;
734 if (isTemplateName(S, SS ? *SS : EmptySS, /*hasTemplateKeyword=*/false,
735 Name, nullptr, true, TemplateResult,
736 MemberOfUnknownSpecialization) == TNK_Type_template) {
737 diagnoseMissingTemplateArguments(TemplateResult.get(), IILoc);
738 return;
739 }
740 }
741
742 // FIXME: Should we move the logic that tries to recover from a missing tag
743 // (struct, union, enum) from Parser::ParseImplicitInt here, instead?
744
745 if (!SS || (!SS->isSet() && !SS->isInvalid()))
746 Diag(IILoc, IsTemplateName ? diag::err_no_template
747 : diag::err_unknown_typename)
748 << II;
749 else if (DeclContext *DC = computeDeclContext(*SS, false))
750 Diag(IILoc, IsTemplateName ? diag::err_no_member_template
751 : diag::err_typename_nested_not_found)
752 << II << DC << SS->getRange();
753 else if (SS->isValid() && SS->getScopeRep()->containsErrors()) {
754 SuggestedType =
755 ActOnTypenameType(S, SourceLocation(), *SS, *II, IILoc).get();
756 } else if (isDependentScopeSpecifier(*SS)) {
757 unsigned DiagID = diag::err_typename_missing;
758 if (getLangOpts().MSVCCompat && isMicrosoftMissingTypename(SS, S))
759 DiagID = diag::ext_typename_missing;
760
761 Diag(SS->getRange().getBegin(), DiagID)
762 << SS->getScopeRep() << II->getName()
763 << SourceRange(SS->getRange().getBegin(), IILoc)
764 << FixItHint::CreateInsertion(SS->getRange().getBegin(), "typename ");
765 SuggestedType = ActOnTypenameType(S, SourceLocation(),
766 *SS, *II, IILoc).get();
767 } else {
768 assert(SS && SS->isInvalid() &&
769 "Invalid scope specifier has already been diagnosed");
770 }
771 }
772
773 /// Determine whether the given result set contains either a type name
774 /// or
isResultTypeOrTemplate(LookupResult & R,const Token & NextToken)775 static bool isResultTypeOrTemplate(LookupResult &R, const Token &NextToken) {
776 bool CheckTemplate = R.getSema().getLangOpts().CPlusPlus &&
777 NextToken.is(tok::less);
778
779 for (LookupResult::iterator I = R.begin(), IEnd = R.end(); I != IEnd; ++I) {
780 if (isa<TypeDecl>(*I) || isa<ObjCInterfaceDecl>(*I))
781 return true;
782
783 if (CheckTemplate && isa<TemplateDecl>(*I))
784 return true;
785 }
786
787 return false;
788 }
789
isTagTypeWithMissingTag(Sema & SemaRef,LookupResult & Result,Scope * S,CXXScopeSpec & SS,IdentifierInfo * & Name,SourceLocation NameLoc)790 static bool isTagTypeWithMissingTag(Sema &SemaRef, LookupResult &Result,
791 Scope *S, CXXScopeSpec &SS,
792 IdentifierInfo *&Name,
793 SourceLocation NameLoc) {
794 LookupResult R(SemaRef, Name, NameLoc, Sema::LookupTagName);
795 SemaRef.LookupParsedName(R, S, &SS);
796 if (TagDecl *Tag = R.getAsSingle<TagDecl>()) {
797 StringRef FixItTagName;
798 switch (Tag->getTagKind()) {
799 case TTK_Class:
800 FixItTagName = "class ";
801 break;
802
803 case TTK_Enum:
804 FixItTagName = "enum ";
805 break;
806
807 case TTK_Struct:
808 FixItTagName = "struct ";
809 break;
810
811 case TTK_Interface:
812 FixItTagName = "__interface ";
813 break;
814
815 case TTK_Union:
816 FixItTagName = "union ";
817 break;
818 }
819
820 StringRef TagName = FixItTagName.drop_back();
821 SemaRef.Diag(NameLoc, diag::err_use_of_tag_name_without_tag)
822 << Name << TagName << SemaRef.getLangOpts().CPlusPlus
823 << FixItHint::CreateInsertion(NameLoc, FixItTagName);
824
825 for (LookupResult::iterator I = Result.begin(), IEnd = Result.end();
826 I != IEnd; ++I)
827 SemaRef.Diag((*I)->getLocation(), diag::note_decl_hiding_tag_type)
828 << Name << TagName;
829
830 // Replace lookup results with just the tag decl.
831 Result.clear(Sema::LookupTagName);
832 SemaRef.LookupParsedName(Result, S, &SS);
833 return true;
834 }
835
836 return false;
837 }
838
839 /// Build a ParsedType for a simple-type-specifier with a nested-name-specifier.
buildNestedType(Sema & S,CXXScopeSpec & SS,QualType T,SourceLocation NameLoc)840 static ParsedType buildNestedType(Sema &S, CXXScopeSpec &SS,
841 QualType T, SourceLocation NameLoc) {
842 ASTContext &Context = S.Context;
843
844 TypeLocBuilder Builder;
845 Builder.pushTypeSpec(T).setNameLoc(NameLoc);
846
847 T = S.getElaboratedType(ETK_None, SS, T);
848 ElaboratedTypeLoc ElabTL = Builder.push<ElaboratedTypeLoc>(T);
849 ElabTL.setElaboratedKeywordLoc(SourceLocation());
850 ElabTL.setQualifierLoc(SS.getWithLocInContext(Context));
851 return S.CreateParsedType(T, Builder.getTypeSourceInfo(Context, T));
852 }
853
ClassifyName(Scope * S,CXXScopeSpec & SS,IdentifierInfo * & Name,SourceLocation NameLoc,const Token & NextToken,CorrectionCandidateCallback * CCC)854 Sema::NameClassification Sema::ClassifyName(Scope *S, CXXScopeSpec &SS,
855 IdentifierInfo *&Name,
856 SourceLocation NameLoc,
857 const Token &NextToken,
858 CorrectionCandidateCallback *CCC) {
859 DeclarationNameInfo NameInfo(Name, NameLoc);
860 ObjCMethodDecl *CurMethod = getCurMethodDecl();
861
862 assert(NextToken.isNot(tok::coloncolon) &&
863 "parse nested name specifiers before calling ClassifyName");
864 if (getLangOpts().CPlusPlus && SS.isSet() &&
865 isCurrentClassName(*Name, S, &SS)) {
866 // Per [class.qual]p2, this names the constructors of SS, not the
867 // injected-class-name. We don't have a classification for that.
868 // There's not much point caching this result, since the parser
869 // will reject it later.
870 return NameClassification::Unknown();
871 }
872
873 LookupResult Result(*this, Name, NameLoc, LookupOrdinaryName);
874 LookupParsedName(Result, S, &SS, !CurMethod);
875
876 if (SS.isInvalid())
877 return NameClassification::Error();
878
879 // For unqualified lookup in a class template in MSVC mode, look into
880 // dependent base classes where the primary class template is known.
881 if (Result.empty() && SS.isEmpty() && getLangOpts().MSVCCompat) {
882 if (ParsedType TypeInBase =
883 recoverFromTypeInKnownDependentBase(*this, *Name, NameLoc))
884 return TypeInBase;
885 }
886
887 // Perform lookup for Objective-C instance variables (including automatically
888 // synthesized instance variables), if we're in an Objective-C method.
889 // FIXME: This lookup really, really needs to be folded in to the normal
890 // unqualified lookup mechanism.
891 if (SS.isEmpty() && CurMethod && !isResultTypeOrTemplate(Result, NextToken)) {
892 DeclResult Ivar = LookupIvarInObjCMethod(Result, S, Name);
893 if (Ivar.isInvalid())
894 return NameClassification::Error();
895 if (Ivar.isUsable())
896 return NameClassification::NonType(cast<NamedDecl>(Ivar.get()));
897
898 // We defer builtin creation until after ivar lookup inside ObjC methods.
899 if (Result.empty())
900 LookupBuiltin(Result);
901 }
902
903 bool SecondTry = false;
904 bool IsFilteredTemplateName = false;
905
906 Corrected:
907 switch (Result.getResultKind()) {
908 case LookupResult::NotFound:
909 // If an unqualified-id is followed by a '(', then we have a function
910 // call.
911 if (SS.isEmpty() && NextToken.is(tok::l_paren)) {
912 // In C++, this is an ADL-only call.
913 // FIXME: Reference?
914 if (getLangOpts().CPlusPlus)
915 return NameClassification::UndeclaredNonType();
916
917 // C90 6.3.2.2:
918 // If the expression that precedes the parenthesized argument list in a
919 // function call consists solely of an identifier, and if no
920 // declaration is visible for this identifier, the identifier is
921 // implicitly declared exactly as if, in the innermost block containing
922 // the function call, the declaration
923 //
924 // extern int identifier ();
925 //
926 // appeared.
927 //
928 // We also allow this in C99 as an extension.
929 if (NamedDecl *D = ImplicitlyDefineFunction(NameLoc, *Name, S))
930 return NameClassification::NonType(D);
931 }
932
933 if (getLangOpts().CPlusPlus20 && SS.isEmpty() && NextToken.is(tok::less)) {
934 // In C++20 onwards, this could be an ADL-only call to a function
935 // template, and we're required to assume that this is a template name.
936 //
937 // FIXME: Find a way to still do typo correction in this case.
938 TemplateName Template =
939 Context.getAssumedTemplateName(NameInfo.getName());
940 return NameClassification::UndeclaredTemplate(Template);
941 }
942
943 // In C, we first see whether there is a tag type by the same name, in
944 // which case it's likely that the user just forgot to write "enum",
945 // "struct", or "union".
946 if (!getLangOpts().CPlusPlus && !SecondTry &&
947 isTagTypeWithMissingTag(*this, Result, S, SS, Name, NameLoc)) {
948 break;
949 }
950
951 // Perform typo correction to determine if there is another name that is
952 // close to this name.
953 if (!SecondTry && CCC) {
954 SecondTry = true;
955 if (TypoCorrection Corrected =
956 CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S,
957 &SS, *CCC, CTK_ErrorRecovery)) {
958 unsigned UnqualifiedDiag = diag::err_undeclared_var_use_suggest;
959 unsigned QualifiedDiag = diag::err_no_member_suggest;
960
961 NamedDecl *FirstDecl = Corrected.getFoundDecl();
962 NamedDecl *UnderlyingFirstDecl = Corrected.getCorrectionDecl();
963 if (getLangOpts().CPlusPlus && NextToken.is(tok::less) &&
964 UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) {
965 UnqualifiedDiag = diag::err_no_template_suggest;
966 QualifiedDiag = diag::err_no_member_template_suggest;
967 } else if (UnderlyingFirstDecl &&
968 (isa<TypeDecl>(UnderlyingFirstDecl) ||
969 isa<ObjCInterfaceDecl>(UnderlyingFirstDecl) ||
970 isa<ObjCCompatibleAliasDecl>(UnderlyingFirstDecl))) {
971 UnqualifiedDiag = diag::err_unknown_typename_suggest;
972 QualifiedDiag = diag::err_unknown_nested_typename_suggest;
973 }
974
975 if (SS.isEmpty()) {
976 diagnoseTypo(Corrected, PDiag(UnqualifiedDiag) << Name);
977 } else {// FIXME: is this even reachable? Test it.
978 std::string CorrectedStr(Corrected.getAsString(getLangOpts()));
979 bool DroppedSpecifier = Corrected.WillReplaceSpecifier() &&
980 Name->getName().equals(CorrectedStr);
981 diagnoseTypo(Corrected, PDiag(QualifiedDiag)
982 << Name << computeDeclContext(SS, false)
983 << DroppedSpecifier << SS.getRange());
984 }
985
986 // Update the name, so that the caller has the new name.
987 Name = Corrected.getCorrectionAsIdentifierInfo();
988
989 // Typo correction corrected to a keyword.
990 if (Corrected.isKeyword())
991 return Name;
992
993 // Also update the LookupResult...
994 // FIXME: This should probably go away at some point
995 Result.clear();
996 Result.setLookupName(Corrected.getCorrection());
997 if (FirstDecl)
998 Result.addDecl(FirstDecl);
999
1000 // If we found an Objective-C instance variable, let
1001 // LookupInObjCMethod build the appropriate expression to
1002 // reference the ivar.
1003 // FIXME: This is a gross hack.
1004 if (ObjCIvarDecl *Ivar = Result.getAsSingle<ObjCIvarDecl>()) {
1005 DeclResult R =
1006 LookupIvarInObjCMethod(Result, S, Ivar->getIdentifier());
1007 if (R.isInvalid())
1008 return NameClassification::Error();
1009 if (R.isUsable())
1010 return NameClassification::NonType(Ivar);
1011 }
1012
1013 goto Corrected;
1014 }
1015 }
1016
1017 // We failed to correct; just fall through and let the parser deal with it.
1018 Result.suppressDiagnostics();
1019 return NameClassification::Unknown();
1020
1021 case LookupResult::NotFoundInCurrentInstantiation: {
1022 // We performed name lookup into the current instantiation, and there were
1023 // dependent bases, so we treat this result the same way as any other
1024 // dependent nested-name-specifier.
1025
1026 // C++ [temp.res]p2:
1027 // A name used in a template declaration or definition and that is
1028 // dependent on a template-parameter is assumed not to name a type
1029 // unless the applicable name lookup finds a type name or the name is
1030 // qualified by the keyword typename.
1031 //
1032 // FIXME: If the next token is '<', we might want to ask the parser to
1033 // perform some heroics to see if we actually have a
1034 // template-argument-list, which would indicate a missing 'template'
1035 // keyword here.
1036 return NameClassification::DependentNonType();
1037 }
1038
1039 case LookupResult::Found:
1040 case LookupResult::FoundOverloaded:
1041 case LookupResult::FoundUnresolvedValue:
1042 break;
1043
1044 case LookupResult::Ambiguous:
1045 if (getLangOpts().CPlusPlus && NextToken.is(tok::less) &&
1046 hasAnyAcceptableTemplateNames(Result, /*AllowFunctionTemplates=*/true,
1047 /*AllowDependent=*/false)) {
1048 // C++ [temp.local]p3:
1049 // A lookup that finds an injected-class-name (10.2) can result in an
1050 // ambiguity in certain cases (for example, if it is found in more than
1051 // one base class). If all of the injected-class-names that are found
1052 // refer to specializations of the same class template, and if the name
1053 // is followed by a template-argument-list, the reference refers to the
1054 // class template itself and not a specialization thereof, and is not
1055 // ambiguous.
1056 //
1057 // This filtering can make an ambiguous result into an unambiguous one,
1058 // so try again after filtering out template names.
1059 FilterAcceptableTemplateNames(Result);
1060 if (!Result.isAmbiguous()) {
1061 IsFilteredTemplateName = true;
1062 break;
1063 }
1064 }
1065
1066 // Diagnose the ambiguity and return an error.
1067 return NameClassification::Error();
1068 }
1069
1070 if (getLangOpts().CPlusPlus && NextToken.is(tok::less) &&
1071 (IsFilteredTemplateName ||
1072 hasAnyAcceptableTemplateNames(
1073 Result, /*AllowFunctionTemplates=*/true,
1074 /*AllowDependent=*/false,
1075 /*AllowNonTemplateFunctions*/ SS.isEmpty() &&
1076 getLangOpts().CPlusPlus20))) {
1077 // C++ [temp.names]p3:
1078 // After name lookup (3.4) finds that a name is a template-name or that
1079 // an operator-function-id or a literal- operator-id refers to a set of
1080 // overloaded functions any member of which is a function template if
1081 // this is followed by a <, the < is always taken as the delimiter of a
1082 // template-argument-list and never as the less-than operator.
1083 // C++2a [temp.names]p2:
1084 // A name is also considered to refer to a template if it is an
1085 // unqualified-id followed by a < and name lookup finds either one
1086 // or more functions or finds nothing.
1087 if (!IsFilteredTemplateName)
1088 FilterAcceptableTemplateNames(Result);
1089
1090 bool IsFunctionTemplate;
1091 bool IsVarTemplate;
1092 TemplateName Template;
1093 if (Result.end() - Result.begin() > 1) {
1094 IsFunctionTemplate = true;
1095 Template = Context.getOverloadedTemplateName(Result.begin(),
1096 Result.end());
1097 } else if (!Result.empty()) {
1098 auto *TD = cast<TemplateDecl>(getAsTemplateNameDecl(
1099 *Result.begin(), /*AllowFunctionTemplates=*/true,
1100 /*AllowDependent=*/false));
1101 IsFunctionTemplate = isa<FunctionTemplateDecl>(TD);
1102 IsVarTemplate = isa<VarTemplateDecl>(TD);
1103
1104 if (SS.isNotEmpty())
1105 Template =
1106 Context.getQualifiedTemplateName(SS.getScopeRep(),
1107 /*TemplateKeyword=*/false, TD);
1108 else
1109 Template = TemplateName(TD);
1110 } else {
1111 // All results were non-template functions. This is a function template
1112 // name.
1113 IsFunctionTemplate = true;
1114 Template = Context.getAssumedTemplateName(NameInfo.getName());
1115 }
1116
1117 if (IsFunctionTemplate) {
1118 // Function templates always go through overload resolution, at which
1119 // point we'll perform the various checks (e.g., accessibility) we need
1120 // to based on which function we selected.
1121 Result.suppressDiagnostics();
1122
1123 return NameClassification::FunctionTemplate(Template);
1124 }
1125
1126 return IsVarTemplate ? NameClassification::VarTemplate(Template)
1127 : NameClassification::TypeTemplate(Template);
1128 }
1129
1130 NamedDecl *FirstDecl = (*Result.begin())->getUnderlyingDecl();
1131 if (TypeDecl *Type = dyn_cast<TypeDecl>(FirstDecl)) {
1132 DiagnoseUseOfDecl(Type, NameLoc);
1133 MarkAnyDeclReferenced(Type->getLocation(), Type, /*OdrUse=*/false);
1134 QualType T = Context.getTypeDeclType(Type);
1135 if (SS.isNotEmpty())
1136 return buildNestedType(*this, SS, T, NameLoc);
1137 return ParsedType::make(T);
1138 }
1139
1140 ObjCInterfaceDecl *Class = dyn_cast<ObjCInterfaceDecl>(FirstDecl);
1141 if (!Class) {
1142 // FIXME: It's unfortunate that we don't have a Type node for handling this.
1143 if (ObjCCompatibleAliasDecl *Alias =
1144 dyn_cast<ObjCCompatibleAliasDecl>(FirstDecl))
1145 Class = Alias->getClassInterface();
1146 }
1147
1148 if (Class) {
1149 DiagnoseUseOfDecl(Class, NameLoc);
1150
1151 if (NextToken.is(tok::period)) {
1152 // Interface. <something> is parsed as a property reference expression.
1153 // Just return "unknown" as a fall-through for now.
1154 Result.suppressDiagnostics();
1155 return NameClassification::Unknown();
1156 }
1157
1158 QualType T = Context.getObjCInterfaceType(Class);
1159 return ParsedType::make(T);
1160 }
1161
1162 if (isa<ConceptDecl>(FirstDecl))
1163 return NameClassification::Concept(
1164 TemplateName(cast<TemplateDecl>(FirstDecl)));
1165
1166 // We can have a type template here if we're classifying a template argument.
1167 if (isa<TemplateDecl>(FirstDecl) && !isa<FunctionTemplateDecl>(FirstDecl) &&
1168 !isa<VarTemplateDecl>(FirstDecl))
1169 return NameClassification::TypeTemplate(
1170 TemplateName(cast<TemplateDecl>(FirstDecl)));
1171
1172 // Check for a tag type hidden by a non-type decl in a few cases where it
1173 // seems likely a type is wanted instead of the non-type that was found.
1174 bool NextIsOp = NextToken.isOneOf(tok::amp, tok::star);
1175 if ((NextToken.is(tok::identifier) ||
1176 (NextIsOp &&
1177 FirstDecl->getUnderlyingDecl()->isFunctionOrFunctionTemplate())) &&
1178 isTagTypeWithMissingTag(*this, Result, S, SS, Name, NameLoc)) {
1179 TypeDecl *Type = Result.getAsSingle<TypeDecl>();
1180 DiagnoseUseOfDecl(Type, NameLoc);
1181 QualType T = Context.getTypeDeclType(Type);
1182 if (SS.isNotEmpty())
1183 return buildNestedType(*this, SS, T, NameLoc);
1184 return ParsedType::make(T);
1185 }
1186
1187 // If we already know which single declaration is referenced, just annotate
1188 // that declaration directly. Defer resolving even non-overloaded class
1189 // member accesses, as we need to defer certain access checks until we know
1190 // the context.
1191 bool ADL = UseArgumentDependentLookup(SS, Result, NextToken.is(tok::l_paren));
1192 if (Result.isSingleResult() && !ADL && !FirstDecl->isCXXClassMember())
1193 return NameClassification::NonType(Result.getRepresentativeDecl());
1194
1195 // Otherwise, this is an overload set that we will need to resolve later.
1196 Result.suppressDiagnostics();
1197 return NameClassification::OverloadSet(UnresolvedLookupExpr::Create(
1198 Context, Result.getNamingClass(), SS.getWithLocInContext(Context),
1199 Result.getLookupNameInfo(), ADL, Result.isOverloadedResult(),
1200 Result.begin(), Result.end()));
1201 }
1202
1203 ExprResult
ActOnNameClassifiedAsUndeclaredNonType(IdentifierInfo * Name,SourceLocation NameLoc)1204 Sema::ActOnNameClassifiedAsUndeclaredNonType(IdentifierInfo *Name,
1205 SourceLocation NameLoc) {
1206 assert(getLangOpts().CPlusPlus && "ADL-only call in C?");
1207 CXXScopeSpec SS;
1208 LookupResult Result(*this, Name, NameLoc, LookupOrdinaryName);
1209 return BuildDeclarationNameExpr(SS, Result, /*ADL=*/true);
1210 }
1211
1212 ExprResult
ActOnNameClassifiedAsDependentNonType(const CXXScopeSpec & SS,IdentifierInfo * Name,SourceLocation NameLoc,bool IsAddressOfOperand)1213 Sema::ActOnNameClassifiedAsDependentNonType(const CXXScopeSpec &SS,
1214 IdentifierInfo *Name,
1215 SourceLocation NameLoc,
1216 bool IsAddressOfOperand) {
1217 DeclarationNameInfo NameInfo(Name, NameLoc);
1218 return ActOnDependentIdExpression(SS, /*TemplateKWLoc=*/SourceLocation(),
1219 NameInfo, IsAddressOfOperand,
1220 /*TemplateArgs=*/nullptr);
1221 }
1222
ActOnNameClassifiedAsNonType(Scope * S,const CXXScopeSpec & SS,NamedDecl * Found,SourceLocation NameLoc,const Token & NextToken)1223 ExprResult Sema::ActOnNameClassifiedAsNonType(Scope *S, const CXXScopeSpec &SS,
1224 NamedDecl *Found,
1225 SourceLocation NameLoc,
1226 const Token &NextToken) {
1227 if (getCurMethodDecl() && SS.isEmpty())
1228 if (auto *Ivar = dyn_cast<ObjCIvarDecl>(Found->getUnderlyingDecl()))
1229 return BuildIvarRefExpr(S, NameLoc, Ivar);
1230
1231 // Reconstruct the lookup result.
1232 LookupResult Result(*this, Found->getDeclName(), NameLoc, LookupOrdinaryName);
1233 Result.addDecl(Found);
1234 Result.resolveKind();
1235
1236 bool ADL = UseArgumentDependentLookup(SS, Result, NextToken.is(tok::l_paren));
1237 return BuildDeclarationNameExpr(SS, Result, ADL);
1238 }
1239
ActOnNameClassifiedAsOverloadSet(Scope * S,Expr * E)1240 ExprResult Sema::ActOnNameClassifiedAsOverloadSet(Scope *S, Expr *E) {
1241 // For an implicit class member access, transform the result into a member
1242 // access expression if necessary.
1243 auto *ULE = cast<UnresolvedLookupExpr>(E);
1244 if ((*ULE->decls_begin())->isCXXClassMember()) {
1245 CXXScopeSpec SS;
1246 SS.Adopt(ULE->getQualifierLoc());
1247
1248 // Reconstruct the lookup result.
1249 LookupResult Result(*this, ULE->getName(), ULE->getNameLoc(),
1250 LookupOrdinaryName);
1251 Result.setNamingClass(ULE->getNamingClass());
1252 for (auto I = ULE->decls_begin(), E = ULE->decls_end(); I != E; ++I)
1253 Result.addDecl(*I, I.getAccess());
1254 Result.resolveKind();
1255 return BuildPossibleImplicitMemberExpr(SS, SourceLocation(), Result,
1256 nullptr, S);
1257 }
1258
1259 // Otherwise, this is already in the form we needed, and no further checks
1260 // are necessary.
1261 return ULE;
1262 }
1263
1264 Sema::TemplateNameKindForDiagnostics
getTemplateNameKindForDiagnostics(TemplateName Name)1265 Sema::getTemplateNameKindForDiagnostics(TemplateName Name) {
1266 auto *TD = Name.getAsTemplateDecl();
1267 if (!TD)
1268 return TemplateNameKindForDiagnostics::DependentTemplate;
1269 if (isa<ClassTemplateDecl>(TD))
1270 return TemplateNameKindForDiagnostics::ClassTemplate;
1271 if (isa<FunctionTemplateDecl>(TD))
1272 return TemplateNameKindForDiagnostics::FunctionTemplate;
1273 if (isa<VarTemplateDecl>(TD))
1274 return TemplateNameKindForDiagnostics::VarTemplate;
1275 if (isa<TypeAliasTemplateDecl>(TD))
1276 return TemplateNameKindForDiagnostics::AliasTemplate;
1277 if (isa<TemplateTemplateParmDecl>(TD))
1278 return TemplateNameKindForDiagnostics::TemplateTemplateParam;
1279 if (isa<ConceptDecl>(TD))
1280 return TemplateNameKindForDiagnostics::Concept;
1281 return TemplateNameKindForDiagnostics::DependentTemplate;
1282 }
1283
PushDeclContext(Scope * S,DeclContext * DC)1284 void Sema::PushDeclContext(Scope *S, DeclContext *DC) {
1285 assert(DC->getLexicalParent() == CurContext &&
1286 "The next DeclContext should be lexically contained in the current one.");
1287 CurContext = DC;
1288 S->setEntity(DC);
1289 }
1290
PopDeclContext()1291 void Sema::PopDeclContext() {
1292 assert(CurContext && "DeclContext imbalance!");
1293
1294 CurContext = CurContext->getLexicalParent();
1295 assert(CurContext && "Popped translation unit!");
1296 }
1297
ActOnTagStartSkippedDefinition(Scope * S,Decl * D)1298 Sema::SkippedDefinitionContext Sema::ActOnTagStartSkippedDefinition(Scope *S,
1299 Decl *D) {
1300 // Unlike PushDeclContext, the context to which we return is not necessarily
1301 // the containing DC of TD, because the new context will be some pre-existing
1302 // TagDecl definition instead of a fresh one.
1303 auto Result = static_cast<SkippedDefinitionContext>(CurContext);
1304 CurContext = cast<TagDecl>(D)->getDefinition();
1305 assert(CurContext && "skipping definition of undefined tag");
1306 // Start lookups from the parent of the current context; we don't want to look
1307 // into the pre-existing complete definition.
1308 S->setEntity(CurContext->getLookupParent());
1309 return Result;
1310 }
1311
ActOnTagFinishSkippedDefinition(SkippedDefinitionContext Context)1312 void Sema::ActOnTagFinishSkippedDefinition(SkippedDefinitionContext Context) {
1313 CurContext = static_cast<decltype(CurContext)>(Context);
1314 }
1315
1316 /// EnterDeclaratorContext - Used when we must lookup names in the context
1317 /// of a declarator's nested name specifier.
1318 ///
EnterDeclaratorContext(Scope * S,DeclContext * DC)1319 void Sema::EnterDeclaratorContext(Scope *S, DeclContext *DC) {
1320 // C++0x [basic.lookup.unqual]p13:
1321 // A name used in the definition of a static data member of class
1322 // X (after the qualified-id of the static member) is looked up as
1323 // if the name was used in a member function of X.
1324 // C++0x [basic.lookup.unqual]p14:
1325 // If a variable member of a namespace is defined outside of the
1326 // scope of its namespace then any name used in the definition of
1327 // the variable member (after the declarator-id) is looked up as
1328 // if the definition of the variable member occurred in its
1329 // namespace.
1330 // Both of these imply that we should push a scope whose context
1331 // is the semantic context of the declaration. We can't use
1332 // PushDeclContext here because that context is not necessarily
1333 // lexically contained in the current context. Fortunately,
1334 // the containing scope should have the appropriate information.
1335
1336 assert(!S->getEntity() && "scope already has entity");
1337
1338 #ifndef NDEBUG
1339 Scope *Ancestor = S->getParent();
1340 while (!Ancestor->getEntity()) Ancestor = Ancestor->getParent();
1341 assert(Ancestor->getEntity() == CurContext && "ancestor context mismatch");
1342 #endif
1343
1344 CurContext = DC;
1345 S->setEntity(DC);
1346
1347 if (S->getParent()->isTemplateParamScope()) {
1348 // Also set the corresponding entities for all immediately-enclosing
1349 // template parameter scopes.
1350 EnterTemplatedContext(S->getParent(), DC);
1351 }
1352 }
1353
ExitDeclaratorContext(Scope * S)1354 void Sema::ExitDeclaratorContext(Scope *S) {
1355 assert(S->getEntity() == CurContext && "Context imbalance!");
1356
1357 // Switch back to the lexical context. The safety of this is
1358 // enforced by an assert in EnterDeclaratorContext.
1359 Scope *Ancestor = S->getParent();
1360 while (!Ancestor->getEntity()) Ancestor = Ancestor->getParent();
1361 CurContext = Ancestor->getEntity();
1362
1363 // We don't need to do anything with the scope, which is going to
1364 // disappear.
1365 }
1366
EnterTemplatedContext(Scope * S,DeclContext * DC)1367 void Sema::EnterTemplatedContext(Scope *S, DeclContext *DC) {
1368 assert(S->isTemplateParamScope() &&
1369 "expected to be initializing a template parameter scope");
1370
1371 // C++20 [temp.local]p7:
1372 // In the definition of a member of a class template that appears outside
1373 // of the class template definition, the name of a member of the class
1374 // template hides the name of a template-parameter of any enclosing class
1375 // templates (but not a template-parameter of the member if the member is a
1376 // class or function template).
1377 // C++20 [temp.local]p9:
1378 // In the definition of a class template or in the definition of a member
1379 // of such a template that appears outside of the template definition, for
1380 // each non-dependent base class (13.8.2.1), if the name of the base class
1381 // or the name of a member of the base class is the same as the name of a
1382 // template-parameter, the base class name or member name hides the
1383 // template-parameter name (6.4.10).
1384 //
1385 // This means that a template parameter scope should be searched immediately
1386 // after searching the DeclContext for which it is a template parameter
1387 // scope. For example, for
1388 // template<typename T> template<typename U> template<typename V>
1389 // void N::A<T>::B<U>::f(...)
1390 // we search V then B<U> (and base classes) then U then A<T> (and base
1391 // classes) then T then N then ::.
1392 unsigned ScopeDepth = getTemplateDepth(S);
1393 for (; S && S->isTemplateParamScope(); S = S->getParent(), --ScopeDepth) {
1394 DeclContext *SearchDCAfterScope = DC;
1395 for (; DC; DC = DC->getLookupParent()) {
1396 if (const TemplateParameterList *TPL =
1397 cast<Decl>(DC)->getDescribedTemplateParams()) {
1398 unsigned DCDepth = TPL->getDepth() + 1;
1399 if (DCDepth > ScopeDepth)
1400 continue;
1401 if (ScopeDepth == DCDepth)
1402 SearchDCAfterScope = DC = DC->getLookupParent();
1403 break;
1404 }
1405 }
1406 S->setLookupEntity(SearchDCAfterScope);
1407 }
1408 }
1409
ActOnReenterFunctionContext(Scope * S,Decl * D)1410 void Sema::ActOnReenterFunctionContext(Scope* S, Decl *D) {
1411 // We assume that the caller has already called
1412 // ActOnReenterTemplateScope so getTemplatedDecl() works.
1413 FunctionDecl *FD = D->getAsFunction();
1414 if (!FD)
1415 return;
1416
1417 // Same implementation as PushDeclContext, but enters the context
1418 // from the lexical parent, rather than the top-level class.
1419 assert(CurContext == FD->getLexicalParent() &&
1420 "The next DeclContext should be lexically contained in the current one.");
1421 CurContext = FD;
1422 S->setEntity(CurContext);
1423
1424 for (unsigned P = 0, NumParams = FD->getNumParams(); P < NumParams; ++P) {
1425 ParmVarDecl *Param = FD->getParamDecl(P);
1426 // If the parameter has an identifier, then add it to the scope
1427 if (Param->getIdentifier()) {
1428 S->AddDecl(Param);
1429 IdResolver.AddDecl(Param);
1430 }
1431 }
1432 }
1433
ActOnExitFunctionContext()1434 void Sema::ActOnExitFunctionContext() {
1435 // Same implementation as PopDeclContext, but returns to the lexical parent,
1436 // rather than the top-level class.
1437 assert(CurContext && "DeclContext imbalance!");
1438 CurContext = CurContext->getLexicalParent();
1439 assert(CurContext && "Popped translation unit!");
1440 }
1441
1442 /// Determine whether we allow overloading of the function
1443 /// PrevDecl with another declaration.
1444 ///
1445 /// This routine determines whether overloading is possible, not
1446 /// whether some new function is actually an overload. It will return
1447 /// true in C++ (where we can always provide overloads) or, as an
1448 /// extension, in C when the previous function is already an
1449 /// overloaded function declaration or has the "overloadable"
1450 /// attribute.
AllowOverloadingOfFunction(LookupResult & Previous,ASTContext & Context,const FunctionDecl * New)1451 static bool AllowOverloadingOfFunction(LookupResult &Previous,
1452 ASTContext &Context,
1453 const FunctionDecl *New) {
1454 if (Context.getLangOpts().CPlusPlus)
1455 return true;
1456
1457 if (Previous.getResultKind() == LookupResult::FoundOverloaded)
1458 return true;
1459
1460 return Previous.getResultKind() == LookupResult::Found &&
1461 (Previous.getFoundDecl()->hasAttr<OverloadableAttr>() ||
1462 New->hasAttr<OverloadableAttr>());
1463 }
1464
1465 /// Add this decl to the scope shadowed decl chains.
PushOnScopeChains(NamedDecl * D,Scope * S,bool AddToContext)1466 void Sema::PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext) {
1467 // Move up the scope chain until we find the nearest enclosing
1468 // non-transparent context. The declaration will be introduced into this
1469 // scope.
1470 while (S->getEntity() && S->getEntity()->isTransparentContext())
1471 S = S->getParent();
1472
1473 // Add scoped declarations into their context, so that they can be
1474 // found later. Declarations without a context won't be inserted
1475 // into any context.
1476 if (AddToContext)
1477 CurContext->addDecl(D);
1478
1479 // Out-of-line definitions shouldn't be pushed into scope in C++, unless they
1480 // are function-local declarations.
1481 if (getLangOpts().CPlusPlus && D->isOutOfLine() && !S->getFnParent())
1482 return;
1483
1484 // Template instantiations should also not be pushed into scope.
1485 if (isa<FunctionDecl>(D) &&
1486 cast<FunctionDecl>(D)->isFunctionTemplateSpecialization())
1487 return;
1488
1489 // If this replaces anything in the current scope,
1490 IdentifierResolver::iterator I = IdResolver.begin(D->getDeclName()),
1491 IEnd = IdResolver.end();
1492 for (; I != IEnd; ++I) {
1493 if (S->isDeclScope(*I) && D->declarationReplaces(*I)) {
1494 S->RemoveDecl(*I);
1495 IdResolver.RemoveDecl(*I);
1496
1497 // Should only need to replace one decl.
1498 break;
1499 }
1500 }
1501
1502 S->AddDecl(D);
1503
1504 if (isa<LabelDecl>(D) && !cast<LabelDecl>(D)->isGnuLocal()) {
1505 // Implicitly-generated labels may end up getting generated in an order that
1506 // isn't strictly lexical, which breaks name lookup. Be careful to insert
1507 // the label at the appropriate place in the identifier chain.
1508 for (I = IdResolver.begin(D->getDeclName()); I != IEnd; ++I) {
1509 DeclContext *IDC = (*I)->getLexicalDeclContext()->getRedeclContext();
1510 if (IDC == CurContext) {
1511 if (!S->isDeclScope(*I))
1512 continue;
1513 } else if (IDC->Encloses(CurContext))
1514 break;
1515 }
1516
1517 IdResolver.InsertDeclAfter(I, D);
1518 } else {
1519 IdResolver.AddDecl(D);
1520 }
1521 }
1522
isDeclInScope(NamedDecl * D,DeclContext * Ctx,Scope * S,bool AllowInlineNamespace)1523 bool Sema::isDeclInScope(NamedDecl *D, DeclContext *Ctx, Scope *S,
1524 bool AllowInlineNamespace) {
1525 return IdResolver.isDeclInScope(D, Ctx, S, AllowInlineNamespace);
1526 }
1527
getScopeForDeclContext(Scope * S,DeclContext * DC)1528 Scope *Sema::getScopeForDeclContext(Scope *S, DeclContext *DC) {
1529 DeclContext *TargetDC = DC->getPrimaryContext();
1530 do {
1531 if (DeclContext *ScopeDC = S->getEntity())
1532 if (ScopeDC->getPrimaryContext() == TargetDC)
1533 return S;
1534 } while ((S = S->getParent()));
1535
1536 return nullptr;
1537 }
1538
1539 static bool isOutOfScopePreviousDeclaration(NamedDecl *,
1540 DeclContext*,
1541 ASTContext&);
1542
1543 /// Filters out lookup results that don't fall within the given scope
1544 /// as determined by isDeclInScope.
FilterLookupForScope(LookupResult & R,DeclContext * Ctx,Scope * S,bool ConsiderLinkage,bool AllowInlineNamespace)1545 void Sema::FilterLookupForScope(LookupResult &R, DeclContext *Ctx, Scope *S,
1546 bool ConsiderLinkage,
1547 bool AllowInlineNamespace) {
1548 LookupResult::Filter F = R.makeFilter();
1549 while (F.hasNext()) {
1550 NamedDecl *D = F.next();
1551
1552 if (isDeclInScope(D, Ctx, S, AllowInlineNamespace))
1553 continue;
1554
1555 if (ConsiderLinkage && isOutOfScopePreviousDeclaration(D, Ctx, Context))
1556 continue;
1557
1558 F.erase();
1559 }
1560
1561 F.done();
1562 }
1563
1564 /// We've determined that \p New is a redeclaration of \p Old. Check that they
1565 /// have compatible owning modules.
CheckRedeclarationModuleOwnership(NamedDecl * New,NamedDecl * Old)1566 bool Sema::CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old) {
1567 // FIXME: The Modules TS is not clear about how friend declarations are
1568 // to be treated. It's not meaningful to have different owning modules for
1569 // linkage in redeclarations of the same entity, so for now allow the
1570 // redeclaration and change the owning modules to match.
1571 if (New->getFriendObjectKind() &&
1572 Old->getOwningModuleForLinkage() != New->getOwningModuleForLinkage()) {
1573 New->setLocalOwningModule(Old->getOwningModule());
1574 makeMergedDefinitionVisible(New);
1575 return false;
1576 }
1577
1578 Module *NewM = New->getOwningModule();
1579 Module *OldM = Old->getOwningModule();
1580
1581 if (NewM && NewM->Kind == Module::PrivateModuleFragment)
1582 NewM = NewM->Parent;
1583 if (OldM && OldM->Kind == Module::PrivateModuleFragment)
1584 OldM = OldM->Parent;
1585
1586 if (NewM == OldM)
1587 return false;
1588
1589 bool NewIsModuleInterface = NewM && NewM->isModulePurview();
1590 bool OldIsModuleInterface = OldM && OldM->isModulePurview();
1591 if (NewIsModuleInterface || OldIsModuleInterface) {
1592 // C++ Modules TS [basic.def.odr] 6.2/6.7 [sic]:
1593 // if a declaration of D [...] appears in the purview of a module, all
1594 // other such declarations shall appear in the purview of the same module
1595 Diag(New->getLocation(), diag::err_mismatched_owning_module)
1596 << New
1597 << NewIsModuleInterface
1598 << (NewIsModuleInterface ? NewM->getFullModuleName() : "")
1599 << OldIsModuleInterface
1600 << (OldIsModuleInterface ? OldM->getFullModuleName() : "");
1601 Diag(Old->getLocation(), diag::note_previous_declaration);
1602 New->setInvalidDecl();
1603 return true;
1604 }
1605
1606 return false;
1607 }
1608
isUsingDecl(NamedDecl * D)1609 static bool isUsingDecl(NamedDecl *D) {
1610 return isa<UsingShadowDecl>(D) ||
1611 isa<UnresolvedUsingTypenameDecl>(D) ||
1612 isa<UnresolvedUsingValueDecl>(D);
1613 }
1614
1615 /// Removes using shadow declarations from the lookup results.
RemoveUsingDecls(LookupResult & R)1616 static void RemoveUsingDecls(LookupResult &R) {
1617 LookupResult::Filter F = R.makeFilter();
1618 while (F.hasNext())
1619 if (isUsingDecl(F.next()))
1620 F.erase();
1621
1622 F.done();
1623 }
1624
1625 /// Check for this common pattern:
1626 /// @code
1627 /// class S {
1628 /// S(const S&); // DO NOT IMPLEMENT
1629 /// void operator=(const S&); // DO NOT IMPLEMENT
1630 /// };
1631 /// @endcode
IsDisallowedCopyOrAssign(const CXXMethodDecl * D)1632 static bool IsDisallowedCopyOrAssign(const CXXMethodDecl *D) {
1633 // FIXME: Should check for private access too but access is set after we get
1634 // the decl here.
1635 if (D->doesThisDeclarationHaveABody())
1636 return false;
1637
1638 if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(D))
1639 return CD->isCopyConstructor();
1640 return D->isCopyAssignmentOperator();
1641 }
1642
1643 // We need this to handle
1644 //
1645 // typedef struct {
1646 // void *foo() { return 0; }
1647 // } A;
1648 //
1649 // When we see foo we don't know if after the typedef we will get 'A' or '*A'
1650 // for example. If 'A', foo will have external linkage. If we have '*A',
1651 // foo will have no linkage. Since we can't know until we get to the end
1652 // of the typedef, this function finds out if D might have non-external linkage.
1653 // Callers should verify at the end of the TU if it D has external linkage or
1654 // not.
mightHaveNonExternalLinkage(const DeclaratorDecl * D)1655 bool Sema::mightHaveNonExternalLinkage(const DeclaratorDecl *D) {
1656 const DeclContext *DC = D->getDeclContext();
1657 while (!DC->isTranslationUnit()) {
1658 if (const RecordDecl *RD = dyn_cast<RecordDecl>(DC)){
1659 if (!RD->hasNameForLinkage())
1660 return true;
1661 }
1662 DC = DC->getParent();
1663 }
1664
1665 return !D->isExternallyVisible();
1666 }
1667
1668 // FIXME: This needs to be refactored; some other isInMainFile users want
1669 // these semantics.
isMainFileLoc(const Sema & S,SourceLocation Loc)1670 static bool isMainFileLoc(const Sema &S, SourceLocation Loc) {
1671 if (S.TUKind != TU_Complete)
1672 return false;
1673 return S.SourceMgr.isInMainFile(Loc);
1674 }
1675
ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl * D) const1676 bool Sema::ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const {
1677 assert(D);
1678
1679 if (D->isInvalidDecl() || D->isUsed() || D->hasAttr<UnusedAttr>())
1680 return false;
1681
1682 // Ignore all entities declared within templates, and out-of-line definitions
1683 // of members of class templates.
1684 if (D->getDeclContext()->isDependentContext() ||
1685 D->getLexicalDeclContext()->isDependentContext())
1686 return false;
1687
1688 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
1689 if (FD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
1690 return false;
1691 // A non-out-of-line declaration of a member specialization was implicitly
1692 // instantiated; it's the out-of-line declaration that we're interested in.
1693 if (FD->getTemplateSpecializationKind() == TSK_ExplicitSpecialization &&
1694 FD->getMemberSpecializationInfo() && !FD->isOutOfLine())
1695 return false;
1696
1697 if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) {
1698 if (MD->isVirtual() || IsDisallowedCopyOrAssign(MD))
1699 return false;
1700 } else {
1701 // 'static inline' functions are defined in headers; don't warn.
1702 if (FD->isInlined() && !isMainFileLoc(*this, FD->getLocation()))
1703 return false;
1704 }
1705
1706 if (FD->doesThisDeclarationHaveABody() &&
1707 Context.DeclMustBeEmitted(FD))
1708 return false;
1709 } else if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
1710 // Constants and utility variables are defined in headers with internal
1711 // linkage; don't warn. (Unlike functions, there isn't a convenient marker
1712 // like "inline".)
1713 if (!isMainFileLoc(*this, VD->getLocation()))
1714 return false;
1715
1716 if (Context.DeclMustBeEmitted(VD))
1717 return false;
1718
1719 if (VD->isStaticDataMember() &&
1720 VD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
1721 return false;
1722 if (VD->isStaticDataMember() &&
1723 VD->getTemplateSpecializationKind() == TSK_ExplicitSpecialization &&
1724 VD->getMemberSpecializationInfo() && !VD->isOutOfLine())
1725 return false;
1726
1727 if (VD->isInline() && !isMainFileLoc(*this, VD->getLocation()))
1728 return false;
1729 } else {
1730 return false;
1731 }
1732
1733 // Only warn for unused decls internal to the translation unit.
1734 // FIXME: This seems like a bogus check; it suppresses -Wunused-function
1735 // for inline functions defined in the main source file, for instance.
1736 return mightHaveNonExternalLinkage(D);
1737 }
1738
MarkUnusedFileScopedDecl(const DeclaratorDecl * D)1739 void Sema::MarkUnusedFileScopedDecl(const DeclaratorDecl *D) {
1740 if (!D)
1741 return;
1742
1743 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
1744 const FunctionDecl *First = FD->getFirstDecl();
1745 if (FD != First && ShouldWarnIfUnusedFileScopedDecl(First))
1746 return; // First should already be in the vector.
1747 }
1748
1749 if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
1750 const VarDecl *First = VD->getFirstDecl();
1751 if (VD != First && ShouldWarnIfUnusedFileScopedDecl(First))
1752 return; // First should already be in the vector.
1753 }
1754
1755 if (ShouldWarnIfUnusedFileScopedDecl(D))
1756 UnusedFileScopedDecls.push_back(D);
1757 }
1758
ShouldDiagnoseUnusedDecl(const NamedDecl * D)1759 static bool ShouldDiagnoseUnusedDecl(const NamedDecl *D) {
1760 if (D->isInvalidDecl())
1761 return false;
1762
1763 if (auto *DD = dyn_cast<DecompositionDecl>(D)) {
1764 // For a decomposition declaration, warn if none of the bindings are
1765 // referenced, instead of if the variable itself is referenced (which
1766 // it is, by the bindings' expressions).
1767 for (auto *BD : DD->bindings())
1768 if (BD->isReferenced())
1769 return false;
1770 } else if (!D->getDeclName()) {
1771 return false;
1772 } else if (D->isReferenced() || D->isUsed()) {
1773 return false;
1774 }
1775
1776 if (D->hasAttr<UnusedAttr>() || D->hasAttr<ObjCPreciseLifetimeAttr>())
1777 return false;
1778
1779 if (isa<LabelDecl>(D))
1780 return true;
1781
1782 // Except for labels, we only care about unused decls that are local to
1783 // functions.
1784 bool WithinFunction = D->getDeclContext()->isFunctionOrMethod();
1785 if (const auto *R = dyn_cast<CXXRecordDecl>(D->getDeclContext()))
1786 // For dependent types, the diagnostic is deferred.
1787 WithinFunction =
1788 WithinFunction || (R->isLocalClass() && !R->isDependentType());
1789 if (!WithinFunction)
1790 return false;
1791
1792 if (isa<TypedefNameDecl>(D))
1793 return true;
1794
1795 // White-list anything that isn't a local variable.
1796 if (!isa<VarDecl>(D) || isa<ParmVarDecl>(D) || isa<ImplicitParamDecl>(D))
1797 return false;
1798
1799 // Types of valid local variables should be complete, so this should succeed.
1800 if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
1801
1802 // White-list anything with an __attribute__((unused)) type.
1803 const auto *Ty = VD->getType().getTypePtr();
1804
1805 // Only look at the outermost level of typedef.
1806 if (const TypedefType *TT = Ty->getAs<TypedefType>()) {
1807 if (TT->getDecl()->hasAttr<UnusedAttr>())
1808 return false;
1809 }
1810
1811 // If we failed to complete the type for some reason, or if the type is
1812 // dependent, don't diagnose the variable.
1813 if (Ty->isIncompleteType() || Ty->isDependentType())
1814 return false;
1815
1816 // Look at the element type to ensure that the warning behaviour is
1817 // consistent for both scalars and arrays.
1818 Ty = Ty->getBaseElementTypeUnsafe();
1819
1820 if (const TagType *TT = Ty->getAs<TagType>()) {
1821 const TagDecl *Tag = TT->getDecl();
1822 if (Tag->hasAttr<UnusedAttr>())
1823 return false;
1824
1825 if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Tag)) {
1826 if (!RD->hasTrivialDestructor() && !RD->hasAttr<WarnUnusedAttr>())
1827 return false;
1828
1829 if (const Expr *Init = VD->getInit()) {
1830 if (const ExprWithCleanups *Cleanups =
1831 dyn_cast<ExprWithCleanups>(Init))
1832 Init = Cleanups->getSubExpr();
1833 const CXXConstructExpr *Construct =
1834 dyn_cast<CXXConstructExpr>(Init);
1835 if (Construct && !Construct->isElidable()) {
1836 CXXConstructorDecl *CD = Construct->getConstructor();
1837 if (!CD->isTrivial() && !RD->hasAttr<WarnUnusedAttr>() &&
1838 (VD->getInit()->isValueDependent() || !VD->evaluateValue()))
1839 return false;
1840 }
1841
1842 // Suppress the warning if we don't know how this is constructed, and
1843 // it could possibly be non-trivial constructor.
1844 if (Init->isTypeDependent())
1845 for (const CXXConstructorDecl *Ctor : RD->ctors())
1846 if (!Ctor->isTrivial())
1847 return false;
1848 }
1849 }
1850 }
1851
1852 // TODO: __attribute__((unused)) templates?
1853 }
1854
1855 return true;
1856 }
1857
GenerateFixForUnusedDecl(const NamedDecl * D,ASTContext & Ctx,FixItHint & Hint)1858 static void GenerateFixForUnusedDecl(const NamedDecl *D, ASTContext &Ctx,
1859 FixItHint &Hint) {
1860 if (isa<LabelDecl>(D)) {
1861 SourceLocation AfterColon = Lexer::findLocationAfterToken(
1862 D->getEndLoc(), tok::colon, Ctx.getSourceManager(), Ctx.getLangOpts(),
1863 true);
1864 if (AfterColon.isInvalid())
1865 return;
1866 Hint = FixItHint::CreateRemoval(
1867 CharSourceRange::getCharRange(D->getBeginLoc(), AfterColon));
1868 }
1869 }
1870
DiagnoseUnusedNestedTypedefs(const RecordDecl * D)1871 void Sema::DiagnoseUnusedNestedTypedefs(const RecordDecl *D) {
1872 if (D->getTypeForDecl()->isDependentType())
1873 return;
1874
1875 for (auto *TmpD : D->decls()) {
1876 if (const auto *T = dyn_cast<TypedefNameDecl>(TmpD))
1877 DiagnoseUnusedDecl(T);
1878 else if(const auto *R = dyn_cast<RecordDecl>(TmpD))
1879 DiagnoseUnusedNestedTypedefs(R);
1880 }
1881 }
1882
1883 /// DiagnoseUnusedDecl - Emit warnings about declarations that are not used
1884 /// unless they are marked attr(unused).
DiagnoseUnusedDecl(const NamedDecl * D)1885 void Sema::DiagnoseUnusedDecl(const NamedDecl *D) {
1886 if (!ShouldDiagnoseUnusedDecl(D))
1887 return;
1888
1889 if (auto *TD = dyn_cast<TypedefNameDecl>(D)) {
1890 // typedefs can be referenced later on, so the diagnostics are emitted
1891 // at end-of-translation-unit.
1892 UnusedLocalTypedefNameCandidates.insert(TD);
1893 return;
1894 }
1895
1896 FixItHint Hint;
1897 GenerateFixForUnusedDecl(D, Context, Hint);
1898
1899 unsigned DiagID;
1900 if (isa<VarDecl>(D) && cast<VarDecl>(D)->isExceptionVariable())
1901 DiagID = diag::warn_unused_exception_param;
1902 else if (isa<LabelDecl>(D))
1903 DiagID = diag::warn_unused_label;
1904 else
1905 DiagID = diag::warn_unused_variable;
1906
1907 Diag(D->getLocation(), DiagID) << D << Hint;
1908 }
1909
CheckPoppedLabel(LabelDecl * L,Sema & S)1910 static void CheckPoppedLabel(LabelDecl *L, Sema &S) {
1911 // Verify that we have no forward references left. If so, there was a goto
1912 // or address of a label taken, but no definition of it. Label fwd
1913 // definitions are indicated with a null substmt which is also not a resolved
1914 // MS inline assembly label name.
1915 bool Diagnose = false;
1916 if (L->isMSAsmLabel())
1917 Diagnose = !L->isResolvedMSAsmLabel();
1918 else
1919 Diagnose = L->getStmt() == nullptr;
1920 if (Diagnose)
1921 S.Diag(L->getLocation(), diag::err_undeclared_label_use) << L;
1922 }
1923
ActOnPopScope(SourceLocation Loc,Scope * S)1924 void Sema::ActOnPopScope(SourceLocation Loc, Scope *S) {
1925 S->mergeNRVOIntoParent();
1926
1927 if (S->decl_empty()) return;
1928 assert((S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope)) &&
1929 "Scope shouldn't contain decls!");
1930
1931 for (auto *TmpD : S->decls()) {
1932 assert(TmpD && "This decl didn't get pushed??");
1933
1934 assert(isa<NamedDecl>(TmpD) && "Decl isn't NamedDecl?");
1935 NamedDecl *D = cast<NamedDecl>(TmpD);
1936
1937 // Diagnose unused variables in this scope.
1938 if (!S->hasUnrecoverableErrorOccurred()) {
1939 DiagnoseUnusedDecl(D);
1940 if (const auto *RD = dyn_cast<RecordDecl>(D))
1941 DiagnoseUnusedNestedTypedefs(RD);
1942 }
1943
1944 if (!D->getDeclName()) continue;
1945
1946 // If this was a forward reference to a label, verify it was defined.
1947 if (LabelDecl *LD = dyn_cast<LabelDecl>(D))
1948 CheckPoppedLabel(LD, *this);
1949
1950 // Remove this name from our lexical scope, and warn on it if we haven't
1951 // already.
1952 IdResolver.RemoveDecl(D);
1953 auto ShadowI = ShadowingDecls.find(D);
1954 if (ShadowI != ShadowingDecls.end()) {
1955 if (const auto *FD = dyn_cast<FieldDecl>(ShadowI->second)) {
1956 Diag(D->getLocation(), diag::warn_ctor_parm_shadows_field)
1957 << D << FD << FD->getParent();
1958 Diag(FD->getLocation(), diag::note_previous_declaration);
1959 }
1960 ShadowingDecls.erase(ShadowI);
1961 }
1962 }
1963 }
1964
1965 /// Look for an Objective-C class in the translation unit.
1966 ///
1967 /// \param Id The name of the Objective-C class we're looking for. If
1968 /// typo-correction fixes this name, the Id will be updated
1969 /// to the fixed name.
1970 ///
1971 /// \param IdLoc The location of the name in the translation unit.
1972 ///
1973 /// \param DoTypoCorrection If true, this routine will attempt typo correction
1974 /// if there is no class with the given name.
1975 ///
1976 /// \returns The declaration of the named Objective-C class, or NULL if the
1977 /// class could not be found.
getObjCInterfaceDecl(IdentifierInfo * & Id,SourceLocation IdLoc,bool DoTypoCorrection)1978 ObjCInterfaceDecl *Sema::getObjCInterfaceDecl(IdentifierInfo *&Id,
1979 SourceLocation IdLoc,
1980 bool DoTypoCorrection) {
1981 // The third "scope" argument is 0 since we aren't enabling lazy built-in
1982 // creation from this context.
1983 NamedDecl *IDecl = LookupSingleName(TUScope, Id, IdLoc, LookupOrdinaryName);
1984
1985 if (!IDecl && DoTypoCorrection) {
1986 // Perform typo correction at the given location, but only if we
1987 // find an Objective-C class name.
1988 DeclFilterCCC<ObjCInterfaceDecl> CCC{};
1989 if (TypoCorrection C =
1990 CorrectTypo(DeclarationNameInfo(Id, IdLoc), LookupOrdinaryName,
1991 TUScope, nullptr, CCC, CTK_ErrorRecovery)) {
1992 diagnoseTypo(C, PDiag(diag::err_undef_interface_suggest) << Id);
1993 IDecl = C.getCorrectionDeclAs<ObjCInterfaceDecl>();
1994 Id = IDecl->getIdentifier();
1995 }
1996 }
1997 ObjCInterfaceDecl *Def = dyn_cast_or_null<ObjCInterfaceDecl>(IDecl);
1998 // This routine must always return a class definition, if any.
1999 if (Def && Def->getDefinition())
2000 Def = Def->getDefinition();
2001 return Def;
2002 }
2003
2004 /// getNonFieldDeclScope - Retrieves the innermost scope, starting
2005 /// from S, where a non-field would be declared. This routine copes
2006 /// with the difference between C and C++ scoping rules in structs and
2007 /// unions. For example, the following code is well-formed in C but
2008 /// ill-formed in C++:
2009 /// @code
2010 /// struct S6 {
2011 /// enum { BAR } e;
2012 /// };
2013 ///
2014 /// void test_S6() {
2015 /// struct S6 a;
2016 /// a.e = BAR;
2017 /// }
2018 /// @endcode
2019 /// For the declaration of BAR, this routine will return a different
2020 /// scope. The scope S will be the scope of the unnamed enumeration
2021 /// within S6. In C++, this routine will return the scope associated
2022 /// with S6, because the enumeration's scope is a transparent
2023 /// context but structures can contain non-field names. In C, this
2024 /// routine will return the translation unit scope, since the
2025 /// enumeration's scope is a transparent context and structures cannot
2026 /// contain non-field names.
getNonFieldDeclScope(Scope * S)2027 Scope *Sema::getNonFieldDeclScope(Scope *S) {
2028 while (((S->getFlags() & Scope::DeclScope) == 0) ||
2029 (S->getEntity() && S->getEntity()->isTransparentContext()) ||
2030 (S->isClassScope() && !getLangOpts().CPlusPlus))
2031 S = S->getParent();
2032 return S;
2033 }
2034
getHeaderName(Builtin::Context & BuiltinInfo,unsigned ID,ASTContext::GetBuiltinTypeError Error)2035 static StringRef getHeaderName(Builtin::Context &BuiltinInfo, unsigned ID,
2036 ASTContext::GetBuiltinTypeError Error) {
2037 switch (Error) {
2038 case ASTContext::GE_None:
2039 return "";
2040 case ASTContext::GE_Missing_type:
2041 return BuiltinInfo.getHeaderName(ID);
2042 case ASTContext::GE_Missing_stdio:
2043 return "stdio.h";
2044 case ASTContext::GE_Missing_setjmp:
2045 return "setjmp.h";
2046 case ASTContext::GE_Missing_ucontext:
2047 return "ucontext.h";
2048 }
2049 llvm_unreachable("unhandled error kind");
2050 }
2051
CreateBuiltin(IdentifierInfo * II,QualType Type,unsigned ID,SourceLocation Loc)2052 FunctionDecl *Sema::CreateBuiltin(IdentifierInfo *II, QualType Type,
2053 unsigned ID, SourceLocation Loc) {
2054 DeclContext *Parent = Context.getTranslationUnitDecl();
2055
2056 if (getLangOpts().CPlusPlus) {
2057 LinkageSpecDecl *CLinkageDecl = LinkageSpecDecl::Create(
2058 Context, Parent, Loc, Loc, LinkageSpecDecl::lang_c, false);
2059 CLinkageDecl->setImplicit();
2060 Parent->addDecl(CLinkageDecl);
2061 Parent = CLinkageDecl;
2062 }
2063
2064 FunctionDecl *New = FunctionDecl::Create(Context, Parent, Loc, Loc, II, Type,
2065 /*TInfo=*/nullptr, SC_Extern, false,
2066 Type->isFunctionProtoType());
2067 New->setImplicit();
2068 New->addAttr(BuiltinAttr::CreateImplicit(Context, ID));
2069
2070 // Create Decl objects for each parameter, adding them to the
2071 // FunctionDecl.
2072 if (const FunctionProtoType *FT = dyn_cast<FunctionProtoType>(Type)) {
2073 SmallVector<ParmVarDecl *, 16> Params;
2074 for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i) {
2075 ParmVarDecl *parm = ParmVarDecl::Create(
2076 Context, New, SourceLocation(), SourceLocation(), nullptr,
2077 FT->getParamType(i), /*TInfo=*/nullptr, SC_None, nullptr);
2078 parm->setScopeInfo(0, i);
2079 Params.push_back(parm);
2080 }
2081 New->setParams(Params);
2082 }
2083
2084 AddKnownFunctionAttributes(New);
2085 return New;
2086 }
2087
2088 /// LazilyCreateBuiltin - The specified Builtin-ID was first used at
2089 /// file scope. lazily create a decl for it. ForRedeclaration is true
2090 /// if we're creating this built-in in anticipation of redeclaring the
2091 /// built-in.
LazilyCreateBuiltin(IdentifierInfo * II,unsigned ID,Scope * S,bool ForRedeclaration,SourceLocation Loc)2092 NamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID,
2093 Scope *S, bool ForRedeclaration,
2094 SourceLocation Loc) {
2095 LookupNecessaryTypesForBuiltin(S, ID);
2096
2097 ASTContext::GetBuiltinTypeError Error;
2098 QualType R = Context.GetBuiltinType(ID, Error);
2099 if (Error) {
2100 if (!ForRedeclaration)
2101 return nullptr;
2102
2103 // If we have a builtin without an associated type we should not emit a
2104 // warning when we were not able to find a type for it.
2105 if (Error == ASTContext::GE_Missing_type ||
2106 Context.BuiltinInfo.allowTypeMismatch(ID))
2107 return nullptr;
2108
2109 // If we could not find a type for setjmp it is because the jmp_buf type was
2110 // not defined prior to the setjmp declaration.
2111 if (Error == ASTContext::GE_Missing_setjmp) {
2112 Diag(Loc, diag::warn_implicit_decl_no_jmp_buf)
2113 << Context.BuiltinInfo.getName(ID);
2114 return nullptr;
2115 }
2116
2117 // Generally, we emit a warning that the declaration requires the
2118 // appropriate header.
2119 Diag(Loc, diag::warn_implicit_decl_requires_sysheader)
2120 << getHeaderName(Context.BuiltinInfo, ID, Error)
2121 << Context.BuiltinInfo.getName(ID);
2122 return nullptr;
2123 }
2124
2125 if (!ForRedeclaration &&
2126 (Context.BuiltinInfo.isPredefinedLibFunction(ID) ||
2127 Context.BuiltinInfo.isHeaderDependentFunction(ID))) {
2128 Diag(Loc, diag::ext_implicit_lib_function_decl)
2129 << Context.BuiltinInfo.getName(ID) << R;
2130 if (const char *Header = Context.BuiltinInfo.getHeaderName(ID))
2131 Diag(Loc, diag::note_include_header_or_declare)
2132 << Header << Context.BuiltinInfo.getName(ID);
2133 }
2134
2135 if (R.isNull())
2136 return nullptr;
2137
2138 FunctionDecl *New = CreateBuiltin(II, R, ID, Loc);
2139 RegisterLocallyScopedExternCDecl(New, S);
2140
2141 // TUScope is the translation-unit scope to insert this function into.
2142 // FIXME: This is hideous. We need to teach PushOnScopeChains to
2143 // relate Scopes to DeclContexts, and probably eliminate CurContext
2144 // entirely, but we're not there yet.
2145 DeclContext *SavedContext = CurContext;
2146 CurContext = New->getDeclContext();
2147 PushOnScopeChains(New, TUScope);
2148 CurContext = SavedContext;
2149 return New;
2150 }
2151
2152 /// Typedef declarations don't have linkage, but they still denote the same
2153 /// entity if their types are the same.
2154 /// FIXME: This is notionally doing the same thing as ASTReaderDecl's
2155 /// isSameEntity.
filterNonConflictingPreviousTypedefDecls(Sema & S,TypedefNameDecl * Decl,LookupResult & Previous)2156 static void filterNonConflictingPreviousTypedefDecls(Sema &S,
2157 TypedefNameDecl *Decl,
2158 LookupResult &Previous) {
2159 // This is only interesting when modules are enabled.
2160 if (!S.getLangOpts().Modules && !S.getLangOpts().ModulesLocalVisibility)
2161 return;
2162
2163 // Empty sets are uninteresting.
2164 if (Previous.empty())
2165 return;
2166
2167 LookupResult::Filter Filter = Previous.makeFilter();
2168 while (Filter.hasNext()) {
2169 NamedDecl *Old = Filter.next();
2170
2171 // Non-hidden declarations are never ignored.
2172 if (S.isVisible(Old))
2173 continue;
2174
2175 // Declarations of the same entity are not ignored, even if they have
2176 // different linkages.
2177 if (auto *OldTD = dyn_cast<TypedefNameDecl>(Old)) {
2178 if (S.Context.hasSameType(OldTD->getUnderlyingType(),
2179 Decl->getUnderlyingType()))
2180 continue;
2181
2182 // If both declarations give a tag declaration a typedef name for linkage
2183 // purposes, then they declare the same entity.
2184 if (OldTD->getAnonDeclWithTypedefName(/*AnyRedecl*/true) &&
2185 Decl->getAnonDeclWithTypedefName())
2186 continue;
2187 }
2188
2189 Filter.erase();
2190 }
2191
2192 Filter.done();
2193 }
2194
isIncompatibleTypedef(TypeDecl * Old,TypedefNameDecl * New)2195 bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {
2196 QualType OldType;
2197 if (TypedefNameDecl *OldTypedef = dyn_cast<TypedefNameDecl>(Old))
2198 OldType = OldTypedef->getUnderlyingType();
2199 else
2200 OldType = Context.getTypeDeclType(Old);
2201 QualType NewType = New->getUnderlyingType();
2202
2203 if (NewType->isVariablyModifiedType()) {
2204 // Must not redefine a typedef with a variably-modified type.
2205 int Kind = isa<TypeAliasDecl>(Old) ? 1 : 0;
2206 Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef)
2207 << Kind << NewType;
2208 if (Old->getLocation().isValid())
2209 notePreviousDefinition(Old, New->getLocation());
2210 New->setInvalidDecl();
2211 return true;
2212 }
2213
2214 if (OldType != NewType &&
2215 !OldType->isDependentType() &&
2216 !NewType->isDependentType() &&
2217 !Context.hasSameType(OldType, NewType)) {
2218 int Kind = isa<TypeAliasDecl>(Old) ? 1 : 0;
2219 Diag(New->getLocation(), diag::err_redefinition_different_typedef)
2220 << Kind << NewType << OldType;
2221 if (Old->getLocation().isValid())
2222 notePreviousDefinition(Old, New->getLocation());
2223 New->setInvalidDecl();
2224 return true;
2225 }
2226 return false;
2227 }
2228
2229 /// MergeTypedefNameDecl - We just parsed a typedef 'New' which has the
2230 /// same name and scope as a previous declaration 'Old'. Figure out
2231 /// how to resolve this situation, merging decls or emitting
2232 /// diagnostics as appropriate. If there was an error, set New to be invalid.
2233 ///
MergeTypedefNameDecl(Scope * S,TypedefNameDecl * New,LookupResult & OldDecls)2234 void Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New,
2235 LookupResult &OldDecls) {
2236 // If the new decl is known invalid already, don't bother doing any
2237 // merging checks.
2238 if (New->isInvalidDecl()) return;
2239
2240 // Allow multiple definitions for ObjC built-in typedefs.
2241 // FIXME: Verify the underlying types are equivalent!
2242 if (getLangOpts().ObjC) {
2243 const IdentifierInfo *TypeID = New->getIdentifier();
2244 switch (TypeID->getLength()) {
2245 default: break;
2246 case 2:
2247 {
2248 if (!TypeID->isStr("id"))
2249 break;
2250 QualType T = New->getUnderlyingType();
2251 if (!T->isPointerType())
2252 break;
2253 if (!T->isVoidPointerType()) {
2254 QualType PT = T->castAs<PointerType>()->getPointeeType();
2255 if (!PT->isStructureType())
2256 break;
2257 }
2258 Context.setObjCIdRedefinitionType(T);
2259 // Install the built-in type for 'id', ignoring the current definition.
2260 New->setTypeForDecl(Context.getObjCIdType().getTypePtr());
2261 return;
2262 }
2263 case 5:
2264 if (!TypeID->isStr("Class"))
2265 break;
2266 Context.setObjCClassRedefinitionType(New->getUnderlyingType());
2267 // Install the built-in type for 'Class', ignoring the current definition.
2268 New->setTypeForDecl(Context.getObjCClassType().getTypePtr());
2269 return;
2270 case 3:
2271 if (!TypeID->isStr("SEL"))
2272 break;
2273 Context.setObjCSelRedefinitionType(New->getUnderlyingType());
2274 // Install the built-in type for 'SEL', ignoring the current definition.
2275 New->setTypeForDecl(Context.getObjCSelType().getTypePtr());
2276 return;
2277 }
2278 // Fall through - the typedef name was not a builtin type.
2279 }
2280
2281 // Verify the old decl was also a type.
2282 TypeDecl *Old = OldDecls.getAsSingle<TypeDecl>();
2283 if (!Old) {
2284 Diag(New->getLocation(), diag::err_redefinition_different_kind)
2285 << New->getDeclName();
2286
2287 NamedDecl *OldD = OldDecls.getRepresentativeDecl();
2288 if (OldD->getLocation().isValid())
2289 notePreviousDefinition(OldD, New->getLocation());
2290
2291 return New->setInvalidDecl();
2292 }
2293
2294 // If the old declaration is invalid, just give up here.
2295 if (Old->isInvalidDecl())
2296 return New->setInvalidDecl();
2297
2298 if (auto *OldTD = dyn_cast<TypedefNameDecl>(Old)) {
2299 auto *OldTag = OldTD->getAnonDeclWithTypedefName(/*AnyRedecl*/true);
2300 auto *NewTag = New->getAnonDeclWithTypedefName();
2301 NamedDecl *Hidden = nullptr;
2302 if (OldTag && NewTag &&
2303 OldTag->getCanonicalDecl() != NewTag->getCanonicalDecl() &&
2304 !hasVisibleDefinition(OldTag, &Hidden)) {
2305 // There is a definition of this tag, but it is not visible. Use it
2306 // instead of our tag.
2307 New->setTypeForDecl(OldTD->getTypeForDecl());
2308 if (OldTD->isModed())
2309 New->setModedTypeSourceInfo(OldTD->getTypeSourceInfo(),
2310 OldTD->getUnderlyingType());
2311 else
2312 New->setTypeSourceInfo(OldTD->getTypeSourceInfo());
2313
2314 // Make the old tag definition visible.
2315 makeMergedDefinitionVisible(Hidden);
2316
2317 // If this was an unscoped enumeration, yank all of its enumerators
2318 // out of the scope.
2319 if (isa<EnumDecl>(NewTag)) {
2320 Scope *EnumScope = getNonFieldDeclScope(S);
2321 for (auto *D : NewTag->decls()) {
2322 auto *ED = cast<EnumConstantDecl>(D);
2323 assert(EnumScope->isDeclScope(ED));
2324 EnumScope->RemoveDecl(ED);
2325 IdResolver.RemoveDecl(ED);
2326 ED->getLexicalDeclContext()->removeDecl(ED);
2327 }
2328 }
2329 }
2330 }
2331
2332 // If the typedef types are not identical, reject them in all languages and
2333 // with any extensions enabled.
2334 if (isIncompatibleTypedef(Old, New))
2335 return;
2336
2337 // The types match. Link up the redeclaration chain and merge attributes if
2338 // the old declaration was a typedef.
2339 if (TypedefNameDecl *Typedef = dyn_cast<TypedefNameDecl>(Old)) {
2340 New->setPreviousDecl(Typedef);
2341 mergeDeclAttributes(New, Old);
2342 }
2343
2344 if (getLangOpts().MicrosoftExt)
2345 return;
2346
2347 if (getLangOpts().CPlusPlus) {
2348 // C++ [dcl.typedef]p2:
2349 // In a given non-class scope, a typedef specifier can be used to
2350 // redefine the name of any type declared in that scope to refer
2351 // to the type to which it already refers.
2352 if (!isa<CXXRecordDecl>(CurContext))
2353 return;
2354
2355 // C++0x [dcl.typedef]p4:
2356 // In a given class scope, a typedef specifier can be used to redefine
2357 // any class-name declared in that scope that is not also a typedef-name
2358 // to refer to the type to which it already refers.
2359 //
2360 // This wording came in via DR424, which was a correction to the
2361 // wording in DR56, which accidentally banned code like:
2362 //
2363 // struct S {
2364 // typedef struct A { } A;
2365 // };
2366 //
2367 // in the C++03 standard. We implement the C++0x semantics, which
2368 // allow the above but disallow
2369 //
2370 // struct S {
2371 // typedef int I;
2372 // typedef int I;
2373 // };
2374 //
2375 // since that was the intent of DR56.
2376 if (!isa<TypedefNameDecl>(Old))
2377 return;
2378
2379 Diag(New->getLocation(), diag::err_redefinition)
2380 << New->getDeclName();
2381 notePreviousDefinition(Old, New->getLocation());
2382 return New->setInvalidDecl();
2383 }
2384
2385 // Modules always permit redefinition of typedefs, as does C11.
2386 if (getLangOpts().Modules || getLangOpts().C11)
2387 return;
2388
2389 // If we have a redefinition of a typedef in C, emit a warning. This warning
2390 // is normally mapped to an error, but can be controlled with
2391 // -Wtypedef-redefinition. If either the original or the redefinition is
2392 // in a system header, don't emit this for compatibility with GCC.
2393 if (getDiagnostics().getSuppressSystemWarnings() &&
2394 // Some standard types are defined implicitly in Clang (e.g. OpenCL).
2395 (Old->isImplicit() ||
2396 Context.getSourceManager().isInSystemHeader(Old->getLocation()) ||
2397 Context.getSourceManager().isInSystemHeader(New->getLocation())))
2398 return;
2399
2400 Diag(New->getLocation(), diag::ext_redefinition_of_typedef)
2401 << New->getDeclName();
2402 notePreviousDefinition(Old, New->getLocation());
2403 }
2404
2405 /// DeclhasAttr - returns true if decl Declaration already has the target
2406 /// attribute.
DeclHasAttr(const Decl * D,const Attr * A)2407 static bool DeclHasAttr(const Decl *D, const Attr *A) {
2408 const OwnershipAttr *OA = dyn_cast<OwnershipAttr>(A);
2409 const AnnotateAttr *Ann = dyn_cast<AnnotateAttr>(A);
2410 for (const auto *i : D->attrs())
2411 if (i->getKind() == A->getKind()) {
2412 if (Ann) {
2413 if (Ann->getAnnotation() == cast<AnnotateAttr>(i)->getAnnotation())
2414 return true;
2415 continue;
2416 }
2417 // FIXME: Don't hardcode this check
2418 if (OA && isa<OwnershipAttr>(i))
2419 return OA->getOwnKind() == cast<OwnershipAttr>(i)->getOwnKind();
2420 return true;
2421 }
2422
2423 return false;
2424 }
2425
isAttributeTargetADefinition(Decl * D)2426 static bool isAttributeTargetADefinition(Decl *D) {
2427 if (VarDecl *VD = dyn_cast<VarDecl>(D))
2428 return VD->isThisDeclarationADefinition();
2429 if (TagDecl *TD = dyn_cast<TagDecl>(D))
2430 return TD->isCompleteDefinition() || TD->isBeingDefined();
2431 return true;
2432 }
2433
2434 /// Merge alignment attributes from \p Old to \p New, taking into account the
2435 /// special semantics of C11's _Alignas specifier and C++11's alignas attribute.
2436 ///
2437 /// \return \c true if any attributes were added to \p New.
mergeAlignedAttrs(Sema & S,NamedDecl * New,Decl * Old)2438 static bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) {
2439 // Look for alignas attributes on Old, and pick out whichever attribute
2440 // specifies the strictest alignment requirement.
2441 AlignedAttr *OldAlignasAttr = nullptr;
2442 AlignedAttr *OldStrictestAlignAttr = nullptr;
2443 unsigned OldAlign = 0;
2444 for (auto *I : Old->specific_attrs<AlignedAttr>()) {
2445 // FIXME: We have no way of representing inherited dependent alignments
2446 // in a case like:
2447 // template<int A, int B> struct alignas(A) X;
2448 // template<int A, int B> struct alignas(B) X {};
2449 // For now, we just ignore any alignas attributes which are not on the
2450 // definition in such a case.
2451 if (I->isAlignmentDependent())
2452 return false;
2453
2454 if (I->isAlignas())
2455 OldAlignasAttr = I;
2456
2457 unsigned Align = I->getAlignment(S.Context);
2458 if (Align > OldAlign) {
2459 OldAlign = Align;
2460 OldStrictestAlignAttr = I;
2461 }
2462 }
2463
2464 // Look for alignas attributes on New.
2465 AlignedAttr *NewAlignasAttr = nullptr;
2466 unsigned NewAlign = 0;
2467 for (auto *I : New->specific_attrs<AlignedAttr>()) {
2468 if (I->isAlignmentDependent())
2469 return false;
2470
2471 if (I->isAlignas())
2472 NewAlignasAttr = I;
2473
2474 unsigned Align = I->getAlignment(S.Context);
2475 if (Align > NewAlign)
2476 NewAlign = Align;
2477 }
2478
2479 if (OldAlignasAttr && NewAlignasAttr && OldAlign != NewAlign) {
2480 // Both declarations have 'alignas' attributes. We require them to match.
2481 // C++11 [dcl.align]p6 and C11 6.7.5/7 both come close to saying this, but
2482 // fall short. (If two declarations both have alignas, they must both match
2483 // every definition, and so must match each other if there is a definition.)
2484
2485 // If either declaration only contains 'alignas(0)' specifiers, then it
2486 // specifies the natural alignment for the type.
2487 if (OldAlign == 0 || NewAlign == 0) {
2488 QualType Ty;
2489 if (ValueDecl *VD = dyn_cast<ValueDecl>(New))
2490 Ty = VD->getType();
2491 else
2492 Ty = S.Context.getTagDeclType(cast<TagDecl>(New));
2493
2494 if (OldAlign == 0)
2495 OldAlign = S.Context.getTypeAlign(Ty);
2496 if (NewAlign == 0)
2497 NewAlign = S.Context.getTypeAlign(Ty);
2498 }
2499
2500 if (OldAlign != NewAlign) {
2501 S.Diag(NewAlignasAttr->getLocation(), diag::err_alignas_mismatch)
2502 << (unsigned)S.Context.toCharUnitsFromBits(OldAlign).getQuantity()
2503 << (unsigned)S.Context.toCharUnitsFromBits(NewAlign).getQuantity();
2504 S.Diag(OldAlignasAttr->getLocation(), diag::note_previous_declaration);
2505 }
2506 }
2507
2508 if (OldAlignasAttr && !NewAlignasAttr && isAttributeTargetADefinition(New)) {
2509 // C++11 [dcl.align]p6:
2510 // if any declaration of an entity has an alignment-specifier,
2511 // every defining declaration of that entity shall specify an
2512 // equivalent alignment.
2513 // C11 6.7.5/7:
2514 // If the definition of an object does not have an alignment
2515 // specifier, any other declaration of that object shall also
2516 // have no alignment specifier.
2517 S.Diag(New->getLocation(), diag::err_alignas_missing_on_definition)
2518 << OldAlignasAttr;
2519 S.Diag(OldAlignasAttr->getLocation(), diag::note_alignas_on_declaration)
2520 << OldAlignasAttr;
2521 }
2522
2523 bool AnyAdded = false;
2524
2525 // Ensure we have an attribute representing the strictest alignment.
2526 if (OldAlign > NewAlign) {
2527 AlignedAttr *Clone = OldStrictestAlignAttr->clone(S.Context);
2528 Clone->setInherited(true);
2529 New->addAttr(Clone);
2530 AnyAdded = true;
2531 }
2532
2533 // Ensure we have an alignas attribute if the old declaration had one.
2534 if (OldAlignasAttr && !NewAlignasAttr &&
2535 !(AnyAdded && OldStrictestAlignAttr->isAlignas())) {
2536 AlignedAttr *Clone = OldAlignasAttr->clone(S.Context);
2537 Clone->setInherited(true);
2538 New->addAttr(Clone);
2539 AnyAdded = true;
2540 }
2541
2542 return AnyAdded;
2543 }
2544
mergeDeclAttribute(Sema & S,NamedDecl * D,const InheritableAttr * Attr,Sema::AvailabilityMergeKind AMK)2545 static bool mergeDeclAttribute(Sema &S, NamedDecl *D,
2546 const InheritableAttr *Attr,
2547 Sema::AvailabilityMergeKind AMK) {
2548 // This function copies an attribute Attr from a previous declaration to the
2549 // new declaration D if the new declaration doesn't itself have that attribute
2550 // yet or if that attribute allows duplicates.
2551 // If you're adding a new attribute that requires logic different from
2552 // "use explicit attribute on decl if present, else use attribute from
2553 // previous decl", for example if the attribute needs to be consistent
2554 // between redeclarations, you need to call a custom merge function here.
2555 InheritableAttr *NewAttr = nullptr;
2556 if (const auto *AA = dyn_cast<AvailabilityAttr>(Attr))
2557 NewAttr = S.mergeAvailabilityAttr(
2558 D, *AA, AA->getPlatform(), AA->isImplicit(), AA->getIntroduced(),
2559 AA->getDeprecated(), AA->getObsoleted(), AA->getUnavailable(),
2560 AA->getMessage(), AA->getStrict(), AA->getReplacement(), AMK,
2561 AA->getPriority());
2562 else if (const auto *VA = dyn_cast<VisibilityAttr>(Attr))
2563 NewAttr = S.mergeVisibilityAttr(D, *VA, VA->getVisibility());
2564 else if (const auto *VA = dyn_cast<TypeVisibilityAttr>(Attr))
2565 NewAttr = S.mergeTypeVisibilityAttr(D, *VA, VA->getVisibility());
2566 else if (const auto *ImportA = dyn_cast<DLLImportAttr>(Attr))
2567 NewAttr = S.mergeDLLImportAttr(D, *ImportA);
2568 else if (const auto *ExportA = dyn_cast<DLLExportAttr>(Attr))
2569 NewAttr = S.mergeDLLExportAttr(D, *ExportA);
2570 else if (const auto *FA = dyn_cast<FormatAttr>(Attr))
2571 NewAttr = S.mergeFormatAttr(D, *FA, FA->getType(), FA->getFormatIdx(),
2572 FA->getFirstArg());
2573 else if (const auto *SA = dyn_cast<SectionAttr>(Attr))
2574 NewAttr = S.mergeSectionAttr(D, *SA, SA->getName());
2575 else if (const auto *CSA = dyn_cast<CodeSegAttr>(Attr))
2576 NewAttr = S.mergeCodeSegAttr(D, *CSA, CSA->getName());
2577 else if (const auto *IA = dyn_cast<MSInheritanceAttr>(Attr))
2578 NewAttr = S.mergeMSInheritanceAttr(D, *IA, IA->getBestCase(),
2579 IA->getInheritanceModel());
2580 else if (const auto *AA = dyn_cast<AlwaysInlineAttr>(Attr))
2581 NewAttr = S.mergeAlwaysInlineAttr(D, *AA,
2582 &S.Context.Idents.get(AA->getSpelling()));
2583 else if (S.getLangOpts().CUDA && isa<FunctionDecl>(D) &&
2584 (isa<CUDAHostAttr>(Attr) || isa<CUDADeviceAttr>(Attr) ||
2585 isa<CUDAGlobalAttr>(Attr))) {
2586 // CUDA target attributes are part of function signature for
2587 // overloading purposes and must not be merged.
2588 return false;
2589 } else if (const auto *MA = dyn_cast<MinSizeAttr>(Attr))
2590 NewAttr = S.mergeMinSizeAttr(D, *MA);
2591 else if (const auto *SNA = dyn_cast<SwiftNameAttr>(Attr))
2592 NewAttr = S.mergeSwiftNameAttr(D, *SNA, SNA->getName());
2593 else if (const auto *OA = dyn_cast<OptimizeNoneAttr>(Attr))
2594 NewAttr = S.mergeOptimizeNoneAttr(D, *OA);
2595 else if (const auto *InternalLinkageA = dyn_cast<InternalLinkageAttr>(Attr))
2596 NewAttr = S.mergeInternalLinkageAttr(D, *InternalLinkageA);
2597 else if (const auto *CommonA = dyn_cast<CommonAttr>(Attr))
2598 NewAttr = S.mergeCommonAttr(D, *CommonA);
2599 else if (isa<AlignedAttr>(Attr))
2600 // AlignedAttrs are handled separately, because we need to handle all
2601 // such attributes on a declaration at the same time.
2602 NewAttr = nullptr;
2603 else if ((isa<DeprecatedAttr>(Attr) || isa<UnavailableAttr>(Attr)) &&
2604 (AMK == Sema::AMK_Override ||
2605 AMK == Sema::AMK_ProtocolImplementation))
2606 NewAttr = nullptr;
2607 else if (const auto *UA = dyn_cast<UuidAttr>(Attr))
2608 NewAttr = S.mergeUuidAttr(D, *UA, UA->getGuid(), UA->getGuidDecl());
2609 else if (const auto *SLHA = dyn_cast<SpeculativeLoadHardeningAttr>(Attr))
2610 NewAttr = S.mergeSpeculativeLoadHardeningAttr(D, *SLHA);
2611 else if (const auto *SLHA = dyn_cast<NoSpeculativeLoadHardeningAttr>(Attr))
2612 NewAttr = S.mergeNoSpeculativeLoadHardeningAttr(D, *SLHA);
2613 else if (const auto *IMA = dyn_cast<WebAssemblyImportModuleAttr>(Attr))
2614 NewAttr = S.mergeImportModuleAttr(D, *IMA);
2615 else if (const auto *INA = dyn_cast<WebAssemblyImportNameAttr>(Attr))
2616 NewAttr = S.mergeImportNameAttr(D, *INA);
2617 else if (Attr->shouldInheritEvenIfAlreadyPresent() || !DeclHasAttr(D, Attr))
2618 NewAttr = cast<InheritableAttr>(Attr->clone(S.Context));
2619
2620 if (NewAttr) {
2621 NewAttr->setInherited(true);
2622 D->addAttr(NewAttr);
2623 if (isa<MSInheritanceAttr>(NewAttr))
2624 S.Consumer.AssignInheritanceModel(cast<CXXRecordDecl>(D));
2625 return true;
2626 }
2627
2628 return false;
2629 }
2630
getDefinition(const Decl * D)2631 static const NamedDecl *getDefinition(const Decl *D) {
2632 if (const TagDecl *TD = dyn_cast<TagDecl>(D))
2633 return TD->getDefinition();
2634 if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
2635 const VarDecl *Def = VD->getDefinition();
2636 if (Def)
2637 return Def;
2638 return VD->getActingDefinition();
2639 }
2640 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
2641 const FunctionDecl *Def = nullptr;
2642 if (FD->isDefined(Def, true))
2643 return Def;
2644 }
2645 return nullptr;
2646 }
2647
hasAttribute(const Decl * D,attr::Kind Kind)2648 static bool hasAttribute(const Decl *D, attr::Kind Kind) {
2649 for (const auto *Attribute : D->attrs())
2650 if (Attribute->getKind() == Kind)
2651 return true;
2652 return false;
2653 }
2654
2655 /// checkNewAttributesAfterDef - If we already have a definition, check that
2656 /// there are no new attributes in this declaration.
checkNewAttributesAfterDef(Sema & S,Decl * New,const Decl * Old)2657 static void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {
2658 if (!New->hasAttrs())
2659 return;
2660
2661 const NamedDecl *Def = getDefinition(Old);
2662 if (!Def || Def == New)
2663 return;
2664
2665 AttrVec &NewAttributes = New->getAttrs();
2666 for (unsigned I = 0, E = NewAttributes.size(); I != E;) {
2667 const Attr *NewAttribute = NewAttributes[I];
2668
2669 if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {
2670 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {
2671 Sema::SkipBodyInfo SkipBody;
2672 S.CheckForFunctionRedefinition(FD, cast<FunctionDecl>(Def), &SkipBody);
2673
2674 // If we're skipping this definition, drop the "alias" attribute.
2675 if (SkipBody.ShouldSkip) {
2676 NewAttributes.erase(NewAttributes.begin() + I);
2677 --E;
2678 continue;
2679 }
2680 } else {
2681 VarDecl *VD = cast<VarDecl>(New);
2682 unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() ==
2683 VarDecl::TentativeDefinition
2684 ? diag::err_alias_after_tentative
2685 : diag::err_redefinition;
2686 S.Diag(VD->getLocation(), Diag) << VD->getDeclName();
2687 if (Diag == diag::err_redefinition)
2688 S.notePreviousDefinition(Def, VD->getLocation());
2689 else
2690 S.Diag(Def->getLocation(), diag::note_previous_definition);
2691 VD->setInvalidDecl();
2692 }
2693 ++I;
2694 continue;
2695 }
2696
2697 if (const VarDecl *VD = dyn_cast<VarDecl>(Def)) {
2698 // Tentative definitions are only interesting for the alias check above.
2699 if (VD->isThisDeclarationADefinition() != VarDecl::Definition) {
2700 ++I;
2701 continue;
2702 }
2703 }
2704
2705 if (hasAttribute(Def, NewAttribute->getKind())) {
2706 ++I;
2707 continue; // regular attr merging will take care of validating this.
2708 }
2709
2710 if (isa<C11NoReturnAttr>(NewAttribute)) {
2711 // C's _Noreturn is allowed to be added to a function after it is defined.
2712 ++I;
2713 continue;
2714 } else if (isa<UuidAttr>(NewAttribute)) {
2715 // msvc will allow a subsequent definition to add an uuid to a class
2716 ++I;
2717 continue;
2718 } else if (const AlignedAttr *AA = dyn_cast<AlignedAttr>(NewAttribute)) {
2719 if (AA->isAlignas()) {
2720 // C++11 [dcl.align]p6:
2721 // if any declaration of an entity has an alignment-specifier,
2722 // every defining declaration of that entity shall specify an
2723 // equivalent alignment.
2724 // C11 6.7.5/7:
2725 // If the definition of an object does not have an alignment
2726 // specifier, any other declaration of that object shall also
2727 // have no alignment specifier.
2728 S.Diag(Def->getLocation(), diag::err_alignas_missing_on_definition)
2729 << AA;
2730 S.Diag(NewAttribute->getLocation(), diag::note_alignas_on_declaration)
2731 << AA;
2732 NewAttributes.erase(NewAttributes.begin() + I);
2733 --E;
2734 continue;
2735 }
2736 } else if (isa<LoaderUninitializedAttr>(NewAttribute)) {
2737 // If there is a C definition followed by a redeclaration with this
2738 // attribute then there are two different definitions. In C++, prefer the
2739 // standard diagnostics.
2740 if (!S.getLangOpts().CPlusPlus) {
2741 S.Diag(NewAttribute->getLocation(),
2742 diag::err_loader_uninitialized_redeclaration);
2743 S.Diag(Def->getLocation(), diag::note_previous_definition);
2744 NewAttributes.erase(NewAttributes.begin() + I);
2745 --E;
2746 continue;
2747 }
2748 } else if (isa<SelectAnyAttr>(NewAttribute) &&
2749 cast<VarDecl>(New)->isInline() &&
2750 !cast<VarDecl>(New)->isInlineSpecified()) {
2751 // Don't warn about applying selectany to implicitly inline variables.
2752 // Older compilers and language modes would require the use of selectany
2753 // to make such variables inline, and it would have no effect if we
2754 // honored it.
2755 ++I;
2756 continue;
2757 } else if (isa<OMPDeclareVariantAttr>(NewAttribute)) {
2758 // We allow to add OMP[Begin]DeclareVariantAttr to be added to
2759 // declarations after defintions.
2760 ++I;
2761 continue;
2762 }
2763
2764 S.Diag(NewAttribute->getLocation(),
2765 diag::warn_attribute_precede_definition);
2766 S.Diag(Def->getLocation(), diag::note_previous_definition);
2767 NewAttributes.erase(NewAttributes.begin() + I);
2768 --E;
2769 }
2770 }
2771
diagnoseMissingConstinit(Sema & S,const VarDecl * InitDecl,const ConstInitAttr * CIAttr,bool AttrBeforeInit)2772 static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl,
2773 const ConstInitAttr *CIAttr,
2774 bool AttrBeforeInit) {
2775 SourceLocation InsertLoc = InitDecl->getInnerLocStart();
2776
2777 // Figure out a good way to write this specifier on the old declaration.
2778 // FIXME: We should just use the spelling of CIAttr, but we don't preserve
2779 // enough of the attribute list spelling information to extract that without
2780 // heroics.
2781 std::string SuitableSpelling;
2782 if (S.getLangOpts().CPlusPlus20)
2783 SuitableSpelling = std::string(
2784 S.PP.getLastMacroWithSpelling(InsertLoc, {tok::kw_constinit}));
2785 if (SuitableSpelling.empty() && S.getLangOpts().CPlusPlus11)
2786 SuitableSpelling = std::string(S.PP.getLastMacroWithSpelling(
2787 InsertLoc, {tok::l_square, tok::l_square,
2788 S.PP.getIdentifierInfo("clang"), tok::coloncolon,
2789 S.PP.getIdentifierInfo("require_constant_initialization"),
2790 tok::r_square, tok::r_square}));
2791 if (SuitableSpelling.empty())
2792 SuitableSpelling = std::string(S.PP.getLastMacroWithSpelling(
2793 InsertLoc, {tok::kw___attribute, tok::l_paren, tok::r_paren,
2794 S.PP.getIdentifierInfo("require_constant_initialization"),
2795 tok::r_paren, tok::r_paren}));
2796 if (SuitableSpelling.empty() && S.getLangOpts().CPlusPlus20)
2797 SuitableSpelling = "constinit";
2798 if (SuitableSpelling.empty() && S.getLangOpts().CPlusPlus11)
2799 SuitableSpelling = "[[clang::require_constant_initialization]]";
2800 if (SuitableSpelling.empty())
2801 SuitableSpelling = "__attribute__((require_constant_initialization))";
2802 SuitableSpelling += " ";
2803
2804 if (AttrBeforeInit) {
2805 // extern constinit int a;
2806 // int a = 0; // error (missing 'constinit'), accepted as extension
2807 assert(CIAttr->isConstinit() && "should not diagnose this for attribute");
2808 S.Diag(InitDecl->getLocation(), diag::ext_constinit_missing)
2809 << InitDecl << FixItHint::CreateInsertion(InsertLoc, SuitableSpelling);
2810 S.Diag(CIAttr->getLocation(), diag::note_constinit_specified_here);
2811 } else {
2812 // int a = 0;
2813 // constinit extern int a; // error (missing 'constinit')
2814 S.Diag(CIAttr->getLocation(),
2815 CIAttr->isConstinit() ? diag::err_constinit_added_too_late
2816 : diag::warn_require_const_init_added_too_late)
2817 << FixItHint::CreateRemoval(SourceRange(CIAttr->getLocation()));
2818 S.Diag(InitDecl->getLocation(), diag::note_constinit_missing_here)
2819 << CIAttr->isConstinit()
2820 << FixItHint::CreateInsertion(InsertLoc, SuitableSpelling);
2821 }
2822 }
2823
2824 /// mergeDeclAttributes - Copy attributes from the Old decl to the New one.
mergeDeclAttributes(NamedDecl * New,Decl * Old,AvailabilityMergeKind AMK)2825 void Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old,
2826 AvailabilityMergeKind AMK) {
2827 if (UsedAttr *OldAttr = Old->getMostRecentDecl()->getAttr<UsedAttr>()) {
2828 UsedAttr *NewAttr = OldAttr->clone(Context);
2829 NewAttr->setInherited(true);
2830 New->addAttr(NewAttr);
2831 }
2832
2833 if (!Old->hasAttrs() && !New->hasAttrs())
2834 return;
2835
2836 // [dcl.constinit]p1:
2837 // If the [constinit] specifier is applied to any declaration of a
2838 // variable, it shall be applied to the initializing declaration.
2839 const auto *OldConstInit = Old->getAttr<ConstInitAttr>();
2840 const auto *NewConstInit = New->getAttr<ConstInitAttr>();
2841 if (bool(OldConstInit) != bool(NewConstInit)) {
2842 const auto *OldVD = cast<VarDecl>(Old);
2843 auto *NewVD = cast<VarDecl>(New);
2844
2845 // Find the initializing declaration. Note that we might not have linked
2846 // the new declaration into the redeclaration chain yet.
2847 const VarDecl *InitDecl = OldVD->getInitializingDeclaration();
2848 if (!InitDecl &&
2849 (NewVD->hasInit() || NewVD->isThisDeclarationADefinition()))
2850 InitDecl = NewVD;
2851
2852 if (InitDecl == NewVD) {
2853 // This is the initializing declaration. If it would inherit 'constinit',
2854 // that's ill-formed. (Note that we do not apply this to the attribute
2855 // form).
2856 if (OldConstInit && OldConstInit->isConstinit())
2857 diagnoseMissingConstinit(*this, NewVD, OldConstInit,
2858 /*AttrBeforeInit=*/true);
2859 } else if (NewConstInit) {
2860 // This is the first time we've been told that this declaration should
2861 // have a constant initializer. If we already saw the initializing
2862 // declaration, this is too late.
2863 if (InitDecl && InitDecl != NewVD) {
2864 diagnoseMissingConstinit(*this, InitDecl, NewConstInit,
2865 /*AttrBeforeInit=*/false);
2866 NewVD->dropAttr<ConstInitAttr>();
2867 }
2868 }
2869 }
2870
2871 // Attributes declared post-definition are currently ignored.
2872 checkNewAttributesAfterDef(*this, New, Old);
2873
2874 if (AsmLabelAttr *NewA = New->getAttr<AsmLabelAttr>()) {
2875 if (AsmLabelAttr *OldA = Old->getAttr<AsmLabelAttr>()) {
2876 if (!OldA->isEquivalent(NewA)) {
2877 // This redeclaration changes __asm__ label.
2878 Diag(New->getLocation(), diag::err_different_asm_label);
2879 Diag(OldA->getLocation(), diag::note_previous_declaration);
2880 }
2881 } else if (Old->isUsed()) {
2882 // This redeclaration adds an __asm__ label to a declaration that has
2883 // already been ODR-used.
2884 Diag(New->getLocation(), diag::err_late_asm_label_name)
2885 << isa<FunctionDecl>(Old) << New->getAttr<AsmLabelAttr>()->getRange();
2886 }
2887 }
2888
2889 // Re-declaration cannot add abi_tag's.
2890 if (const auto *NewAbiTagAttr = New->getAttr<AbiTagAttr>()) {
2891 if (const auto *OldAbiTagAttr = Old->getAttr<AbiTagAttr>()) {
2892 for (const auto &NewTag : NewAbiTagAttr->tags()) {
2893 if (std::find(OldAbiTagAttr->tags_begin(), OldAbiTagAttr->tags_end(),
2894 NewTag) == OldAbiTagAttr->tags_end()) {
2895 Diag(NewAbiTagAttr->getLocation(),
2896 diag::err_new_abi_tag_on_redeclaration)
2897 << NewTag;
2898 Diag(OldAbiTagAttr->getLocation(), diag::note_previous_declaration);
2899 }
2900 }
2901 } else {
2902 Diag(NewAbiTagAttr->getLocation(), diag::err_abi_tag_on_redeclaration);
2903 Diag(Old->getLocation(), diag::note_previous_declaration);
2904 }
2905 }
2906
2907 // This redeclaration adds a section attribute.
2908 if (New->hasAttr<SectionAttr>() && !Old->hasAttr<SectionAttr>()) {
2909 if (auto *VD = dyn_cast<VarDecl>(New)) {
2910 if (VD->isThisDeclarationADefinition() == VarDecl::DeclarationOnly) {
2911 Diag(New->getLocation(), diag::warn_attribute_section_on_redeclaration);
2912 Diag(Old->getLocation(), diag::note_previous_declaration);
2913 }
2914 }
2915 }
2916
2917 // Redeclaration adds code-seg attribute.
2918 const auto *NewCSA = New->getAttr<CodeSegAttr>();
2919 if (NewCSA && !Old->hasAttr<CodeSegAttr>() &&
2920 !NewCSA->isImplicit() && isa<CXXMethodDecl>(New)) {
2921 Diag(New->getLocation(), diag::warn_mismatched_section)
2922 << 0 /*codeseg*/;
2923 Diag(Old->getLocation(), diag::note_previous_declaration);
2924 }
2925
2926 if (!Old->hasAttrs())
2927 return;
2928
2929 bool foundAny = New->hasAttrs();
2930
2931 // Ensure that any moving of objects within the allocated map is done before
2932 // we process them.
2933 if (!foundAny) New->setAttrs(AttrVec());
2934
2935 for (auto *I : Old->specific_attrs<InheritableAttr>()) {
2936 // Ignore deprecated/unavailable/availability attributes if requested.
2937 AvailabilityMergeKind LocalAMK = AMK_None;
2938 if (isa<DeprecatedAttr>(I) ||
2939 isa<UnavailableAttr>(I) ||
2940 isa<AvailabilityAttr>(I)) {
2941 switch (AMK) {
2942 case AMK_None:
2943 continue;
2944
2945 case AMK_Redeclaration:
2946 case AMK_Override:
2947 case AMK_ProtocolImplementation:
2948 LocalAMK = AMK;
2949 break;
2950 }
2951 }
2952
2953 // Already handled.
2954 if (isa<UsedAttr>(I))
2955 continue;
2956
2957 if (mergeDeclAttribute(*this, New, I, LocalAMK))
2958 foundAny = true;
2959 }
2960
2961 if (mergeAlignedAttrs(*this, New, Old))
2962 foundAny = true;
2963
2964 if (!foundAny) New->dropAttrs();
2965 }
2966
2967 /// mergeParamDeclAttributes - Copy attributes from the old parameter
2968 /// to the new one.
mergeParamDeclAttributes(ParmVarDecl * newDecl,const ParmVarDecl * oldDecl,Sema & S)2969 static void mergeParamDeclAttributes(ParmVarDecl *newDecl,
2970 const ParmVarDecl *oldDecl,
2971 Sema &S) {
2972 // C++11 [dcl.attr.depend]p2:
2973 // The first declaration of a function shall specify the
2974 // carries_dependency attribute for its declarator-id if any declaration
2975 // of the function specifies the carries_dependency attribute.
2976 const CarriesDependencyAttr *CDA = newDecl->getAttr<CarriesDependencyAttr>();
2977 if (CDA && !oldDecl->hasAttr<CarriesDependencyAttr>()) {
2978 S.Diag(CDA->getLocation(),
2979 diag::err_carries_dependency_missing_on_first_decl) << 1/*Param*/;
2980 // Find the first declaration of the parameter.
2981 // FIXME: Should we build redeclaration chains for function parameters?
2982 const FunctionDecl *FirstFD =
2983 cast<FunctionDecl>(oldDecl->getDeclContext())->getFirstDecl();
2984 const ParmVarDecl *FirstVD =
2985 FirstFD->getParamDecl(oldDecl->getFunctionScopeIndex());
2986 S.Diag(FirstVD->getLocation(),
2987 diag::note_carries_dependency_missing_first_decl) << 1/*Param*/;
2988 }
2989
2990 if (!oldDecl->hasAttrs())
2991 return;
2992
2993 bool foundAny = newDecl->hasAttrs();
2994
2995 // Ensure that any moving of objects within the allocated map is
2996 // done before we process them.
2997 if (!foundAny) newDecl->setAttrs(AttrVec());
2998
2999 for (const auto *I : oldDecl->specific_attrs<InheritableParamAttr>()) {
3000 if (!DeclHasAttr(newDecl, I)) {
3001 InheritableAttr *newAttr =
3002 cast<InheritableParamAttr>(I->clone(S.Context));
3003 newAttr->setInherited(true);
3004 newDecl->addAttr(newAttr);
3005 foundAny = true;
3006 }
3007 }
3008
3009 if (!foundAny) newDecl->dropAttrs();
3010 }
3011
mergeParamDeclTypes(ParmVarDecl * NewParam,const ParmVarDecl * OldParam,Sema & S)3012 static void mergeParamDeclTypes(ParmVarDecl *NewParam,
3013 const ParmVarDecl *OldParam,
3014 Sema &S) {
3015 if (auto Oldnullability = OldParam->getType()->getNullability(S.Context)) {
3016 if (auto Newnullability = NewParam->getType()->getNullability(S.Context)) {
3017 if (*Oldnullability != *Newnullability) {
3018 S.Diag(NewParam->getLocation(), diag::warn_mismatched_nullability_attr)
3019 << DiagNullabilityKind(
3020 *Newnullability,
3021 ((NewParam->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability)
3022 != 0))
3023 << DiagNullabilityKind(
3024 *Oldnullability,
3025 ((OldParam->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability)
3026 != 0));
3027 S.Diag(OldParam->getLocation(), diag::note_previous_declaration);
3028 }
3029 } else {
3030 QualType NewT = NewParam->getType();
3031 NewT = S.Context.getAttributedType(
3032 AttributedType::getNullabilityAttrKind(*Oldnullability),
3033 NewT, NewT);
3034 NewParam->setType(NewT);
3035 }
3036 }
3037 }
3038
3039 namespace {
3040
3041 /// Used in MergeFunctionDecl to keep track of function parameters in
3042 /// C.
3043 struct GNUCompatibleParamWarning {
3044 ParmVarDecl *OldParm;
3045 ParmVarDecl *NewParm;
3046 QualType PromotedType;
3047 };
3048
3049 } // end anonymous namespace
3050
3051 // Determine whether the previous declaration was a definition, implicit
3052 // declaration, or a declaration.
3053 template <typename T>
3054 static std::pair<diag::kind, SourceLocation>
getNoteDiagForInvalidRedeclaration(const T * Old,const T * New)3055 getNoteDiagForInvalidRedeclaration(const T *Old, const T *New) {
3056 diag::kind PrevDiag;
3057 SourceLocation OldLocation = Old->getLocation();
3058 if (Old->isThisDeclarationADefinition())
3059 PrevDiag = diag::note_previous_definition;
3060 else if (Old->isImplicit()) {
3061 PrevDiag = diag::note_previous_implicit_declaration;
3062 if (OldLocation.isInvalid())
3063 OldLocation = New->getLocation();
3064 } else
3065 PrevDiag = diag::note_previous_declaration;
3066 return std::make_pair(PrevDiag, OldLocation);
3067 }
3068
3069 /// canRedefineFunction - checks if a function can be redefined. Currently,
3070 /// only extern inline functions can be redefined, and even then only in
3071 /// GNU89 mode.
canRedefineFunction(const FunctionDecl * FD,const LangOptions & LangOpts)3072 static bool canRedefineFunction(const FunctionDecl *FD,
3073 const LangOptions& LangOpts) {
3074 return ((FD->hasAttr<GNUInlineAttr>() || LangOpts.GNUInline) &&
3075 !LangOpts.CPlusPlus &&
3076 FD->isInlineSpecified() &&
3077 FD->getStorageClass() == SC_Extern);
3078 }
3079
getCallingConvAttributedType(QualType T) const3080 const AttributedType *Sema::getCallingConvAttributedType(QualType T) const {
3081 const AttributedType *AT = T->getAs<AttributedType>();
3082 while (AT && !AT->isCallingConv())
3083 AT = AT->getModifiedType()->getAs<AttributedType>();
3084 return AT;
3085 }
3086
3087 template <typename T>
haveIncompatibleLanguageLinkages(const T * Old,const T * New)3088 static bool haveIncompatibleLanguageLinkages(const T *Old, const T *New) {
3089 const DeclContext *DC = Old->getDeclContext();
3090 if (DC->isRecord())
3091 return false;
3092
3093 LanguageLinkage OldLinkage = Old->getLanguageLinkage();
3094 if (OldLinkage == CXXLanguageLinkage && New->isInExternCContext())
3095 return true;
3096 if (OldLinkage == CLanguageLinkage && New->isInExternCXXContext())
3097 return true;
3098 return false;
3099 }
3100
isExternC(T * D)3101 template<typename T> static bool isExternC(T *D) { return D->isExternC(); }
isExternC(VarTemplateDecl *)3102 static bool isExternC(VarTemplateDecl *) { return false; }
3103
3104 /// Check whether a redeclaration of an entity introduced by a
3105 /// using-declaration is valid, given that we know it's not an overload
3106 /// (nor a hidden tag declaration).
3107 template<typename ExpectedDecl>
checkUsingShadowRedecl(Sema & S,UsingShadowDecl * OldS,ExpectedDecl * New)3108 static bool checkUsingShadowRedecl(Sema &S, UsingShadowDecl *OldS,
3109 ExpectedDecl *New) {
3110 // C++11 [basic.scope.declarative]p4:
3111 // Given a set of declarations in a single declarative region, each of
3112 // which specifies the same unqualified name,
3113 // -- they shall all refer to the same entity, or all refer to functions
3114 // and function templates; or
3115 // -- exactly one declaration shall declare a class name or enumeration
3116 // name that is not a typedef name and the other declarations shall all
3117 // refer to the same variable or enumerator, or all refer to functions
3118 // and function templates; in this case the class name or enumeration
3119 // name is hidden (3.3.10).
3120
3121 // C++11 [namespace.udecl]p14:
3122 // If a function declaration in namespace scope or block scope has the
3123 // same name and the same parameter-type-list as a function introduced
3124 // by a using-declaration, and the declarations do not declare the same
3125 // function, the program is ill-formed.
3126
3127 auto *Old = dyn_cast<ExpectedDecl>(OldS->getTargetDecl());
3128 if (Old &&
3129 !Old->getDeclContext()->getRedeclContext()->Equals(
3130 New->getDeclContext()->getRedeclContext()) &&
3131 !(isExternC(Old) && isExternC(New)))
3132 Old = nullptr;
3133
3134 if (!Old) {
3135 S.Diag(New->getLocation(), diag::err_using_decl_conflict_reverse);
3136 S.Diag(OldS->getTargetDecl()->getLocation(), diag::note_using_decl_target);
3137 S.Diag(OldS->getUsingDecl()->getLocation(), diag::note_using_decl) << 0;
3138 return true;
3139 }
3140 return false;
3141 }
3142
hasIdenticalPassObjectSizeAttrs(const FunctionDecl * A,const FunctionDecl * B)3143 static bool hasIdenticalPassObjectSizeAttrs(const FunctionDecl *A,
3144 const FunctionDecl *B) {
3145 assert(A->getNumParams() == B->getNumParams());
3146
3147 auto AttrEq = [](const ParmVarDecl *A, const ParmVarDecl *B) {
3148 const auto *AttrA = A->getAttr<PassObjectSizeAttr>();
3149 const auto *AttrB = B->getAttr<PassObjectSizeAttr>();
3150 if (AttrA == AttrB)
3151 return true;
3152 return AttrA && AttrB && AttrA->getType() == AttrB->getType() &&
3153 AttrA->isDynamic() == AttrB->isDynamic();
3154 };
3155
3156 return std::equal(A->param_begin(), A->param_end(), B->param_begin(), AttrEq);
3157 }
3158
3159 /// If necessary, adjust the semantic declaration context for a qualified
3160 /// declaration to name the correct inline namespace within the qualifier.
adjustDeclContextForDeclaratorDecl(DeclaratorDecl * NewD,DeclaratorDecl * OldD)3161 static void adjustDeclContextForDeclaratorDecl(DeclaratorDecl *NewD,
3162 DeclaratorDecl *OldD) {
3163 // The only case where we need to update the DeclContext is when
3164 // redeclaration lookup for a qualified name finds a declaration
3165 // in an inline namespace within the context named by the qualifier:
3166 //
3167 // inline namespace N { int f(); }
3168 // int ::f(); // Sema DC needs adjusting from :: to N::.
3169 //
3170 // For unqualified declarations, the semantic context *can* change
3171 // along the redeclaration chain (for local extern declarations,
3172 // extern "C" declarations, and friend declarations in particular).
3173 if (!NewD->getQualifier())
3174 return;
3175
3176 // NewD is probably already in the right context.
3177 auto *NamedDC = NewD->getDeclContext()->getRedeclContext();
3178 auto *SemaDC = OldD->getDeclContext()->getRedeclContext();
3179 if (NamedDC->Equals(SemaDC))
3180 return;
3181
3182 assert((NamedDC->InEnclosingNamespaceSetOf(SemaDC) ||
3183 NewD->isInvalidDecl() || OldD->isInvalidDecl()) &&
3184 "unexpected context for redeclaration");
3185
3186 auto *LexDC = NewD->getLexicalDeclContext();
3187 auto FixSemaDC = [=](NamedDecl *D) {
3188 if (!D)
3189 return;
3190 D->setDeclContext(SemaDC);
3191 D->setLexicalDeclContext(LexDC);
3192 };
3193
3194 FixSemaDC(NewD);
3195 if (auto *FD = dyn_cast<FunctionDecl>(NewD))
3196 FixSemaDC(FD->getDescribedFunctionTemplate());
3197 else if (auto *VD = dyn_cast<VarDecl>(NewD))
3198 FixSemaDC(VD->getDescribedVarTemplate());
3199 }
3200
3201 /// MergeFunctionDecl - We just parsed a function 'New' from
3202 /// declarator D which has the same name and scope as a previous
3203 /// declaration 'Old'. Figure out how to resolve this situation,
3204 /// merging decls or emitting diagnostics as appropriate.
3205 ///
3206 /// In C++, New and Old must be declarations that are not
3207 /// overloaded. Use IsOverload to determine whether New and Old are
3208 /// overloaded, and to select the Old declaration that New should be
3209 /// merged with.
3210 ///
3211 /// Returns true if there was an error, false otherwise.
MergeFunctionDecl(FunctionDecl * New,NamedDecl * & OldD,Scope * S,bool MergeTypeWithOld)3212 bool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD,
3213 Scope *S, bool MergeTypeWithOld) {
3214 // Verify the old decl was also a function.
3215 FunctionDecl *Old = OldD->getAsFunction();
3216 if (!Old) {
3217 if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {
3218 if (New->getFriendObjectKind()) {
3219 Diag(New->getLocation(), diag::err_using_decl_friend);
3220 Diag(Shadow->getTargetDecl()->getLocation(),
3221 diag::note_using_decl_target);
3222 Diag(Shadow->getUsingDecl()->getLocation(),
3223 diag::note_using_decl) << 0;
3224 return true;
3225 }
3226
3227 // Check whether the two declarations might declare the same function.
3228 if (checkUsingShadowRedecl<FunctionDecl>(*this, Shadow, New))
3229 return true;
3230 OldD = Old = cast<FunctionDecl>(Shadow->getTargetDecl());
3231 } else {
3232 Diag(New->getLocation(), diag::err_redefinition_different_kind)
3233 << New->getDeclName();
3234 notePreviousDefinition(OldD, New->getLocation());
3235 return true;
3236 }
3237 }
3238
3239 // If the old declaration is invalid, just give up here.
3240 if (Old->isInvalidDecl())
3241 return true;
3242
3243 // Disallow redeclaration of some builtins.
3244 if (!getASTContext().canBuiltinBeRedeclared(Old)) {
3245 Diag(New->getLocation(), diag::err_builtin_redeclare) << Old->getDeclName();
3246 Diag(Old->getLocation(), diag::note_previous_builtin_declaration)
3247 << Old << Old->getType();
3248 return true;
3249 }
3250
3251 diag::kind PrevDiag;
3252 SourceLocation OldLocation;
3253 std::tie(PrevDiag, OldLocation) =
3254 getNoteDiagForInvalidRedeclaration(Old, New);
3255
3256 // Don't complain about this if we're in GNU89 mode and the old function
3257 // is an extern inline function.
3258 // Don't complain about specializations. They are not supposed to have
3259 // storage classes.
3260 if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) &&
3261 New->getStorageClass() == SC_Static &&
3262 Old->hasExternalFormalLinkage() &&
3263 !New->getTemplateSpecializationInfo() &&
3264 !canRedefineFunction(Old, getLangOpts())) {
3265 if (getLangOpts().MicrosoftExt) {
3266 Diag(New->getLocation(), diag::ext_static_non_static) << New;
3267 Diag(OldLocation, PrevDiag);
3268 } else {
3269 Diag(New->getLocation(), diag::err_static_non_static) << New;
3270 Diag(OldLocation, PrevDiag);
3271 return true;
3272 }
3273 }
3274
3275 if (New->hasAttr<InternalLinkageAttr>() &&
3276 !Old->hasAttr<InternalLinkageAttr>()) {
3277 Diag(New->getLocation(), diag::err_internal_linkage_redeclaration)
3278 << New->getDeclName();
3279 notePreviousDefinition(Old, New->getLocation());
3280 New->dropAttr<InternalLinkageAttr>();
3281 }
3282
3283 if (CheckRedeclarationModuleOwnership(New, Old))
3284 return true;
3285
3286 if (!getLangOpts().CPlusPlus) {
3287 bool OldOvl = Old->hasAttr<OverloadableAttr>();
3288 if (OldOvl != New->hasAttr<OverloadableAttr>() && !Old->isImplicit()) {
3289 Diag(New->getLocation(), diag::err_attribute_overloadable_mismatch)
3290 << New << OldOvl;
3291
3292 // Try our best to find a decl that actually has the overloadable
3293 // attribute for the note. In most cases (e.g. programs with only one
3294 // broken declaration/definition), this won't matter.
3295 //
3296 // FIXME: We could do this if we juggled some extra state in
3297 // OverloadableAttr, rather than just removing it.
3298 const Decl *DiagOld = Old;
3299 if (OldOvl) {
3300 auto OldIter = llvm::find_if(Old->redecls(), [](const Decl *D) {
3301 const auto *A = D->getAttr<OverloadableAttr>();
3302 return A && !A->isImplicit();
3303 });
3304 // If we've implicitly added *all* of the overloadable attrs to this
3305 // chain, emitting a "previous redecl" note is pointless.
3306 DiagOld = OldIter == Old->redecls_end() ? nullptr : *OldIter;
3307 }
3308
3309 if (DiagOld)
3310 Diag(DiagOld->getLocation(),
3311 diag::note_attribute_overloadable_prev_overload)
3312 << OldOvl;
3313
3314 if (OldOvl)
3315 New->addAttr(OverloadableAttr::CreateImplicit(Context));
3316 else
3317 New->dropAttr<OverloadableAttr>();
3318 }
3319 }
3320
3321 // If a function is first declared with a calling convention, but is later
3322 // declared or defined without one, all following decls assume the calling
3323 // convention of the first.
3324 //
3325 // It's OK if a function is first declared without a calling convention,
3326 // but is later declared or defined with the default calling convention.
3327 //
3328 // To test if either decl has an explicit calling convention, we look for
3329 // AttributedType sugar nodes on the type as written. If they are missing or
3330 // were canonicalized away, we assume the calling convention was implicit.
3331 //
3332 // Note also that we DO NOT return at this point, because we still have
3333 // other tests to run.
3334 QualType OldQType = Context.getCanonicalType(Old->getType());
3335 QualType NewQType = Context.getCanonicalType(New->getType());
3336 const FunctionType *OldType = cast<FunctionType>(OldQType);
3337 const FunctionType *NewType = cast<FunctionType>(NewQType);
3338 FunctionType::ExtInfo OldTypeInfo = OldType->getExtInfo();
3339 FunctionType::ExtInfo NewTypeInfo = NewType->getExtInfo();
3340 bool RequiresAdjustment = false;
3341
3342 if (OldTypeInfo.getCC() != NewTypeInfo.getCC()) {
3343 FunctionDecl *First = Old->getFirstDecl();
3344 const FunctionType *FT =
3345 First->getType().getCanonicalType()->castAs<FunctionType>();
3346 FunctionType::ExtInfo FI = FT->getExtInfo();
3347 bool NewCCExplicit = getCallingConvAttributedType(New->getType());
3348 if (!NewCCExplicit) {
3349 // Inherit the CC from the previous declaration if it was specified
3350 // there but not here.
3351 NewTypeInfo = NewTypeInfo.withCallingConv(OldTypeInfo.getCC());
3352 RequiresAdjustment = true;
3353 } else if (Old->getBuiltinID()) {
3354 // Builtin attribute isn't propagated to the new one yet at this point,
3355 // so we check if the old one is a builtin.
3356
3357 // Calling Conventions on a Builtin aren't really useful and setting a
3358 // default calling convention and cdecl'ing some builtin redeclarations is
3359 // common, so warn and ignore the calling convention on the redeclaration.
3360 Diag(New->getLocation(), diag::warn_cconv_unsupported)
3361 << FunctionType::getNameForCallConv(NewTypeInfo.getCC())
3362 << (int)CallingConventionIgnoredReason::BuiltinFunction;
3363 NewTypeInfo = NewTypeInfo.withCallingConv(OldTypeInfo.getCC());
3364 RequiresAdjustment = true;
3365 } else {
3366 // Calling conventions aren't compatible, so complain.
3367 bool FirstCCExplicit = getCallingConvAttributedType(First->getType());
3368 Diag(New->getLocation(), diag::err_cconv_change)
3369 << FunctionType::getNameForCallConv(NewTypeInfo.getCC())
3370 << !FirstCCExplicit
3371 << (!FirstCCExplicit ? "" :
3372 FunctionType::getNameForCallConv(FI.getCC()));
3373
3374 // Put the note on the first decl, since it is the one that matters.
3375 Diag(First->getLocation(), diag::note_previous_declaration);
3376 return true;
3377 }
3378 }
3379
3380 // FIXME: diagnose the other way around?
3381 if (OldTypeInfo.getNoReturn() && !NewTypeInfo.getNoReturn()) {
3382 NewTypeInfo = NewTypeInfo.withNoReturn(true);
3383 RequiresAdjustment = true;
3384 }
3385
3386 // Merge regparm attribute.
3387 if (OldTypeInfo.getHasRegParm() != NewTypeInfo.getHasRegParm() ||
3388 OldTypeInfo.getRegParm() != NewTypeInfo.getRegParm()) {
3389 if (NewTypeInfo.getHasRegParm()) {
3390 Diag(New->getLocation(), diag::err_regparm_mismatch)
3391 << NewType->getRegParmType()
3392 << OldType->getRegParmType();
3393 Diag(OldLocation, diag::note_previous_declaration);
3394 return true;
3395 }
3396
3397 NewTypeInfo = NewTypeInfo.withRegParm(OldTypeInfo.getRegParm());
3398 RequiresAdjustment = true;
3399 }
3400
3401 // Merge ns_returns_retained attribute.
3402 if (OldTypeInfo.getProducesResult() != NewTypeInfo.getProducesResult()) {
3403 if (NewTypeInfo.getProducesResult()) {
3404 Diag(New->getLocation(), diag::err_function_attribute_mismatch)
3405 << "'ns_returns_retained'";
3406 Diag(OldLocation, diag::note_previous_declaration);
3407 return true;
3408 }
3409
3410 NewTypeInfo = NewTypeInfo.withProducesResult(true);
3411 RequiresAdjustment = true;
3412 }
3413
3414 if (OldTypeInfo.getNoCallerSavedRegs() !=
3415 NewTypeInfo.getNoCallerSavedRegs()) {
3416 if (NewTypeInfo.getNoCallerSavedRegs()) {
3417 AnyX86NoCallerSavedRegistersAttr *Attr =
3418 New->getAttr<AnyX86NoCallerSavedRegistersAttr>();
3419 Diag(New->getLocation(), diag::err_function_attribute_mismatch) << Attr;
3420 Diag(OldLocation, diag::note_previous_declaration);
3421 return true;
3422 }
3423
3424 NewTypeInfo = NewTypeInfo.withNoCallerSavedRegs(true);
3425 RequiresAdjustment = true;
3426 }
3427
3428 if (RequiresAdjustment) {
3429 const FunctionType *AdjustedType = New->getType()->getAs<FunctionType>();
3430 AdjustedType = Context.adjustFunctionType(AdjustedType, NewTypeInfo);
3431 New->setType(QualType(AdjustedType, 0));
3432 NewQType = Context.getCanonicalType(New->getType());
3433 }
3434
3435 // If this redeclaration makes the function inline, we may need to add it to
3436 // UndefinedButUsed.
3437 if (!Old->isInlined() && New->isInlined() &&
3438 !New->hasAttr<GNUInlineAttr>() &&
3439 !getLangOpts().GNUInline &&
3440 Old->isUsed(false) &&
3441 !Old->isDefined() && !New->isThisDeclarationADefinition())
3442 UndefinedButUsed.insert(std::make_pair(Old->getCanonicalDecl(),
3443 SourceLocation()));
3444
3445 // If this redeclaration makes it newly gnu_inline, we don't want to warn
3446 // about it.
3447 if (New->hasAttr<GNUInlineAttr>() &&
3448 Old->isInlined() && !Old->hasAttr<GNUInlineAttr>()) {
3449 UndefinedButUsed.erase(Old->getCanonicalDecl());
3450 }
3451
3452 // If pass_object_size params don't match up perfectly, this isn't a valid
3453 // redeclaration.
3454 if (Old->getNumParams() > 0 && Old->getNumParams() == New->getNumParams() &&
3455 !hasIdenticalPassObjectSizeAttrs(Old, New)) {
3456 Diag(New->getLocation(), diag::err_different_pass_object_size_params)
3457 << New->getDeclName();
3458 Diag(OldLocation, PrevDiag) << Old << Old->getType();
3459 return true;
3460 }
3461
3462 if (getLangOpts().CPlusPlus) {
3463 // C++1z [over.load]p2
3464 // Certain function declarations cannot be overloaded:
3465 // -- Function declarations that differ only in the return type,
3466 // the exception specification, or both cannot be overloaded.
3467
3468 // Check the exception specifications match. This may recompute the type of
3469 // both Old and New if it resolved exception specifications, so grab the
3470 // types again after this. Because this updates the type, we do this before
3471 // any of the other checks below, which may update the "de facto" NewQType
3472 // but do not necessarily update the type of New.
3473 if (CheckEquivalentExceptionSpec(Old, New))
3474 return true;
3475 OldQType = Context.getCanonicalType(Old->getType());
3476 NewQType = Context.getCanonicalType(New->getType());
3477
3478 // Go back to the type source info to compare the declared return types,
3479 // per C++1y [dcl.type.auto]p13:
3480 // Redeclarations or specializations of a function or function template
3481 // with a declared return type that uses a placeholder type shall also
3482 // use that placeholder, not a deduced type.
3483 QualType OldDeclaredReturnType = Old->getDeclaredReturnType();
3484 QualType NewDeclaredReturnType = New->getDeclaredReturnType();
3485 if (!Context.hasSameType(OldDeclaredReturnType, NewDeclaredReturnType) &&
3486 canFullyTypeCheckRedeclaration(New, Old, NewDeclaredReturnType,
3487 OldDeclaredReturnType)) {
3488 QualType ResQT;
3489 if (NewDeclaredReturnType->isObjCObjectPointerType() &&
3490 OldDeclaredReturnType->isObjCObjectPointerType())
3491 // FIXME: This does the wrong thing for a deduced return type.
3492 ResQT = Context.mergeObjCGCQualifiers(NewQType, OldQType);
3493 if (ResQT.isNull()) {
3494 if (New->isCXXClassMember() && New->isOutOfLine())
3495 Diag(New->getLocation(), diag::err_member_def_does_not_match_ret_type)
3496 << New << New->getReturnTypeSourceRange();
3497 else
3498 Diag(New->getLocation(), diag::err_ovl_diff_return_type)
3499 << New->getReturnTypeSourceRange();
3500 Diag(OldLocation, PrevDiag) << Old << Old->getType()
3501 << Old->getReturnTypeSourceRange();
3502 return true;
3503 }
3504 else
3505 NewQType = ResQT;
3506 }
3507
3508 QualType OldReturnType = OldType->getReturnType();
3509 QualType NewReturnType = cast<FunctionType>(NewQType)->getReturnType();
3510 if (OldReturnType != NewReturnType) {
3511 // If this function has a deduced return type and has already been
3512 // defined, copy the deduced value from the old declaration.
3513 AutoType *OldAT = Old->getReturnType()->getContainedAutoType();
3514 if (OldAT && OldAT->isDeduced()) {
3515 New->setType(
3516 SubstAutoType(New->getType(),
3517 OldAT->isDependentType() ? Context.DependentTy
3518 : OldAT->getDeducedType()));
3519 NewQType = Context.getCanonicalType(
3520 SubstAutoType(NewQType,
3521 OldAT->isDependentType() ? Context.DependentTy
3522 : OldAT->getDeducedType()));
3523 }
3524 }
3525
3526 const CXXMethodDecl *OldMethod = dyn_cast<CXXMethodDecl>(Old);
3527 CXXMethodDecl *NewMethod = dyn_cast<CXXMethodDecl>(New);
3528 if (OldMethod && NewMethod) {
3529 // Preserve triviality.
3530 NewMethod->setTrivial(OldMethod->isTrivial());
3531
3532 // MSVC allows explicit template specialization at class scope:
3533 // 2 CXXMethodDecls referring to the same function will be injected.
3534 // We don't want a redeclaration error.
3535 bool IsClassScopeExplicitSpecialization =
3536 OldMethod->isFunctionTemplateSpecialization() &&
3537 NewMethod->isFunctionTemplateSpecialization();
3538 bool isFriend = NewMethod->getFriendObjectKind();
3539
3540 if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() &&
3541 !IsClassScopeExplicitSpecialization) {
3542 // -- Member function declarations with the same name and the
3543 // same parameter types cannot be overloaded if any of them
3544 // is a static member function declaration.
3545 if (OldMethod->isStatic() != NewMethod->isStatic()) {
3546 Diag(New->getLocation(), diag::err_ovl_static_nonstatic_member);
3547 Diag(OldLocation, PrevDiag) << Old << Old->getType();
3548 return true;
3549 }
3550
3551 // C++ [class.mem]p1:
3552 // [...] A member shall not be declared twice in the
3553 // member-specification, except that a nested class or member
3554 // class template can be declared and then later defined.
3555 if (!inTemplateInstantiation()) {
3556 unsigned NewDiag;
3557 if (isa<CXXConstructorDecl>(OldMethod))
3558 NewDiag = diag::err_constructor_redeclared;
3559 else if (isa<CXXDestructorDecl>(NewMethod))
3560 NewDiag = diag::err_destructor_redeclared;
3561 else if (isa<CXXConversionDecl>(NewMethod))
3562 NewDiag = diag::err_conv_function_redeclared;
3563 else
3564 NewDiag = diag::err_member_redeclared;
3565
3566 Diag(New->getLocation(), NewDiag);
3567 } else {
3568 Diag(New->getLocation(), diag::err_member_redeclared_in_instantiation)
3569 << New << New->getType();
3570 }
3571 Diag(OldLocation, PrevDiag) << Old << Old->getType();
3572 return true;
3573
3574 // Complain if this is an explicit declaration of a special
3575 // member that was initially declared implicitly.
3576 //
3577 // As an exception, it's okay to befriend such methods in order
3578 // to permit the implicit constructor/destructor/operator calls.
3579 } else if (OldMethod->isImplicit()) {
3580 if (isFriend) {
3581 NewMethod->setImplicit();
3582 } else {
3583 Diag(NewMethod->getLocation(),
3584 diag::err_definition_of_implicitly_declared_member)
3585 << New << getSpecialMember(OldMethod);
3586 return true;
3587 }
3588 } else if (OldMethod->getFirstDecl()->isExplicitlyDefaulted() && !isFriend) {
3589 Diag(NewMethod->getLocation(),
3590 diag::err_definition_of_explicitly_defaulted_member)
3591 << getSpecialMember(OldMethod);
3592 return true;
3593 }
3594 }
3595
3596 // C++11 [dcl.attr.noreturn]p1:
3597 // The first declaration of a function shall specify the noreturn
3598 // attribute if any declaration of that function specifies the noreturn
3599 // attribute.
3600 const CXX11NoReturnAttr *NRA = New->getAttr<CXX11NoReturnAttr>();
3601 if (NRA && !Old->hasAttr<CXX11NoReturnAttr>()) {
3602 Diag(NRA->getLocation(), diag::err_noreturn_missing_on_first_decl);
3603 Diag(Old->getFirstDecl()->getLocation(),
3604 diag::note_noreturn_missing_first_decl);
3605 }
3606
3607 // C++11 [dcl.attr.depend]p2:
3608 // The first declaration of a function shall specify the
3609 // carries_dependency attribute for its declarator-id if any declaration
3610 // of the function specifies the carries_dependency attribute.
3611 const CarriesDependencyAttr *CDA = New->getAttr<CarriesDependencyAttr>();
3612 if (CDA && !Old->hasAttr<CarriesDependencyAttr>()) {
3613 Diag(CDA->getLocation(),
3614 diag::err_carries_dependency_missing_on_first_decl) << 0/*Function*/;
3615 Diag(Old->getFirstDecl()->getLocation(),
3616 diag::note_carries_dependency_missing_first_decl) << 0/*Function*/;
3617 }
3618
3619 // (C++98 8.3.5p3):
3620 // All declarations for a function shall agree exactly in both the
3621 // return type and the parameter-type-list.
3622 // We also want to respect all the extended bits except noreturn.
3623
3624 // noreturn should now match unless the old type info didn't have it.
3625 QualType OldQTypeForComparison = OldQType;
3626 if (!OldTypeInfo.getNoReturn() && NewTypeInfo.getNoReturn()) {
3627 auto *OldType = OldQType->castAs<FunctionProtoType>();
3628 const FunctionType *OldTypeForComparison
3629 = Context.adjustFunctionType(OldType, OldTypeInfo.withNoReturn(true));
3630 OldQTypeForComparison = QualType(OldTypeForComparison, 0);
3631 assert(OldQTypeForComparison.isCanonical());
3632 }
3633
3634 if (haveIncompatibleLanguageLinkages(Old, New)) {
3635 // As a special case, retain the language linkage from previous
3636 // declarations of a friend function as an extension.
3637 //
3638 // This liberal interpretation of C++ [class.friend]p3 matches GCC/MSVC
3639 // and is useful because there's otherwise no way to specify language
3640 // linkage within class scope.
3641 //
3642 // Check cautiously as the friend object kind isn't yet complete.
3643 if (New->getFriendObjectKind() != Decl::FOK_None) {
3644 Diag(New->getLocation(), diag::ext_retained_language_linkage) << New;
3645 Diag(OldLocation, PrevDiag);
3646 } else {
3647 Diag(New->getLocation(), diag::err_different_language_linkage) << New;
3648 Diag(OldLocation, PrevDiag);
3649 return true;
3650 }
3651 }
3652
3653 // If the function types are compatible, merge the declarations. Ignore the
3654 // exception specifier because it was already checked above in
3655 // CheckEquivalentExceptionSpec, and we don't want follow-on diagnostics
3656 // about incompatible types under -fms-compatibility.
3657 if (Context.hasSameFunctionTypeIgnoringExceptionSpec(OldQTypeForComparison,
3658 NewQType))
3659 return MergeCompatibleFunctionDecls(New, Old, S, MergeTypeWithOld);
3660
3661 // If the types are imprecise (due to dependent constructs in friends or
3662 // local extern declarations), it's OK if they differ. We'll check again
3663 // during instantiation.
3664 if (!canFullyTypeCheckRedeclaration(New, Old, NewQType, OldQType))
3665 return false;
3666
3667 // Fall through for conflicting redeclarations and redefinitions.
3668 }
3669
3670 // C: Function types need to be compatible, not identical. This handles
3671 // duplicate function decls like "void f(int); void f(enum X);" properly.
3672 if (!getLangOpts().CPlusPlus &&
3673 Context.typesAreCompatible(OldQType, NewQType)) {
3674 const FunctionType *OldFuncType = OldQType->getAs<FunctionType>();
3675 const FunctionType *NewFuncType = NewQType->getAs<FunctionType>();
3676 const FunctionProtoType *OldProto = nullptr;
3677 if (MergeTypeWithOld && isa<FunctionNoProtoType>(NewFuncType) &&
3678 (OldProto = dyn_cast<FunctionProtoType>(OldFuncType))) {
3679 // The old declaration provided a function prototype, but the
3680 // new declaration does not. Merge in the prototype.
3681 assert(!OldProto->hasExceptionSpec() && "Exception spec in C");
3682 SmallVector<QualType, 16> ParamTypes(OldProto->param_types());
3683 NewQType =
3684 Context.getFunctionType(NewFuncType->getReturnType(), ParamTypes,
3685 OldProto->getExtProtoInfo());
3686 New->setType(NewQType);
3687 New->setHasInheritedPrototype();
3688
3689 // Synthesize parameters with the same types.
3690 SmallVector<ParmVarDecl*, 16> Params;
3691 for (const auto &ParamType : OldProto->param_types()) {
3692 ParmVarDecl *Param = ParmVarDecl::Create(Context, New, SourceLocation(),
3693 SourceLocation(), nullptr,
3694 ParamType, /*TInfo=*/nullptr,
3695 SC_None, nullptr);
3696 Param->setScopeInfo(0, Params.size());
3697 Param->setImplicit();
3698 Params.push_back(Param);
3699 }
3700
3701 New->setParams(Params);
3702 }
3703
3704 return MergeCompatibleFunctionDecls(New, Old, S, MergeTypeWithOld);
3705 }
3706
3707 // Check if the function types are compatible when pointer size address
3708 // spaces are ignored.
3709 if (Context.hasSameFunctionTypeIgnoringPtrSizes(OldQType, NewQType))
3710 return false;
3711
3712 // GNU C permits a K&R definition to follow a prototype declaration
3713 // if the declared types of the parameters in the K&R definition
3714 // match the types in the prototype declaration, even when the
3715 // promoted types of the parameters from the K&R definition differ
3716 // from the types in the prototype. GCC then keeps the types from
3717 // the prototype.
3718 //
3719 // If a variadic prototype is followed by a non-variadic K&R definition,
3720 // the K&R definition becomes variadic. This is sort of an edge case, but
3721 // it's legal per the standard depending on how you read C99 6.7.5.3p15 and
3722 // C99 6.9.1p8.
3723 if (!getLangOpts().CPlusPlus &&
3724 Old->hasPrototype() && !New->hasPrototype() &&
3725 New->getType()->getAs<FunctionProtoType>() &&
3726 Old->getNumParams() == New->getNumParams()) {
3727 SmallVector<QualType, 16> ArgTypes;
3728 SmallVector<GNUCompatibleParamWarning, 16> Warnings;
3729 const FunctionProtoType *OldProto
3730 = Old->getType()->getAs<FunctionProtoType>();
3731 const FunctionProtoType *NewProto
3732 = New->getType()->getAs<FunctionProtoType>();
3733
3734 // Determine whether this is the GNU C extension.
3735 QualType MergedReturn = Context.mergeTypes(OldProto->getReturnType(),
3736 NewProto->getReturnType());
3737 bool LooseCompatible = !MergedReturn.isNull();
3738 for (unsigned Idx = 0, End = Old->getNumParams();
3739 LooseCompatible && Idx != End; ++Idx) {
3740 ParmVarDecl *OldParm = Old->getParamDecl(Idx);
3741 ParmVarDecl *NewParm = New->getParamDecl(Idx);
3742 if (Context.typesAreCompatible(OldParm->getType(),
3743 NewProto->getParamType(Idx))) {
3744 ArgTypes.push_back(NewParm->getType());
3745 } else if (Context.typesAreCompatible(OldParm->getType(),
3746 NewParm->getType(),
3747 /*CompareUnqualified=*/true)) {
3748 GNUCompatibleParamWarning Warn = { OldParm, NewParm,
3749 NewProto->getParamType(Idx) };
3750 Warnings.push_back(Warn);
3751 ArgTypes.push_back(NewParm->getType());
3752 } else
3753 LooseCompatible = false;
3754 }
3755
3756 if (LooseCompatible) {
3757 for (unsigned Warn = 0; Warn < Warnings.size(); ++Warn) {
3758 Diag(Warnings[Warn].NewParm->getLocation(),
3759 diag::ext_param_promoted_not_compatible_with_prototype)
3760 << Warnings[Warn].PromotedType
3761 << Warnings[Warn].OldParm->getType();
3762 if (Warnings[Warn].OldParm->getLocation().isValid())
3763 Diag(Warnings[Warn].OldParm->getLocation(),
3764 diag::note_previous_declaration);
3765 }
3766
3767 if (MergeTypeWithOld)
3768 New->setType(Context.getFunctionType(MergedReturn, ArgTypes,
3769 OldProto->getExtProtoInfo()));
3770 return MergeCompatibleFunctionDecls(New, Old, S, MergeTypeWithOld);
3771 }
3772
3773 // Fall through to diagnose conflicting types.
3774 }
3775
3776 // A function that has already been declared has been redeclared or
3777 // defined with a different type; show an appropriate diagnostic.
3778
3779 // If the previous declaration was an implicitly-generated builtin
3780 // declaration, then at the very least we should use a specialized note.
3781 unsigned BuiltinID;
3782 if (Old->isImplicit() && (BuiltinID = Old->getBuiltinID())) {
3783 // If it's actually a library-defined builtin function like 'malloc'
3784 // or 'printf', just warn about the incompatible redeclaration.
3785 if (Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {
3786 Diag(New->getLocation(), diag::warn_redecl_library_builtin) << New;
3787 Diag(OldLocation, diag::note_previous_builtin_declaration)
3788 << Old << Old->getType();
3789 return false;
3790 }
3791
3792 PrevDiag = diag::note_previous_builtin_declaration;
3793 }
3794
3795 Diag(New->getLocation(), diag::err_conflicting_types) << New->getDeclName();
3796 Diag(OldLocation, PrevDiag) << Old << Old->getType();
3797 return true;
3798 }
3799
3800 /// Completes the merge of two function declarations that are
3801 /// known to be compatible.
3802 ///
3803 /// This routine handles the merging of attributes and other
3804 /// properties of function declarations from the old declaration to
3805 /// the new declaration, once we know that New is in fact a
3806 /// redeclaration of Old.
3807 ///
3808 /// \returns false
MergeCompatibleFunctionDecls(FunctionDecl * New,FunctionDecl * Old,Scope * S,bool MergeTypeWithOld)3809 bool Sema::MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old,
3810 Scope *S, bool MergeTypeWithOld) {
3811 // Merge the attributes
3812 mergeDeclAttributes(New, Old);
3813
3814 // Merge "pure" flag.
3815 if (Old->isPure())
3816 New->setPure();
3817
3818 // Merge "used" flag.
3819 if (Old->getMostRecentDecl()->isUsed(false))
3820 New->setIsUsed();
3821
3822 // Merge attributes from the parameters. These can mismatch with K&R
3823 // declarations.
3824 if (New->getNumParams() == Old->getNumParams())
3825 for (unsigned i = 0, e = New->getNumParams(); i != e; ++i) {
3826 ParmVarDecl *NewParam = New->getParamDecl(i);
3827 ParmVarDecl *OldParam = Old->getParamDecl(i);
3828 mergeParamDeclAttributes(NewParam, OldParam, *this);
3829 mergeParamDeclTypes(NewParam, OldParam, *this);
3830 }
3831
3832 if (getLangOpts().CPlusPlus)
3833 return MergeCXXFunctionDecl(New, Old, S);
3834
3835 // Merge the function types so the we get the composite types for the return
3836 // and argument types. Per C11 6.2.7/4, only update the type if the old decl
3837 // was visible.
3838 QualType Merged = Context.mergeTypes(Old->getType(), New->getType());
3839 if (!Merged.isNull() && MergeTypeWithOld)
3840 New->setType(Merged);
3841
3842 return false;
3843 }
3844
mergeObjCMethodDecls(ObjCMethodDecl * newMethod,ObjCMethodDecl * oldMethod)3845 void Sema::mergeObjCMethodDecls(ObjCMethodDecl *newMethod,
3846 ObjCMethodDecl *oldMethod) {
3847 // Merge the attributes, including deprecated/unavailable
3848 AvailabilityMergeKind MergeKind =
3849 isa<ObjCProtocolDecl>(oldMethod->getDeclContext())
3850 ? AMK_ProtocolImplementation
3851 : isa<ObjCImplDecl>(newMethod->getDeclContext()) ? AMK_Redeclaration
3852 : AMK_Override;
3853
3854 mergeDeclAttributes(newMethod, oldMethod, MergeKind);
3855
3856 // Merge attributes from the parameters.
3857 ObjCMethodDecl::param_const_iterator oi = oldMethod->param_begin(),
3858 oe = oldMethod->param_end();
3859 for (ObjCMethodDecl::param_iterator
3860 ni = newMethod->param_begin(), ne = newMethod->param_end();
3861 ni != ne && oi != oe; ++ni, ++oi)
3862 mergeParamDeclAttributes(*ni, *oi, *this);
3863
3864 CheckObjCMethodOverride(newMethod, oldMethod);
3865 }
3866
diagnoseVarDeclTypeMismatch(Sema & S,VarDecl * New,VarDecl * Old)3867 static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl* Old) {
3868 assert(!S.Context.hasSameType(New->getType(), Old->getType()));
3869
3870 S.Diag(New->getLocation(), New->isThisDeclarationADefinition()
3871 ? diag::err_redefinition_different_type
3872 : diag::err_redeclaration_different_type)
3873 << New->getDeclName() << New->getType() << Old->getType();
3874
3875 diag::kind PrevDiag;
3876 SourceLocation OldLocation;
3877 std::tie(PrevDiag, OldLocation)
3878 = getNoteDiagForInvalidRedeclaration(Old, New);
3879 S.Diag(OldLocation, PrevDiag);
3880 New->setInvalidDecl();
3881 }
3882
3883 /// MergeVarDeclTypes - We parsed a variable 'New' which has the same name and
3884 /// scope as a previous declaration 'Old'. Figure out how to merge their types,
3885 /// emitting diagnostics as appropriate.
3886 ///
3887 /// Declarations using the auto type specifier (C++ [decl.spec.auto]) call back
3888 /// to here in AddInitializerToDecl. We can't check them before the initializer
3889 /// is attached.
MergeVarDeclTypes(VarDecl * New,VarDecl * Old,bool MergeTypeWithOld)3890 void Sema::MergeVarDeclTypes(VarDecl *New, VarDecl *Old,
3891 bool MergeTypeWithOld) {
3892 if (New->isInvalidDecl() || Old->isInvalidDecl())
3893 return;
3894
3895 QualType MergedT;
3896 if (getLangOpts().CPlusPlus) {
3897 if (New->getType()->isUndeducedType()) {
3898 // We don't know what the new type is until the initializer is attached.
3899 return;
3900 } else if (Context.hasSameType(New->getType(), Old->getType())) {
3901 // These could still be something that needs exception specs checked.
3902 return MergeVarDeclExceptionSpecs(New, Old);
3903 }
3904 // C++ [basic.link]p10:
3905 // [...] the types specified by all declarations referring to a given
3906 // object or function shall be identical, except that declarations for an
3907 // array object can specify array types that differ by the presence or
3908 // absence of a major array bound (8.3.4).
3909 else if (Old->getType()->isArrayType() && New->getType()->isArrayType()) {
3910 const ArrayType *OldArray = Context.getAsArrayType(Old->getType());
3911 const ArrayType *NewArray = Context.getAsArrayType(New->getType());
3912
3913 // We are merging a variable declaration New into Old. If it has an array
3914 // bound, and that bound differs from Old's bound, we should diagnose the
3915 // mismatch.
3916 if (!NewArray->isIncompleteArrayType() && !NewArray->isDependentType()) {
3917 for (VarDecl *PrevVD = Old->getMostRecentDecl(); PrevVD;
3918 PrevVD = PrevVD->getPreviousDecl()) {
3919 QualType PrevVDTy = PrevVD->getType();
3920 if (PrevVDTy->isIncompleteArrayType() || PrevVDTy->isDependentType())
3921 continue;
3922
3923 if (!Context.hasSameType(New->getType(), PrevVDTy))
3924 return diagnoseVarDeclTypeMismatch(*this, New, PrevVD);
3925 }
3926 }
3927
3928 if (OldArray->isIncompleteArrayType() && NewArray->isArrayType()) {
3929 if (Context.hasSameType(OldArray->getElementType(),
3930 NewArray->getElementType()))
3931 MergedT = New->getType();
3932 }
3933 // FIXME: Check visibility. New is hidden but has a complete type. If New
3934 // has no array bound, it should not inherit one from Old, if Old is not
3935 // visible.
3936 else if (OldArray->isArrayType() && NewArray->isIncompleteArrayType()) {
3937 if (Context.hasSameType(OldArray->getElementType(),
3938 NewArray->getElementType()))
3939 MergedT = Old->getType();
3940 }
3941 }
3942 else if (New->getType()->isObjCObjectPointerType() &&
3943 Old->getType()->isObjCObjectPointerType()) {
3944 MergedT = Context.mergeObjCGCQualifiers(New->getType(),
3945 Old->getType());
3946 }
3947 } else {
3948 // C 6.2.7p2:
3949 // All declarations that refer to the same object or function shall have
3950 // compatible type.
3951 MergedT = Context.mergeTypes(New->getType(), Old->getType());
3952 }
3953 if (MergedT.isNull()) {
3954 // It's OK if we couldn't merge types if either type is dependent, for a
3955 // block-scope variable. In other cases (static data members of class
3956 // templates, variable templates, ...), we require the types to be
3957 // equivalent.
3958 // FIXME: The C++ standard doesn't say anything about this.
3959 if ((New->getType()->isDependentType() ||
3960 Old->getType()->isDependentType()) && New->isLocalVarDecl()) {
3961 // If the old type was dependent, we can't merge with it, so the new type
3962 // becomes dependent for now. We'll reproduce the original type when we
3963 // instantiate the TypeSourceInfo for the variable.
3964 if (!New->getType()->isDependentType() && MergeTypeWithOld)
3965 New->setType(Context.DependentTy);
3966 return;
3967 }
3968 return diagnoseVarDeclTypeMismatch(*this, New, Old);
3969 }
3970
3971 // Don't actually update the type on the new declaration if the old
3972 // declaration was an extern declaration in a different scope.
3973 if (MergeTypeWithOld)
3974 New->setType(MergedT);
3975 }
3976
mergeTypeWithPrevious(Sema & S,VarDecl * NewVD,VarDecl * OldVD,LookupResult & Previous)3977 static bool mergeTypeWithPrevious(Sema &S, VarDecl *NewVD, VarDecl *OldVD,
3978 LookupResult &Previous) {
3979 // C11 6.2.7p4:
3980 // For an identifier with internal or external linkage declared
3981 // in a scope in which a prior declaration of that identifier is
3982 // visible, if the prior declaration specifies internal or
3983 // external linkage, the type of the identifier at the later
3984 // declaration becomes the composite type.
3985 //
3986 // If the variable isn't visible, we do not merge with its type.
3987 if (Previous.isShadowed())
3988 return false;
3989
3990 if (S.getLangOpts().CPlusPlus) {
3991 // C++11 [dcl.array]p3:
3992 // If there is a preceding declaration of the entity in the same
3993 // scope in which the bound was specified, an omitted array bound
3994 // is taken to be the same as in that earlier declaration.
3995 return NewVD->isPreviousDeclInSameBlockScope() ||
3996 (!OldVD->getLexicalDeclContext()->isFunctionOrMethod() &&
3997 !NewVD->getLexicalDeclContext()->isFunctionOrMethod());
3998 } else {
3999 // If the old declaration was function-local, don't merge with its
4000 // type unless we're in the same function.
4001 return !OldVD->getLexicalDeclContext()->isFunctionOrMethod() ||
4002 OldVD->getLexicalDeclContext() == NewVD->getLexicalDeclContext();
4003 }
4004 }
4005
4006 /// MergeVarDecl - We just parsed a variable 'New' which has the same name
4007 /// and scope as a previous declaration 'Old'. Figure out how to resolve this
4008 /// situation, merging decls or emitting diagnostics as appropriate.
4009 ///
4010 /// Tentative definition rules (C99 6.9.2p2) are checked by
4011 /// FinalizeDeclaratorGroup. Unfortunately, we can't analyze tentative
4012 /// definitions here, since the initializer hasn't been attached.
4013 ///
MergeVarDecl(VarDecl * New,LookupResult & Previous)4014 void Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {
4015 // If the new decl is already invalid, don't do any other checking.
4016 if (New->isInvalidDecl())
4017 return;
4018
4019 if (!shouldLinkPossiblyHiddenDecl(Previous, New))
4020 return;
4021
4022 VarTemplateDecl *NewTemplate = New->getDescribedVarTemplate();
4023
4024 // Verify the old decl was also a variable or variable template.
4025 VarDecl *Old = nullptr;
4026 VarTemplateDecl *OldTemplate = nullptr;
4027 if (Previous.isSingleResult()) {
4028 if (NewTemplate) {
4029 OldTemplate = dyn_cast<VarTemplateDecl>(Previous.getFoundDecl());
4030 Old = OldTemplate ? OldTemplate->getTemplatedDecl() : nullptr;
4031
4032 if (auto *Shadow =
4033 dyn_cast<UsingShadowDecl>(Previous.getRepresentativeDecl()))
4034 if (checkUsingShadowRedecl<VarTemplateDecl>(*this, Shadow, NewTemplate))
4035 return New->setInvalidDecl();
4036 } else {
4037 Old = dyn_cast<VarDecl>(Previous.getFoundDecl());
4038
4039 if (auto *Shadow =
4040 dyn_cast<UsingShadowDecl>(Previous.getRepresentativeDecl()))
4041 if (checkUsingShadowRedecl<VarDecl>(*this, Shadow, New))
4042 return New->setInvalidDecl();
4043 }
4044 }
4045 if (!Old) {
4046 Diag(New->getLocation(), diag::err_redefinition_different_kind)
4047 << New->getDeclName();
4048 notePreviousDefinition(Previous.getRepresentativeDecl(),
4049 New->getLocation());
4050 return New->setInvalidDecl();
4051 }
4052
4053 // Ensure the template parameters are compatible.
4054 if (NewTemplate &&
4055 !TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
4056 OldTemplate->getTemplateParameters(),
4057 /*Complain=*/true, TPL_TemplateMatch))
4058 return New->setInvalidDecl();
4059
4060 // C++ [class.mem]p1:
4061 // A member shall not be declared twice in the member-specification [...]
4062 //
4063 // Here, we need only consider static data members.
4064 if (Old->isStaticDataMember() && !New->isOutOfLine()) {
4065 Diag(New->getLocation(), diag::err_duplicate_member)
4066 << New->getIdentifier();
4067 Diag(Old->getLocation(), diag::note_previous_declaration);
4068 New->setInvalidDecl();
4069 }
4070
4071 mergeDeclAttributes(New, Old);
4072 // Warn if an already-declared variable is made a weak_import in a subsequent
4073 // declaration
4074 if (New->hasAttr<WeakImportAttr>() &&
4075 Old->getStorageClass() == SC_None &&
4076 !Old->hasAttr<WeakImportAttr>()) {
4077 Diag(New->getLocation(), diag::warn_weak_import) << New->getDeclName();
4078 notePreviousDefinition(Old, New->getLocation());
4079 // Remove weak_import attribute on new declaration.
4080 New->dropAttr<WeakImportAttr>();
4081 }
4082
4083 if (New->hasAttr<InternalLinkageAttr>() &&
4084 !Old->hasAttr<InternalLinkageAttr>()) {
4085 Diag(New->getLocation(), diag::err_internal_linkage_redeclaration)
4086 << New->getDeclName();
4087 notePreviousDefinition(Old, New->getLocation());
4088 New->dropAttr<InternalLinkageAttr>();
4089 }
4090
4091 // Merge the types.
4092 VarDecl *MostRecent = Old->getMostRecentDecl();
4093 if (MostRecent != Old) {
4094 MergeVarDeclTypes(New, MostRecent,
4095 mergeTypeWithPrevious(*this, New, MostRecent, Previous));
4096 if (New->isInvalidDecl())
4097 return;
4098 }
4099
4100 MergeVarDeclTypes(New, Old, mergeTypeWithPrevious(*this, New, Old, Previous));
4101 if (New->isInvalidDecl())
4102 return;
4103
4104 diag::kind PrevDiag;
4105 SourceLocation OldLocation;
4106 std::tie(PrevDiag, OldLocation) =
4107 getNoteDiagForInvalidRedeclaration(Old, New);
4108
4109 // [dcl.stc]p8: Check if we have a non-static decl followed by a static.
4110 if (New->getStorageClass() == SC_Static &&
4111 !New->isStaticDataMember() &&
4112 Old->hasExternalFormalLinkage()) {
4113 if (getLangOpts().MicrosoftExt) {
4114 Diag(New->getLocation(), diag::ext_static_non_static)
4115 << New->getDeclName();
4116 Diag(OldLocation, PrevDiag);
4117 } else {
4118 Diag(New->getLocation(), diag::err_static_non_static)
4119 << New->getDeclName();
4120 Diag(OldLocation, PrevDiag);
4121 return New->setInvalidDecl();
4122 }
4123 }
4124 // C99 6.2.2p4:
4125 // For an identifier declared with the storage-class specifier
4126 // extern in a scope in which a prior declaration of that
4127 // identifier is visible,23) if the prior declaration specifies
4128 // internal or external linkage, the linkage of the identifier at
4129 // the later declaration is the same as the linkage specified at
4130 // the prior declaration. If no prior declaration is visible, or
4131 // if the prior declaration specifies no linkage, then the
4132 // identifier has external linkage.
4133 if (New->hasExternalStorage() && Old->hasLinkage())
4134 /* Okay */;
4135 else if (New->getCanonicalDecl()->getStorageClass() != SC_Static &&
4136 !New->isStaticDataMember() &&
4137 Old->getCanonicalDecl()->getStorageClass() == SC_Static) {
4138 Diag(New->getLocation(), diag::err_non_static_static) << New->getDeclName();
4139 Diag(OldLocation, PrevDiag);
4140 return New->setInvalidDecl();
4141 }
4142
4143 // Check if extern is followed by non-extern and vice-versa.
4144 if (New->hasExternalStorage() &&
4145 !Old->hasLinkage() && Old->isLocalVarDeclOrParm()) {
4146 Diag(New->getLocation(), diag::err_extern_non_extern) << New->getDeclName();
4147 Diag(OldLocation, PrevDiag);
4148 return New->setInvalidDecl();
4149 }
4150 if (Old->hasLinkage() && New->isLocalVarDeclOrParm() &&
4151 !New->hasExternalStorage()) {
4152 Diag(New->getLocation(), diag::err_non_extern_extern) << New->getDeclName();
4153 Diag(OldLocation, PrevDiag);
4154 return New->setInvalidDecl();
4155 }
4156
4157 if (CheckRedeclarationModuleOwnership(New, Old))
4158 return;
4159
4160 // Variables with external linkage are analyzed in FinalizeDeclaratorGroup.
4161
4162 // FIXME: The test for external storage here seems wrong? We still
4163 // need to check for mismatches.
4164 if (!New->hasExternalStorage() && !New->isFileVarDecl() &&
4165 // Don't complain about out-of-line definitions of static members.
4166 !(Old->getLexicalDeclContext()->isRecord() &&
4167 !New->getLexicalDeclContext()->isRecord())) {
4168 Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();
4169 Diag(OldLocation, PrevDiag);
4170 return New->setInvalidDecl();
4171 }
4172
4173 if (New->isInline() && !Old->getMostRecentDecl()->isInline()) {
4174 if (VarDecl *Def = Old->getDefinition()) {
4175 // C++1z [dcl.fcn.spec]p4:
4176 // If the definition of a variable appears in a translation unit before
4177 // its first declaration as inline, the program is ill-formed.
4178 Diag(New->getLocation(), diag::err_inline_decl_follows_def) << New;
4179 Diag(Def->getLocation(), diag::note_previous_definition);
4180 }
4181 }
4182
4183 // If this redeclaration makes the variable inline, we may need to add it to
4184 // UndefinedButUsed.
4185 if (!Old->isInline() && New->isInline() && Old->isUsed(false) &&
4186 !Old->getDefinition() && !New->isThisDeclarationADefinition())
4187 UndefinedButUsed.insert(std::make_pair(Old->getCanonicalDecl(),
4188 SourceLocation()));
4189
4190 if (New->getTLSKind() != Old->getTLSKind()) {
4191 if (!Old->getTLSKind()) {
4192 Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName();
4193 Diag(OldLocation, PrevDiag);
4194 } else if (!New->getTLSKind()) {
4195 Diag(New->getLocation(), diag::err_non_thread_thread) << New->getDeclName();
4196 Diag(OldLocation, PrevDiag);
4197 } else {
4198 // Do not allow redeclaration to change the variable between requiring
4199 // static and dynamic initialization.
4200 // FIXME: GCC allows this, but uses the TLS keyword on the first
4201 // declaration to determine the kind. Do we need to be compatible here?
4202 Diag(New->getLocation(), diag::err_thread_thread_different_kind)
4203 << New->getDeclName() << (New->getTLSKind() == VarDecl::TLS_Dynamic);
4204 Diag(OldLocation, PrevDiag);
4205 }
4206 }
4207
4208 // C++ doesn't have tentative definitions, so go right ahead and check here.
4209 if (getLangOpts().CPlusPlus &&
4210 New->isThisDeclarationADefinition() == VarDecl::Definition) {
4211 if (Old->isStaticDataMember() && Old->getCanonicalDecl()->isInline() &&
4212 Old->getCanonicalDecl()->isConstexpr()) {
4213 // This definition won't be a definition any more once it's been merged.
4214 Diag(New->getLocation(),
4215 diag::warn_deprecated_redundant_constexpr_static_def);
4216 } else if (VarDecl *Def = Old->getDefinition()) {
4217 if (checkVarDeclRedefinition(Def, New))
4218 return;
4219 }
4220 }
4221
4222 if (haveIncompatibleLanguageLinkages(Old, New)) {
4223 Diag(New->getLocation(), diag::err_different_language_linkage) << New;
4224 Diag(OldLocation, PrevDiag);
4225 New->setInvalidDecl();
4226 return;
4227 }
4228
4229 // Merge "used" flag.
4230 if (Old->getMostRecentDecl()->isUsed(false))
4231 New->setIsUsed();
4232
4233 // Keep a chain of previous declarations.
4234 New->setPreviousDecl(Old);
4235 if (NewTemplate)
4236 NewTemplate->setPreviousDecl(OldTemplate);
4237 adjustDeclContextForDeclaratorDecl(New, Old);
4238
4239 // Inherit access appropriately.
4240 New->setAccess(Old->getAccess());
4241 if (NewTemplate)
4242 NewTemplate->setAccess(New->getAccess());
4243
4244 if (Old->isInline())
4245 New->setImplicitlyInline();
4246 }
4247
notePreviousDefinition(const NamedDecl * Old,SourceLocation New)4248 void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {
4249 SourceManager &SrcMgr = getSourceManager();
4250 auto FNewDecLoc = SrcMgr.getDecomposedLoc(New);
4251 auto FOldDecLoc = SrcMgr.getDecomposedLoc(Old->getLocation());
4252 auto *FNew = SrcMgr.getFileEntryForID(FNewDecLoc.first);
4253 auto *FOld = SrcMgr.getFileEntryForID(FOldDecLoc.first);
4254 auto &HSI = PP.getHeaderSearchInfo();
4255 StringRef HdrFilename =
4256 SrcMgr.getFilename(SrcMgr.getSpellingLoc(Old->getLocation()));
4257
4258 auto noteFromModuleOrInclude = [&](Module *Mod,
4259 SourceLocation IncLoc) -> bool {
4260 // Redefinition errors with modules are common with non modular mapped
4261 // headers, example: a non-modular header H in module A that also gets
4262 // included directly in a TU. Pointing twice to the same header/definition
4263 // is confusing, try to get better diagnostics when modules is on.
4264 if (IncLoc.isValid()) {
4265 if (Mod) {
4266 Diag(IncLoc, diag::note_redefinition_modules_same_file)
4267 << HdrFilename.str() << Mod->getFullModuleName();
4268 if (!Mod->DefinitionLoc.isInvalid())
4269 Diag(Mod->DefinitionLoc, diag::note_defined_here)
4270 << Mod->getFullModuleName();
4271 } else {
4272 Diag(IncLoc, diag::note_redefinition_include_same_file)
4273 << HdrFilename.str();
4274 }
4275 return true;
4276 }
4277
4278 return false;
4279 };
4280
4281 // Is it the same file and same offset? Provide more information on why
4282 // this leads to a redefinition error.
4283 if (FNew == FOld && FNewDecLoc.second == FOldDecLoc.second) {
4284 SourceLocation OldIncLoc = SrcMgr.getIncludeLoc(FOldDecLoc.first);
4285 SourceLocation NewIncLoc = SrcMgr.getIncludeLoc(FNewDecLoc.first);
4286 bool EmittedDiag =
4287 noteFromModuleOrInclude(Old->getOwningModule(), OldIncLoc);
4288 EmittedDiag |= noteFromModuleOrInclude(getCurrentModule(), NewIncLoc);
4289
4290 // If the header has no guards, emit a note suggesting one.
4291 if (FOld && !HSI.isFileMultipleIncludeGuarded(FOld))
4292 Diag(Old->getLocation(), diag::note_use_ifdef_guards);
4293
4294 if (EmittedDiag)
4295 return;
4296 }
4297
4298 // Redefinition coming from different files or couldn't do better above.
4299 if (Old->getLocation().isValid())
4300 Diag(Old->getLocation(), diag::note_previous_definition);
4301 }
4302
4303 /// We've just determined that \p Old and \p New both appear to be definitions
4304 /// of the same variable. Either diagnose or fix the problem.
checkVarDeclRedefinition(VarDecl * Old,VarDecl * New)4305 bool Sema::checkVarDeclRedefinition(VarDecl *Old, VarDecl *New) {
4306 if (!hasVisibleDefinition(Old) &&
4307 (New->getFormalLinkage() == InternalLinkage ||
4308 New->isInline() ||
4309 New->getDescribedVarTemplate() ||
4310 New->getNumTemplateParameterLists() ||
4311 New->getDeclContext()->isDependentContext())) {
4312 // The previous definition is hidden, and multiple definitions are
4313 // permitted (in separate TUs). Demote this to a declaration.
4314 New->demoteThisDefinitionToDeclaration();
4315
4316 // Make the canonical definition visible.
4317 if (auto *OldTD = Old->getDescribedVarTemplate())
4318 makeMergedDefinitionVisible(OldTD);
4319 makeMergedDefinitionVisible(Old);
4320 return false;
4321 } else {
4322 Diag(New->getLocation(), diag::err_redefinition) << New;
4323 notePreviousDefinition(Old, New->getLocation());
4324 New->setInvalidDecl();
4325 return true;
4326 }
4327 }
4328
4329 /// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with
4330 /// no declarator (e.g. "struct foo;") is parsed.
4331 Decl *
ParsedFreeStandingDeclSpec(Scope * S,AccessSpecifier AS,DeclSpec & DS,RecordDecl * & AnonRecord)4332 Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS,
4333 RecordDecl *&AnonRecord) {
4334 return ParsedFreeStandingDeclSpec(S, AS, DS, MultiTemplateParamsArg(), false,
4335 AnonRecord);
4336 }
4337
4338 // The MS ABI changed between VS2013 and VS2015 with regard to numbers used to
4339 // disambiguate entities defined in different scopes.
4340 // While the VS2015 ABI fixes potential miscompiles, it is also breaks
4341 // compatibility.
4342 // We will pick our mangling number depending on which version of MSVC is being
4343 // targeted.
getMSManglingNumber(const LangOptions & LO,Scope * S)4344 static unsigned getMSManglingNumber(const LangOptions &LO, Scope *S) {
4345 return LO.isCompatibleWithMSVC(LangOptions::MSVC2015)
4346 ? S->getMSCurManglingNumber()
4347 : S->getMSLastManglingNumber();
4348 }
4349
handleTagNumbering(const TagDecl * Tag,Scope * TagScope)4350 void Sema::handleTagNumbering(const TagDecl *Tag, Scope *TagScope) {
4351 if (!Context.getLangOpts().CPlusPlus)
4352 return;
4353
4354 if (isa<CXXRecordDecl>(Tag->getParent())) {
4355 // If this tag is the direct child of a class, number it if
4356 // it is anonymous.
4357 if (!Tag->getName().empty() || Tag->getTypedefNameForAnonDecl())
4358 return;
4359 MangleNumberingContext &MCtx =
4360 Context.getManglingNumberContext(Tag->getParent());
4361 Context.setManglingNumber(
4362 Tag, MCtx.getManglingNumber(
4363 Tag, getMSManglingNumber(getLangOpts(), TagScope)));
4364 return;
4365 }
4366
4367 // If this tag isn't a direct child of a class, number it if it is local.
4368 MangleNumberingContext *MCtx;
4369 Decl *ManglingContextDecl;
4370 std::tie(MCtx, ManglingContextDecl) =
4371 getCurrentMangleNumberContext(Tag->getDeclContext());
4372 if (MCtx) {
4373 Context.setManglingNumber(
4374 Tag, MCtx->getManglingNumber(
4375 Tag, getMSManglingNumber(getLangOpts(), TagScope)));
4376 }
4377 }
4378
4379 namespace {
4380 struct NonCLikeKind {
4381 enum {
4382 None,
4383 BaseClass,
4384 DefaultMemberInit,
4385 Lambda,
4386 Friend,
4387 OtherMember,
4388 Invalid,
4389 } Kind = None;
4390 SourceRange Range;
4391
operator bool__anone17936840811::NonCLikeKind4392 explicit operator bool() { return Kind != None; }
4393 };
4394 }
4395
4396 /// Determine whether a class is C-like, according to the rules of C++
4397 /// [dcl.typedef] for anonymous classes with typedef names for linkage.
getNonCLikeKindForAnonymousStruct(const CXXRecordDecl * RD)4398 static NonCLikeKind getNonCLikeKindForAnonymousStruct(const CXXRecordDecl *RD) {
4399 if (RD->isInvalidDecl())
4400 return {NonCLikeKind::Invalid, {}};
4401
4402 // C++ [dcl.typedef]p9: [P1766R1]
4403 // An unnamed class with a typedef name for linkage purposes shall not
4404 //
4405 // -- have any base classes
4406 if (RD->getNumBases())
4407 return {NonCLikeKind::BaseClass,
4408 SourceRange(RD->bases_begin()->getBeginLoc(),
4409 RD->bases_end()[-1].getEndLoc())};
4410 bool Invalid = false;
4411 for (Decl *D : RD->decls()) {
4412 // Don't complain about things we already diagnosed.
4413 if (D->isInvalidDecl()) {
4414 Invalid = true;
4415 continue;
4416 }
4417
4418 // -- have any [...] default member initializers
4419 if (auto *FD = dyn_cast<FieldDecl>(D)) {
4420 if (FD->hasInClassInitializer()) {
4421 auto *Init = FD->getInClassInitializer();
4422 return {NonCLikeKind::DefaultMemberInit,
4423 Init ? Init->getSourceRange() : D->getSourceRange()};
4424 }
4425 continue;
4426 }
4427
4428 // FIXME: We don't allow friend declarations. This violates the wording of
4429 // P1766, but not the intent.
4430 if (isa<FriendDecl>(D))
4431 return {NonCLikeKind::Friend, D->getSourceRange()};
4432
4433 // -- declare any members other than non-static data members, member
4434 // enumerations, or member classes,
4435 if (isa<StaticAssertDecl>(D) || isa<IndirectFieldDecl>(D) ||
4436 isa<EnumDecl>(D))
4437 continue;
4438 auto *MemberRD = dyn_cast<CXXRecordDecl>(D);
4439 if (!MemberRD) {
4440 if (D->isImplicit())
4441 continue;
4442 return {NonCLikeKind::OtherMember, D->getSourceRange()};
4443 }
4444
4445 // -- contain a lambda-expression,
4446 if (MemberRD->isLambda())
4447 return {NonCLikeKind::Lambda, MemberRD->getSourceRange()};
4448
4449 // and all member classes shall also satisfy these requirements
4450 // (recursively).
4451 if (MemberRD->isThisDeclarationADefinition()) {
4452 if (auto Kind = getNonCLikeKindForAnonymousStruct(MemberRD))
4453 return Kind;
4454 }
4455 }
4456
4457 return {Invalid ? NonCLikeKind::Invalid : NonCLikeKind::None, {}};
4458 }
4459
setTagNameForLinkagePurposes(TagDecl * TagFromDeclSpec,TypedefNameDecl * NewTD)4460 void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec,
4461 TypedefNameDecl *NewTD) {
4462 if (TagFromDeclSpec->isInvalidDecl())
4463 return;
4464
4465 // Do nothing if the tag already has a name for linkage purposes.
4466 if (TagFromDeclSpec->hasNameForLinkage())
4467 return;
4468
4469 // A well-formed anonymous tag must always be a TUK_Definition.
4470 assert(TagFromDeclSpec->isThisDeclarationADefinition());
4471
4472 // The type must match the tag exactly; no qualifiers allowed.
4473 if (!Context.hasSameType(NewTD->getUnderlyingType(),
4474 Context.getTagDeclType(TagFromDeclSpec))) {
4475 if (getLangOpts().CPlusPlus)
4476 Context.addTypedefNameForUnnamedTagDecl(TagFromDeclSpec, NewTD);
4477 return;
4478 }
4479
4480 // C++ [dcl.typedef]p9: [P1766R1, applied as DR]
4481 // An unnamed class with a typedef name for linkage purposes shall [be
4482 // C-like].
4483 //
4484 // FIXME: Also diagnose if we've already computed the linkage. That ideally
4485 // shouldn't happen, but there are constructs that the language rule doesn't
4486 // disallow for which we can't reasonably avoid computing linkage early.
4487 const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(TagFromDeclSpec);
4488 NonCLikeKind NonCLike = RD ? getNonCLikeKindForAnonymousStruct(RD)
4489 : NonCLikeKind();
4490 bool ChangesLinkage = TagFromDeclSpec->hasLinkageBeenComputed();
4491 if (NonCLike || ChangesLinkage) {
4492 if (NonCLike.Kind == NonCLikeKind::Invalid)
4493 return;
4494
4495 unsigned DiagID = diag::ext_non_c_like_anon_struct_in_typedef;
4496 if (ChangesLinkage) {
4497 // If the linkage changes, we can't accept this as an extension.
4498 if (NonCLike.Kind == NonCLikeKind::None)
4499 DiagID = diag::err_typedef_changes_linkage;
4500 else
4501 DiagID = diag::err_non_c_like_anon_struct_in_typedef;
4502 }
4503
4504 SourceLocation FixitLoc =
4505 getLocForEndOfToken(TagFromDeclSpec->getInnerLocStart());
4506 llvm::SmallString<40> TextToInsert;
4507 TextToInsert += ' ';
4508 TextToInsert += NewTD->getIdentifier()->getName();
4509
4510 Diag(FixitLoc, DiagID)
4511 << isa<TypeAliasDecl>(NewTD)
4512 << FixItHint::CreateInsertion(FixitLoc, TextToInsert);
4513 if (NonCLike.Kind != NonCLikeKind::None) {
4514 Diag(NonCLike.Range.getBegin(), diag::note_non_c_like_anon_struct)
4515 << NonCLike.Kind - 1 << NonCLike.Range;
4516 }
4517 Diag(NewTD->getLocation(), diag::note_typedef_for_linkage_here)
4518 << NewTD << isa<TypeAliasDecl>(NewTD);
4519
4520 if (ChangesLinkage)
4521 return;
4522 }
4523
4524 // Otherwise, set this as the anon-decl typedef for the tag.
4525 TagFromDeclSpec->setTypedefNameForAnonDecl(NewTD);
4526 }
4527
GetDiagnosticTypeSpecifierID(DeclSpec::TST T)4528 static unsigned GetDiagnosticTypeSpecifierID(DeclSpec::TST T) {
4529 switch (T) {
4530 case DeclSpec::TST_class:
4531 return 0;
4532 case DeclSpec::TST_struct:
4533 return 1;
4534 case DeclSpec::TST_interface:
4535 return 2;
4536 case DeclSpec::TST_union:
4537 return 3;
4538 case DeclSpec::TST_enum:
4539 return 4;
4540 default:
4541 llvm_unreachable("unexpected type specifier");
4542 }
4543 }
4544
4545 /// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with
4546 /// no declarator (e.g. "struct foo;") is parsed. It also accepts template
4547 /// parameters to cope with template friend declarations.
4548 Decl *
ParsedFreeStandingDeclSpec(Scope * S,AccessSpecifier AS,DeclSpec & DS,MultiTemplateParamsArg TemplateParams,bool IsExplicitInstantiation,RecordDecl * & AnonRecord)4549 Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS,
4550 MultiTemplateParamsArg TemplateParams,
4551 bool IsExplicitInstantiation,
4552 RecordDecl *&AnonRecord) {
4553 Decl *TagD = nullptr;
4554 TagDecl *Tag = nullptr;
4555 if (DS.getTypeSpecType() == DeclSpec::TST_class ||
4556 DS.getTypeSpecType() == DeclSpec::TST_struct ||
4557 DS.getTypeSpecType() == DeclSpec::TST_interface ||
4558 DS.getTypeSpecType() == DeclSpec::TST_union ||
4559 DS.getTypeSpecType() == DeclSpec::TST_enum) {
4560 TagD = DS.getRepAsDecl();
4561
4562 if (!TagD) // We probably had an error
4563 return nullptr;
4564
4565 // Note that the above type specs guarantee that the
4566 // type rep is a Decl, whereas in many of the others
4567 // it's a Type.
4568 if (isa<TagDecl>(TagD))
4569 Tag = cast<TagDecl>(TagD);
4570 else if (ClassTemplateDecl *CTD = dyn_cast<ClassTemplateDecl>(TagD))
4571 Tag = CTD->getTemplatedDecl();
4572 }
4573
4574 if (Tag) {
4575 handleTagNumbering(Tag, S);
4576 Tag->setFreeStanding();
4577 if (Tag->isInvalidDecl())
4578 return Tag;
4579 }
4580
4581 if (unsigned TypeQuals = DS.getTypeQualifiers()) {
4582 // Enforce C99 6.7.3p2: "Types other than pointer types derived from object
4583 // or incomplete types shall not be restrict-qualified."
4584 if (TypeQuals & DeclSpec::TQ_restrict)
4585 Diag(DS.getRestrictSpecLoc(),
4586 diag::err_typecheck_invalid_restrict_not_pointer_noarg)
4587 << DS.getSourceRange();
4588 }
4589
4590 if (DS.isInlineSpecified())
4591 Diag(DS.getInlineSpecLoc(), diag::err_inline_non_function)
4592 << getLangOpts().CPlusPlus17;
4593
4594 if (DS.hasConstexprSpecifier()) {
4595 // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations
4596 // and definitions of functions and variables.
4597 // C++2a [dcl.constexpr]p1: The consteval specifier shall be applied only to
4598 // the declaration of a function or function template
4599 if (Tag)
4600 Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_tag)
4601 << GetDiagnosticTypeSpecifierID(DS.getTypeSpecType())
4602 << static_cast<int>(DS.getConstexprSpecifier());
4603 else
4604 Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind)
4605 << static_cast<int>(DS.getConstexprSpecifier());
4606 // Don't emit warnings after this error.
4607 return TagD;
4608 }
4609
4610 DiagnoseFunctionSpecifiers(DS);
4611
4612 if (DS.isFriendSpecified()) {
4613 // If we're dealing with a decl but not a TagDecl, assume that
4614 // whatever routines created it handled the friendship aspect.
4615 if (TagD && !Tag)
4616 return nullptr;
4617 return ActOnFriendTypeDecl(S, DS, TemplateParams);
4618 }
4619
4620 const CXXScopeSpec &SS = DS.getTypeSpecScope();
4621 bool IsExplicitSpecialization =
4622 !TemplateParams.empty() && TemplateParams.back()->size() == 0;
4623 if (Tag && SS.isNotEmpty() && !Tag->isCompleteDefinition() &&
4624 !IsExplicitInstantiation && !IsExplicitSpecialization &&
4625 !isa<ClassTemplatePartialSpecializationDecl>(Tag)) {
4626 // Per C++ [dcl.type.elab]p1, a class declaration cannot have a
4627 // nested-name-specifier unless it is an explicit instantiation
4628 // or an explicit specialization.
4629 //
4630 // FIXME: We allow class template partial specializations here too, per the
4631 // obvious intent of DR1819.
4632 //
4633 // Per C++ [dcl.enum]p1, an opaque-enum-declaration can't either.
4634 Diag(SS.getBeginLoc(), diag::err_standalone_class_nested_name_specifier)
4635 << GetDiagnosticTypeSpecifierID(DS.getTypeSpecType()) << SS.getRange();
4636 return nullptr;
4637 }
4638
4639 // Track whether this decl-specifier declares anything.
4640 bool DeclaresAnything = true;
4641
4642 // Handle anonymous struct definitions.
4643 if (RecordDecl *Record = dyn_cast_or_null<RecordDecl>(Tag)) {
4644 if (!Record->getDeclName() && Record->isCompleteDefinition() &&
4645 DS.getStorageClassSpec() != DeclSpec::SCS_typedef) {
4646 if (getLangOpts().CPlusPlus ||
4647 Record->getDeclContext()->isRecord()) {
4648 // If CurContext is a DeclContext that can contain statements,
4649 // RecursiveASTVisitor won't visit the decls that
4650 // BuildAnonymousStructOrUnion() will put into CurContext.
4651 // Also store them here so that they can be part of the
4652 // DeclStmt that gets created in this case.
4653 // FIXME: Also return the IndirectFieldDecls created by
4654 // BuildAnonymousStructOr union, for the same reason?
4655 if (CurContext->isFunctionOrMethod())
4656 AnonRecord = Record;
4657 return BuildAnonymousStructOrUnion(S, DS, AS, Record,
4658 Context.getPrintingPolicy());
4659 }
4660
4661 DeclaresAnything = false;
4662 }
4663 }
4664
4665 // C11 6.7.2.1p2:
4666 // A struct-declaration that does not declare an anonymous structure or
4667 // anonymous union shall contain a struct-declarator-list.
4668 //
4669 // This rule also existed in C89 and C99; the grammar for struct-declaration
4670 // did not permit a struct-declaration without a struct-declarator-list.
4671 if (!getLangOpts().CPlusPlus && CurContext->isRecord() &&
4672 DS.getStorageClassSpec() == DeclSpec::SCS_unspecified) {
4673 // Check for Microsoft C extension: anonymous struct/union member.
4674 // Handle 2 kinds of anonymous struct/union:
4675 // struct STRUCT;
4676 // union UNION;
4677 // and
4678 // STRUCT_TYPE; <- where STRUCT_TYPE is a typedef struct.
4679 // UNION_TYPE; <- where UNION_TYPE is a typedef union.
4680 if ((Tag && Tag->getDeclName()) ||
4681 DS.getTypeSpecType() == DeclSpec::TST_typename) {
4682 RecordDecl *Record = nullptr;
4683 if (Tag)
4684 Record = dyn_cast<RecordDecl>(Tag);
4685 else if (const RecordType *RT =
4686 DS.getRepAsType().get()->getAsStructureType())
4687 Record = RT->getDecl();
4688 else if (const RecordType *UT = DS.getRepAsType().get()->getAsUnionType())
4689 Record = UT->getDecl();
4690
4691 if (Record && getLangOpts().MicrosoftExt) {
4692 Diag(DS.getBeginLoc(), diag::ext_ms_anonymous_record)
4693 << Record->isUnion() << DS.getSourceRange();
4694 return BuildMicrosoftCAnonymousStruct(S, DS, Record);
4695 }
4696
4697 DeclaresAnything = false;
4698 }
4699 }
4700
4701 // Skip all the checks below if we have a type error.
4702 if (DS.getTypeSpecType() == DeclSpec::TST_error ||
4703 (TagD && TagD->isInvalidDecl()))
4704 return TagD;
4705
4706 if (getLangOpts().CPlusPlus &&
4707 DS.getStorageClassSpec() != DeclSpec::SCS_typedef)
4708 if (EnumDecl *Enum = dyn_cast_or_null<EnumDecl>(Tag))
4709 if (Enum->enumerator_begin() == Enum->enumerator_end() &&
4710 !Enum->getIdentifier() && !Enum->isInvalidDecl())
4711 DeclaresAnything = false;
4712
4713 if (!DS.isMissingDeclaratorOk()) {
4714 // Customize diagnostic for a typedef missing a name.
4715 if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef)
4716 Diag(DS.getBeginLoc(), diag::ext_typedef_without_a_name)
4717 << DS.getSourceRange();
4718 else
4719 DeclaresAnything = false;
4720 }
4721
4722 if (DS.isModulePrivateSpecified() &&
4723 Tag && Tag->getDeclContext()->isFunctionOrMethod())
4724 Diag(DS.getModulePrivateSpecLoc(), diag::err_module_private_local_class)
4725 << Tag->getTagKind()
4726 << FixItHint::CreateRemoval(DS.getModulePrivateSpecLoc());
4727
4728 ActOnDocumentableDecl(TagD);
4729
4730 // C 6.7/2:
4731 // A declaration [...] shall declare at least a declarator [...], a tag,
4732 // or the members of an enumeration.
4733 // C++ [dcl.dcl]p3:
4734 // [If there are no declarators], and except for the declaration of an
4735 // unnamed bit-field, the decl-specifier-seq shall introduce one or more
4736 // names into the program, or shall redeclare a name introduced by a
4737 // previous declaration.
4738 if (!DeclaresAnything) {
4739 // In C, we allow this as a (popular) extension / bug. Don't bother
4740 // producing further diagnostics for redundant qualifiers after this.
4741 Diag(DS.getBeginLoc(), (IsExplicitInstantiation || !TemplateParams.empty())
4742 ? diag::err_no_declarators
4743 : diag::ext_no_declarators)
4744 << DS.getSourceRange();
4745 return TagD;
4746 }
4747
4748 // C++ [dcl.stc]p1:
4749 // If a storage-class-specifier appears in a decl-specifier-seq, [...] the
4750 // init-declarator-list of the declaration shall not be empty.
4751 // C++ [dcl.fct.spec]p1:
4752 // If a cv-qualifier appears in a decl-specifier-seq, the
4753 // init-declarator-list of the declaration shall not be empty.
4754 //
4755 // Spurious qualifiers here appear to be valid in C.
4756 unsigned DiagID = diag::warn_standalone_specifier;
4757 if (getLangOpts().CPlusPlus)
4758 DiagID = diag::ext_standalone_specifier;
4759
4760 // Note that a linkage-specification sets a storage class, but
4761 // 'extern "C" struct foo;' is actually valid and not theoretically
4762 // useless.
4763 if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {
4764 if (SCS == DeclSpec::SCS_mutable)
4765 // Since mutable is not a viable storage class specifier in C, there is
4766 // no reason to treat it as an extension. Instead, diagnose as an error.
4767 Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_nonmember);
4768 else if (!DS.isExternInLinkageSpec() && SCS != DeclSpec::SCS_typedef)
4769 Diag(DS.getStorageClassSpecLoc(), DiagID)
4770 << DeclSpec::getSpecifierName(SCS);
4771 }
4772
4773 if (DeclSpec::TSCS TSCS = DS.getThreadStorageClassSpec())
4774 Diag(DS.getThreadStorageClassSpecLoc(), DiagID)
4775 << DeclSpec::getSpecifierName(TSCS);
4776 if (DS.getTypeQualifiers()) {
4777 if (DS.getTypeQualifiers() & DeclSpec::TQ_const)
4778 Diag(DS.getConstSpecLoc(), DiagID) << "const";
4779 if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile)
4780 Diag(DS.getConstSpecLoc(), DiagID) << "volatile";
4781 // Restrict is covered above.
4782 if (DS.getTypeQualifiers() & DeclSpec::TQ_atomic)
4783 Diag(DS.getAtomicSpecLoc(), DiagID) << "_Atomic";
4784 if (DS.getTypeQualifiers() & DeclSpec::TQ_unaligned)
4785 Diag(DS.getUnalignedSpecLoc(), DiagID) << "__unaligned";
4786 }
4787
4788 // Warn about ignored type attributes, for example:
4789 // __attribute__((aligned)) struct A;
4790 // Attributes should be placed after tag to apply to type declaration.
4791 if (!DS.getAttributes().empty()) {
4792 DeclSpec::TST TypeSpecType = DS.getTypeSpecType();
4793 if (TypeSpecType == DeclSpec::TST_class ||
4794 TypeSpecType == DeclSpec::TST_struct ||
4795 TypeSpecType == DeclSpec::TST_interface ||
4796 TypeSpecType == DeclSpec::TST_union ||
4797 TypeSpecType == DeclSpec::TST_enum) {
4798 for (const ParsedAttr &AL : DS.getAttributes())
4799 Diag(AL.getLoc(), diag::warn_declspec_attribute_ignored)
4800 << AL << GetDiagnosticTypeSpecifierID(TypeSpecType);
4801 }
4802 }
4803
4804 return TagD;
4805 }
4806
4807 /// We are trying to inject an anonymous member into the given scope;
4808 /// check if there's an existing declaration that can't be overloaded.
4809 ///
4810 /// \return true if this is a forbidden redeclaration
CheckAnonMemberRedeclaration(Sema & SemaRef,Scope * S,DeclContext * Owner,DeclarationName Name,SourceLocation NameLoc,bool IsUnion)4811 static bool CheckAnonMemberRedeclaration(Sema &SemaRef,
4812 Scope *S,
4813 DeclContext *Owner,
4814 DeclarationName Name,
4815 SourceLocation NameLoc,
4816 bool IsUnion) {
4817 LookupResult R(SemaRef, Name, NameLoc, Sema::LookupMemberName,
4818 Sema::ForVisibleRedeclaration);
4819 if (!SemaRef.LookupName(R, S)) return false;
4820
4821 // Pick a representative declaration.
4822 NamedDecl *PrevDecl = R.getRepresentativeDecl()->getUnderlyingDecl();
4823 assert(PrevDecl && "Expected a non-null Decl");
4824
4825 if (!SemaRef.isDeclInScope(PrevDecl, Owner, S))
4826 return false;
4827
4828 SemaRef.Diag(NameLoc, diag::err_anonymous_record_member_redecl)
4829 << IsUnion << Name;
4830 SemaRef.Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
4831
4832 return true;
4833 }
4834
4835 /// InjectAnonymousStructOrUnionMembers - Inject the members of the
4836 /// anonymous struct or union AnonRecord into the owning context Owner
4837 /// and scope S. This routine will be invoked just after we realize
4838 /// that an unnamed union or struct is actually an anonymous union or
4839 /// struct, e.g.,
4840 ///
4841 /// @code
4842 /// union {
4843 /// int i;
4844 /// float f;
4845 /// }; // InjectAnonymousStructOrUnionMembers called here to inject i and
4846 /// // f into the surrounding scope.x
4847 /// @endcode
4848 ///
4849 /// This routine is recursive, injecting the names of nested anonymous
4850 /// structs/unions into the owning context and scope as well.
4851 static bool
InjectAnonymousStructOrUnionMembers(Sema & SemaRef,Scope * S,DeclContext * Owner,RecordDecl * AnonRecord,AccessSpecifier AS,SmallVectorImpl<NamedDecl * > & Chaining)4852 InjectAnonymousStructOrUnionMembers(Sema &SemaRef, Scope *S, DeclContext *Owner,
4853 RecordDecl *AnonRecord, AccessSpecifier AS,
4854 SmallVectorImpl<NamedDecl *> &Chaining) {
4855 bool Invalid = false;
4856
4857 // Look every FieldDecl and IndirectFieldDecl with a name.
4858 for (auto *D : AnonRecord->decls()) {
4859 if ((isa<FieldDecl>(D) || isa<IndirectFieldDecl>(D)) &&
4860 cast<NamedDecl>(D)->getDeclName()) {
4861 ValueDecl *VD = cast<ValueDecl>(D);
4862 if (CheckAnonMemberRedeclaration(SemaRef, S, Owner, VD->getDeclName(),
4863 VD->getLocation(),
4864 AnonRecord->isUnion())) {
4865 // C++ [class.union]p2:
4866 // The names of the members of an anonymous union shall be
4867 // distinct from the names of any other entity in the
4868 // scope in which the anonymous union is declared.
4869 Invalid = true;
4870 } else {
4871 // C++ [class.union]p2:
4872 // For the purpose of name lookup, after the anonymous union
4873 // definition, the members of the anonymous union are
4874 // considered to have been defined in the scope in which the
4875 // anonymous union is declared.
4876 unsigned OldChainingSize = Chaining.size();
4877 if (IndirectFieldDecl *IF = dyn_cast<IndirectFieldDecl>(VD))
4878 Chaining.append(IF->chain_begin(), IF->chain_end());
4879 else
4880 Chaining.push_back(VD);
4881
4882 assert(Chaining.size() >= 2);
4883 NamedDecl **NamedChain =
4884 new (SemaRef.Context)NamedDecl*[Chaining.size()];
4885 for (unsigned i = 0; i < Chaining.size(); i++)
4886 NamedChain[i] = Chaining[i];
4887
4888 IndirectFieldDecl *IndirectField = IndirectFieldDecl::Create(
4889 SemaRef.Context, Owner, VD->getLocation(), VD->getIdentifier(),
4890 VD->getType(), {NamedChain, Chaining.size()});
4891
4892 for (const auto *Attr : VD->attrs())
4893 IndirectField->addAttr(Attr->clone(SemaRef.Context));
4894
4895 IndirectField->setAccess(AS);
4896 IndirectField->setImplicit();
4897 SemaRef.PushOnScopeChains(IndirectField, S);
4898
4899 // That includes picking up the appropriate access specifier.
4900 if (AS != AS_none) IndirectField->setAccess(AS);
4901
4902 Chaining.resize(OldChainingSize);
4903 }
4904 }
4905 }
4906
4907 return Invalid;
4908 }
4909
4910 /// StorageClassSpecToVarDeclStorageClass - Maps a DeclSpec::SCS to
4911 /// a VarDecl::StorageClass. Any error reporting is up to the caller:
4912 /// illegal input values are mapped to SC_None.
4913 static StorageClass
StorageClassSpecToVarDeclStorageClass(const DeclSpec & DS)4914 StorageClassSpecToVarDeclStorageClass(const DeclSpec &DS) {
4915 DeclSpec::SCS StorageClassSpec = DS.getStorageClassSpec();
4916 assert(StorageClassSpec != DeclSpec::SCS_typedef &&
4917 "Parser allowed 'typedef' as storage class VarDecl.");
4918 switch (StorageClassSpec) {
4919 case DeclSpec::SCS_unspecified: return SC_None;
4920 case DeclSpec::SCS_extern:
4921 if (DS.isExternInLinkageSpec())
4922 return SC_None;
4923 return SC_Extern;
4924 case DeclSpec::SCS_static: return SC_Static;
4925 case DeclSpec::SCS_auto: return SC_Auto;
4926 case DeclSpec::SCS_register: return SC_Register;
4927 case DeclSpec::SCS_private_extern: return SC_PrivateExtern;
4928 // Illegal SCSs map to None: error reporting is up to the caller.
4929 case DeclSpec::SCS_mutable: // Fall through.
4930 case DeclSpec::SCS_typedef: return SC_None;
4931 }
4932 llvm_unreachable("unknown storage class specifier");
4933 }
4934
findDefaultInitializer(const CXXRecordDecl * Record)4935 static SourceLocation findDefaultInitializer(const CXXRecordDecl *Record) {
4936 assert(Record->hasInClassInitializer());
4937
4938 for (const auto *I : Record->decls()) {
4939 const auto *FD = dyn_cast<FieldDecl>(I);
4940 if (const auto *IFD = dyn_cast<IndirectFieldDecl>(I))
4941 FD = IFD->getAnonField();
4942 if (FD && FD->hasInClassInitializer())
4943 return FD->getLocation();
4944 }
4945
4946 llvm_unreachable("couldn't find in-class initializer");
4947 }
4948
checkDuplicateDefaultInit(Sema & S,CXXRecordDecl * Parent,SourceLocation DefaultInitLoc)4949 static void checkDuplicateDefaultInit(Sema &S, CXXRecordDecl *Parent,
4950 SourceLocation DefaultInitLoc) {
4951 if (!Parent->isUnion() || !Parent->hasInClassInitializer())
4952 return;
4953
4954 S.Diag(DefaultInitLoc, diag::err_multiple_mem_union_initialization);
4955 S.Diag(findDefaultInitializer(Parent), diag::note_previous_initializer) << 0;
4956 }
4957
checkDuplicateDefaultInit(Sema & S,CXXRecordDecl * Parent,CXXRecordDecl * AnonUnion)4958 static void checkDuplicateDefaultInit(Sema &S, CXXRecordDecl *Parent,
4959 CXXRecordDecl *AnonUnion) {
4960 if (!Parent->isUnion() || !Parent->hasInClassInitializer())
4961 return;
4962
4963 checkDuplicateDefaultInit(S, Parent, findDefaultInitializer(AnonUnion));
4964 }
4965
4966 /// BuildAnonymousStructOrUnion - Handle the declaration of an
4967 /// anonymous structure or union. Anonymous unions are a C++ feature
4968 /// (C++ [class.union]) and a C11 feature; anonymous structures
4969 /// are a C11 feature and GNU C++ extension.
BuildAnonymousStructOrUnion(Scope * S,DeclSpec & DS,AccessSpecifier AS,RecordDecl * Record,const PrintingPolicy & Policy)4970 Decl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS,
4971 AccessSpecifier AS,
4972 RecordDecl *Record,
4973 const PrintingPolicy &Policy) {
4974 DeclContext *Owner = Record->getDeclContext();
4975
4976 // Diagnose whether this anonymous struct/union is an extension.
4977 if (Record->isUnion() && !getLangOpts().CPlusPlus && !getLangOpts().C11)
4978 Diag(Record->getLocation(), diag::ext_anonymous_union);
4979 else if (!Record->isUnion() && getLangOpts().CPlusPlus)
4980 Diag(Record->getLocation(), diag::ext_gnu_anonymous_struct);
4981 else if (!Record->isUnion() && !getLangOpts().C11)
4982 Diag(Record->getLocation(), diag::ext_c11_anonymous_struct);
4983
4984 // C and C++ require different kinds of checks for anonymous
4985 // structs/unions.
4986 bool Invalid = false;
4987 if (getLangOpts().CPlusPlus) {
4988 const char *PrevSpec = nullptr;
4989 if (Record->isUnion()) {
4990 // C++ [class.union]p6:
4991 // C++17 [class.union.anon]p2:
4992 // Anonymous unions declared in a named namespace or in the
4993 // global namespace shall be declared static.
4994 unsigned DiagID;
4995 DeclContext *OwnerScope = Owner->getRedeclContext();
4996 if (DS.getStorageClassSpec() != DeclSpec::SCS_static &&
4997 (OwnerScope->isTranslationUnit() ||
4998 (OwnerScope->isNamespace() &&
4999 !cast<NamespaceDecl>(OwnerScope)->isAnonymousNamespace()))) {
5000 Diag(Record->getLocation(), diag::err_anonymous_union_not_static)
5001 << FixItHint::CreateInsertion(Record->getLocation(), "static ");
5002
5003 // Recover by adding 'static'.
5004 DS.SetStorageClassSpec(*this, DeclSpec::SCS_static, SourceLocation(),
5005 PrevSpec, DiagID, Policy);
5006 }
5007 // C++ [class.union]p6:
5008 // A storage class is not allowed in a declaration of an
5009 // anonymous union in a class scope.
5010 else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified &&
5011 isa<RecordDecl>(Owner)) {
5012 Diag(DS.getStorageClassSpecLoc(),
5013 diag::err_anonymous_union_with_storage_spec)
5014 << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());
5015
5016 // Recover by removing the storage specifier.
5017 DS.SetStorageClassSpec(*this, DeclSpec::SCS_unspecified,
5018 SourceLocation(),
5019 PrevSpec, DiagID, Context.getPrintingPolicy());
5020 }
5021 }
5022
5023 // Ignore const/volatile/restrict qualifiers.
5024 if (DS.getTypeQualifiers()) {
5025 if (DS.getTypeQualifiers() & DeclSpec::TQ_const)
5026 Diag(DS.getConstSpecLoc(), diag::ext_anonymous_struct_union_qualified)
5027 << Record->isUnion() << "const"
5028 << FixItHint::CreateRemoval(DS.getConstSpecLoc());
5029 if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile)
5030 Diag(DS.getVolatileSpecLoc(),
5031 diag::ext_anonymous_struct_union_qualified)
5032 << Record->isUnion() << "volatile"
5033 << FixItHint::CreateRemoval(DS.getVolatileSpecLoc());
5034 if (DS.getTypeQualifiers() & DeclSpec::TQ_restrict)
5035 Diag(DS.getRestrictSpecLoc(),
5036 diag::ext_anonymous_struct_union_qualified)
5037 << Record->isUnion() << "restrict"
5038 << FixItHint::CreateRemoval(DS.getRestrictSpecLoc());
5039 if (DS.getTypeQualifiers() & DeclSpec::TQ_atomic)
5040 Diag(DS.getAtomicSpecLoc(),
5041 diag::ext_anonymous_struct_union_qualified)
5042 << Record->isUnion() << "_Atomic"
5043 << FixItHint::CreateRemoval(DS.getAtomicSpecLoc());
5044 if (DS.getTypeQualifiers() & DeclSpec::TQ_unaligned)
5045 Diag(DS.getUnalignedSpecLoc(),
5046 diag::ext_anonymous_struct_union_qualified)
5047 << Record->isUnion() << "__unaligned"
5048 << FixItHint::CreateRemoval(DS.getUnalignedSpecLoc());
5049
5050 DS.ClearTypeQualifiers();
5051 }
5052
5053 // C++ [class.union]p2:
5054 // The member-specification of an anonymous union shall only
5055 // define non-static data members. [Note: nested types and
5056 // functions cannot be declared within an anonymous union. ]
5057 for (auto *Mem : Record->decls()) {
5058 // Ignore invalid declarations; we already diagnosed them.
5059 if (Mem->isInvalidDecl())
5060 continue;
5061
5062 if (auto *FD = dyn_cast<FieldDecl>(Mem)) {
5063 // C++ [class.union]p3:
5064 // An anonymous union shall not have private or protected
5065 // members (clause 11).
5066 assert(FD->getAccess() != AS_none);
5067 if (FD->getAccess() != AS_public) {
5068 Diag(FD->getLocation(), diag::err_anonymous_record_nonpublic_member)
5069 << Record->isUnion() << (FD->getAccess() == AS_protected);
5070 Invalid = true;
5071 }
5072
5073 // C++ [class.union]p1
5074 // An object of a class with a non-trivial constructor, a non-trivial
5075 // copy constructor, a non-trivial destructor, or a non-trivial copy
5076 // assignment operator cannot be a member of a union, nor can an
5077 // array of such objects.
5078 if (CheckNontrivialField(FD))
5079 Invalid = true;
5080 } else if (Mem->isImplicit()) {
5081 // Any implicit members are fine.
5082 } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {
5083 // This is a type that showed up in an
5084 // elaborated-type-specifier inside the anonymous struct or
5085 // union, but which actually declares a type outside of the
5086 // anonymous struct or union. It's okay.
5087 } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {
5088 if (!MemRecord->isAnonymousStructOrUnion() &&
5089 MemRecord->getDeclName()) {
5090 // Visual C++ allows type definition in anonymous struct or union.
5091 if (getLangOpts().MicrosoftExt)
5092 Diag(MemRecord->getLocation(), diag::ext_anonymous_record_with_type)
5093 << Record->isUnion();
5094 else {
5095 // This is a nested type declaration.
5096 Diag(MemRecord->getLocation(), diag::err_anonymous_record_with_type)
5097 << Record->isUnion();
5098 Invalid = true;
5099 }
5100 } else {
5101 // This is an anonymous type definition within another anonymous type.
5102 // This is a popular extension, provided by Plan9, MSVC and GCC, but
5103 // not part of standard C++.
5104 Diag(MemRecord->getLocation(),
5105 diag::ext_anonymous_record_with_anonymous_type)
5106 << Record->isUnion();
5107 }
5108 } else if (isa<AccessSpecDecl>(Mem)) {
5109 // Any access specifier is fine.
5110 } else if (isa<StaticAssertDecl>(Mem)) {
5111 // In C++1z, static_assert declarations are also fine.
5112 } else {
5113 // We have something that isn't a non-static data
5114 // member. Complain about it.
5115 unsigned DK = diag::err_anonymous_record_bad_member;
5116 if (isa<TypeDecl>(Mem))
5117 DK = diag::err_anonymous_record_with_type;
5118 else if (isa<FunctionDecl>(Mem))
5119 DK = diag::err_anonymous_record_with_function;
5120 else if (isa<VarDecl>(Mem))
5121 DK = diag::err_anonymous_record_with_static;
5122
5123 // Visual C++ allows type definition in anonymous struct or union.
5124 if (getLangOpts().MicrosoftExt &&
5125 DK == diag::err_anonymous_record_with_type)
5126 Diag(Mem->getLocation(), diag::ext_anonymous_record_with_type)
5127 << Record->isUnion();
5128 else {
5129 Diag(Mem->getLocation(), DK) << Record->isUnion();
5130 Invalid = true;
5131 }
5132 }
5133 }
5134
5135 // C++11 [class.union]p8 (DR1460):
5136 // At most one variant member of a union may have a
5137 // brace-or-equal-initializer.
5138 if (cast<CXXRecordDecl>(Record)->hasInClassInitializer() &&
5139 Owner->isRecord())
5140 checkDuplicateDefaultInit(*this, cast<CXXRecordDecl>(Owner),
5141 cast<CXXRecordDecl>(Record));
5142 }
5143
5144 if (!Record->isUnion() && !Owner->isRecord()) {
5145 Diag(Record->getLocation(), diag::err_anonymous_struct_not_member)
5146 << getLangOpts().CPlusPlus;
5147 Invalid = true;
5148 }
5149
5150 // C++ [dcl.dcl]p3:
5151 // [If there are no declarators], and except for the declaration of an
5152 // unnamed bit-field, the decl-specifier-seq shall introduce one or more
5153 // names into the program
5154 // C++ [class.mem]p2:
5155 // each such member-declaration shall either declare at least one member
5156 // name of the class or declare at least one unnamed bit-field
5157 //
5158 // For C this is an error even for a named struct, and is diagnosed elsewhere.
5159 if (getLangOpts().CPlusPlus && Record->field_empty())
5160 Diag(DS.getBeginLoc(), diag::ext_no_declarators) << DS.getSourceRange();
5161
5162 // Mock up a declarator.
5163 Declarator Dc(DS, DeclaratorContext::Member);
5164 TypeSourceInfo *TInfo = GetTypeForDeclarator(Dc, S);
5165 assert(TInfo && "couldn't build declarator info for anonymous struct/union");
5166
5167 // Create a declaration for this anonymous struct/union.
5168 NamedDecl *Anon = nullptr;
5169 if (RecordDecl *OwningClass = dyn_cast<RecordDecl>(Owner)) {
5170 Anon = FieldDecl::Create(
5171 Context, OwningClass, DS.getBeginLoc(), Record->getLocation(),
5172 /*IdentifierInfo=*/nullptr, Context.getTypeDeclType(Record), TInfo,
5173 /*BitWidth=*/nullptr, /*Mutable=*/false,
5174 /*InitStyle=*/ICIS_NoInit);
5175 Anon->setAccess(AS);
5176 ProcessDeclAttributes(S, Anon, Dc);
5177
5178 if (getLangOpts().CPlusPlus)
5179 FieldCollector->Add(cast<FieldDecl>(Anon));
5180 } else {
5181 DeclSpec::SCS SCSpec = DS.getStorageClassSpec();
5182 StorageClass SC = StorageClassSpecToVarDeclStorageClass(DS);
5183 if (SCSpec == DeclSpec::SCS_mutable) {
5184 // mutable can only appear on non-static class members, so it's always
5185 // an error here
5186 Diag(Record->getLocation(), diag::err_mutable_nonmember);
5187 Invalid = true;
5188 SC = SC_None;
5189 }
5190
5191 assert(DS.getAttributes().empty() && "No attribute expected");
5192 Anon = VarDecl::Create(Context, Owner, DS.getBeginLoc(),
5193 Record->getLocation(), /*IdentifierInfo=*/nullptr,
5194 Context.getTypeDeclType(Record), TInfo, SC);
5195
5196 // Default-initialize the implicit variable. This initialization will be
5197 // trivial in almost all cases, except if a union member has an in-class
5198 // initializer:
5199 // union { int n = 0; };
5200 ActOnUninitializedDecl(Anon);
5201 }
5202 Anon->setImplicit();
5203
5204 // Mark this as an anonymous struct/union type.
5205 Record->setAnonymousStructOrUnion(true);
5206
5207 // Add the anonymous struct/union object to the current
5208 // context. We'll be referencing this object when we refer to one of
5209 // its members.
5210 Owner->addDecl(Anon);
5211
5212 // Inject the members of the anonymous struct/union into the owning
5213 // context and into the identifier resolver chain for name lookup
5214 // purposes.
5215 SmallVector<NamedDecl*, 2> Chain;
5216 Chain.push_back(Anon);
5217
5218 if (InjectAnonymousStructOrUnionMembers(*this, S, Owner, Record, AS, Chain))
5219 Invalid = true;
5220
5221 if (VarDecl *NewVD = dyn_cast<VarDecl>(Anon)) {
5222 if (getLangOpts().CPlusPlus && NewVD->isStaticLocal()) {
5223 MangleNumberingContext *MCtx;
5224 Decl *ManglingContextDecl;
5225 std::tie(MCtx, ManglingContextDecl) =
5226 getCurrentMangleNumberContext(NewVD->getDeclContext());
5227 if (MCtx) {
5228 Context.setManglingNumber(
5229 NewVD, MCtx->getManglingNumber(
5230 NewVD, getMSManglingNumber(getLangOpts(), S)));
5231 Context.setStaticLocalNumber(NewVD, MCtx->getStaticLocalNumber(NewVD));
5232 }
5233 }
5234 }
5235
5236 if (Invalid)
5237 Anon->setInvalidDecl();
5238
5239 return Anon;
5240 }
5241
5242 /// BuildMicrosoftCAnonymousStruct - Handle the declaration of an
5243 /// Microsoft C anonymous structure.
5244 /// Ref: http://msdn.microsoft.com/en-us/library/z2cx9y4f.aspx
5245 /// Example:
5246 ///
5247 /// struct A { int a; };
5248 /// struct B { struct A; int b; };
5249 ///
5250 /// void foo() {
5251 /// B var;
5252 /// var.a = 3;
5253 /// }
5254 ///
BuildMicrosoftCAnonymousStruct(Scope * S,DeclSpec & DS,RecordDecl * Record)5255 Decl *Sema::BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS,
5256 RecordDecl *Record) {
5257 assert(Record && "expected a record!");
5258
5259 // Mock up a declarator.
5260 Declarator Dc(DS, DeclaratorContext::TypeName);
5261 TypeSourceInfo *TInfo = GetTypeForDeclarator(Dc, S);
5262 assert(TInfo && "couldn't build declarator info for anonymous struct");
5263
5264 auto *ParentDecl = cast<RecordDecl>(CurContext);
5265 QualType RecTy = Context.getTypeDeclType(Record);
5266
5267 // Create a declaration for this anonymous struct.
5268 NamedDecl *Anon =
5269 FieldDecl::Create(Context, ParentDecl, DS.getBeginLoc(), DS.getBeginLoc(),
5270 /*IdentifierInfo=*/nullptr, RecTy, TInfo,
5271 /*BitWidth=*/nullptr, /*Mutable=*/false,
5272 /*InitStyle=*/ICIS_NoInit);
5273 Anon->setImplicit();
5274
5275 // Add the anonymous struct object to the current context.
5276 CurContext->addDecl(Anon);
5277
5278 // Inject the members of the anonymous struct into the current
5279 // context and into the identifier resolver chain for name lookup
5280 // purposes.
5281 SmallVector<NamedDecl*, 2> Chain;
5282 Chain.push_back(Anon);
5283
5284 RecordDecl *RecordDef = Record->getDefinition();
5285 if (RequireCompleteSizedType(Anon->getLocation(), RecTy,
5286 diag::err_field_incomplete_or_sizeless) ||
5287 InjectAnonymousStructOrUnionMembers(*this, S, CurContext, RecordDef,
5288 AS_none, Chain)) {
5289 Anon->setInvalidDecl();
5290 ParentDecl->setInvalidDecl();
5291 }
5292
5293 return Anon;
5294 }
5295
5296 /// GetNameForDeclarator - Determine the full declaration name for the
5297 /// given Declarator.
GetNameForDeclarator(Declarator & D)5298 DeclarationNameInfo Sema::GetNameForDeclarator(Declarator &D) {
5299 return GetNameFromUnqualifiedId(D.getName());
5300 }
5301
5302 /// Retrieves the declaration name from a parsed unqualified-id.
5303 DeclarationNameInfo
GetNameFromUnqualifiedId(const UnqualifiedId & Name)5304 Sema::GetNameFromUnqualifiedId(const UnqualifiedId &Name) {
5305 DeclarationNameInfo NameInfo;
5306 NameInfo.setLoc(Name.StartLocation);
5307
5308 switch (Name.getKind()) {
5309
5310 case UnqualifiedIdKind::IK_ImplicitSelfParam:
5311 case UnqualifiedIdKind::IK_Identifier:
5312 NameInfo.setName(Name.Identifier);
5313 return NameInfo;
5314
5315 case UnqualifiedIdKind::IK_DeductionGuideName: {
5316 // C++ [temp.deduct.guide]p3:
5317 // The simple-template-id shall name a class template specialization.
5318 // The template-name shall be the same identifier as the template-name
5319 // of the simple-template-id.
5320 // These together intend to imply that the template-name shall name a
5321 // class template.
5322 // FIXME: template<typename T> struct X {};
5323 // template<typename T> using Y = X<T>;
5324 // Y(int) -> Y<int>;
5325 // satisfies these rules but does not name a class template.
5326 TemplateName TN = Name.TemplateName.get().get();
5327 auto *Template = TN.getAsTemplateDecl();
5328 if (!Template || !isa<ClassTemplateDecl>(Template)) {
5329 Diag(Name.StartLocation,
5330 diag::err_deduction_guide_name_not_class_template)
5331 << (int)getTemplateNameKindForDiagnostics(TN) << TN;
5332 if (Template)
5333 Diag(Template->getLocation(), diag::note_template_decl_here);
5334 return DeclarationNameInfo();
5335 }
5336
5337 NameInfo.setName(
5338 Context.DeclarationNames.getCXXDeductionGuideName(Template));
5339 return NameInfo;
5340 }
5341
5342 case UnqualifiedIdKind::IK_OperatorFunctionId:
5343 NameInfo.setName(Context.DeclarationNames.getCXXOperatorName(
5344 Name.OperatorFunctionId.Operator));
5345 NameInfo.getInfo().CXXOperatorName.BeginOpNameLoc
5346 = Name.OperatorFunctionId.SymbolLocations[0];
5347 NameInfo.getInfo().CXXOperatorName.EndOpNameLoc
5348 = Name.EndLocation.getRawEncoding();
5349 return NameInfo;
5350
5351 case UnqualifiedIdKind::IK_LiteralOperatorId:
5352 NameInfo.setName(Context.DeclarationNames.getCXXLiteralOperatorName(
5353 Name.Identifier));
5354 NameInfo.setCXXLiteralOperatorNameLoc(Name.EndLocation);
5355 return NameInfo;
5356
5357 case UnqualifiedIdKind::IK_ConversionFunctionId: {
5358 TypeSourceInfo *TInfo;
5359 QualType Ty = GetTypeFromParser(Name.ConversionFunctionId, &TInfo);
5360 if (Ty.isNull())
5361 return DeclarationNameInfo();
5362 NameInfo.setName(Context.DeclarationNames.getCXXConversionFunctionName(
5363 Context.getCanonicalType(Ty)));
5364 NameInfo.setNamedTypeInfo(TInfo);
5365 return NameInfo;
5366 }
5367
5368 case UnqualifiedIdKind::IK_ConstructorName: {
5369 TypeSourceInfo *TInfo;
5370 QualType Ty = GetTypeFromParser(Name.ConstructorName, &TInfo);
5371 if (Ty.isNull())
5372 return DeclarationNameInfo();
5373 NameInfo.setName(Context.DeclarationNames.getCXXConstructorName(
5374 Context.getCanonicalType(Ty)));
5375 NameInfo.setNamedTypeInfo(TInfo);
5376 return NameInfo;
5377 }
5378
5379 case UnqualifiedIdKind::IK_ConstructorTemplateId: {
5380 // In well-formed code, we can only have a constructor
5381 // template-id that refers to the current context, so go there
5382 // to find the actual type being constructed.
5383 CXXRecordDecl *CurClass = dyn_cast<CXXRecordDecl>(CurContext);
5384 if (!CurClass || CurClass->getIdentifier() != Name.TemplateId->Name)
5385 return DeclarationNameInfo();
5386
5387 // Determine the type of the class being constructed.
5388 QualType CurClassType = Context.getTypeDeclType(CurClass);
5389
5390 // FIXME: Check two things: that the template-id names the same type as
5391 // CurClassType, and that the template-id does not occur when the name
5392 // was qualified.
5393
5394 NameInfo.setName(Context.DeclarationNames.getCXXConstructorName(
5395 Context.getCanonicalType(CurClassType)));
5396 // FIXME: should we retrieve TypeSourceInfo?
5397 NameInfo.setNamedTypeInfo(nullptr);
5398 return NameInfo;
5399 }
5400
5401 case UnqualifiedIdKind::IK_DestructorName: {
5402 TypeSourceInfo *TInfo;
5403 QualType Ty = GetTypeFromParser(Name.DestructorName, &TInfo);
5404 if (Ty.isNull())
5405 return DeclarationNameInfo();
5406 NameInfo.setName(Context.DeclarationNames.getCXXDestructorName(
5407 Context.getCanonicalType(Ty)));
5408 NameInfo.setNamedTypeInfo(TInfo);
5409 return NameInfo;
5410 }
5411
5412 case UnqualifiedIdKind::IK_TemplateId: {
5413 TemplateName TName = Name.TemplateId->Template.get();
5414 SourceLocation TNameLoc = Name.TemplateId->TemplateNameLoc;
5415 return Context.getNameForTemplate(TName, TNameLoc);
5416 }
5417
5418 } // switch (Name.getKind())
5419
5420 llvm_unreachable("Unknown name kind");
5421 }
5422
getCoreType(QualType Ty)5423 static QualType getCoreType(QualType Ty) {
5424 do {
5425 if (Ty->isPointerType() || Ty->isReferenceType())
5426 Ty = Ty->getPointeeType();
5427 else if (Ty->isArrayType())
5428 Ty = Ty->castAsArrayTypeUnsafe()->getElementType();
5429 else
5430 return Ty.withoutLocalFastQualifiers();
5431 } while (true);
5432 }
5433
5434 /// hasSimilarParameters - Determine whether the C++ functions Declaration
5435 /// and Definition have "nearly" matching parameters. This heuristic is
5436 /// used to improve diagnostics in the case where an out-of-line function
5437 /// definition doesn't match any declaration within the class or namespace.
5438 /// Also sets Params to the list of indices to the parameters that differ
5439 /// between the declaration and the definition. If hasSimilarParameters
5440 /// returns true and Params is empty, then all of the parameters match.
hasSimilarParameters(ASTContext & Context,FunctionDecl * Declaration,FunctionDecl * Definition,SmallVectorImpl<unsigned> & Params)5441 static bool hasSimilarParameters(ASTContext &Context,
5442 FunctionDecl *Declaration,
5443 FunctionDecl *Definition,
5444 SmallVectorImpl<unsigned> &Params) {
5445 Params.clear();
5446 if (Declaration->param_size() != Definition->param_size())
5447 return false;
5448 for (unsigned Idx = 0; Idx < Declaration->param_size(); ++Idx) {
5449 QualType DeclParamTy = Declaration->getParamDecl(Idx)->getType();
5450 QualType DefParamTy = Definition->getParamDecl(Idx)->getType();
5451
5452 // The parameter types are identical
5453 if (Context.hasSameUnqualifiedType(DefParamTy, DeclParamTy))
5454 continue;
5455
5456 QualType DeclParamBaseTy = getCoreType(DeclParamTy);
5457 QualType DefParamBaseTy = getCoreType(DefParamTy);
5458 const IdentifierInfo *DeclTyName = DeclParamBaseTy.getBaseTypeIdentifier();
5459 const IdentifierInfo *DefTyName = DefParamBaseTy.getBaseTypeIdentifier();
5460
5461 if (Context.hasSameUnqualifiedType(DeclParamBaseTy, DefParamBaseTy) ||
5462 (DeclTyName && DeclTyName == DefTyName))
5463 Params.push_back(Idx);
5464 else // The two parameters aren't even close
5465 return false;
5466 }
5467
5468 return true;
5469 }
5470
5471 /// NeedsRebuildingInCurrentInstantiation - Checks whether the given
5472 /// declarator needs to be rebuilt in the current instantiation.
5473 /// Any bits of declarator which appear before the name are valid for
5474 /// consideration here. That's specifically the type in the decl spec
5475 /// and the base type in any member-pointer chunks.
RebuildDeclaratorInCurrentInstantiation(Sema & S,Declarator & D,DeclarationName Name)5476 static bool RebuildDeclaratorInCurrentInstantiation(Sema &S, Declarator &D,
5477 DeclarationName Name) {
5478 // The types we specifically need to rebuild are:
5479 // - typenames, typeofs, and decltypes
5480 // - types which will become injected class names
5481 // Of course, we also need to rebuild any type referencing such a
5482 // type. It's safest to just say "dependent", but we call out a
5483 // few cases here.
5484
5485 DeclSpec &DS = D.getMutableDeclSpec();
5486 switch (DS.getTypeSpecType()) {
5487 case DeclSpec::TST_typename:
5488 case DeclSpec::TST_typeofType:
5489 case DeclSpec::TST_underlyingType:
5490 case DeclSpec::TST_atomic: {
5491 // Grab the type from the parser.
5492 TypeSourceInfo *TSI = nullptr;
5493 QualType T = S.GetTypeFromParser(DS.getRepAsType(), &TSI);
5494 if (T.isNull() || !T->isDependentType()) break;
5495
5496 // Make sure there's a type source info. This isn't really much
5497 // of a waste; most dependent types should have type source info
5498 // attached already.
5499 if (!TSI)
5500 TSI = S.Context.getTrivialTypeSourceInfo(T, DS.getTypeSpecTypeLoc());
5501
5502 // Rebuild the type in the current instantiation.
5503 TSI = S.RebuildTypeInCurrentInstantiation(TSI, D.getIdentifierLoc(), Name);
5504 if (!TSI) return true;
5505
5506 // Store the new type back in the decl spec.
5507 ParsedType LocType = S.CreateParsedType(TSI->getType(), TSI);
5508 DS.UpdateTypeRep(LocType);
5509 break;
5510 }
5511
5512 case DeclSpec::TST_decltype:
5513 case DeclSpec::TST_typeofExpr: {
5514 Expr *E = DS.getRepAsExpr();
5515 ExprResult Result = S.RebuildExprInCurrentInstantiation(E);
5516 if (Result.isInvalid()) return true;
5517 DS.UpdateExprRep(Result.get());
5518 break;
5519 }
5520
5521 default:
5522 // Nothing to do for these decl specs.
5523 break;
5524 }
5525
5526 // It doesn't matter what order we do this in.
5527 for (unsigned I = 0, E = D.getNumTypeObjects(); I != E; ++I) {
5528 DeclaratorChunk &Chunk = D.getTypeObject(I);
5529
5530 // The only type information in the declarator which can come
5531 // before the declaration name is the base type of a member
5532 // pointer.
5533 if (Chunk.Kind != DeclaratorChunk::MemberPointer)
5534 continue;
5535
5536 // Rebuild the scope specifier in-place.
5537 CXXScopeSpec &SS = Chunk.Mem.Scope();
5538 if (S.RebuildNestedNameSpecifierInCurrentInstantiation(SS))
5539 return true;
5540 }
5541
5542 return false;
5543 }
5544
ActOnDeclarator(Scope * S,Declarator & D)5545 Decl *Sema::ActOnDeclarator(Scope *S, Declarator &D) {
5546 D.setFunctionDefinitionKind(FunctionDefinitionKind::Declaration);
5547 Decl *Dcl = HandleDeclarator(S, D, MultiTemplateParamsArg());
5548
5549 if (OriginalLexicalContext && OriginalLexicalContext->isObjCContainer() &&
5550 Dcl && Dcl->getDeclContext()->isFileContext())
5551 Dcl->setTopLevelDeclInObjCContainer();
5552
5553 if (getLangOpts().OpenCL)
5554 setCurrentOpenCLExtensionForDecl(Dcl);
5555
5556 return Dcl;
5557 }
5558
5559 /// DiagnoseClassNameShadow - Implement C++ [class.mem]p13:
5560 /// If T is the name of a class, then each of the following shall have a
5561 /// name different from T:
5562 /// - every static data member of class T;
5563 /// - every member function of class T
5564 /// - every member of class T that is itself a type;
5565 /// \returns true if the declaration name violates these rules.
DiagnoseClassNameShadow(DeclContext * DC,DeclarationNameInfo NameInfo)5566 bool Sema::DiagnoseClassNameShadow(DeclContext *DC,
5567 DeclarationNameInfo NameInfo) {
5568 DeclarationName Name = NameInfo.getName();
5569
5570 CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(DC);
5571 while (Record && Record->isAnonymousStructOrUnion())
5572 Record = dyn_cast<CXXRecordDecl>(Record->getParent());
5573 if (Record && Record->getIdentifier() && Record->getDeclName() == Name) {
5574 Diag(NameInfo.getLoc(), diag::err_member_name_of_class) << Name;
5575 return true;
5576 }
5577
5578 return false;
5579 }
5580
5581 /// Diagnose a declaration whose declarator-id has the given
5582 /// nested-name-specifier.
5583 ///
5584 /// \param SS The nested-name-specifier of the declarator-id.
5585 ///
5586 /// \param DC The declaration context to which the nested-name-specifier
5587 /// resolves.
5588 ///
5589 /// \param Name The name of the entity being declared.
5590 ///
5591 /// \param Loc The location of the name of the entity being declared.
5592 ///
5593 /// \param IsTemplateId Whether the name is a (simple-)template-id, and thus
5594 /// we're declaring an explicit / partial specialization / instantiation.
5595 ///
5596 /// \returns true if we cannot safely recover from this error, false otherwise.
diagnoseQualifiedDeclaration(CXXScopeSpec & SS,DeclContext * DC,DeclarationName Name,SourceLocation Loc,bool IsTemplateId)5597 bool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC,
5598 DeclarationName Name,
5599 SourceLocation Loc, bool IsTemplateId) {
5600 DeclContext *Cur = CurContext;
5601 while (isa<LinkageSpecDecl>(Cur) || isa<CapturedDecl>(Cur))
5602 Cur = Cur->getParent();
5603
5604 // If the user provided a superfluous scope specifier that refers back to the
5605 // class in which the entity is already declared, diagnose and ignore it.
5606 //
5607 // class X {
5608 // void X::f();
5609 // };
5610 //
5611 // Note, it was once ill-formed to give redundant qualification in all
5612 // contexts, but that rule was removed by DR482.
5613 if (Cur->Equals(DC)) {
5614 if (Cur->isRecord()) {
5615 Diag(Loc, LangOpts.MicrosoftExt ? diag::warn_member_extra_qualification
5616 : diag::err_member_extra_qualification)
5617 << Name << FixItHint::CreateRemoval(SS.getRange());
5618 SS.clear();
5619 } else {
5620 Diag(Loc, diag::warn_namespace_member_extra_qualification) << Name;
5621 }
5622 return false;
5623 }
5624
5625 // Check whether the qualifying scope encloses the scope of the original
5626 // declaration. For a template-id, we perform the checks in
5627 // CheckTemplateSpecializationScope.
5628 if (!Cur->Encloses(DC) && !IsTemplateId) {
5629 if (Cur->isRecord())
5630 Diag(Loc, diag::err_member_qualification)
5631 << Name << SS.getRange();
5632 else if (isa<TranslationUnitDecl>(DC))
5633 Diag(Loc, diag::err_invalid_declarator_global_scope)
5634 << Name << SS.getRange();
5635 else if (isa<FunctionDecl>(Cur))
5636 Diag(Loc, diag::err_invalid_declarator_in_function)
5637 << Name << SS.getRange();
5638 else if (isa<BlockDecl>(Cur))
5639 Diag(Loc, diag::err_invalid_declarator_in_block)
5640 << Name << SS.getRange();
5641 else
5642 Diag(Loc, diag::err_invalid_declarator_scope)
5643 << Name << cast<NamedDecl>(Cur) << cast<NamedDecl>(DC) << SS.getRange();
5644
5645 return true;
5646 }
5647
5648 if (Cur->isRecord()) {
5649 // Cannot qualify members within a class.
5650 Diag(Loc, diag::err_member_qualification)
5651 << Name << SS.getRange();
5652 SS.clear();
5653
5654 // C++ constructors and destructors with incorrect scopes can break
5655 // our AST invariants by having the wrong underlying types. If
5656 // that's the case, then drop this declaration entirely.
5657 if ((Name.getNameKind() == DeclarationName::CXXConstructorName ||
5658 Name.getNameKind() == DeclarationName::CXXDestructorName) &&
5659 !Context.hasSameType(Name.getCXXNameType(),
5660 Context.getTypeDeclType(cast<CXXRecordDecl>(Cur))))
5661 return true;
5662
5663 return false;
5664 }
5665
5666 // C++11 [dcl.meaning]p1:
5667 // [...] "The nested-name-specifier of the qualified declarator-id shall
5668 // not begin with a decltype-specifer"
5669 NestedNameSpecifierLoc SpecLoc(SS.getScopeRep(), SS.location_data());
5670 while (SpecLoc.getPrefix())
5671 SpecLoc = SpecLoc.getPrefix();
5672 if (dyn_cast_or_null<DecltypeType>(
5673 SpecLoc.getNestedNameSpecifier()->getAsType()))
5674 Diag(Loc, diag::err_decltype_in_declarator)
5675 << SpecLoc.getTypeLoc().getSourceRange();
5676
5677 return false;
5678 }
5679
HandleDeclarator(Scope * S,Declarator & D,MultiTemplateParamsArg TemplateParamLists)5680 NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D,
5681 MultiTemplateParamsArg TemplateParamLists) {
5682 // TODO: consider using NameInfo for diagnostic.
5683 DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
5684 DeclarationName Name = NameInfo.getName();
5685
5686 // All of these full declarators require an identifier. If it doesn't have
5687 // one, the ParsedFreeStandingDeclSpec action should be used.
5688 if (D.isDecompositionDeclarator()) {
5689 return ActOnDecompositionDeclarator(S, D, TemplateParamLists);
5690 } else if (!Name) {
5691 if (!D.isInvalidType()) // Reject this if we think it is valid.
5692 Diag(D.getDeclSpec().getBeginLoc(), diag::err_declarator_need_ident)
5693 << D.getDeclSpec().getSourceRange() << D.getSourceRange();
5694 return nullptr;
5695 } else if (DiagnoseUnexpandedParameterPack(NameInfo, UPPC_DeclarationType))
5696 return nullptr;
5697
5698 // The scope passed in may not be a decl scope. Zip up the scope tree until
5699 // we find one that is.
5700 while ((S->getFlags() & Scope::DeclScope) == 0 ||
5701 (S->getFlags() & Scope::TemplateParamScope) != 0)
5702 S = S->getParent();
5703
5704 DeclContext *DC = CurContext;
5705 if (D.getCXXScopeSpec().isInvalid())
5706 D.setInvalidType();
5707 else if (D.getCXXScopeSpec().isSet()) {
5708 if (DiagnoseUnexpandedParameterPack(D.getCXXScopeSpec(),
5709 UPPC_DeclarationQualifier))
5710 return nullptr;
5711
5712 bool EnteringContext = !D.getDeclSpec().isFriendSpecified();
5713 DC = computeDeclContext(D.getCXXScopeSpec(), EnteringContext);
5714 if (!DC || isa<EnumDecl>(DC)) {
5715 // If we could not compute the declaration context, it's because the
5716 // declaration context is dependent but does not refer to a class,
5717 // class template, or class template partial specialization. Complain
5718 // and return early, to avoid the coming semantic disaster.
5719 Diag(D.getIdentifierLoc(),
5720 diag::err_template_qualified_declarator_no_match)
5721 << D.getCXXScopeSpec().getScopeRep()
5722 << D.getCXXScopeSpec().getRange();
5723 return nullptr;
5724 }
5725 bool IsDependentContext = DC->isDependentContext();
5726
5727 if (!IsDependentContext &&
5728 RequireCompleteDeclContext(D.getCXXScopeSpec(), DC))
5729 return nullptr;
5730
5731 // If a class is incomplete, do not parse entities inside it.
5732 if (isa<CXXRecordDecl>(DC) && !cast<CXXRecordDecl>(DC)->hasDefinition()) {
5733 Diag(D.getIdentifierLoc(),
5734 diag::err_member_def_undefined_record)
5735 << Name << DC << D.getCXXScopeSpec().getRange();
5736 return nullptr;
5737 }
5738 if (!D.getDeclSpec().isFriendSpecified()) {
5739 if (diagnoseQualifiedDeclaration(
5740 D.getCXXScopeSpec(), DC, Name, D.getIdentifierLoc(),
5741 D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId)) {
5742 if (DC->isRecord())
5743 return nullptr;
5744
5745 D.setInvalidType();
5746 }
5747 }
5748
5749 // Check whether we need to rebuild the type of the given
5750 // declaration in the current instantiation.
5751 if (EnteringContext && IsDependentContext &&
5752 TemplateParamLists.size() != 0) {
5753 ContextRAII SavedContext(*this, DC);
5754 if (RebuildDeclaratorInCurrentInstantiation(*this, D, Name))
5755 D.setInvalidType();
5756 }
5757 }
5758
5759 TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
5760 QualType R = TInfo->getType();
5761
5762 if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
5763 UPPC_DeclarationType))
5764 D.setInvalidType();
5765
5766 LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
5767 forRedeclarationInCurContext());
5768
5769 // See if this is a redefinition of a variable in the same scope.
5770 if (!D.getCXXScopeSpec().isSet()) {
5771 bool IsLinkageLookup = false;
5772 bool CreateBuiltins = false;
5773
5774 // If the declaration we're planning to build will be a function
5775 // or object with linkage, then look for another declaration with
5776 // linkage (C99 6.2.2p4-5 and C++ [basic.link]p6).
5777 //
5778 // If the declaration we're planning to build will be declared with
5779 // external linkage in the translation unit, create any builtin with
5780 // the same name.
5781 if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef)
5782 /* Do nothing*/;
5783 else if (CurContext->isFunctionOrMethod() &&
5784 (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_extern ||
5785 R->isFunctionType())) {
5786 IsLinkageLookup = true;
5787 CreateBuiltins =
5788 CurContext->getEnclosingNamespaceContext()->isTranslationUnit();
5789 } else if (CurContext->getRedeclContext()->isTranslationUnit() &&
5790 D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static)
5791 CreateBuiltins = true;
5792
5793 if (IsLinkageLookup) {
5794 Previous.clear(LookupRedeclarationWithLinkage);
5795 Previous.setRedeclarationKind(ForExternalRedeclaration);
5796 }
5797
5798 LookupName(Previous, S, CreateBuiltins);
5799 } else { // Something like "int foo::x;"
5800 LookupQualifiedName(Previous, DC);
5801
5802 // C++ [dcl.meaning]p1:
5803 // When the declarator-id is qualified, the declaration shall refer to a
5804 // previously declared member of the class or namespace to which the
5805 // qualifier refers (or, in the case of a namespace, of an element of the
5806 // inline namespace set of that namespace (7.3.1)) or to a specialization
5807 // thereof; [...]
5808 //
5809 // Note that we already checked the context above, and that we do not have
5810 // enough information to make sure that Previous contains the declaration
5811 // we want to match. For example, given:
5812 //
5813 // class X {
5814 // void f();
5815 // void f(float);
5816 // };
5817 //
5818 // void X::f(int) { } // ill-formed
5819 //
5820 // In this case, Previous will point to the overload set
5821 // containing the two f's declared in X, but neither of them
5822 // matches.
5823
5824 // C++ [dcl.meaning]p1:
5825 // [...] the member shall not merely have been introduced by a
5826 // using-declaration in the scope of the class or namespace nominated by
5827 // the nested-name-specifier of the declarator-id.
5828 RemoveUsingDecls(Previous);
5829 }
5830
5831 if (Previous.isSingleResult() &&
5832 Previous.getFoundDecl()->isTemplateParameter()) {
5833 // Maybe we will complain about the shadowed template parameter.
5834 if (!D.isInvalidType())
5835 DiagnoseTemplateParameterShadow(D.getIdentifierLoc(),
5836 Previous.getFoundDecl());
5837
5838 // Just pretend that we didn't see the previous declaration.
5839 Previous.clear();
5840 }
5841
5842 if (!R->isFunctionType() && DiagnoseClassNameShadow(DC, NameInfo))
5843 // Forget that the previous declaration is the injected-class-name.
5844 Previous.clear();
5845
5846 // In C++, the previous declaration we find might be a tag type
5847 // (class or enum). In this case, the new declaration will hide the
5848 // tag type. Note that this applies to functions, function templates, and
5849 // variables, but not to typedefs (C++ [dcl.typedef]p4) or variable templates.
5850 if (Previous.isSingleTagDecl() &&
5851 D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
5852 (TemplateParamLists.size() == 0 || R->isFunctionType()))
5853 Previous.clear();
5854
5855 // Check that there are no default arguments other than in the parameters
5856 // of a function declaration (C++ only).
5857 if (getLangOpts().CPlusPlus)
5858 CheckExtraCXXDefaultArguments(D);
5859
5860 NamedDecl *New;
5861
5862 bool AddToScope = true;
5863 if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {
5864 if (TemplateParamLists.size()) {
5865 Diag(D.getIdentifierLoc(), diag::err_template_typedef);
5866 return nullptr;
5867 }
5868
5869 New = ActOnTypedefDeclarator(S, D, DC, TInfo, Previous);
5870 } else if (R->isFunctionType()) {
5871 New = ActOnFunctionDeclarator(S, D, DC, TInfo, Previous,
5872 TemplateParamLists,
5873 AddToScope);
5874 } else {
5875 New = ActOnVariableDeclarator(S, D, DC, TInfo, Previous, TemplateParamLists,
5876 AddToScope);
5877 }
5878
5879 if (!New)
5880 return nullptr;
5881
5882 // If this has an identifier and is not a function template specialization,
5883 // add it to the scope stack.
5884 if (New->getDeclName() && AddToScope)
5885 PushOnScopeChains(New, S);
5886
5887 if (isInOpenMPDeclareTargetContext())
5888 checkDeclIsAllowedInOpenMPTarget(nullptr, New);
5889
5890 return New;
5891 }
5892
5893 /// Helper method to turn variable array types into constant array
5894 /// types in certain situations which would otherwise be errors (for
5895 /// GCC compatibility).
TryToFixInvalidVariablyModifiedType(QualType T,ASTContext & Context,bool & SizeIsNegative,llvm::APSInt & Oversized)5896 static QualType TryToFixInvalidVariablyModifiedType(QualType T,
5897 ASTContext &Context,
5898 bool &SizeIsNegative,
5899 llvm::APSInt &Oversized) {
5900 // This method tries to turn a variable array into a constant
5901 // array even when the size isn't an ICE. This is necessary
5902 // for compatibility with code that depends on gcc's buggy
5903 // constant expression folding, like struct {char x[(int)(char*)2];}
5904 SizeIsNegative = false;
5905 Oversized = 0;
5906
5907 if (T->isDependentType())
5908 return QualType();
5909
5910 QualifierCollector Qs;
5911 const Type *Ty = Qs.strip(T);
5912
5913 if (const PointerType* PTy = dyn_cast<PointerType>(Ty)) {
5914 QualType Pointee = PTy->getPointeeType();
5915 QualType FixedType =
5916 TryToFixInvalidVariablyModifiedType(Pointee, Context, SizeIsNegative,
5917 Oversized);
5918 if (FixedType.isNull()) return FixedType;
5919 FixedType = Context.getPointerType(FixedType);
5920 return Qs.apply(Context, FixedType);
5921 }
5922 if (const ParenType* PTy = dyn_cast<ParenType>(Ty)) {
5923 QualType Inner = PTy->getInnerType();
5924 QualType FixedType =
5925 TryToFixInvalidVariablyModifiedType(Inner, Context, SizeIsNegative,
5926 Oversized);
5927 if (FixedType.isNull()) return FixedType;
5928 FixedType = Context.getParenType(FixedType);
5929 return Qs.apply(Context, FixedType);
5930 }
5931
5932 const VariableArrayType* VLATy = dyn_cast<VariableArrayType>(T);
5933 if (!VLATy)
5934 return QualType();
5935
5936 QualType ElemTy = VLATy->getElementType();
5937 if (ElemTy->isVariablyModifiedType()) {
5938 ElemTy = TryToFixInvalidVariablyModifiedType(ElemTy, Context,
5939 SizeIsNegative, Oversized);
5940 if (ElemTy.isNull())
5941 return QualType();
5942 }
5943
5944 Expr::EvalResult Result;
5945 if (!VLATy->getSizeExpr() ||
5946 !VLATy->getSizeExpr()->EvaluateAsInt(Result, Context))
5947 return QualType();
5948
5949 llvm::APSInt Res = Result.Val.getInt();
5950
5951 // Check whether the array size is negative.
5952 if (Res.isSigned() && Res.isNegative()) {
5953 SizeIsNegative = true;
5954 return QualType();
5955 }
5956
5957 // Check whether the array is too large to be addressed.
5958 unsigned ActiveSizeBits =
5959 (!ElemTy->isDependentType() && !ElemTy->isVariablyModifiedType() &&
5960 !ElemTy->isIncompleteType() && !ElemTy->isUndeducedType())
5961 ? ConstantArrayType::getNumAddressingBits(Context, ElemTy, Res)
5962 : Res.getActiveBits();
5963 if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) {
5964 Oversized = Res;
5965 return QualType();
5966 }
5967
5968 return Context.getConstantArrayType(ElemTy, Res, VLATy->getSizeExpr(),
5969 ArrayType::Normal, 0);
5970 }
5971
5972 static void
FixInvalidVariablyModifiedTypeLoc(TypeLoc SrcTL,TypeLoc DstTL)5973 FixInvalidVariablyModifiedTypeLoc(TypeLoc SrcTL, TypeLoc DstTL) {
5974 SrcTL = SrcTL.getUnqualifiedLoc();
5975 DstTL = DstTL.getUnqualifiedLoc();
5976 if (PointerTypeLoc SrcPTL = SrcTL.getAs<PointerTypeLoc>()) {
5977 PointerTypeLoc DstPTL = DstTL.castAs<PointerTypeLoc>();
5978 FixInvalidVariablyModifiedTypeLoc(SrcPTL.getPointeeLoc(),
5979 DstPTL.getPointeeLoc());
5980 DstPTL.setStarLoc(SrcPTL.getStarLoc());
5981 return;
5982 }
5983 if (ParenTypeLoc SrcPTL = SrcTL.getAs<ParenTypeLoc>()) {
5984 ParenTypeLoc DstPTL = DstTL.castAs<ParenTypeLoc>();
5985 FixInvalidVariablyModifiedTypeLoc(SrcPTL.getInnerLoc(),
5986 DstPTL.getInnerLoc());
5987 DstPTL.setLParenLoc(SrcPTL.getLParenLoc());
5988 DstPTL.setRParenLoc(SrcPTL.getRParenLoc());
5989 return;
5990 }
5991 ArrayTypeLoc SrcATL = SrcTL.castAs<ArrayTypeLoc>();
5992 ArrayTypeLoc DstATL = DstTL.castAs<ArrayTypeLoc>();
5993 TypeLoc SrcElemTL = SrcATL.getElementLoc();
5994 TypeLoc DstElemTL = DstATL.getElementLoc();
5995 if (VariableArrayTypeLoc SrcElemATL =
5996 SrcElemTL.getAs<VariableArrayTypeLoc>()) {
5997 ConstantArrayTypeLoc DstElemATL = DstElemTL.castAs<ConstantArrayTypeLoc>();
5998 FixInvalidVariablyModifiedTypeLoc(SrcElemATL, DstElemATL);
5999 } else {
6000 DstElemTL.initializeFullCopy(SrcElemTL);
6001 }
6002 DstATL.setLBracketLoc(SrcATL.getLBracketLoc());
6003 DstATL.setSizeExpr(SrcATL.getSizeExpr());
6004 DstATL.setRBracketLoc(SrcATL.getRBracketLoc());
6005 }
6006
6007 /// Helper method to turn variable array types into constant array
6008 /// types in certain situations which would otherwise be errors (for
6009 /// GCC compatibility).
6010 static TypeSourceInfo*
TryToFixInvalidVariablyModifiedTypeSourceInfo(TypeSourceInfo * TInfo,ASTContext & Context,bool & SizeIsNegative,llvm::APSInt & Oversized)6011 TryToFixInvalidVariablyModifiedTypeSourceInfo(TypeSourceInfo *TInfo,
6012 ASTContext &Context,
6013 bool &SizeIsNegative,
6014 llvm::APSInt &Oversized) {
6015 QualType FixedTy
6016 = TryToFixInvalidVariablyModifiedType(TInfo->getType(), Context,
6017 SizeIsNegative, Oversized);
6018 if (FixedTy.isNull())
6019 return nullptr;
6020 TypeSourceInfo *FixedTInfo = Context.getTrivialTypeSourceInfo(FixedTy);
6021 FixInvalidVariablyModifiedTypeLoc(TInfo->getTypeLoc(),
6022 FixedTInfo->getTypeLoc());
6023 return FixedTInfo;
6024 }
6025
6026 /// Attempt to fold a variable-sized type to a constant-sized type, returning
6027 /// true if we were successful.
tryToFixVariablyModifiedVarType(Sema & S,TypeSourceInfo * & TInfo,QualType & T,SourceLocation Loc,unsigned FailedFoldDiagID)6028 static bool tryToFixVariablyModifiedVarType(Sema &S, TypeSourceInfo *&TInfo,
6029 QualType &T, SourceLocation Loc,
6030 unsigned FailedFoldDiagID) {
6031 bool SizeIsNegative;
6032 llvm::APSInt Oversized;
6033 TypeSourceInfo *FixedTInfo = TryToFixInvalidVariablyModifiedTypeSourceInfo(
6034 TInfo, S.Context, SizeIsNegative, Oversized);
6035 if (FixedTInfo) {
6036 S.Diag(Loc, diag::ext_vla_folded_to_constant);
6037 TInfo = FixedTInfo;
6038 T = FixedTInfo->getType();
6039 return true;
6040 }
6041
6042 if (SizeIsNegative)
6043 S.Diag(Loc, diag::err_typecheck_negative_array_size);
6044 else if (Oversized.getBoolValue())
6045 S.Diag(Loc, diag::err_array_too_large) << Oversized.toString(10);
6046 else if (FailedFoldDiagID)
6047 S.Diag(Loc, FailedFoldDiagID);
6048 return false;
6049 }
6050
6051 /// Register the given locally-scoped extern "C" declaration so
6052 /// that it can be found later for redeclarations. We include any extern "C"
6053 /// declaration that is not visible in the translation unit here, not just
6054 /// function-scope declarations.
6055 void
RegisterLocallyScopedExternCDecl(NamedDecl * ND,Scope * S)6056 Sema::RegisterLocallyScopedExternCDecl(NamedDecl *ND, Scope *S) {
6057 if (!getLangOpts().CPlusPlus &&
6058 ND->getLexicalDeclContext()->getRedeclContext()->isTranslationUnit())
6059 // Don't need to track declarations in the TU in C.
6060 return;
6061
6062 // Note that we have a locally-scoped external with this name.
6063 Context.getExternCContextDecl()->makeDeclVisibleInContext(ND);
6064 }
6065
findLocallyScopedExternCDecl(DeclarationName Name)6066 NamedDecl *Sema::findLocallyScopedExternCDecl(DeclarationName Name) {
6067 // FIXME: We can have multiple results via __attribute__((overloadable)).
6068 auto Result = Context.getExternCContextDecl()->lookup(Name);
6069 return Result.empty() ? nullptr : *Result.begin();
6070 }
6071
6072 /// Diagnose function specifiers on a declaration of an identifier that
6073 /// does not identify a function.
DiagnoseFunctionSpecifiers(const DeclSpec & DS)6074 void Sema::DiagnoseFunctionSpecifiers(const DeclSpec &DS) {
6075 // FIXME: We should probably indicate the identifier in question to avoid
6076 // confusion for constructs like "virtual int a(), b;"
6077 if (DS.isVirtualSpecified())
6078 Diag(DS.getVirtualSpecLoc(),
6079 diag::err_virtual_non_function);
6080
6081 if (DS.hasExplicitSpecifier())
6082 Diag(DS.getExplicitSpecLoc(),
6083 diag::err_explicit_non_function);
6084
6085 if (DS.isNoreturnSpecified())
6086 Diag(DS.getNoreturnSpecLoc(),
6087 diag::err_noreturn_non_function);
6088 }
6089
6090 NamedDecl*
ActOnTypedefDeclarator(Scope * S,Declarator & D,DeclContext * DC,TypeSourceInfo * TInfo,LookupResult & Previous)6091 Sema::ActOnTypedefDeclarator(Scope* S, Declarator& D, DeclContext* DC,
6092 TypeSourceInfo *TInfo, LookupResult &Previous) {
6093 // Typedef declarators cannot be qualified (C++ [dcl.meaning]p1).
6094 if (D.getCXXScopeSpec().isSet()) {
6095 Diag(D.getIdentifierLoc(), diag::err_qualified_typedef_declarator)
6096 << D.getCXXScopeSpec().getRange();
6097 D.setInvalidType();
6098 // Pretend we didn't see the scope specifier.
6099 DC = CurContext;
6100 Previous.clear();
6101 }
6102
6103 DiagnoseFunctionSpecifiers(D.getDeclSpec());
6104
6105 if (D.getDeclSpec().isInlineSpecified())
6106 Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_non_function)
6107 << getLangOpts().CPlusPlus17;
6108 if (D.getDeclSpec().hasConstexprSpecifier())
6109 Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_constexpr)
6110 << 1 << static_cast<int>(D.getDeclSpec().getConstexprSpecifier());
6111
6112 if (D.getName().Kind != UnqualifiedIdKind::IK_Identifier) {
6113 if (D.getName().Kind == UnqualifiedIdKind::IK_DeductionGuideName)
6114 Diag(D.getName().StartLocation,
6115 diag::err_deduction_guide_invalid_specifier)
6116 << "typedef";
6117 else
6118 Diag(D.getName().StartLocation, diag::err_typedef_not_identifier)
6119 << D.getName().getSourceRange();
6120 return nullptr;
6121 }
6122
6123 TypedefDecl *NewTD = ParseTypedefDecl(S, D, TInfo->getType(), TInfo);
6124 if (!NewTD) return nullptr;
6125
6126 // Handle attributes prior to checking for duplicates in MergeVarDecl
6127 ProcessDeclAttributes(S, NewTD, D);
6128
6129 CheckTypedefForVariablyModifiedType(S, NewTD);
6130
6131 bool Redeclaration = D.isRedeclaration();
6132 NamedDecl *ND = ActOnTypedefNameDecl(S, DC, NewTD, Previous, Redeclaration);
6133 D.setRedeclaration(Redeclaration);
6134 return ND;
6135 }
6136
6137 void
CheckTypedefForVariablyModifiedType(Scope * S,TypedefNameDecl * NewTD)6138 Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {
6139 // C99 6.7.7p2: If a typedef name specifies a variably modified type
6140 // then it shall have block scope.
6141 // Note that variably modified types must be fixed before merging the decl so
6142 // that redeclarations will match.
6143 TypeSourceInfo *TInfo = NewTD->getTypeSourceInfo();
6144 QualType T = TInfo->getType();
6145 if (T->isVariablyModifiedType()) {
6146 setFunctionHasBranchProtectedScope();
6147
6148 if (S->getFnParent() == nullptr) {
6149 bool SizeIsNegative;
6150 llvm::APSInt Oversized;
6151 TypeSourceInfo *FixedTInfo =
6152 TryToFixInvalidVariablyModifiedTypeSourceInfo(TInfo, Context,
6153 SizeIsNegative,
6154 Oversized);
6155 if (FixedTInfo) {
6156 Diag(NewTD->getLocation(), diag::ext_vla_folded_to_constant);
6157 NewTD->setTypeSourceInfo(FixedTInfo);
6158 } else {
6159 if (SizeIsNegative)
6160 Diag(NewTD->getLocation(), diag::err_typecheck_negative_array_size);
6161 else if (T->isVariableArrayType())
6162 Diag(NewTD->getLocation(), diag::err_vla_decl_in_file_scope);
6163 else if (Oversized.getBoolValue())
6164 Diag(NewTD->getLocation(), diag::err_array_too_large)
6165 << Oversized.toString(10);
6166 else
6167 Diag(NewTD->getLocation(), diag::err_vm_decl_in_file_scope);
6168 NewTD->setInvalidDecl();
6169 }
6170 }
6171 }
6172 }
6173
6174 /// ActOnTypedefNameDecl - Perform semantic checking for a declaration which
6175 /// declares a typedef-name, either using the 'typedef' type specifier or via
6176 /// a C++0x [dcl.typedef]p2 alias-declaration: 'using T = A;'.
6177 NamedDecl*
ActOnTypedefNameDecl(Scope * S,DeclContext * DC,TypedefNameDecl * NewTD,LookupResult & Previous,bool & Redeclaration)6178 Sema::ActOnTypedefNameDecl(Scope *S, DeclContext *DC, TypedefNameDecl *NewTD,
6179 LookupResult &Previous, bool &Redeclaration) {
6180
6181 // Find the shadowed declaration before filtering for scope.
6182 NamedDecl *ShadowedDecl = getShadowedDeclaration(NewTD, Previous);
6183
6184 // Merge the decl with the existing one if appropriate. If the decl is
6185 // in an outer scope, it isn't the same thing.
6186 FilterLookupForScope(Previous, DC, S, /*ConsiderLinkage*/false,
6187 /*AllowInlineNamespace*/false);
6188 filterNonConflictingPreviousTypedefDecls(*this, NewTD, Previous);
6189 if (!Previous.empty()) {
6190 Redeclaration = true;
6191 MergeTypedefNameDecl(S, NewTD, Previous);
6192 } else {
6193 inferGslPointerAttribute(NewTD);
6194 }
6195
6196 if (ShadowedDecl && !Redeclaration)
6197 CheckShadow(NewTD, ShadowedDecl, Previous);
6198
6199 // If this is the C FILE type, notify the AST context.
6200 if (IdentifierInfo *II = NewTD->getIdentifier())
6201 if (!NewTD->isInvalidDecl() &&
6202 NewTD->getDeclContext()->getRedeclContext()->isTranslationUnit()) {
6203 if (II->isStr("FILE"))
6204 Context.setFILEDecl(NewTD);
6205 else if (II->isStr("jmp_buf"))
6206 Context.setjmp_bufDecl(NewTD);
6207 else if (II->isStr("sigjmp_buf"))
6208 Context.setsigjmp_bufDecl(NewTD);
6209 else if (II->isStr("ucontext_t"))
6210 Context.setucontext_tDecl(NewTD);
6211 }
6212
6213 return NewTD;
6214 }
6215
6216 /// Determines whether the given declaration is an out-of-scope
6217 /// previous declaration.
6218 ///
6219 /// This routine should be invoked when name lookup has found a
6220 /// previous declaration (PrevDecl) that is not in the scope where a
6221 /// new declaration by the same name is being introduced. If the new
6222 /// declaration occurs in a local scope, previous declarations with
6223 /// linkage may still be considered previous declarations (C99
6224 /// 6.2.2p4-5, C++ [basic.link]p6).
6225 ///
6226 /// \param PrevDecl the previous declaration found by name
6227 /// lookup
6228 ///
6229 /// \param DC the context in which the new declaration is being
6230 /// declared.
6231 ///
6232 /// \returns true if PrevDecl is an out-of-scope previous declaration
6233 /// for a new delcaration with the same name.
6234 static bool
isOutOfScopePreviousDeclaration(NamedDecl * PrevDecl,DeclContext * DC,ASTContext & Context)6235 isOutOfScopePreviousDeclaration(NamedDecl *PrevDecl, DeclContext *DC,
6236 ASTContext &Context) {
6237 if (!PrevDecl)
6238 return false;
6239
6240 if (!PrevDecl->hasLinkage())
6241 return false;
6242
6243 if (Context.getLangOpts().CPlusPlus) {
6244 // C++ [basic.link]p6:
6245 // If there is a visible declaration of an entity with linkage
6246 // having the same name and type, ignoring entities declared
6247 // outside the innermost enclosing namespace scope, the block
6248 // scope declaration declares that same entity and receives the
6249 // linkage of the previous declaration.
6250 DeclContext *OuterContext = DC->getRedeclContext();
6251 if (!OuterContext->isFunctionOrMethod())
6252 // This rule only applies to block-scope declarations.
6253 return false;
6254
6255 DeclContext *PrevOuterContext = PrevDecl->getDeclContext();
6256 if (PrevOuterContext->isRecord())
6257 // We found a member function: ignore it.
6258 return false;
6259
6260 // Find the innermost enclosing namespace for the new and
6261 // previous declarations.
6262 OuterContext = OuterContext->getEnclosingNamespaceContext();
6263 PrevOuterContext = PrevOuterContext->getEnclosingNamespaceContext();
6264
6265 // The previous declaration is in a different namespace, so it
6266 // isn't the same function.
6267 if (!OuterContext->Equals(PrevOuterContext))
6268 return false;
6269 }
6270
6271 return true;
6272 }
6273
SetNestedNameSpecifier(Sema & S,DeclaratorDecl * DD,Declarator & D)6274 static void SetNestedNameSpecifier(Sema &S, DeclaratorDecl *DD, Declarator &D) {
6275 CXXScopeSpec &SS = D.getCXXScopeSpec();
6276 if (!SS.isSet()) return;
6277 DD->setQualifierInfo(SS.getWithLocInContext(S.Context));
6278 }
6279
inferObjCARCLifetime(ValueDecl * decl)6280 bool Sema::inferObjCARCLifetime(ValueDecl *decl) {
6281 QualType type = decl->getType();
6282 Qualifiers::ObjCLifetime lifetime = type.getObjCLifetime();
6283 if (lifetime == Qualifiers::OCL_Autoreleasing) {
6284 // Various kinds of declaration aren't allowed to be __autoreleasing.
6285 unsigned kind = -1U;
6286 if (VarDecl *var = dyn_cast<VarDecl>(decl)) {
6287 if (var->hasAttr<BlocksAttr>())
6288 kind = 0; // __block
6289 else if (!var->hasLocalStorage())
6290 kind = 1; // global
6291 } else if (isa<ObjCIvarDecl>(decl)) {
6292 kind = 3; // ivar
6293 } else if (isa<FieldDecl>(decl)) {
6294 kind = 2; // field
6295 }
6296
6297 if (kind != -1U) {
6298 Diag(decl->getLocation(), diag::err_arc_autoreleasing_var)
6299 << kind;
6300 }
6301 } else if (lifetime == Qualifiers::OCL_None) {
6302 // Try to infer lifetime.
6303 if (!type->isObjCLifetimeType())
6304 return false;
6305
6306 lifetime = type->getObjCARCImplicitLifetime();
6307 type = Context.getLifetimeQualifiedType(type, lifetime);
6308 decl->setType(type);
6309 }
6310
6311 if (VarDecl *var = dyn_cast<VarDecl>(decl)) {
6312 // Thread-local variables cannot have lifetime.
6313 if (lifetime && lifetime != Qualifiers::OCL_ExplicitNone &&
6314 var->getTLSKind()) {
6315 Diag(var->getLocation(), diag::err_arc_thread_ownership)
6316 << var->getType();
6317 return true;
6318 }
6319 }
6320
6321 return false;
6322 }
6323
deduceOpenCLAddressSpace(ValueDecl * Decl)6324 void Sema::deduceOpenCLAddressSpace(ValueDecl *Decl) {
6325 if (Decl->getType().hasAddressSpace())
6326 return;
6327 if (Decl->getType()->isDependentType())
6328 return;
6329 if (VarDecl *Var = dyn_cast<VarDecl>(Decl)) {
6330 QualType Type = Var->getType();
6331 if (Type->isSamplerT() || Type->isVoidType())
6332 return;
6333 LangAS ImplAS = LangAS::opencl_private;
6334 if ((getLangOpts().OpenCLCPlusPlus || getLangOpts().OpenCLVersion >= 200) &&
6335 Var->hasGlobalStorage())
6336 ImplAS = LangAS::opencl_global;
6337 // If the original type from a decayed type is an array type and that array
6338 // type has no address space yet, deduce it now.
6339 if (auto DT = dyn_cast<DecayedType>(Type)) {
6340 auto OrigTy = DT->getOriginalType();
6341 if (!OrigTy.hasAddressSpace() && OrigTy->isArrayType()) {
6342 // Add the address space to the original array type and then propagate
6343 // that to the element type through `getAsArrayType`.
6344 OrigTy = Context.getAddrSpaceQualType(OrigTy, ImplAS);
6345 OrigTy = QualType(Context.getAsArrayType(OrigTy), 0);
6346 // Re-generate the decayed type.
6347 Type = Context.getDecayedType(OrigTy);
6348 }
6349 }
6350 Type = Context.getAddrSpaceQualType(Type, ImplAS);
6351 // Apply any qualifiers (including address space) from the array type to
6352 // the element type. This implements C99 6.7.3p8: "If the specification of
6353 // an array type includes any type qualifiers, the element type is so
6354 // qualified, not the array type."
6355 if (Type->isArrayType())
6356 Type = QualType(Context.getAsArrayType(Type), 0);
6357 Decl->setType(Type);
6358 }
6359 }
6360
checkAttributesAfterMerging(Sema & S,NamedDecl & ND)6361 static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {
6362 // Ensure that an auto decl is deduced otherwise the checks below might cache
6363 // the wrong linkage.
6364 assert(S.ParsingInitForAutoVars.count(&ND) == 0);
6365
6366 // 'weak' only applies to declarations with external linkage.
6367 if (WeakAttr *Attr = ND.getAttr<WeakAttr>()) {
6368 if (!ND.isExternallyVisible()) {
6369 S.Diag(Attr->getLocation(), diag::err_attribute_weak_static);
6370 ND.dropAttr<WeakAttr>();
6371 }
6372 }
6373 if (WeakRefAttr *Attr = ND.getAttr<WeakRefAttr>()) {
6374 if (ND.isExternallyVisible()) {
6375 S.Diag(Attr->getLocation(), diag::err_attribute_weakref_not_static);
6376 ND.dropAttr<WeakRefAttr>();
6377 ND.dropAttr<AliasAttr>();
6378 }
6379 }
6380
6381 if (auto *VD = dyn_cast<VarDecl>(&ND)) {
6382 if (VD->hasInit()) {
6383 if (const auto *Attr = VD->getAttr<AliasAttr>()) {
6384 assert(VD->isThisDeclarationADefinition() &&
6385 !VD->isExternallyVisible() && "Broken AliasAttr handled late!");
6386 S.Diag(Attr->getLocation(), diag::err_alias_is_definition) << VD << 0;
6387 VD->dropAttr<AliasAttr>();
6388 }
6389 }
6390 }
6391
6392 // 'selectany' only applies to externally visible variable declarations.
6393 // It does not apply to functions.
6394 if (SelectAnyAttr *Attr = ND.getAttr<SelectAnyAttr>()) {
6395 if (isa<FunctionDecl>(ND) || !ND.isExternallyVisible()) {
6396 S.Diag(Attr->getLocation(),
6397 diag::err_attribute_selectany_non_extern_data);
6398 ND.dropAttr<SelectAnyAttr>();
6399 }
6400 }
6401
6402 if (const InheritableAttr *Attr = getDLLAttr(&ND)) {
6403 auto *VD = dyn_cast<VarDecl>(&ND);
6404 bool IsAnonymousNS = false;
6405 bool IsMicrosoft = S.Context.getTargetInfo().getCXXABI().isMicrosoft();
6406 if (VD) {
6407 const NamespaceDecl *NS = dyn_cast<NamespaceDecl>(VD->getDeclContext());
6408 while (NS && !IsAnonymousNS) {
6409 IsAnonymousNS = NS->isAnonymousNamespace();
6410 NS = dyn_cast<NamespaceDecl>(NS->getParent());
6411 }
6412 }
6413 // dll attributes require external linkage. Static locals may have external
6414 // linkage but still cannot be explicitly imported or exported.
6415 // In Microsoft mode, a variable defined in anonymous namespace must have
6416 // external linkage in order to be exported.
6417 bool AnonNSInMicrosoftMode = IsAnonymousNS && IsMicrosoft;
6418 if ((ND.isExternallyVisible() && AnonNSInMicrosoftMode) ||
6419 (!AnonNSInMicrosoftMode &&
6420 (!ND.isExternallyVisible() || (VD && VD->isStaticLocal())))) {
6421 S.Diag(ND.getLocation(), diag::err_attribute_dll_not_extern)
6422 << &ND << Attr;
6423 ND.setInvalidDecl();
6424 }
6425 }
6426
6427 // Virtual functions cannot be marked as 'notail'.
6428 if (auto *Attr = ND.getAttr<NotTailCalledAttr>())
6429 if (auto *MD = dyn_cast<CXXMethodDecl>(&ND))
6430 if (MD->isVirtual()) {
6431 S.Diag(ND.getLocation(),
6432 diag::err_invalid_attribute_on_virtual_function)
6433 << Attr;
6434 ND.dropAttr<NotTailCalledAttr>();
6435 }
6436
6437 // Check the attributes on the function type, if any.
6438 if (const auto *FD = dyn_cast<FunctionDecl>(&ND)) {
6439 // Don't declare this variable in the second operand of the for-statement;
6440 // GCC miscompiles that by ending its lifetime before evaluating the
6441 // third operand. See gcc.gnu.org/PR86769.
6442 AttributedTypeLoc ATL;
6443 for (TypeLoc TL = FD->getTypeSourceInfo()->getTypeLoc();
6444 (ATL = TL.getAsAdjusted<AttributedTypeLoc>());
6445 TL = ATL.getModifiedLoc()) {
6446 // The [[lifetimebound]] attribute can be applied to the implicit object
6447 // parameter of a non-static member function (other than a ctor or dtor)
6448 // by applying it to the function type.
6449 if (const auto *A = ATL.getAttrAs<LifetimeBoundAttr>()) {
6450 const auto *MD = dyn_cast<CXXMethodDecl>(FD);
6451 if (!MD || MD->isStatic()) {
6452 S.Diag(A->getLocation(), diag::err_lifetimebound_no_object_param)
6453 << !MD << A->getRange();
6454 } else if (isa<CXXConstructorDecl>(MD) || isa<CXXDestructorDecl>(MD)) {
6455 S.Diag(A->getLocation(), diag::err_lifetimebound_ctor_dtor)
6456 << isa<CXXDestructorDecl>(MD) << A->getRange();
6457 }
6458 }
6459 }
6460 }
6461 }
6462
checkDLLAttributeRedeclaration(Sema & S,NamedDecl * OldDecl,NamedDecl * NewDecl,bool IsSpecialization,bool IsDefinition)6463 static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl,
6464 NamedDecl *NewDecl,
6465 bool IsSpecialization,
6466 bool IsDefinition) {
6467 if (OldDecl->isInvalidDecl() || NewDecl->isInvalidDecl())
6468 return;
6469
6470 bool IsTemplate = false;
6471 if (TemplateDecl *OldTD = dyn_cast<TemplateDecl>(OldDecl)) {
6472 OldDecl = OldTD->getTemplatedDecl();
6473 IsTemplate = true;
6474 if (!IsSpecialization)
6475 IsDefinition = false;
6476 }
6477 if (TemplateDecl *NewTD = dyn_cast<TemplateDecl>(NewDecl)) {
6478 NewDecl = NewTD->getTemplatedDecl();
6479 IsTemplate = true;
6480 }
6481
6482 if (!OldDecl || !NewDecl)
6483 return;
6484
6485 const DLLImportAttr *OldImportAttr = OldDecl->getAttr<DLLImportAttr>();
6486 const DLLExportAttr *OldExportAttr = OldDecl->getAttr<DLLExportAttr>();
6487 const DLLImportAttr *NewImportAttr = NewDecl->getAttr<DLLImportAttr>();
6488 const DLLExportAttr *NewExportAttr = NewDecl->getAttr<DLLExportAttr>();
6489
6490 // dllimport and dllexport are inheritable attributes so we have to exclude
6491 // inherited attribute instances.
6492 bool HasNewAttr = (NewImportAttr && !NewImportAttr->isInherited()) ||
6493 (NewExportAttr && !NewExportAttr->isInherited());
6494
6495 // A redeclaration is not allowed to add a dllimport or dllexport attribute,
6496 // the only exception being explicit specializations.
6497 // Implicitly generated declarations are also excluded for now because there
6498 // is no other way to switch these to use dllimport or dllexport.
6499 bool AddsAttr = !(OldImportAttr || OldExportAttr) && HasNewAttr;
6500
6501 if (AddsAttr && !IsSpecialization && !OldDecl->isImplicit()) {
6502 // Allow with a warning for free functions and global variables.
6503 bool JustWarn = false;
6504 if (!OldDecl->isCXXClassMember()) {
6505 auto *VD = dyn_cast<VarDecl>(OldDecl);
6506 if (VD && !VD->getDescribedVarTemplate())
6507 JustWarn = true;
6508 auto *FD = dyn_cast<FunctionDecl>(OldDecl);
6509 if (FD && FD->getTemplatedKind() == FunctionDecl::TK_NonTemplate)
6510 JustWarn = true;
6511 }
6512
6513 // We cannot change a declaration that's been used because IR has already
6514 // been emitted. Dllimported functions will still work though (modulo
6515 // address equality) as they can use the thunk.
6516 if (OldDecl->isUsed())
6517 if (!isa<FunctionDecl>(OldDecl) || !NewImportAttr)
6518 JustWarn = false;
6519
6520 unsigned DiagID = JustWarn ? diag::warn_attribute_dll_redeclaration
6521 : diag::err_attribute_dll_redeclaration;
6522 S.Diag(NewDecl->getLocation(), DiagID)
6523 << NewDecl
6524 << (NewImportAttr ? (const Attr *)NewImportAttr : NewExportAttr);
6525 S.Diag(OldDecl->getLocation(), diag::note_previous_declaration);
6526 if (!JustWarn) {
6527 NewDecl->setInvalidDecl();
6528 return;
6529 }
6530 }
6531
6532 // A redeclaration is not allowed to drop a dllimport attribute, the only
6533 // exceptions being inline function definitions (except for function
6534 // templates), local extern declarations, qualified friend declarations or
6535 // special MSVC extension: in the last case, the declaration is treated as if
6536 // it were marked dllexport.
6537 bool IsInline = false, IsStaticDataMember = false, IsQualifiedFriend = false;
6538 bool IsMicrosoftABI = S.Context.getTargetInfo().shouldDLLImportComdatSymbols();
6539 if (const auto *VD = dyn_cast<VarDecl>(NewDecl)) {
6540 // Ignore static data because out-of-line definitions are diagnosed
6541 // separately.
6542 IsStaticDataMember = VD->isStaticDataMember();
6543 IsDefinition = VD->isThisDeclarationADefinition(S.Context) !=
6544 VarDecl::DeclarationOnly;
6545 } else if (const auto *FD = dyn_cast<FunctionDecl>(NewDecl)) {
6546 IsInline = FD->isInlined();
6547 IsQualifiedFriend = FD->getQualifier() &&
6548 FD->getFriendObjectKind() == Decl::FOK_Declared;
6549 }
6550
6551 if (OldImportAttr && !HasNewAttr &&
6552 (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember &&
6553 !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {
6554 if (IsMicrosoftABI && IsDefinition) {
6555 S.Diag(NewDecl->getLocation(),
6556 diag::warn_redeclaration_without_import_attribute)
6557 << NewDecl;
6558 S.Diag(OldDecl->getLocation(), diag::note_previous_declaration);
6559 NewDecl->dropAttr<DLLImportAttr>();
6560 NewDecl->addAttr(
6561 DLLExportAttr::CreateImplicit(S.Context, NewImportAttr->getRange()));
6562 } else {
6563 S.Diag(NewDecl->getLocation(),
6564 diag::warn_redeclaration_without_attribute_prev_attribute_ignored)
6565 << NewDecl << OldImportAttr;
6566 S.Diag(OldDecl->getLocation(), diag::note_previous_declaration);
6567 S.Diag(OldImportAttr->getLocation(), diag::note_previous_attribute);
6568 OldDecl->dropAttr<DLLImportAttr>();
6569 NewDecl->dropAttr<DLLImportAttr>();
6570 }
6571 } else if (IsInline && OldImportAttr && !IsMicrosoftABI) {
6572 // In MinGW, seeing a function declared inline drops the dllimport
6573 // attribute.
6574 OldDecl->dropAttr<DLLImportAttr>();
6575 NewDecl->dropAttr<DLLImportAttr>();
6576 S.Diag(NewDecl->getLocation(),
6577 diag::warn_dllimport_dropped_from_inline_function)
6578 << NewDecl << OldImportAttr;
6579 }
6580
6581 // A specialization of a class template member function is processed here
6582 // since it's a redeclaration. If the parent class is dllexport, the
6583 // specialization inherits that attribute. This doesn't happen automatically
6584 // since the parent class isn't instantiated until later.
6585 if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewDecl)) {
6586 if (MD->getTemplatedKind() == FunctionDecl::TK_MemberSpecialization &&
6587 !NewImportAttr && !NewExportAttr) {
6588 if (const DLLExportAttr *ParentExportAttr =
6589 MD->getParent()->getAttr<DLLExportAttr>()) {
6590 DLLExportAttr *NewAttr = ParentExportAttr->clone(S.Context);
6591 NewAttr->setInherited(true);
6592 NewDecl->addAttr(NewAttr);
6593 }
6594 }
6595 }
6596 }
6597
6598 /// Given that we are within the definition of the given function,
6599 /// will that definition behave like C99's 'inline', where the
6600 /// definition is discarded except for optimization purposes?
isFunctionDefinitionDiscarded(Sema & S,FunctionDecl * FD)6601 static bool isFunctionDefinitionDiscarded(Sema &S, FunctionDecl *FD) {
6602 // Try to avoid calling GetGVALinkageForFunction.
6603
6604 // All cases of this require the 'inline' keyword.
6605 if (!FD->isInlined()) return false;
6606
6607 // This is only possible in C++ with the gnu_inline attribute.
6608 if (S.getLangOpts().CPlusPlus && !FD->hasAttr<GNUInlineAttr>())
6609 return false;
6610
6611 // Okay, go ahead and call the relatively-more-expensive function.
6612 return S.Context.GetGVALinkageForFunction(FD) == GVA_AvailableExternally;
6613 }
6614
6615 /// Determine whether a variable is extern "C" prior to attaching
6616 /// an initializer. We can't just call isExternC() here, because that
6617 /// will also compute and cache whether the declaration is externally
6618 /// visible, which might change when we attach the initializer.
6619 ///
6620 /// This can only be used if the declaration is known to not be a
6621 /// redeclaration of an internal linkage declaration.
6622 ///
6623 /// For instance:
6624 ///
6625 /// auto x = []{};
6626 ///
6627 /// Attaching the initializer here makes this declaration not externally
6628 /// visible, because its type has internal linkage.
6629 ///
6630 /// FIXME: This is a hack.
6631 template<typename T>
isIncompleteDeclExternC(Sema & S,const T * D)6632 static bool isIncompleteDeclExternC(Sema &S, const T *D) {
6633 if (S.getLangOpts().CPlusPlus) {
6634 // In C++, the overloadable attribute negates the effects of extern "C".
6635 if (!D->isInExternCContext() || D->template hasAttr<OverloadableAttr>())
6636 return false;
6637
6638 // So do CUDA's host/device attributes.
6639 if (S.getLangOpts().CUDA && (D->template hasAttr<CUDADeviceAttr>() ||
6640 D->template hasAttr<CUDAHostAttr>()))
6641 return false;
6642 }
6643 return D->isExternC();
6644 }
6645
shouldConsiderLinkage(const VarDecl * VD)6646 static bool shouldConsiderLinkage(const VarDecl *VD) {
6647 const DeclContext *DC = VD->getDeclContext()->getRedeclContext();
6648 if (DC->isFunctionOrMethod() || isa<OMPDeclareReductionDecl>(DC) ||
6649 isa<OMPDeclareMapperDecl>(DC))
6650 return VD->hasExternalStorage();
6651 if (DC->isFileContext())
6652 return true;
6653 if (DC->isRecord())
6654 return false;
6655 if (isa<RequiresExprBodyDecl>(DC))
6656 return false;
6657 llvm_unreachable("Unexpected context");
6658 }
6659
shouldConsiderLinkage(const FunctionDecl * FD)6660 static bool shouldConsiderLinkage(const FunctionDecl *FD) {
6661 const DeclContext *DC = FD->getDeclContext()->getRedeclContext();
6662 if (DC->isFileContext() || DC->isFunctionOrMethod() ||
6663 isa<OMPDeclareReductionDecl>(DC) || isa<OMPDeclareMapperDecl>(DC))
6664 return true;
6665 if (DC->isRecord())
6666 return false;
6667 llvm_unreachable("Unexpected context");
6668 }
6669
hasParsedAttr(Scope * S,const Declarator & PD,ParsedAttr::Kind Kind)6670 static bool hasParsedAttr(Scope *S, const Declarator &PD,
6671 ParsedAttr::Kind Kind) {
6672 // Check decl attributes on the DeclSpec.
6673 if (PD.getDeclSpec().getAttributes().hasAttribute(Kind))
6674 return true;
6675
6676 // Walk the declarator structure, checking decl attributes that were in a type
6677 // position to the decl itself.
6678 for (unsigned I = 0, E = PD.getNumTypeObjects(); I != E; ++I) {
6679 if (PD.getTypeObject(I).getAttrs().hasAttribute(Kind))
6680 return true;
6681 }
6682
6683 // Finally, check attributes on the decl itself.
6684 return PD.getAttributes().hasAttribute(Kind);
6685 }
6686
6687 /// Adjust the \c DeclContext for a function or variable that might be a
6688 /// function-local external declaration.
adjustContextForLocalExternDecl(DeclContext * & DC)6689 bool Sema::adjustContextForLocalExternDecl(DeclContext *&DC) {
6690 if (!DC->isFunctionOrMethod())
6691 return false;
6692
6693 // If this is a local extern function or variable declared within a function
6694 // template, don't add it into the enclosing namespace scope until it is
6695 // instantiated; it might have a dependent type right now.
6696 if (DC->isDependentContext())
6697 return true;
6698
6699 // C++11 [basic.link]p7:
6700 // When a block scope declaration of an entity with linkage is not found to
6701 // refer to some other declaration, then that entity is a member of the
6702 // innermost enclosing namespace.
6703 //
6704 // Per C++11 [namespace.def]p6, the innermost enclosing namespace is a
6705 // semantically-enclosing namespace, not a lexically-enclosing one.
6706 while (!DC->isFileContext() && !isa<LinkageSpecDecl>(DC))
6707 DC = DC->getParent();
6708 return true;
6709 }
6710
6711 /// Returns true if given declaration has external C language linkage.
isDeclExternC(const Decl * D)6712 static bool isDeclExternC(const Decl *D) {
6713 if (const auto *FD = dyn_cast<FunctionDecl>(D))
6714 return FD->isExternC();
6715 if (const auto *VD = dyn_cast<VarDecl>(D))
6716 return VD->isExternC();
6717
6718 llvm_unreachable("Unknown type of decl!");
6719 }
6720 /// Returns true if there hasn't been any invalid type diagnosed.
diagnoseOpenCLTypes(Scope * S,Sema & Se,Declarator & D,DeclContext * DC,QualType R)6721 static bool diagnoseOpenCLTypes(Scope *S, Sema &Se, Declarator &D,
6722 DeclContext *DC, QualType R) {
6723 // OpenCL v2.0 s6.9.b - Image type can only be used as a function argument.
6724 // OpenCL v2.0 s6.13.16.1 - Pipe type can only be used as a function
6725 // argument.
6726 if (R->isImageType() || R->isPipeType()) {
6727 Se.Diag(D.getIdentifierLoc(),
6728 diag::err_opencl_type_can_only_be_used_as_function_parameter)
6729 << R;
6730 D.setInvalidType();
6731 return false;
6732 }
6733
6734 // OpenCL v1.2 s6.9.r:
6735 // The event type cannot be used to declare a program scope variable.
6736 // OpenCL v2.0 s6.9.q:
6737 // The clk_event_t and reserve_id_t types cannot be declared in program
6738 // scope.
6739 if (NULL == S->getParent()) {
6740 if (R->isReserveIDT() || R->isClkEventT() || R->isEventT()) {
6741 Se.Diag(D.getIdentifierLoc(),
6742 diag::err_invalid_type_for_program_scope_var)
6743 << R;
6744 D.setInvalidType();
6745 return false;
6746 }
6747 }
6748
6749 // OpenCL v1.0 s6.8.a.3: Pointers to functions are not allowed.
6750 QualType NR = R;
6751 while (NR->isPointerType()) {
6752 if (NR->isFunctionPointerType()) {
6753 Se.Diag(D.getIdentifierLoc(), diag::err_opencl_function_pointer);
6754 D.setInvalidType();
6755 return false;
6756 }
6757 NR = NR->getPointeeType();
6758 }
6759
6760 if (!Se.getOpenCLOptions().isEnabled("cl_khr_fp16")) {
6761 // OpenCL v1.2 s6.1.1.1: reject declaring variables of the half and
6762 // half array type (unless the cl_khr_fp16 extension is enabled).
6763 if (Se.Context.getBaseElementType(R)->isHalfType()) {
6764 Se.Diag(D.getIdentifierLoc(), diag::err_opencl_half_declaration) << R;
6765 D.setInvalidType();
6766 return false;
6767 }
6768 }
6769
6770 // OpenCL v1.2 s6.9.r:
6771 // The event type cannot be used with the __local, __constant and __global
6772 // address space qualifiers.
6773 if (R->isEventT()) {
6774 if (R.getAddressSpace() != LangAS::opencl_private) {
6775 Se.Diag(D.getBeginLoc(), diag::err_event_t_addr_space_qual);
6776 D.setInvalidType();
6777 return false;
6778 }
6779 }
6780
6781 // C++ for OpenCL does not allow the thread_local storage qualifier.
6782 // OpenCL C does not support thread_local either, and
6783 // also reject all other thread storage class specifiers.
6784 DeclSpec::TSCS TSC = D.getDeclSpec().getThreadStorageClassSpec();
6785 if (TSC != TSCS_unspecified) {
6786 bool IsCXX = Se.getLangOpts().OpenCLCPlusPlus;
6787 Se.Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(),
6788 diag::err_opencl_unknown_type_specifier)
6789 << IsCXX << Se.getLangOpts().getOpenCLVersionTuple().getAsString()
6790 << DeclSpec::getSpecifierName(TSC) << 1;
6791 D.setInvalidType();
6792 return false;
6793 }
6794
6795 if (R->isSamplerT()) {
6796 // OpenCL v1.2 s6.9.b p4:
6797 // The sampler type cannot be used with the __local and __global address
6798 // space qualifiers.
6799 if (R.getAddressSpace() == LangAS::opencl_local ||
6800 R.getAddressSpace() == LangAS::opencl_global) {
6801 Se.Diag(D.getIdentifierLoc(), diag::err_wrong_sampler_addressspace);
6802 D.setInvalidType();
6803 }
6804
6805 // OpenCL v1.2 s6.12.14.1:
6806 // A global sampler must be declared with either the constant address
6807 // space qualifier or with the const qualifier.
6808 if (DC->isTranslationUnit() &&
6809 !(R.getAddressSpace() == LangAS::opencl_constant ||
6810 R.isConstQualified())) {
6811 Se.Diag(D.getIdentifierLoc(), diag::err_opencl_nonconst_global_sampler);
6812 D.setInvalidType();
6813 }
6814 if (D.isInvalidType())
6815 return false;
6816 }
6817 return true;
6818 }
6819
ActOnVariableDeclarator(Scope * S,Declarator & D,DeclContext * DC,TypeSourceInfo * TInfo,LookupResult & Previous,MultiTemplateParamsArg TemplateParamLists,bool & AddToScope,ArrayRef<BindingDecl * > Bindings)6820 NamedDecl *Sema::ActOnVariableDeclarator(
6821 Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo,
6822 LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists,
6823 bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {
6824 QualType R = TInfo->getType();
6825 DeclarationName Name = GetNameForDeclarator(D).getName();
6826
6827 IdentifierInfo *II = Name.getAsIdentifierInfo();
6828
6829 if (D.isDecompositionDeclarator()) {
6830 // Take the name of the first declarator as our name for diagnostic
6831 // purposes.
6832 auto &Decomp = D.getDecompositionDeclarator();
6833 if (!Decomp.bindings().empty()) {
6834 II = Decomp.bindings()[0].Name;
6835 Name = II;
6836 }
6837 } else if (!II) {
6838 Diag(D.getIdentifierLoc(), diag::err_bad_variable_name) << Name;
6839 return nullptr;
6840 }
6841
6842
6843 DeclSpec::SCS SCSpec = D.getDeclSpec().getStorageClassSpec();
6844 StorageClass SC = StorageClassSpecToVarDeclStorageClass(D.getDeclSpec());
6845
6846 // dllimport globals without explicit storage class are treated as extern. We
6847 // have to change the storage class this early to get the right DeclContext.
6848 if (SC == SC_None && !DC->isRecord() &&
6849 hasParsedAttr(S, D, ParsedAttr::AT_DLLImport) &&
6850 !hasParsedAttr(S, D, ParsedAttr::AT_DLLExport))
6851 SC = SC_Extern;
6852
6853 DeclContext *OriginalDC = DC;
6854 bool IsLocalExternDecl = SC == SC_Extern &&
6855 adjustContextForLocalExternDecl(DC);
6856
6857 if (SCSpec == DeclSpec::SCS_mutable) {
6858 // mutable can only appear on non-static class members, so it's always
6859 // an error here
6860 Diag(D.getIdentifierLoc(), diag::err_mutable_nonmember);
6861 D.setInvalidType();
6862 SC = SC_None;
6863 }
6864
6865 if (getLangOpts().CPlusPlus11 && SCSpec == DeclSpec::SCS_register &&
6866 !D.getAsmLabel() && !getSourceManager().isInSystemMacro(
6867 D.getDeclSpec().getStorageClassSpecLoc())) {
6868 // In C++11, the 'register' storage class specifier is deprecated.
6869 // Suppress the warning in system macros, it's used in macros in some
6870 // popular C system headers, such as in glibc's htonl() macro.
6871 Diag(D.getDeclSpec().getStorageClassSpecLoc(),
6872 getLangOpts().CPlusPlus17 ? diag::ext_register_storage_class
6873 : diag::warn_deprecated_register)
6874 << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
6875 }
6876
6877 DiagnoseFunctionSpecifiers(D.getDeclSpec());
6878
6879 if (!DC->isRecord() && S->getFnParent() == nullptr) {
6880 // C99 6.9p2: The storage-class specifiers auto and register shall not
6881 // appear in the declaration specifiers in an external declaration.
6882 // Global Register+Asm is a GNU extension we support.
6883 if (SC == SC_Auto || (SC == SC_Register && !D.getAsmLabel())) {
6884 Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);
6885 D.setInvalidType();
6886 }
6887 }
6888
6889 // If this variable has a variable-modified type and an initializer, try to
6890 // fold to a constant-sized type. This is otherwise invalid.
6891 if (D.hasInitializer() && R->isVariablyModifiedType())
6892 tryToFixVariablyModifiedVarType(*this, TInfo, R, D.getIdentifierLoc(),
6893 /*DiagID=*/0);
6894
6895 bool IsMemberSpecialization = false;
6896 bool IsVariableTemplateSpecialization = false;
6897 bool IsPartialSpecialization = false;
6898 bool IsVariableTemplate = false;
6899 VarDecl *NewVD = nullptr;
6900 VarTemplateDecl *NewTemplate = nullptr;
6901 TemplateParameterList *TemplateParams = nullptr;
6902 if (!getLangOpts().CPlusPlus) {
6903 NewVD = VarDecl::Create(Context, DC, D.getBeginLoc(), D.getIdentifierLoc(),
6904 II, R, TInfo, SC);
6905
6906 if (R->getContainedDeducedType())
6907 ParsingInitForAutoVars.insert(NewVD);
6908
6909 if (D.isInvalidType())
6910 NewVD->setInvalidDecl();
6911
6912 if (NewVD->getType().hasNonTrivialToPrimitiveDestructCUnion() &&
6913 NewVD->hasLocalStorage())
6914 checkNonTrivialCUnion(NewVD->getType(), NewVD->getLocation(),
6915 NTCUC_AutoVar, NTCUK_Destruct);
6916 } else {
6917 bool Invalid = false;
6918
6919 if (DC->isRecord() && !CurContext->isRecord()) {
6920 // This is an out-of-line definition of a static data member.
6921 switch (SC) {
6922 case SC_None:
6923 break;
6924 case SC_Static:
6925 Diag(D.getDeclSpec().getStorageClassSpecLoc(),
6926 diag::err_static_out_of_line)
6927 << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
6928 break;
6929 case SC_Auto:
6930 case SC_Register:
6931 case SC_Extern:
6932 // [dcl.stc] p2: The auto or register specifiers shall be applied only
6933 // to names of variables declared in a block or to function parameters.
6934 // [dcl.stc] p6: The extern specifier cannot be used in the declaration
6935 // of class members
6936
6937 Diag(D.getDeclSpec().getStorageClassSpecLoc(),
6938 diag::err_storage_class_for_static_member)
6939 << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
6940 break;
6941 case SC_PrivateExtern:
6942 llvm_unreachable("C storage class in c++!");
6943 }
6944 }
6945
6946 if (SC == SC_Static && CurContext->isRecord()) {
6947 if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {
6948 // Walk up the enclosing DeclContexts to check for any that are
6949 // incompatible with static data members.
6950 const DeclContext *FunctionOrMethod = nullptr;
6951 const CXXRecordDecl *AnonStruct = nullptr;
6952 for (DeclContext *Ctxt = DC; Ctxt; Ctxt = Ctxt->getParent()) {
6953 if (Ctxt->isFunctionOrMethod()) {
6954 FunctionOrMethod = Ctxt;
6955 break;
6956 }
6957 const CXXRecordDecl *ParentDecl = dyn_cast<CXXRecordDecl>(Ctxt);
6958 if (ParentDecl && !ParentDecl->getDeclName()) {
6959 AnonStruct = ParentDecl;
6960 break;
6961 }
6962 }
6963 if (FunctionOrMethod) {
6964 // C++ [class.static.data]p5: A local class shall not have static data
6965 // members.
6966 Diag(D.getIdentifierLoc(),
6967 diag::err_static_data_member_not_allowed_in_local_class)
6968 << Name << RD->getDeclName() << RD->getTagKind();
6969 } else if (AnonStruct) {
6970 // C++ [class.static.data]p4: Unnamed classes and classes contained
6971 // directly or indirectly within unnamed classes shall not contain
6972 // static data members.
6973 Diag(D.getIdentifierLoc(),
6974 diag::err_static_data_member_not_allowed_in_anon_struct)
6975 << Name << AnonStruct->getTagKind();
6976 Invalid = true;
6977 } else if (RD->isUnion()) {
6978 // C++98 [class.union]p1: If a union contains a static data member,
6979 // the program is ill-formed. C++11 drops this restriction.
6980 Diag(D.getIdentifierLoc(),
6981 getLangOpts().CPlusPlus11
6982 ? diag::warn_cxx98_compat_static_data_member_in_union
6983 : diag::ext_static_data_member_in_union) << Name;
6984 }
6985 }
6986 }
6987
6988 // Match up the template parameter lists with the scope specifier, then
6989 // determine whether we have a template or a template specialization.
6990 bool InvalidScope = false;
6991 TemplateParams = MatchTemplateParametersToScopeSpecifier(
6992 D.getDeclSpec().getBeginLoc(), D.getIdentifierLoc(),
6993 D.getCXXScopeSpec(),
6994 D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId
6995 ? D.getName().TemplateId
6996 : nullptr,
6997 TemplateParamLists,
6998 /*never a friend*/ false, IsMemberSpecialization, InvalidScope);
6999 Invalid |= InvalidScope;
7000
7001 if (TemplateParams) {
7002 if (!TemplateParams->size() &&
7003 D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {
7004 // There is an extraneous 'template<>' for this variable. Complain
7005 // about it, but allow the declaration of the variable.
7006 Diag(TemplateParams->getTemplateLoc(),
7007 diag::err_template_variable_noparams)
7008 << II
7009 << SourceRange(TemplateParams->getTemplateLoc(),
7010 TemplateParams->getRAngleLoc());
7011 TemplateParams = nullptr;
7012 } else {
7013 // Check that we can declare a template here.
7014 if (CheckTemplateDeclScope(S, TemplateParams))
7015 return nullptr;
7016
7017 if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {
7018 // This is an explicit specialization or a partial specialization.
7019 IsVariableTemplateSpecialization = true;
7020 IsPartialSpecialization = TemplateParams->size() > 0;
7021 } else { // if (TemplateParams->size() > 0)
7022 // This is a template declaration.
7023 IsVariableTemplate = true;
7024
7025 // Only C++1y supports variable templates (N3651).
7026 Diag(D.getIdentifierLoc(),
7027 getLangOpts().CPlusPlus14
7028 ? diag::warn_cxx11_compat_variable_template
7029 : diag::ext_variable_template);
7030 }
7031 }
7032 } else {
7033 // Check that we can declare a member specialization here.
7034 if (!TemplateParamLists.empty() && IsMemberSpecialization &&
7035 CheckTemplateDeclScope(S, TemplateParamLists.back()))
7036 return nullptr;
7037 assert((Invalid ||
7038 D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) &&
7039 "should have a 'template<>' for this decl");
7040 }
7041
7042 if (IsVariableTemplateSpecialization) {
7043 SourceLocation TemplateKWLoc =
7044 TemplateParamLists.size() > 0
7045 ? TemplateParamLists[0]->getTemplateLoc()
7046 : SourceLocation();
7047 DeclResult Res = ActOnVarTemplateSpecialization(
7048 S, D, TInfo, TemplateKWLoc, TemplateParams, SC,
7049 IsPartialSpecialization);
7050 if (Res.isInvalid())
7051 return nullptr;
7052 NewVD = cast<VarDecl>(Res.get());
7053 AddToScope = false;
7054 } else if (D.isDecompositionDeclarator()) {
7055 NewVD = DecompositionDecl::Create(Context, DC, D.getBeginLoc(),
7056 D.getIdentifierLoc(), R, TInfo, SC,
7057 Bindings);
7058 } else
7059 NewVD = VarDecl::Create(Context, DC, D.getBeginLoc(),
7060 D.getIdentifierLoc(), II, R, TInfo, SC);
7061
7062 // If this is supposed to be a variable template, create it as such.
7063 if (IsVariableTemplate) {
7064 NewTemplate =
7065 VarTemplateDecl::Create(Context, DC, D.getIdentifierLoc(), Name,
7066 TemplateParams, NewVD);
7067 NewVD->setDescribedVarTemplate(NewTemplate);
7068 }
7069
7070 // If this decl has an auto type in need of deduction, make a note of the
7071 // Decl so we can diagnose uses of it in its own initializer.
7072 if (R->getContainedDeducedType())
7073 ParsingInitForAutoVars.insert(NewVD);
7074
7075 if (D.isInvalidType() || Invalid) {
7076 NewVD->setInvalidDecl();
7077 if (NewTemplate)
7078 NewTemplate->setInvalidDecl();
7079 }
7080
7081 SetNestedNameSpecifier(*this, NewVD, D);
7082
7083 // If we have any template parameter lists that don't directly belong to
7084 // the variable (matching the scope specifier), store them.
7085 unsigned VDTemplateParamLists = TemplateParams ? 1 : 0;
7086 if (TemplateParamLists.size() > VDTemplateParamLists)
7087 NewVD->setTemplateParameterListsInfo(
7088 Context, TemplateParamLists.drop_back(VDTemplateParamLists));
7089 }
7090
7091 if (D.getDeclSpec().isInlineSpecified()) {
7092 if (!getLangOpts().CPlusPlus) {
7093 Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_non_function)
7094 << 0;
7095 } else if (CurContext->isFunctionOrMethod()) {
7096 // 'inline' is not allowed on block scope variable declaration.
7097 Diag(D.getDeclSpec().getInlineSpecLoc(),
7098 diag::err_inline_declaration_block_scope) << Name
7099 << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());
7100 } else {
7101 Diag(D.getDeclSpec().getInlineSpecLoc(),
7102 getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_inline_variable
7103 : diag::ext_inline_variable);
7104 NewVD->setInlineSpecified();
7105 }
7106 }
7107
7108 // Set the lexical context. If the declarator has a C++ scope specifier, the
7109 // lexical context will be different from the semantic context.
7110 NewVD->setLexicalDeclContext(CurContext);
7111 if (NewTemplate)
7112 NewTemplate->setLexicalDeclContext(CurContext);
7113
7114 if (IsLocalExternDecl) {
7115 if (D.isDecompositionDeclarator())
7116 for (auto *B : Bindings)
7117 B->setLocalExternDecl();
7118 else
7119 NewVD->setLocalExternDecl();
7120 }
7121
7122 bool EmitTLSUnsupportedError = false;
7123 if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {
7124 // C++11 [dcl.stc]p4:
7125 // When thread_local is applied to a variable of block scope the
7126 // storage-class-specifier static is implied if it does not appear
7127 // explicitly.
7128 // Core issue: 'static' is not implied if the variable is declared
7129 // 'extern'.
7130 if (NewVD->hasLocalStorage() &&
7131 (SCSpec != DeclSpec::SCS_unspecified ||
7132 TSCS != DeclSpec::TSCS_thread_local ||
7133 !DC->isFunctionOrMethod()))
7134 Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(),
7135 diag::err_thread_non_global)
7136 << DeclSpec::getSpecifierName(TSCS);
7137 else if (!Context.getTargetInfo().isTLSSupported()) {
7138 if (getLangOpts().CUDA || getLangOpts().OpenMPIsDevice ||
7139 getLangOpts().SYCLIsDevice) {
7140 // Postpone error emission until we've collected attributes required to
7141 // figure out whether it's a host or device variable and whether the
7142 // error should be ignored.
7143 EmitTLSUnsupportedError = true;
7144 // We still need to mark the variable as TLS so it shows up in AST with
7145 // proper storage class for other tools to use even if we're not going
7146 // to emit any code for it.
7147 NewVD->setTSCSpec(TSCS);
7148 } else
7149 Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(),
7150 diag::err_thread_unsupported);
7151 } else
7152 NewVD->setTSCSpec(TSCS);
7153 }
7154
7155 switch (D.getDeclSpec().getConstexprSpecifier()) {
7156 case ConstexprSpecKind::Unspecified:
7157 break;
7158
7159 case ConstexprSpecKind::Consteval:
7160 Diag(D.getDeclSpec().getConstexprSpecLoc(),
7161 diag::err_constexpr_wrong_decl_kind)
7162 << static_cast<int>(D.getDeclSpec().getConstexprSpecifier());
7163 LLVM_FALLTHROUGH;
7164
7165 case ConstexprSpecKind::Constexpr:
7166 NewVD->setConstexpr(true);
7167 MaybeAddCUDAConstantAttr(NewVD);
7168 // C++1z [dcl.spec.constexpr]p1:
7169 // A static data member declared with the constexpr specifier is
7170 // implicitly an inline variable.
7171 if (NewVD->isStaticDataMember() &&
7172 (getLangOpts().CPlusPlus17 ||
7173 Context.getTargetInfo().getCXXABI().isMicrosoft()))
7174 NewVD->setImplicitlyInline();
7175 break;
7176
7177 case ConstexprSpecKind::Constinit:
7178 if (!NewVD->hasGlobalStorage())
7179 Diag(D.getDeclSpec().getConstexprSpecLoc(),
7180 diag::err_constinit_local_variable);
7181 else
7182 NewVD->addAttr(ConstInitAttr::Create(
7183 Context, D.getDeclSpec().getConstexprSpecLoc(),
7184 AttributeCommonInfo::AS_Keyword, ConstInitAttr::Keyword_constinit));
7185 break;
7186 }
7187
7188 // C99 6.7.4p3
7189 // An inline definition of a function with external linkage shall
7190 // not contain a definition of a modifiable object with static or
7191 // thread storage duration...
7192 // We only apply this when the function is required to be defined
7193 // elsewhere, i.e. when the function is not 'extern inline'. Note
7194 // that a local variable with thread storage duration still has to
7195 // be marked 'static'. Also note that it's possible to get these
7196 // semantics in C++ using __attribute__((gnu_inline)).
7197 if (SC == SC_Static && S->getFnParent() != nullptr &&
7198 !NewVD->getType().isConstQualified()) {
7199 FunctionDecl *CurFD = getCurFunctionDecl();
7200 if (CurFD && isFunctionDefinitionDiscarded(*this, CurFD)) {
7201 Diag(D.getDeclSpec().getStorageClassSpecLoc(),
7202 diag::warn_static_local_in_extern_inline);
7203 MaybeSuggestAddingStaticToDecl(CurFD);
7204 }
7205 }
7206
7207 if (D.getDeclSpec().isModulePrivateSpecified()) {
7208 if (IsVariableTemplateSpecialization)
7209 Diag(NewVD->getLocation(), diag::err_module_private_specialization)
7210 << (IsPartialSpecialization ? 1 : 0)
7211 << FixItHint::CreateRemoval(
7212 D.getDeclSpec().getModulePrivateSpecLoc());
7213 else if (IsMemberSpecialization)
7214 Diag(NewVD->getLocation(), diag::err_module_private_specialization)
7215 << 2
7216 << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());
7217 else if (NewVD->hasLocalStorage())
7218 Diag(NewVD->getLocation(), diag::err_module_private_local)
7219 << 0 << NewVD
7220 << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc())
7221 << FixItHint::CreateRemoval(
7222 D.getDeclSpec().getModulePrivateSpecLoc());
7223 else {
7224 NewVD->setModulePrivate();
7225 if (NewTemplate)
7226 NewTemplate->setModulePrivate();
7227 for (auto *B : Bindings)
7228 B->setModulePrivate();
7229 }
7230 }
7231
7232 if (getLangOpts().OpenCL) {
7233
7234 deduceOpenCLAddressSpace(NewVD);
7235
7236 diagnoseOpenCLTypes(S, *this, D, DC, NewVD->getType());
7237 }
7238
7239 // Handle attributes prior to checking for duplicates in MergeVarDecl
7240 ProcessDeclAttributes(S, NewVD, D);
7241
7242 if (getLangOpts().CUDA || getLangOpts().OpenMPIsDevice ||
7243 getLangOpts().SYCLIsDevice) {
7244 if (EmitTLSUnsupportedError &&
7245 ((getLangOpts().CUDA && DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) ||
7246 (getLangOpts().OpenMPIsDevice &&
7247 OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(NewVD))))
7248 Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(),
7249 diag::err_thread_unsupported);
7250
7251 if (EmitTLSUnsupportedError &&
7252 (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsDevice)))
7253 targetDiag(D.getIdentifierLoc(), diag::err_thread_unsupported);
7254 // CUDA B.2.5: "__shared__ and __constant__ variables have implied static
7255 // storage [duration]."
7256 if (SC == SC_None && S->getFnParent() != nullptr &&
7257 (NewVD->hasAttr<CUDASharedAttr>() ||
7258 NewVD->hasAttr<CUDAConstantAttr>())) {
7259 NewVD->setStorageClass(SC_Static);
7260 }
7261 }
7262
7263 // Ensure that dllimport globals without explicit storage class are treated as
7264 // extern. The storage class is set above using parsed attributes. Now we can
7265 // check the VarDecl itself.
7266 assert(!NewVD->hasAttr<DLLImportAttr>() ||
7267 NewVD->getAttr<DLLImportAttr>()->isInherited() ||
7268 NewVD->isStaticDataMember() || NewVD->getStorageClass() != SC_None);
7269
7270 // In auto-retain/release, infer strong retension for variables of
7271 // retainable type.
7272 if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(NewVD))
7273 NewVD->setInvalidDecl();
7274
7275 // Handle GNU asm-label extension (encoded as an attribute).
7276 if (Expr *E = (Expr*)D.getAsmLabel()) {
7277 // The parser guarantees this is a string.
7278 StringLiteral *SE = cast<StringLiteral>(E);
7279 StringRef Label = SE->getString();
7280 if (S->getFnParent() != nullptr) {
7281 switch (SC) {
7282 case SC_None:
7283 case SC_Auto:
7284 Diag(E->getExprLoc(), diag::warn_asm_label_on_auto_decl) << Label;
7285 break;
7286 case SC_Register:
7287 // Local Named register
7288 if (!Context.getTargetInfo().isValidGCCRegisterName(Label) &&
7289 DeclAttrsMatchCUDAMode(getLangOpts(), getCurFunctionDecl()))
7290 Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label;
7291 break;
7292 case SC_Static:
7293 case SC_Extern:
7294 case SC_PrivateExtern:
7295 break;
7296 }
7297 } else if (SC == SC_Register) {
7298 // Global Named register
7299 if (DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) {
7300 const auto &TI = Context.getTargetInfo();
7301 bool HasSizeMismatch;
7302
7303 if (!TI.isValidGCCRegisterName(Label))
7304 Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label;
7305 else if (!TI.validateGlobalRegisterVariable(Label,
7306 Context.getTypeSize(R),
7307 HasSizeMismatch))
7308 Diag(E->getExprLoc(), diag::err_asm_invalid_global_var_reg) << Label;
7309 else if (HasSizeMismatch)
7310 Diag(E->getExprLoc(), diag::err_asm_register_size_mismatch) << Label;
7311 }
7312
7313 if (!R->isIntegralType(Context) && !R->isPointerType()) {
7314 Diag(D.getBeginLoc(), diag::err_asm_bad_register_type);
7315 NewVD->setInvalidDecl(true);
7316 }
7317 }
7318
7319 NewVD->addAttr(AsmLabelAttr::Create(Context, Label,
7320 /*IsLiteralLabel=*/true,
7321 SE->getStrTokenLoc(0)));
7322 } else if (!ExtnameUndeclaredIdentifiers.empty()) {
7323 llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*>::iterator I =
7324 ExtnameUndeclaredIdentifiers.find(NewVD->getIdentifier());
7325 if (I != ExtnameUndeclaredIdentifiers.end()) {
7326 if (isDeclExternC(NewVD)) {
7327 NewVD->addAttr(I->second);
7328 ExtnameUndeclaredIdentifiers.erase(I);
7329 } else
7330 Diag(NewVD->getLocation(), diag::warn_redefine_extname_not_applied)
7331 << /*Variable*/1 << NewVD;
7332 }
7333 }
7334
7335 // Find the shadowed declaration before filtering for scope.
7336 NamedDecl *ShadowedDecl = D.getCXXScopeSpec().isEmpty()
7337 ? getShadowedDeclaration(NewVD, Previous)
7338 : nullptr;
7339
7340 // Don't consider existing declarations that are in a different
7341 // scope and are out-of-semantic-context declarations (if the new
7342 // declaration has linkage).
7343 FilterLookupForScope(Previous, OriginalDC, S, shouldConsiderLinkage(NewVD),
7344 D.getCXXScopeSpec().isNotEmpty() ||
7345 IsMemberSpecialization ||
7346 IsVariableTemplateSpecialization);
7347
7348 // Check whether the previous declaration is in the same block scope. This
7349 // affects whether we merge types with it, per C++11 [dcl.array]p3.
7350 if (getLangOpts().CPlusPlus &&
7351 NewVD->isLocalVarDecl() && NewVD->hasExternalStorage())
7352 NewVD->setPreviousDeclInSameBlockScope(
7353 Previous.isSingleResult() && !Previous.isShadowed() &&
7354 isDeclInScope(Previous.getFoundDecl(), OriginalDC, S, false));
7355
7356 if (!getLangOpts().CPlusPlus) {
7357 D.setRedeclaration(CheckVariableDeclaration(NewVD, Previous));
7358 } else {
7359 // If this is an explicit specialization of a static data member, check it.
7360 if (IsMemberSpecialization && !NewVD->isInvalidDecl() &&
7361 CheckMemberSpecialization(NewVD, Previous))
7362 NewVD->setInvalidDecl();
7363
7364 // Merge the decl with the existing one if appropriate.
7365 if (!Previous.empty()) {
7366 if (Previous.isSingleResult() &&
7367 isa<FieldDecl>(Previous.getFoundDecl()) &&
7368 D.getCXXScopeSpec().isSet()) {
7369 // The user tried to define a non-static data member
7370 // out-of-line (C++ [dcl.meaning]p1).
7371 Diag(NewVD->getLocation(), diag::err_nonstatic_member_out_of_line)
7372 << D.getCXXScopeSpec().getRange();
7373 Previous.clear();
7374 NewVD->setInvalidDecl();
7375 }
7376 } else if (D.getCXXScopeSpec().isSet()) {
7377 // No previous declaration in the qualifying scope.
7378 Diag(D.getIdentifierLoc(), diag::err_no_member)
7379 << Name << computeDeclContext(D.getCXXScopeSpec(), true)
7380 << D.getCXXScopeSpec().getRange();
7381 NewVD->setInvalidDecl();
7382 }
7383
7384 if (!IsVariableTemplateSpecialization)
7385 D.setRedeclaration(CheckVariableDeclaration(NewVD, Previous));
7386
7387 if (NewTemplate) {
7388 VarTemplateDecl *PrevVarTemplate =
7389 NewVD->getPreviousDecl()
7390 ? NewVD->getPreviousDecl()->getDescribedVarTemplate()
7391 : nullptr;
7392
7393 // Check the template parameter list of this declaration, possibly
7394 // merging in the template parameter list from the previous variable
7395 // template declaration.
7396 if (CheckTemplateParameterList(
7397 TemplateParams,
7398 PrevVarTemplate ? PrevVarTemplate->getTemplateParameters()
7399 : nullptr,
7400 (D.getCXXScopeSpec().isSet() && DC && DC->isRecord() &&
7401 DC->isDependentContext())
7402 ? TPC_ClassTemplateMember
7403 : TPC_VarTemplate))
7404 NewVD->setInvalidDecl();
7405
7406 // If we are providing an explicit specialization of a static variable
7407 // template, make a note of that.
7408 if (PrevVarTemplate &&
7409 PrevVarTemplate->getInstantiatedFromMemberTemplate())
7410 PrevVarTemplate->setMemberSpecialization();
7411 }
7412 }
7413
7414 // Diagnose shadowed variables iff this isn't a redeclaration.
7415 if (ShadowedDecl && !D.isRedeclaration())
7416 CheckShadow(NewVD, ShadowedDecl, Previous);
7417
7418 ProcessPragmaWeak(S, NewVD);
7419
7420 // If this is the first declaration of an extern C variable, update
7421 // the map of such variables.
7422 if (NewVD->isFirstDecl() && !NewVD->isInvalidDecl() &&
7423 isIncompleteDeclExternC(*this, NewVD))
7424 RegisterLocallyScopedExternCDecl(NewVD, S);
7425
7426 if (getLangOpts().CPlusPlus && NewVD->isStaticLocal()) {
7427 MangleNumberingContext *MCtx;
7428 Decl *ManglingContextDecl;
7429 std::tie(MCtx, ManglingContextDecl) =
7430 getCurrentMangleNumberContext(NewVD->getDeclContext());
7431 if (MCtx) {
7432 Context.setManglingNumber(
7433 NewVD, MCtx->getManglingNumber(
7434 NewVD, getMSManglingNumber(getLangOpts(), S)));
7435 Context.setStaticLocalNumber(NewVD, MCtx->getStaticLocalNumber(NewVD));
7436 }
7437 }
7438
7439 // Special handling of variable named 'main'.
7440 if (Name.getAsIdentifierInfo() && Name.getAsIdentifierInfo()->isStr("main") &&
7441 NewVD->getDeclContext()->getRedeclContext()->isTranslationUnit() &&
7442 !getLangOpts().Freestanding && !NewVD->getDescribedVarTemplate()) {
7443
7444 // C++ [basic.start.main]p3
7445 // A program that declares a variable main at global scope is ill-formed.
7446 if (getLangOpts().CPlusPlus)
7447 Diag(D.getBeginLoc(), diag::err_main_global_variable);
7448
7449 // In C, and external-linkage variable named main results in undefined
7450 // behavior.
7451 else if (NewVD->hasExternalFormalLinkage())
7452 Diag(D.getBeginLoc(), diag::warn_main_redefined);
7453 }
7454
7455 if (D.isRedeclaration() && !Previous.empty()) {
7456 NamedDecl *Prev = Previous.getRepresentativeDecl();
7457 checkDLLAttributeRedeclaration(*this, Prev, NewVD, IsMemberSpecialization,
7458 D.isFunctionDefinition());
7459 }
7460
7461 if (NewTemplate) {
7462 if (NewVD->isInvalidDecl())
7463 NewTemplate->setInvalidDecl();
7464 ActOnDocumentableDecl(NewTemplate);
7465 return NewTemplate;
7466 }
7467
7468 if (IsMemberSpecialization && !NewVD->isInvalidDecl())
7469 CompleteMemberSpecialization(NewVD, Previous);
7470
7471 return NewVD;
7472 }
7473
7474 /// Enum describing the %select options in diag::warn_decl_shadow.
7475 enum ShadowedDeclKind {
7476 SDK_Local,
7477 SDK_Global,
7478 SDK_StaticMember,
7479 SDK_Field,
7480 SDK_Typedef,
7481 SDK_Using
7482 };
7483
7484 /// Determine what kind of declaration we're shadowing.
computeShadowedDeclKind(const NamedDecl * ShadowedDecl,const DeclContext * OldDC)7485 static ShadowedDeclKind computeShadowedDeclKind(const NamedDecl *ShadowedDecl,
7486 const DeclContext *OldDC) {
7487 if (isa<TypeAliasDecl>(ShadowedDecl))
7488 return SDK_Using;
7489 else if (isa<TypedefDecl>(ShadowedDecl))
7490 return SDK_Typedef;
7491 else if (isa<RecordDecl>(OldDC))
7492 return isa<FieldDecl>(ShadowedDecl) ? SDK_Field : SDK_StaticMember;
7493
7494 return OldDC->isFileContext() ? SDK_Global : SDK_Local;
7495 }
7496
7497 /// Return the location of the capture if the given lambda captures the given
7498 /// variable \p VD, or an invalid source location otherwise.
getCaptureLocation(const LambdaScopeInfo * LSI,const VarDecl * VD)7499 static SourceLocation getCaptureLocation(const LambdaScopeInfo *LSI,
7500 const VarDecl *VD) {
7501 for (const Capture &Capture : LSI->Captures) {
7502 if (Capture.isVariableCapture() && Capture.getVariable() == VD)
7503 return Capture.getLocation();
7504 }
7505 return SourceLocation();
7506 }
7507
shouldWarnIfShadowedDecl(const DiagnosticsEngine & Diags,const LookupResult & R)7508 static bool shouldWarnIfShadowedDecl(const DiagnosticsEngine &Diags,
7509 const LookupResult &R) {
7510 // Only diagnose if we're shadowing an unambiguous field or variable.
7511 if (R.getResultKind() != LookupResult::Found)
7512 return false;
7513
7514 // Return false if warning is ignored.
7515 return !Diags.isIgnored(diag::warn_decl_shadow, R.getNameLoc());
7516 }
7517
7518 /// Return the declaration shadowed by the given variable \p D, or null
7519 /// if it doesn't shadow any declaration or shadowing warnings are disabled.
getShadowedDeclaration(const VarDecl * D,const LookupResult & R)7520 NamedDecl *Sema::getShadowedDeclaration(const VarDecl *D,
7521 const LookupResult &R) {
7522 if (!shouldWarnIfShadowedDecl(Diags, R))
7523 return nullptr;
7524
7525 // Don't diagnose declarations at file scope.
7526 if (D->hasGlobalStorage())
7527 return nullptr;
7528
7529 NamedDecl *ShadowedDecl = R.getFoundDecl();
7530 return isa<VarDecl>(ShadowedDecl) || isa<FieldDecl>(ShadowedDecl)
7531 ? ShadowedDecl
7532 : nullptr;
7533 }
7534
7535 /// Return the declaration shadowed by the given typedef \p D, or null
7536 /// if it doesn't shadow any declaration or shadowing warnings are disabled.
getShadowedDeclaration(const TypedefNameDecl * D,const LookupResult & R)7537 NamedDecl *Sema::getShadowedDeclaration(const TypedefNameDecl *D,
7538 const LookupResult &R) {
7539 // Don't warn if typedef declaration is part of a class
7540 if (D->getDeclContext()->isRecord())
7541 return nullptr;
7542
7543 if (!shouldWarnIfShadowedDecl(Diags, R))
7544 return nullptr;
7545
7546 NamedDecl *ShadowedDecl = R.getFoundDecl();
7547 return isa<TypedefNameDecl>(ShadowedDecl) ? ShadowedDecl : nullptr;
7548 }
7549
7550 /// Diagnose variable or built-in function shadowing. Implements
7551 /// -Wshadow.
7552 ///
7553 /// This method is called whenever a VarDecl is added to a "useful"
7554 /// scope.
7555 ///
7556 /// \param ShadowedDecl the declaration that is shadowed by the given variable
7557 /// \param R the lookup of the name
7558 ///
CheckShadow(NamedDecl * D,NamedDecl * ShadowedDecl,const LookupResult & R)7559 void Sema::CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl,
7560 const LookupResult &R) {
7561 DeclContext *NewDC = D->getDeclContext();
7562
7563 if (FieldDecl *FD = dyn_cast<FieldDecl>(ShadowedDecl)) {
7564 // Fields are not shadowed by variables in C++ static methods.
7565 if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewDC))
7566 if (MD->isStatic())
7567 return;
7568
7569 // Fields shadowed by constructor parameters are a special case. Usually
7570 // the constructor initializes the field with the parameter.
7571 if (isa<CXXConstructorDecl>(NewDC))
7572 if (const auto PVD = dyn_cast<ParmVarDecl>(D)) {
7573 // Remember that this was shadowed so we can either warn about its
7574 // modification or its existence depending on warning settings.
7575 ShadowingDecls.insert({PVD->getCanonicalDecl(), FD});
7576 return;
7577 }
7578 }
7579
7580 if (VarDecl *shadowedVar = dyn_cast<VarDecl>(ShadowedDecl))
7581 if (shadowedVar->isExternC()) {
7582 // For shadowing external vars, make sure that we point to the global
7583 // declaration, not a locally scoped extern declaration.
7584 for (auto I : shadowedVar->redecls())
7585 if (I->isFileVarDecl()) {
7586 ShadowedDecl = I;
7587 break;
7588 }
7589 }
7590
7591 DeclContext *OldDC = ShadowedDecl->getDeclContext()->getRedeclContext();
7592
7593 unsigned WarningDiag = diag::warn_decl_shadow;
7594 SourceLocation CaptureLoc;
7595 if (isa<VarDecl>(D) && isa<VarDecl>(ShadowedDecl) && NewDC &&
7596 isa<CXXMethodDecl>(NewDC)) {
7597 if (const auto *RD = dyn_cast<CXXRecordDecl>(NewDC->getParent())) {
7598 if (RD->isLambda() && OldDC->Encloses(NewDC->getLexicalParent())) {
7599 if (RD->getLambdaCaptureDefault() == LCD_None) {
7600 // Try to avoid warnings for lambdas with an explicit capture list.
7601 const auto *LSI = cast<LambdaScopeInfo>(getCurFunction());
7602 // Warn only when the lambda captures the shadowed decl explicitly.
7603 CaptureLoc = getCaptureLocation(LSI, cast<VarDecl>(ShadowedDecl));
7604 if (CaptureLoc.isInvalid())
7605 WarningDiag = diag::warn_decl_shadow_uncaptured_local;
7606 } else {
7607 // Remember that this was shadowed so we can avoid the warning if the
7608 // shadowed decl isn't captured and the warning settings allow it.
7609 cast<LambdaScopeInfo>(getCurFunction())
7610 ->ShadowingDecls.push_back(
7611 {cast<VarDecl>(D), cast<VarDecl>(ShadowedDecl)});
7612 return;
7613 }
7614 }
7615
7616 if (cast<VarDecl>(ShadowedDecl)->hasLocalStorage()) {
7617 // A variable can't shadow a local variable in an enclosing scope, if
7618 // they are separated by a non-capturing declaration context.
7619 for (DeclContext *ParentDC = NewDC;
7620 ParentDC && !ParentDC->Equals(OldDC);
7621 ParentDC = getLambdaAwareParentOfDeclContext(ParentDC)) {
7622 // Only block literals, captured statements, and lambda expressions
7623 // can capture; other scopes don't.
7624 if (!isa<BlockDecl>(ParentDC) && !isa<CapturedDecl>(ParentDC) &&
7625 !isLambdaCallOperator(ParentDC)) {
7626 return;
7627 }
7628 }
7629 }
7630 }
7631 }
7632
7633 // Only warn about certain kinds of shadowing for class members.
7634 if (NewDC && NewDC->isRecord()) {
7635 // In particular, don't warn about shadowing non-class members.
7636 if (!OldDC->isRecord())
7637 return;
7638
7639 // TODO: should we warn about static data members shadowing
7640 // static data members from base classes?
7641
7642 // TODO: don't diagnose for inaccessible shadowed members.
7643 // This is hard to do perfectly because we might friend the
7644 // shadowing context, but that's just a false negative.
7645 }
7646
7647
7648 DeclarationName Name = R.getLookupName();
7649
7650 // Emit warning and note.
7651 if (getSourceManager().isInSystemMacro(R.getNameLoc()))
7652 return;
7653 ShadowedDeclKind Kind = computeShadowedDeclKind(ShadowedDecl, OldDC);
7654 Diag(R.getNameLoc(), WarningDiag) << Name << Kind << OldDC;
7655 if (!CaptureLoc.isInvalid())
7656 Diag(CaptureLoc, diag::note_var_explicitly_captured_here)
7657 << Name << /*explicitly*/ 1;
7658 Diag(ShadowedDecl->getLocation(), diag::note_previous_declaration);
7659 }
7660
7661 /// Diagnose shadowing for variables shadowed in the lambda record \p LambdaRD
7662 /// when these variables are captured by the lambda.
DiagnoseShadowingLambdaDecls(const LambdaScopeInfo * LSI)7663 void Sema::DiagnoseShadowingLambdaDecls(const LambdaScopeInfo *LSI) {
7664 for (const auto &Shadow : LSI->ShadowingDecls) {
7665 const VarDecl *ShadowedDecl = Shadow.ShadowedDecl;
7666 // Try to avoid the warning when the shadowed decl isn't captured.
7667 SourceLocation CaptureLoc = getCaptureLocation(LSI, ShadowedDecl);
7668 const DeclContext *OldDC = ShadowedDecl->getDeclContext();
7669 Diag(Shadow.VD->getLocation(), CaptureLoc.isInvalid()
7670 ? diag::warn_decl_shadow_uncaptured_local
7671 : diag::warn_decl_shadow)
7672 << Shadow.VD->getDeclName()
7673 << computeShadowedDeclKind(ShadowedDecl, OldDC) << OldDC;
7674 if (!CaptureLoc.isInvalid())
7675 Diag(CaptureLoc, diag::note_var_explicitly_captured_here)
7676 << Shadow.VD->getDeclName() << /*explicitly*/ 0;
7677 Diag(ShadowedDecl->getLocation(), diag::note_previous_declaration);
7678 }
7679 }
7680
7681 /// Check -Wshadow without the advantage of a previous lookup.
CheckShadow(Scope * S,VarDecl * D)7682 void Sema::CheckShadow(Scope *S, VarDecl *D) {
7683 if (Diags.isIgnored(diag::warn_decl_shadow, D->getLocation()))
7684 return;
7685
7686 LookupResult R(*this, D->getDeclName(), D->getLocation(),
7687 Sema::LookupOrdinaryName, Sema::ForVisibleRedeclaration);
7688 LookupName(R, S);
7689 if (NamedDecl *ShadowedDecl = getShadowedDeclaration(D, R))
7690 CheckShadow(D, ShadowedDecl, R);
7691 }
7692
7693 /// Check if 'E', which is an expression that is about to be modified, refers
7694 /// to a constructor parameter that shadows a field.
CheckShadowingDeclModification(Expr * E,SourceLocation Loc)7695 void Sema::CheckShadowingDeclModification(Expr *E, SourceLocation Loc) {
7696 // Quickly ignore expressions that can't be shadowing ctor parameters.
7697 if (!getLangOpts().CPlusPlus || ShadowingDecls.empty())
7698 return;
7699 E = E->IgnoreParenImpCasts();
7700 auto *DRE = dyn_cast<DeclRefExpr>(E);
7701 if (!DRE)
7702 return;
7703 const NamedDecl *D = cast<NamedDecl>(DRE->getDecl()->getCanonicalDecl());
7704 auto I = ShadowingDecls.find(D);
7705 if (I == ShadowingDecls.end())
7706 return;
7707 const NamedDecl *ShadowedDecl = I->second;
7708 const DeclContext *OldDC = ShadowedDecl->getDeclContext();
7709 Diag(Loc, diag::warn_modifying_shadowing_decl) << D << OldDC;
7710 Diag(D->getLocation(), diag::note_var_declared_here) << D;
7711 Diag(ShadowedDecl->getLocation(), diag::note_previous_declaration);
7712
7713 // Avoid issuing multiple warnings about the same decl.
7714 ShadowingDecls.erase(I);
7715 }
7716
7717 /// Check for conflict between this global or extern "C" declaration and
7718 /// previous global or extern "C" declarations. This is only used in C++.
7719 template<typename T>
checkGlobalOrExternCConflict(Sema & S,const T * ND,bool IsGlobal,LookupResult & Previous)7720 static bool checkGlobalOrExternCConflict(
7721 Sema &S, const T *ND, bool IsGlobal, LookupResult &Previous) {
7722 assert(S.getLangOpts().CPlusPlus && "only C++ has extern \"C\"");
7723 NamedDecl *Prev = S.findLocallyScopedExternCDecl(ND->getDeclName());
7724
7725 if (!Prev && IsGlobal && !isIncompleteDeclExternC(S, ND)) {
7726 // The common case: this global doesn't conflict with any extern "C"
7727 // declaration.
7728 return false;
7729 }
7730
7731 if (Prev) {
7732 if (!IsGlobal || isIncompleteDeclExternC(S, ND)) {
7733 // Both the old and new declarations have C language linkage. This is a
7734 // redeclaration.
7735 Previous.clear();
7736 Previous.addDecl(Prev);
7737 return true;
7738 }
7739
7740 // This is a global, non-extern "C" declaration, and there is a previous
7741 // non-global extern "C" declaration. Diagnose if this is a variable
7742 // declaration.
7743 if (!isa<VarDecl>(ND))
7744 return false;
7745 } else {
7746 // The declaration is extern "C". Check for any declaration in the
7747 // translation unit which might conflict.
7748 if (IsGlobal) {
7749 // We have already performed the lookup into the translation unit.
7750 IsGlobal = false;
7751 for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
7752 I != E; ++I) {
7753 if (isa<VarDecl>(*I)) {
7754 Prev = *I;
7755 break;
7756 }
7757 }
7758 } else {
7759 DeclContext::lookup_result R =
7760 S.Context.getTranslationUnitDecl()->lookup(ND->getDeclName());
7761 for (DeclContext::lookup_result::iterator I = R.begin(), E = R.end();
7762 I != E; ++I) {
7763 if (isa<VarDecl>(*I)) {
7764 Prev = *I;
7765 break;
7766 }
7767 // FIXME: If we have any other entity with this name in global scope,
7768 // the declaration is ill-formed, but that is a defect: it breaks the
7769 // 'stat' hack, for instance. Only variables can have mangled name
7770 // clashes with extern "C" declarations, so only they deserve a
7771 // diagnostic.
7772 }
7773 }
7774
7775 if (!Prev)
7776 return false;
7777 }
7778
7779 // Use the first declaration's location to ensure we point at something which
7780 // is lexically inside an extern "C" linkage-spec.
7781 assert(Prev && "should have found a previous declaration to diagnose");
7782 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(Prev))
7783 Prev = FD->getFirstDecl();
7784 else
7785 Prev = cast<VarDecl>(Prev)->getFirstDecl();
7786
7787 S.Diag(ND->getLocation(), diag::err_extern_c_global_conflict)
7788 << IsGlobal << ND;
7789 S.Diag(Prev->getLocation(), diag::note_extern_c_global_conflict)
7790 << IsGlobal;
7791 return false;
7792 }
7793
7794 /// Apply special rules for handling extern "C" declarations. Returns \c true
7795 /// if we have found that this is a redeclaration of some prior entity.
7796 ///
7797 /// Per C++ [dcl.link]p6:
7798 /// Two declarations [for a function or variable] with C language linkage
7799 /// with the same name that appear in different scopes refer to the same
7800 /// [entity]. An entity with C language linkage shall not be declared with
7801 /// the same name as an entity in global scope.
7802 template<typename T>
checkForConflictWithNonVisibleExternC(Sema & S,const T * ND,LookupResult & Previous)7803 static bool checkForConflictWithNonVisibleExternC(Sema &S, const T *ND,
7804 LookupResult &Previous) {
7805 if (!S.getLangOpts().CPlusPlus) {
7806 // In C, when declaring a global variable, look for a corresponding 'extern'
7807 // variable declared in function scope. We don't need this in C++, because
7808 // we find local extern decls in the surrounding file-scope DeclContext.
7809 if (ND->getDeclContext()->getRedeclContext()->isTranslationUnit()) {
7810 if (NamedDecl *Prev = S.findLocallyScopedExternCDecl(ND->getDeclName())) {
7811 Previous.clear();
7812 Previous.addDecl(Prev);
7813 return true;
7814 }
7815 }
7816 return false;
7817 }
7818
7819 // A declaration in the translation unit can conflict with an extern "C"
7820 // declaration.
7821 if (ND->getDeclContext()->getRedeclContext()->isTranslationUnit())
7822 return checkGlobalOrExternCConflict(S, ND, /*IsGlobal*/true, Previous);
7823
7824 // An extern "C" declaration can conflict with a declaration in the
7825 // translation unit or can be a redeclaration of an extern "C" declaration
7826 // in another scope.
7827 if (isIncompleteDeclExternC(S,ND))
7828 return checkGlobalOrExternCConflict(S, ND, /*IsGlobal*/false, Previous);
7829
7830 // Neither global nor extern "C": nothing to do.
7831 return false;
7832 }
7833
CheckVariableDeclarationType(VarDecl * NewVD)7834 void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {
7835 // If the decl is already known invalid, don't check it.
7836 if (NewVD->isInvalidDecl())
7837 return;
7838
7839 QualType T = NewVD->getType();
7840
7841 // Defer checking an 'auto' type until its initializer is attached.
7842 if (T->isUndeducedType())
7843 return;
7844
7845 if (NewVD->hasAttrs())
7846 CheckAlignasUnderalignment(NewVD);
7847
7848 if (T->isObjCObjectType()) {
7849 Diag(NewVD->getLocation(), diag::err_statically_allocated_object)
7850 << FixItHint::CreateInsertion(NewVD->getLocation(), "*");
7851 T = Context.getObjCObjectPointerType(T);
7852 NewVD->setType(T);
7853 }
7854
7855 // Emit an error if an address space was applied to decl with local storage.
7856 // This includes arrays of objects with address space qualifiers, but not
7857 // automatic variables that point to other address spaces.
7858 // ISO/IEC TR 18037 S5.1.2
7859 if (!getLangOpts().OpenCL && NewVD->hasLocalStorage() &&
7860 T.getAddressSpace() != LangAS::Default) {
7861 Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl) << 0;
7862 NewVD->setInvalidDecl();
7863 return;
7864 }
7865
7866 // OpenCL v1.2 s6.8 - The static qualifier is valid only in program
7867 // scope.
7868 if (getLangOpts().OpenCLVersion == 120 &&
7869 !getOpenCLOptions().isEnabled("cl_clang_storage_class_specifiers") &&
7870 NewVD->isStaticLocal()) {
7871 Diag(NewVD->getLocation(), diag::err_static_function_scope);
7872 NewVD->setInvalidDecl();
7873 return;
7874 }
7875
7876 if (getLangOpts().OpenCL) {
7877 // OpenCL v2.0 s6.12.5 - The __block storage type is not supported.
7878 if (NewVD->hasAttr<BlocksAttr>()) {
7879 Diag(NewVD->getLocation(), diag::err_opencl_block_storage_type);
7880 return;
7881 }
7882
7883 if (T->isBlockPointerType()) {
7884 // OpenCL v2.0 s6.12.5 - Any block declaration must be const qualified and
7885 // can't use 'extern' storage class.
7886 if (!T.isConstQualified()) {
7887 Diag(NewVD->getLocation(), diag::err_opencl_invalid_block_declaration)
7888 << 0 /*const*/;
7889 NewVD->setInvalidDecl();
7890 return;
7891 }
7892 if (NewVD->hasExternalStorage()) {
7893 Diag(NewVD->getLocation(), diag::err_opencl_extern_block_declaration);
7894 NewVD->setInvalidDecl();
7895 return;
7896 }
7897 }
7898 // OpenCL C v1.2 s6.5 - All program scope variables must be declared in the
7899 // __constant address space.
7900 // OpenCL C v2.0 s6.5.1 - Variables defined at program scope and static
7901 // variables inside a function can also be declared in the global
7902 // address space.
7903 // C++ for OpenCL inherits rule from OpenCL C v2.0.
7904 // FIXME: Adding local AS in C++ for OpenCL might make sense.
7905 if (NewVD->isFileVarDecl() || NewVD->isStaticLocal() ||
7906 NewVD->hasExternalStorage()) {
7907 if (!T->isSamplerT() &&
7908 !T->isDependentType() &&
7909 !(T.getAddressSpace() == LangAS::opencl_constant ||
7910 (T.getAddressSpace() == LangAS::opencl_global &&
7911 (getLangOpts().OpenCLVersion == 200 ||
7912 getLangOpts().OpenCLCPlusPlus)))) {
7913 int Scope = NewVD->isStaticLocal() | NewVD->hasExternalStorage() << 1;
7914 if (getLangOpts().OpenCLVersion == 200 || getLangOpts().OpenCLCPlusPlus)
7915 Diag(NewVD->getLocation(), diag::err_opencl_global_invalid_addr_space)
7916 << Scope << "global or constant";
7917 else
7918 Diag(NewVD->getLocation(), diag::err_opencl_global_invalid_addr_space)
7919 << Scope << "constant";
7920 NewVD->setInvalidDecl();
7921 return;
7922 }
7923 } else {
7924 if (T.getAddressSpace() == LangAS::opencl_global) {
7925 Diag(NewVD->getLocation(), diag::err_opencl_function_variable)
7926 << 1 /*is any function*/ << "global";
7927 NewVD->setInvalidDecl();
7928 return;
7929 }
7930 if (T.getAddressSpace() == LangAS::opencl_constant ||
7931 T.getAddressSpace() == LangAS::opencl_local) {
7932 FunctionDecl *FD = getCurFunctionDecl();
7933 // OpenCL v1.1 s6.5.2 and s6.5.3: no local or constant variables
7934 // in functions.
7935 if (FD && !FD->hasAttr<OpenCLKernelAttr>()) {
7936 if (T.getAddressSpace() == LangAS::opencl_constant)
7937 Diag(NewVD->getLocation(), diag::err_opencl_function_variable)
7938 << 0 /*non-kernel only*/ << "constant";
7939 else
7940 Diag(NewVD->getLocation(), diag::err_opencl_function_variable)
7941 << 0 /*non-kernel only*/ << "local";
7942 NewVD->setInvalidDecl();
7943 return;
7944 }
7945 // OpenCL v2.0 s6.5.2 and s6.5.3: local and constant variables must be
7946 // in the outermost scope of a kernel function.
7947 if (FD && FD->hasAttr<OpenCLKernelAttr>()) {
7948 if (!getCurScope()->isFunctionScope()) {
7949 if (T.getAddressSpace() == LangAS::opencl_constant)
7950 Diag(NewVD->getLocation(), diag::err_opencl_addrspace_scope)
7951 << "constant";
7952 else
7953 Diag(NewVD->getLocation(), diag::err_opencl_addrspace_scope)
7954 << "local";
7955 NewVD->setInvalidDecl();
7956 return;
7957 }
7958 }
7959 } else if (T.getAddressSpace() != LangAS::opencl_private &&
7960 // If we are parsing a template we didn't deduce an addr
7961 // space yet.
7962 T.getAddressSpace() != LangAS::Default) {
7963 // Do not allow other address spaces on automatic variable.
7964 Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl) << 1;
7965 NewVD->setInvalidDecl();
7966 return;
7967 }
7968 }
7969 }
7970
7971 if (NewVD->hasLocalStorage() && T.isObjCGCWeak()
7972 && !NewVD->hasAttr<BlocksAttr>()) {
7973 if (getLangOpts().getGC() != LangOptions::NonGC)
7974 Diag(NewVD->getLocation(), diag::warn_gc_attribute_weak_on_local);
7975 else {
7976 assert(!getLangOpts().ObjCAutoRefCount);
7977 Diag(NewVD->getLocation(), diag::warn_attribute_weak_on_local);
7978 }
7979 }
7980
7981 bool isVM = T->isVariablyModifiedType();
7982 if (isVM || NewVD->hasAttr<CleanupAttr>() ||
7983 NewVD->hasAttr<BlocksAttr>())
7984 setFunctionHasBranchProtectedScope();
7985
7986 if ((isVM && NewVD->hasLinkage()) ||
7987 (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {
7988 bool SizeIsNegative;
7989 llvm::APSInt Oversized;
7990 TypeSourceInfo *FixedTInfo = TryToFixInvalidVariablyModifiedTypeSourceInfo(
7991 NewVD->getTypeSourceInfo(), Context, SizeIsNegative, Oversized);
7992 QualType FixedT;
7993 if (FixedTInfo && T == NewVD->getTypeSourceInfo()->getType())
7994 FixedT = FixedTInfo->getType();
7995 else if (FixedTInfo) {
7996 // Type and type-as-written are canonically different. We need to fix up
7997 // both types separately.
7998 FixedT = TryToFixInvalidVariablyModifiedType(T, Context, SizeIsNegative,
7999 Oversized);
8000 }
8001 if ((!FixedTInfo || FixedT.isNull()) && T->isVariableArrayType()) {
8002 const VariableArrayType *VAT = Context.getAsVariableArrayType(T);
8003 // FIXME: This won't give the correct result for
8004 // int a[10][n];
8005 SourceRange SizeRange = VAT->getSizeExpr()->getSourceRange();
8006
8007 if (NewVD->isFileVarDecl())
8008 Diag(NewVD->getLocation(), diag::err_vla_decl_in_file_scope)
8009 << SizeRange;
8010 else if (NewVD->isStaticLocal())
8011 Diag(NewVD->getLocation(), diag::err_vla_decl_has_static_storage)
8012 << SizeRange;
8013 else
8014 Diag(NewVD->getLocation(), diag::err_vla_decl_has_extern_linkage)
8015 << SizeRange;
8016 NewVD->setInvalidDecl();
8017 return;
8018 }
8019
8020 if (!FixedTInfo) {
8021 if (NewVD->isFileVarDecl())
8022 Diag(NewVD->getLocation(), diag::err_vm_decl_in_file_scope);
8023 else
8024 Diag(NewVD->getLocation(), diag::err_vm_decl_has_extern_linkage);
8025 NewVD->setInvalidDecl();
8026 return;
8027 }
8028
8029 Diag(NewVD->getLocation(), diag::ext_vla_folded_to_constant);
8030 NewVD->setType(FixedT);
8031 NewVD->setTypeSourceInfo(FixedTInfo);
8032 }
8033
8034 if (T->isVoidType()) {
8035 // C++98 [dcl.stc]p5: The extern specifier can be applied only to the names
8036 // of objects and functions.
8037 if (NewVD->isThisDeclarationADefinition() || getLangOpts().CPlusPlus) {
8038 Diag(NewVD->getLocation(), diag::err_typecheck_decl_incomplete_type)
8039 << T;
8040 NewVD->setInvalidDecl();
8041 return;
8042 }
8043 }
8044
8045 if (!NewVD->hasLocalStorage() && NewVD->hasAttr<BlocksAttr>()) {
8046 Diag(NewVD->getLocation(), diag::err_block_on_nonlocal);
8047 NewVD->setInvalidDecl();
8048 return;
8049 }
8050
8051 if (!NewVD->hasLocalStorage() && T->isSizelessType()) {
8052 Diag(NewVD->getLocation(), diag::err_sizeless_nonlocal) << T;
8053 NewVD->setInvalidDecl();
8054 return;
8055 }
8056
8057 if (isVM && NewVD->hasAttr<BlocksAttr>()) {
8058 Diag(NewVD->getLocation(), diag::err_block_on_vm);
8059 NewVD->setInvalidDecl();
8060 return;
8061 }
8062
8063 if (NewVD->isConstexpr() && !T->isDependentType() &&
8064 RequireLiteralType(NewVD->getLocation(), T,
8065 diag::err_constexpr_var_non_literal)) {
8066 NewVD->setInvalidDecl();
8067 return;
8068 }
8069
8070 // PPC MMA non-pointer types are not allowed as non-local variable types.
8071 if (Context.getTargetInfo().getTriple().isPPC64() &&
8072 !NewVD->isLocalVarDecl() &&
8073 CheckPPCMMAType(T, NewVD->getLocation())) {
8074 NewVD->setInvalidDecl();
8075 return;
8076 }
8077 }
8078
8079 /// Perform semantic checking on a newly-created variable
8080 /// declaration.
8081 ///
8082 /// This routine performs all of the type-checking required for a
8083 /// variable declaration once it has been built. It is used both to
8084 /// check variables after they have been parsed and their declarators
8085 /// have been translated into a declaration, and to check variables
8086 /// that have been instantiated from a template.
8087 ///
8088 /// Sets NewVD->isInvalidDecl() if an error was encountered.
8089 ///
8090 /// Returns true if the variable declaration is a redeclaration.
CheckVariableDeclaration(VarDecl * NewVD,LookupResult & Previous)8091 bool Sema::CheckVariableDeclaration(VarDecl *NewVD, LookupResult &Previous) {
8092 CheckVariableDeclarationType(NewVD);
8093
8094 // If the decl is already known invalid, don't check it.
8095 if (NewVD->isInvalidDecl())
8096 return false;
8097
8098 // If we did not find anything by this name, look for a non-visible
8099 // extern "C" declaration with the same name.
8100 if (Previous.empty() &&
8101 checkForConflictWithNonVisibleExternC(*this, NewVD, Previous))
8102 Previous.setShadowed();
8103
8104 if (!Previous.empty()) {
8105 MergeVarDecl(NewVD, Previous);
8106 return true;
8107 }
8108 return false;
8109 }
8110
8111 /// AddOverriddenMethods - See if a method overrides any in the base classes,
8112 /// and if so, check that it's a valid override and remember it.
AddOverriddenMethods(CXXRecordDecl * DC,CXXMethodDecl * MD)8113 bool Sema::AddOverriddenMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) {
8114 llvm::SmallPtrSet<const CXXMethodDecl*, 4> Overridden;
8115
8116 // Look for methods in base classes that this method might override.
8117 CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/false,
8118 /*DetectVirtual=*/false);
8119 auto VisitBase = [&] (const CXXBaseSpecifier *Specifier, CXXBasePath &Path) {
8120 CXXRecordDecl *BaseRecord = Specifier->getType()->getAsCXXRecordDecl();
8121 DeclarationName Name = MD->getDeclName();
8122
8123 if (Name.getNameKind() == DeclarationName::CXXDestructorName) {
8124 // We really want to find the base class destructor here.
8125 QualType T = Context.getTypeDeclType(BaseRecord);
8126 CanQualType CT = Context.getCanonicalType(T);
8127 Name = Context.DeclarationNames.getCXXDestructorName(CT);
8128 }
8129
8130 for (NamedDecl *BaseND : BaseRecord->lookup(Name)) {
8131 CXXMethodDecl *BaseMD =
8132 dyn_cast<CXXMethodDecl>(BaseND->getCanonicalDecl());
8133 if (!BaseMD || !BaseMD->isVirtual() ||
8134 IsOverload(MD, BaseMD, /*UseMemberUsingDeclRules=*/false,
8135 /*ConsiderCudaAttrs=*/true,
8136 // C++2a [class.virtual]p2 does not consider requires
8137 // clauses when overriding.
8138 /*ConsiderRequiresClauses=*/false))
8139 continue;
8140
8141 if (Overridden.insert(BaseMD).second) {
8142 MD->addOverriddenMethod(BaseMD);
8143 CheckOverridingFunctionReturnType(MD, BaseMD);
8144 CheckOverridingFunctionAttributes(MD, BaseMD);
8145 CheckOverridingFunctionExceptionSpec(MD, BaseMD);
8146 CheckIfOverriddenFunctionIsMarkedFinal(MD, BaseMD);
8147 }
8148
8149 // A method can only override one function from each base class. We
8150 // don't track indirectly overridden methods from bases of bases.
8151 return true;
8152 }
8153
8154 return false;
8155 };
8156
8157 DC->lookupInBases(VisitBase, Paths);
8158 return !Overridden.empty();
8159 }
8160
8161 namespace {
8162 // Struct for holding all of the extra arguments needed by
8163 // DiagnoseInvalidRedeclaration to call Sema::ActOnFunctionDeclarator.
8164 struct ActOnFDArgs {
8165 Scope *S;
8166 Declarator &D;
8167 MultiTemplateParamsArg TemplateParamLists;
8168 bool AddToScope;
8169 };
8170 } // end anonymous namespace
8171
8172 namespace {
8173
8174 // Callback to only accept typo corrections that have a non-zero edit distance.
8175 // Also only accept corrections that have the same parent decl.
8176 class DifferentNameValidatorCCC final : public CorrectionCandidateCallback {
8177 public:
DifferentNameValidatorCCC(ASTContext & Context,FunctionDecl * TypoFD,CXXRecordDecl * Parent)8178 DifferentNameValidatorCCC(ASTContext &Context, FunctionDecl *TypoFD,
8179 CXXRecordDecl *Parent)
8180 : Context(Context), OriginalFD(TypoFD),
8181 ExpectedParent(Parent ? Parent->getCanonicalDecl() : nullptr) {}
8182
ValidateCandidate(const TypoCorrection & candidate)8183 bool ValidateCandidate(const TypoCorrection &candidate) override {
8184 if (candidate.getEditDistance() == 0)
8185 return false;
8186
8187 SmallVector<unsigned, 1> MismatchedParams;
8188 for (TypoCorrection::const_decl_iterator CDecl = candidate.begin(),
8189 CDeclEnd = candidate.end();
8190 CDecl != CDeclEnd; ++CDecl) {
8191 FunctionDecl *FD = dyn_cast<FunctionDecl>(*CDecl);
8192
8193 if (FD && !FD->hasBody() &&
8194 hasSimilarParameters(Context, FD, OriginalFD, MismatchedParams)) {
8195 if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) {
8196 CXXRecordDecl *Parent = MD->getParent();
8197 if (Parent && Parent->getCanonicalDecl() == ExpectedParent)
8198 return true;
8199 } else if (!ExpectedParent) {
8200 return true;
8201 }
8202 }
8203 }
8204
8205 return false;
8206 }
8207
clone()8208 std::unique_ptr<CorrectionCandidateCallback> clone() override {
8209 return std::make_unique<DifferentNameValidatorCCC>(*this);
8210 }
8211
8212 private:
8213 ASTContext &Context;
8214 FunctionDecl *OriginalFD;
8215 CXXRecordDecl *ExpectedParent;
8216 };
8217
8218 } // end anonymous namespace
8219
MarkTypoCorrectedFunctionDefinition(const NamedDecl * F)8220 void Sema::MarkTypoCorrectedFunctionDefinition(const NamedDecl *F) {
8221 TypoCorrectedFunctionDefinitions.insert(F);
8222 }
8223
8224 /// Generate diagnostics for an invalid function redeclaration.
8225 ///
8226 /// This routine handles generating the diagnostic messages for an invalid
8227 /// function redeclaration, including finding possible similar declarations
8228 /// or performing typo correction if there are no previous declarations with
8229 /// the same name.
8230 ///
8231 /// Returns a NamedDecl iff typo correction was performed and substituting in
8232 /// the new declaration name does not cause new errors.
DiagnoseInvalidRedeclaration(Sema & SemaRef,LookupResult & Previous,FunctionDecl * NewFD,ActOnFDArgs & ExtraArgs,bool IsLocalFriend,Scope * S)8233 static NamedDecl *DiagnoseInvalidRedeclaration(
8234 Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD,
8235 ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {
8236 DeclarationName Name = NewFD->getDeclName();
8237 DeclContext *NewDC = NewFD->getDeclContext();
8238 SmallVector<unsigned, 1> MismatchedParams;
8239 SmallVector<std::pair<FunctionDecl *, unsigned>, 1> NearMatches;
8240 TypoCorrection Correction;
8241 bool IsDefinition = ExtraArgs.D.isFunctionDefinition();
8242 unsigned DiagMsg =
8243 IsLocalFriend ? diag::err_no_matching_local_friend :
8244 NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match :
8245 diag::err_member_decl_does_not_match;
8246 LookupResult Prev(SemaRef, Name, NewFD->getLocation(),
8247 IsLocalFriend ? Sema::LookupLocalFriendName
8248 : Sema::LookupOrdinaryName,
8249 Sema::ForVisibleRedeclaration);
8250
8251 NewFD->setInvalidDecl();
8252 if (IsLocalFriend)
8253 SemaRef.LookupName(Prev, S);
8254 else
8255 SemaRef.LookupQualifiedName(Prev, NewDC);
8256 assert(!Prev.isAmbiguous() &&
8257 "Cannot have an ambiguity in previous-declaration lookup");
8258 CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
8259 DifferentNameValidatorCCC CCC(SemaRef.Context, NewFD,
8260 MD ? MD->getParent() : nullptr);
8261 if (!Prev.empty()) {
8262 for (LookupResult::iterator Func = Prev.begin(), FuncEnd = Prev.end();
8263 Func != FuncEnd; ++Func) {
8264 FunctionDecl *FD = dyn_cast<FunctionDecl>(*Func);
8265 if (FD &&
8266 hasSimilarParameters(SemaRef.Context, FD, NewFD, MismatchedParams)) {
8267 // Add 1 to the index so that 0 can mean the mismatch didn't
8268 // involve a parameter
8269 unsigned ParamNum =
8270 MismatchedParams.empty() ? 0 : MismatchedParams.front() + 1;
8271 NearMatches.push_back(std::make_pair(FD, ParamNum));
8272 }
8273 }
8274 // If the qualified name lookup yielded nothing, try typo correction
8275 } else if ((Correction = SemaRef.CorrectTypo(
8276 Prev.getLookupNameInfo(), Prev.getLookupKind(), S,
8277 &ExtraArgs.D.getCXXScopeSpec(), CCC, Sema::CTK_ErrorRecovery,
8278 IsLocalFriend ? nullptr : NewDC))) {
8279 // Set up everything for the call to ActOnFunctionDeclarator
8280 ExtraArgs.D.SetIdentifier(Correction.getCorrectionAsIdentifierInfo(),
8281 ExtraArgs.D.getIdentifierLoc());
8282 Previous.clear();
8283 Previous.setLookupName(Correction.getCorrection());
8284 for (TypoCorrection::decl_iterator CDecl = Correction.begin(),
8285 CDeclEnd = Correction.end();
8286 CDecl != CDeclEnd; ++CDecl) {
8287 FunctionDecl *FD = dyn_cast<FunctionDecl>(*CDecl);
8288 if (FD && !FD->hasBody() &&
8289 hasSimilarParameters(SemaRef.Context, FD, NewFD, MismatchedParams)) {
8290 Previous.addDecl(FD);
8291 }
8292 }
8293 bool wasRedeclaration = ExtraArgs.D.isRedeclaration();
8294
8295 NamedDecl *Result;
8296 // Retry building the function declaration with the new previous
8297 // declarations, and with errors suppressed.
8298 {
8299 // Trap errors.
8300 Sema::SFINAETrap Trap(SemaRef);
8301
8302 // TODO: Refactor ActOnFunctionDeclarator so that we can call only the
8303 // pieces need to verify the typo-corrected C++ declaration and hopefully
8304 // eliminate the need for the parameter pack ExtraArgs.
8305 Result = SemaRef.ActOnFunctionDeclarator(
8306 ExtraArgs.S, ExtraArgs.D,
8307 Correction.getCorrectionDecl()->getDeclContext(),
8308 NewFD->getTypeSourceInfo(), Previous, ExtraArgs.TemplateParamLists,
8309 ExtraArgs.AddToScope);
8310
8311 if (Trap.hasErrorOccurred())
8312 Result = nullptr;
8313 }
8314
8315 if (Result) {
8316 // Determine which correction we picked.
8317 Decl *Canonical = Result->getCanonicalDecl();
8318 for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
8319 I != E; ++I)
8320 if ((*I)->getCanonicalDecl() == Canonical)
8321 Correction.setCorrectionDecl(*I);
8322
8323 // Let Sema know about the correction.
8324 SemaRef.MarkTypoCorrectedFunctionDefinition(Result);
8325 SemaRef.diagnoseTypo(
8326 Correction,
8327 SemaRef.PDiag(IsLocalFriend
8328 ? diag::err_no_matching_local_friend_suggest
8329 : diag::err_member_decl_does_not_match_suggest)
8330 << Name << NewDC << IsDefinition);
8331 return Result;
8332 }
8333
8334 // Pretend the typo correction never occurred
8335 ExtraArgs.D.SetIdentifier(Name.getAsIdentifierInfo(),
8336 ExtraArgs.D.getIdentifierLoc());
8337 ExtraArgs.D.setRedeclaration(wasRedeclaration);
8338 Previous.clear();
8339 Previous.setLookupName(Name);
8340 }
8341
8342 SemaRef.Diag(NewFD->getLocation(), DiagMsg)
8343 << Name << NewDC << IsDefinition << NewFD->getLocation();
8344
8345 bool NewFDisConst = false;
8346 if (CXXMethodDecl *NewMD = dyn_cast<CXXMethodDecl>(NewFD))
8347 NewFDisConst = NewMD->isConst();
8348
8349 for (SmallVectorImpl<std::pair<FunctionDecl *, unsigned> >::iterator
8350 NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end();
8351 NearMatch != NearMatchEnd; ++NearMatch) {
8352 FunctionDecl *FD = NearMatch->first;
8353 CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD);
8354 bool FDisConst = MD && MD->isConst();
8355 bool IsMember = MD || !IsLocalFriend;
8356
8357 // FIXME: These notes are poorly worded for the local friend case.
8358 if (unsigned Idx = NearMatch->second) {
8359 ParmVarDecl *FDParam = FD->getParamDecl(Idx-1);
8360 SourceLocation Loc = FDParam->getTypeSpecStartLoc();
8361 if (Loc.isInvalid()) Loc = FD->getLocation();
8362 SemaRef.Diag(Loc, IsMember ? diag::note_member_def_close_param_match
8363 : diag::note_local_decl_close_param_match)
8364 << Idx << FDParam->getType()
8365 << NewFD->getParamDecl(Idx - 1)->getType();
8366 } else if (FDisConst != NewFDisConst) {
8367 SemaRef.Diag(FD->getLocation(), diag::note_member_def_close_const_match)
8368 << NewFDisConst << FD->getSourceRange().getEnd();
8369 } else
8370 SemaRef.Diag(FD->getLocation(),
8371 IsMember ? diag::note_member_def_close_match
8372 : diag::note_local_decl_close_match);
8373 }
8374 return nullptr;
8375 }
8376
getFunctionStorageClass(Sema & SemaRef,Declarator & D)8377 static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {
8378 switch (D.getDeclSpec().getStorageClassSpec()) {
8379 default: llvm_unreachable("Unknown storage class!");
8380 case DeclSpec::SCS_auto:
8381 case DeclSpec::SCS_register:
8382 case DeclSpec::SCS_mutable:
8383 SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(),
8384 diag::err_typecheck_sclass_func);
8385 D.getMutableDeclSpec().ClearStorageClassSpecs();
8386 D.setInvalidType();
8387 break;
8388 case DeclSpec::SCS_unspecified: break;
8389 case DeclSpec::SCS_extern:
8390 if (D.getDeclSpec().isExternInLinkageSpec())
8391 return SC_None;
8392 return SC_Extern;
8393 case DeclSpec::SCS_static: {
8394 if (SemaRef.CurContext->getRedeclContext()->isFunctionOrMethod()) {
8395 // C99 6.7.1p5:
8396 // The declaration of an identifier for a function that has
8397 // block scope shall have no explicit storage-class specifier
8398 // other than extern
8399 // See also (C++ [dcl.stc]p4).
8400 SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(),
8401 diag::err_static_block_func);
8402 break;
8403 } else
8404 return SC_Static;
8405 }
8406 case DeclSpec::SCS_private_extern: return SC_PrivateExtern;
8407 }
8408
8409 // No explicit storage class has already been returned
8410 return SC_None;
8411 }
8412
CreateNewFunctionDecl(Sema & SemaRef,Declarator & D,DeclContext * DC,QualType & R,TypeSourceInfo * TInfo,StorageClass SC,bool & IsVirtualOkay)8413 static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D,
8414 DeclContext *DC, QualType &R,
8415 TypeSourceInfo *TInfo,
8416 StorageClass SC,
8417 bool &IsVirtualOkay) {
8418 DeclarationNameInfo NameInfo = SemaRef.GetNameForDeclarator(D);
8419 DeclarationName Name = NameInfo.getName();
8420
8421 FunctionDecl *NewFD = nullptr;
8422 bool isInline = D.getDeclSpec().isInlineSpecified();
8423
8424 if (!SemaRef.getLangOpts().CPlusPlus) {
8425 // Determine whether the function was written with a
8426 // prototype. This true when:
8427 // - there is a prototype in the declarator, or
8428 // - the type R of the function is some kind of typedef or other non-
8429 // attributed reference to a type name (which eventually refers to a
8430 // function type).
8431 bool HasPrototype =
8432 (D.isFunctionDeclarator() && D.getFunctionTypeInfo().hasPrototype) ||
8433 (!R->getAsAdjusted<FunctionType>() && R->isFunctionProtoType());
8434
8435 NewFD = FunctionDecl::Create(SemaRef.Context, DC, D.getBeginLoc(), NameInfo,
8436 R, TInfo, SC, isInline, HasPrototype,
8437 ConstexprSpecKind::Unspecified,
8438 /*TrailingRequiresClause=*/nullptr);
8439 if (D.isInvalidType())
8440 NewFD->setInvalidDecl();
8441
8442 return NewFD;
8443 }
8444
8445 ExplicitSpecifier ExplicitSpecifier = D.getDeclSpec().getExplicitSpecifier();
8446
8447 ConstexprSpecKind ConstexprKind = D.getDeclSpec().getConstexprSpecifier();
8448 if (ConstexprKind == ConstexprSpecKind::Constinit) {
8449 SemaRef.Diag(D.getDeclSpec().getConstexprSpecLoc(),
8450 diag::err_constexpr_wrong_decl_kind)
8451 << static_cast<int>(ConstexprKind);
8452 ConstexprKind = ConstexprSpecKind::Unspecified;
8453 D.getMutableDeclSpec().ClearConstexprSpec();
8454 }
8455 Expr *TrailingRequiresClause = D.getTrailingRequiresClause();
8456
8457 // Check that the return type is not an abstract class type.
8458 // For record types, this is done by the AbstractClassUsageDiagnoser once
8459 // the class has been completely parsed.
8460 if (!DC->isRecord() &&
8461 SemaRef.RequireNonAbstractType(
8462 D.getIdentifierLoc(), R->castAs<FunctionType>()->getReturnType(),
8463 diag::err_abstract_type_in_decl, SemaRef.AbstractReturnType))
8464 D.setInvalidType();
8465
8466 if (Name.getNameKind() == DeclarationName::CXXConstructorName) {
8467 // This is a C++ constructor declaration.
8468 assert(DC->isRecord() &&
8469 "Constructors can only be declared in a member context");
8470
8471 R = SemaRef.CheckConstructorDeclarator(D, R, SC);
8472 return CXXConstructorDecl::Create(
8473 SemaRef.Context, cast<CXXRecordDecl>(DC), D.getBeginLoc(), NameInfo, R,
8474 TInfo, ExplicitSpecifier, isInline,
8475 /*isImplicitlyDeclared=*/false, ConstexprKind, InheritedConstructor(),
8476 TrailingRequiresClause);
8477
8478 } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {
8479 // This is a C++ destructor declaration.
8480 if (DC->isRecord()) {
8481 R = SemaRef.CheckDestructorDeclarator(D, R, SC);
8482 CXXRecordDecl *Record = cast<CXXRecordDecl>(DC);
8483 CXXDestructorDecl *NewDD = CXXDestructorDecl::Create(
8484 SemaRef.Context, Record, D.getBeginLoc(), NameInfo, R, TInfo,
8485 isInline, /*isImplicitlyDeclared=*/false, ConstexprKind,
8486 TrailingRequiresClause);
8487
8488 // If the destructor needs an implicit exception specification, set it
8489 // now. FIXME: It'd be nice to be able to create the right type to start
8490 // with, but the type needs to reference the destructor declaration.
8491 if (SemaRef.getLangOpts().CPlusPlus11)
8492 SemaRef.AdjustDestructorExceptionSpec(NewDD);
8493
8494 IsVirtualOkay = true;
8495 return NewDD;
8496
8497 } else {
8498 SemaRef.Diag(D.getIdentifierLoc(), diag::err_destructor_not_member);
8499 D.setInvalidType();
8500
8501 // Create a FunctionDecl to satisfy the function definition parsing
8502 // code path.
8503 return FunctionDecl::Create(SemaRef.Context, DC, D.getBeginLoc(),
8504 D.getIdentifierLoc(), Name, R, TInfo, SC,
8505 isInline,
8506 /*hasPrototype=*/true, ConstexprKind,
8507 TrailingRequiresClause);
8508 }
8509
8510 } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {
8511 if (!DC->isRecord()) {
8512 SemaRef.Diag(D.getIdentifierLoc(),
8513 diag::err_conv_function_not_member);
8514 return nullptr;
8515 }
8516
8517 SemaRef.CheckConversionDeclarator(D, R, SC);
8518 if (D.isInvalidType())
8519 return nullptr;
8520
8521 IsVirtualOkay = true;
8522 return CXXConversionDecl::Create(
8523 SemaRef.Context, cast<CXXRecordDecl>(DC), D.getBeginLoc(), NameInfo, R,
8524 TInfo, isInline, ExplicitSpecifier, ConstexprKind, SourceLocation(),
8525 TrailingRequiresClause);
8526
8527 } else if (Name.getNameKind() == DeclarationName::CXXDeductionGuideName) {
8528 if (TrailingRequiresClause)
8529 SemaRef.Diag(TrailingRequiresClause->getBeginLoc(),
8530 diag::err_trailing_requires_clause_on_deduction_guide)
8531 << TrailingRequiresClause->getSourceRange();
8532 SemaRef.CheckDeductionGuideDeclarator(D, R, SC);
8533
8534 return CXXDeductionGuideDecl::Create(SemaRef.Context, DC, D.getBeginLoc(),
8535 ExplicitSpecifier, NameInfo, R, TInfo,
8536 D.getEndLoc());
8537 } else if (DC->isRecord()) {
8538 // If the name of the function is the same as the name of the record,
8539 // then this must be an invalid constructor that has a return type.
8540 // (The parser checks for a return type and makes the declarator a
8541 // constructor if it has no return type).
8542 if (Name.getAsIdentifierInfo() &&
8543 Name.getAsIdentifierInfo() == cast<CXXRecordDecl>(DC)->getIdentifier()){
8544 SemaRef.Diag(D.getIdentifierLoc(), diag::err_constructor_return_type)
8545 << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
8546 << SourceRange(D.getIdentifierLoc());
8547 return nullptr;
8548 }
8549
8550 // This is a C++ method declaration.
8551 CXXMethodDecl *Ret = CXXMethodDecl::Create(
8552 SemaRef.Context, cast<CXXRecordDecl>(DC), D.getBeginLoc(), NameInfo, R,
8553 TInfo, SC, isInline, ConstexprKind, SourceLocation(),
8554 TrailingRequiresClause);
8555 IsVirtualOkay = !Ret->isStatic();
8556 return Ret;
8557 } else {
8558 bool isFriend =
8559 SemaRef.getLangOpts().CPlusPlus && D.getDeclSpec().isFriendSpecified();
8560 if (!isFriend && SemaRef.CurContext->isRecord())
8561 return nullptr;
8562
8563 // Determine whether the function was written with a
8564 // prototype. This true when:
8565 // - we're in C++ (where every function has a prototype),
8566 return FunctionDecl::Create(SemaRef.Context, DC, D.getBeginLoc(), NameInfo,
8567 R, TInfo, SC, isInline, true /*HasPrototype*/,
8568 ConstexprKind, TrailingRequiresClause);
8569 }
8570 }
8571
8572 enum OpenCLParamType {
8573 ValidKernelParam,
8574 PtrPtrKernelParam,
8575 PtrKernelParam,
8576 InvalidAddrSpacePtrKernelParam,
8577 InvalidKernelParam,
8578 RecordKernelParam
8579 };
8580
isOpenCLSizeDependentType(ASTContext & C,QualType Ty)8581 static bool isOpenCLSizeDependentType(ASTContext &C, QualType Ty) {
8582 // Size dependent types are just typedefs to normal integer types
8583 // (e.g. unsigned long), so we cannot distinguish them from other typedefs to
8584 // integers other than by their names.
8585 StringRef SizeTypeNames[] = {"size_t", "intptr_t", "uintptr_t", "ptrdiff_t"};
8586
8587 // Remove typedefs one by one until we reach a typedef
8588 // for a size dependent type.
8589 QualType DesugaredTy = Ty;
8590 do {
8591 ArrayRef<StringRef> Names(SizeTypeNames);
8592 auto Match = llvm::find(Names, DesugaredTy.getUnqualifiedType().getAsString());
8593 if (Names.end() != Match)
8594 return true;
8595
8596 Ty = DesugaredTy;
8597 DesugaredTy = Ty.getSingleStepDesugaredType(C);
8598 } while (DesugaredTy != Ty);
8599
8600 return false;
8601 }
8602
getOpenCLKernelParameterType(Sema & S,QualType PT)8603 static OpenCLParamType getOpenCLKernelParameterType(Sema &S, QualType PT) {
8604 if (PT->isPointerType()) {
8605 QualType PointeeType = PT->getPointeeType();
8606 if (PointeeType.getAddressSpace() == LangAS::opencl_generic ||
8607 PointeeType.getAddressSpace() == LangAS::opencl_private ||
8608 PointeeType.getAddressSpace() == LangAS::Default)
8609 return InvalidAddrSpacePtrKernelParam;
8610
8611 if (PointeeType->isPointerType()) {
8612 // This is a pointer to pointer parameter.
8613 // Recursively check inner type.
8614 OpenCLParamType ParamKind = getOpenCLKernelParameterType(S, PointeeType);
8615 if (ParamKind == InvalidAddrSpacePtrKernelParam ||
8616 ParamKind == InvalidKernelParam)
8617 return ParamKind;
8618
8619 return PtrPtrKernelParam;
8620 }
8621 return PtrKernelParam;
8622 }
8623
8624 // OpenCL v1.2 s6.9.k:
8625 // Arguments to kernel functions in a program cannot be declared with the
8626 // built-in scalar types bool, half, size_t, ptrdiff_t, intptr_t, and
8627 // uintptr_t or a struct and/or union that contain fields declared to be one
8628 // of these built-in scalar types.
8629 if (isOpenCLSizeDependentType(S.getASTContext(), PT))
8630 return InvalidKernelParam;
8631
8632 if (PT->isImageType())
8633 return PtrKernelParam;
8634
8635 if (PT->isBooleanType() || PT->isEventT() || PT->isReserveIDT())
8636 return InvalidKernelParam;
8637
8638 // OpenCL extension spec v1.2 s9.5:
8639 // This extension adds support for half scalar and vector types as built-in
8640 // types that can be used for arithmetic operations, conversions etc.
8641 if (!S.getOpenCLOptions().isEnabled("cl_khr_fp16") && PT->isHalfType())
8642 return InvalidKernelParam;
8643
8644 if (PT->isRecordType())
8645 return RecordKernelParam;
8646
8647 // Look into an array argument to check if it has a forbidden type.
8648 if (PT->isArrayType()) {
8649 const Type *UnderlyingTy = PT->getPointeeOrArrayElementType();
8650 // Call ourself to check an underlying type of an array. Since the
8651 // getPointeeOrArrayElementType returns an innermost type which is not an
8652 // array, this recursive call only happens once.
8653 return getOpenCLKernelParameterType(S, QualType(UnderlyingTy, 0));
8654 }
8655
8656 return ValidKernelParam;
8657 }
8658
checkIsValidOpenCLKernelParameter(Sema & S,Declarator & D,ParmVarDecl * Param,llvm::SmallPtrSetImpl<const Type * > & ValidTypes)8659 static void checkIsValidOpenCLKernelParameter(
8660 Sema &S,
8661 Declarator &D,
8662 ParmVarDecl *Param,
8663 llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {
8664 QualType PT = Param->getType();
8665
8666 // Cache the valid types we encounter to avoid rechecking structs that are
8667 // used again
8668 if (ValidTypes.count(PT.getTypePtr()))
8669 return;
8670
8671 switch (getOpenCLKernelParameterType(S, PT)) {
8672 case PtrPtrKernelParam:
8673 // OpenCL v3.0 s6.11.a:
8674 // A kernel function argument cannot be declared as a pointer to a pointer
8675 // type. [...] This restriction only applies to OpenCL C 1.2 or below.
8676 if (S.getLangOpts().OpenCLVersion < 120 &&
8677 !S.getLangOpts().OpenCLCPlusPlus) {
8678 S.Diag(Param->getLocation(), diag::err_opencl_ptrptr_kernel_param);
8679 D.setInvalidType();
8680 return;
8681 }
8682
8683 ValidTypes.insert(PT.getTypePtr());
8684 return;
8685
8686 case InvalidAddrSpacePtrKernelParam:
8687 // OpenCL v1.0 s6.5:
8688 // __kernel function arguments declared to be a pointer of a type can point
8689 // to one of the following address spaces only : __global, __local or
8690 // __constant.
8691 S.Diag(Param->getLocation(), diag::err_kernel_arg_address_space);
8692 D.setInvalidType();
8693 return;
8694
8695 // OpenCL v1.2 s6.9.k:
8696 // Arguments to kernel functions in a program cannot be declared with the
8697 // built-in scalar types bool, half, size_t, ptrdiff_t, intptr_t, and
8698 // uintptr_t or a struct and/or union that contain fields declared to be
8699 // one of these built-in scalar types.
8700
8701 case InvalidKernelParam:
8702 // OpenCL v1.2 s6.8 n:
8703 // A kernel function argument cannot be declared
8704 // of event_t type.
8705 // Do not diagnose half type since it is diagnosed as invalid argument
8706 // type for any function elsewhere.
8707 if (!PT->isHalfType()) {
8708 S.Diag(Param->getLocation(), diag::err_bad_kernel_param_type) << PT;
8709
8710 // Explain what typedefs are involved.
8711 const TypedefType *Typedef = nullptr;
8712 while ((Typedef = PT->getAs<TypedefType>())) {
8713 SourceLocation Loc = Typedef->getDecl()->getLocation();
8714 // SourceLocation may be invalid for a built-in type.
8715 if (Loc.isValid())
8716 S.Diag(Loc, diag::note_entity_declared_at) << PT;
8717 PT = Typedef->desugar();
8718 }
8719 }
8720
8721 D.setInvalidType();
8722 return;
8723
8724 case PtrKernelParam:
8725 case ValidKernelParam:
8726 ValidTypes.insert(PT.getTypePtr());
8727 return;
8728
8729 case RecordKernelParam:
8730 break;
8731 }
8732
8733 // Track nested structs we will inspect
8734 SmallVector<const Decl *, 4> VisitStack;
8735
8736 // Track where we are in the nested structs. Items will migrate from
8737 // VisitStack to HistoryStack as we do the DFS for bad field.
8738 SmallVector<const FieldDecl *, 4> HistoryStack;
8739 HistoryStack.push_back(nullptr);
8740
8741 // At this point we already handled everything except of a RecordType or
8742 // an ArrayType of a RecordType.
8743 assert((PT->isArrayType() || PT->isRecordType()) && "Unexpected type.");
8744 const RecordType *RecTy =
8745 PT->getPointeeOrArrayElementType()->getAs<RecordType>();
8746 const RecordDecl *OrigRecDecl = RecTy->getDecl();
8747
8748 VisitStack.push_back(RecTy->getDecl());
8749 assert(VisitStack.back() && "First decl null?");
8750
8751 do {
8752 const Decl *Next = VisitStack.pop_back_val();
8753 if (!Next) {
8754 assert(!HistoryStack.empty());
8755 // Found a marker, we have gone up a level
8756 if (const FieldDecl *Hist = HistoryStack.pop_back_val())
8757 ValidTypes.insert(Hist->getType().getTypePtr());
8758
8759 continue;
8760 }
8761
8762 // Adds everything except the original parameter declaration (which is not a
8763 // field itself) to the history stack.
8764 const RecordDecl *RD;
8765 if (const FieldDecl *Field = dyn_cast<FieldDecl>(Next)) {
8766 HistoryStack.push_back(Field);
8767
8768 QualType FieldTy = Field->getType();
8769 // Other field types (known to be valid or invalid) are handled while we
8770 // walk around RecordDecl::fields().
8771 assert((FieldTy->isArrayType() || FieldTy->isRecordType()) &&
8772 "Unexpected type.");
8773 const Type *FieldRecTy = FieldTy->getPointeeOrArrayElementType();
8774
8775 RD = FieldRecTy->castAs<RecordType>()->getDecl();
8776 } else {
8777 RD = cast<RecordDecl>(Next);
8778 }
8779
8780 // Add a null marker so we know when we've gone back up a level
8781 VisitStack.push_back(nullptr);
8782
8783 for (const auto *FD : RD->fields()) {
8784 QualType QT = FD->getType();
8785
8786 if (ValidTypes.count(QT.getTypePtr()))
8787 continue;
8788
8789 OpenCLParamType ParamType = getOpenCLKernelParameterType(S, QT);
8790 if (ParamType == ValidKernelParam)
8791 continue;
8792
8793 if (ParamType == RecordKernelParam) {
8794 VisitStack.push_back(FD);
8795 continue;
8796 }
8797
8798 // OpenCL v1.2 s6.9.p:
8799 // Arguments to kernel functions that are declared to be a struct or union
8800 // do not allow OpenCL objects to be passed as elements of the struct or
8801 // union.
8802 if (ParamType == PtrKernelParam || ParamType == PtrPtrKernelParam ||
8803 ParamType == InvalidAddrSpacePtrKernelParam) {
8804 S.Diag(Param->getLocation(),
8805 diag::err_record_with_pointers_kernel_param)
8806 << PT->isUnionType()
8807 << PT;
8808 } else {
8809 S.Diag(Param->getLocation(), diag::err_bad_kernel_param_type) << PT;
8810 }
8811
8812 S.Diag(OrigRecDecl->getLocation(), diag::note_within_field_of_type)
8813 << OrigRecDecl->getDeclName();
8814
8815 // We have an error, now let's go back up through history and show where
8816 // the offending field came from
8817 for (ArrayRef<const FieldDecl *>::const_iterator
8818 I = HistoryStack.begin() + 1,
8819 E = HistoryStack.end();
8820 I != E; ++I) {
8821 const FieldDecl *OuterField = *I;
8822 S.Diag(OuterField->getLocation(), diag::note_within_field_of_type)
8823 << OuterField->getType();
8824 }
8825
8826 S.Diag(FD->getLocation(), diag::note_illegal_field_declared_here)
8827 << QT->isPointerType()
8828 << QT;
8829 D.setInvalidType();
8830 return;
8831 }
8832 } while (!VisitStack.empty());
8833 }
8834
8835 /// Find the DeclContext in which a tag is implicitly declared if we see an
8836 /// elaborated type specifier in the specified context, and lookup finds
8837 /// nothing.
getTagInjectionContext(DeclContext * DC)8838 static DeclContext *getTagInjectionContext(DeclContext *DC) {
8839 while (!DC->isFileContext() && !DC->isFunctionOrMethod())
8840 DC = DC->getParent();
8841 return DC;
8842 }
8843
8844 /// Find the Scope in which a tag is implicitly declared if we see an
8845 /// elaborated type specifier in the specified context, and lookup finds
8846 /// nothing.
getTagInjectionScope(Scope * S,const LangOptions & LangOpts)8847 static Scope *getTagInjectionScope(Scope *S, const LangOptions &LangOpts) {
8848 while (S->isClassScope() ||
8849 (LangOpts.CPlusPlus &&
8850 S->isFunctionPrototypeScope()) ||
8851 ((S->getFlags() & Scope::DeclScope) == 0) ||
8852 (S->getEntity() && S->getEntity()->isTransparentContext()))
8853 S = S->getParent();
8854 return S;
8855 }
8856
8857 NamedDecl*
ActOnFunctionDeclarator(Scope * S,Declarator & D,DeclContext * DC,TypeSourceInfo * TInfo,LookupResult & Previous,MultiTemplateParamsArg TemplateParamListsRef,bool & AddToScope)8858 Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
8859 TypeSourceInfo *TInfo, LookupResult &Previous,
8860 MultiTemplateParamsArg TemplateParamListsRef,
8861 bool &AddToScope) {
8862 QualType R = TInfo->getType();
8863
8864 assert(R->isFunctionType());
8865 if (R.getCanonicalType()->castAs<FunctionType>()->getCmseNSCallAttr())
8866 Diag(D.getIdentifierLoc(), diag::err_function_decl_cmse_ns_call);
8867
8868 SmallVector<TemplateParameterList *, 4> TemplateParamLists;
8869 for (TemplateParameterList *TPL : TemplateParamListsRef)
8870 TemplateParamLists.push_back(TPL);
8871 if (TemplateParameterList *Invented = D.getInventedTemplateParameterList()) {
8872 if (!TemplateParamLists.empty() &&
8873 Invented->getDepth() == TemplateParamLists.back()->getDepth())
8874 TemplateParamLists.back() = Invented;
8875 else
8876 TemplateParamLists.push_back(Invented);
8877 }
8878
8879 // TODO: consider using NameInfo for diagnostic.
8880 DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
8881 DeclarationName Name = NameInfo.getName();
8882 StorageClass SC = getFunctionStorageClass(*this, D);
8883
8884 if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())
8885 Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(),
8886 diag::err_invalid_thread)
8887 << DeclSpec::getSpecifierName(TSCS);
8888
8889 if (D.isFirstDeclarationOfMember())
8890 adjustMemberFunctionCC(R, D.isStaticMember(), D.isCtorOrDtor(),
8891 D.getIdentifierLoc());
8892
8893 bool isFriend = false;
8894 FunctionTemplateDecl *FunctionTemplate = nullptr;
8895 bool isMemberSpecialization = false;
8896 bool isFunctionTemplateSpecialization = false;
8897
8898 bool isDependentClassScopeExplicitSpecialization = false;
8899 bool HasExplicitTemplateArgs = false;
8900 TemplateArgumentListInfo TemplateArgs;
8901
8902 bool isVirtualOkay = false;
8903
8904 DeclContext *OriginalDC = DC;
8905 bool IsLocalExternDecl = adjustContextForLocalExternDecl(DC);
8906
8907 FunctionDecl *NewFD = CreateNewFunctionDecl(*this, D, DC, R, TInfo, SC,
8908 isVirtualOkay);
8909 if (!NewFD) return nullptr;
8910
8911 if (OriginalLexicalContext && OriginalLexicalContext->isObjCContainer())
8912 NewFD->setTopLevelDeclInObjCContainer();
8913
8914 // Set the lexical context. If this is a function-scope declaration, or has a
8915 // C++ scope specifier, or is the object of a friend declaration, the lexical
8916 // context will be different from the semantic context.
8917 NewFD->setLexicalDeclContext(CurContext);
8918
8919 if (IsLocalExternDecl)
8920 NewFD->setLocalExternDecl();
8921
8922 if (getLangOpts().CPlusPlus) {
8923 bool isInline = D.getDeclSpec().isInlineSpecified();
8924 bool isVirtual = D.getDeclSpec().isVirtualSpecified();
8925 bool hasExplicit = D.getDeclSpec().hasExplicitSpecifier();
8926 isFriend = D.getDeclSpec().isFriendSpecified();
8927 if (isFriend && !isInline && D.isFunctionDefinition()) {
8928 // C++ [class.friend]p5
8929 // A function can be defined in a friend declaration of a
8930 // class . . . . Such a function is implicitly inline.
8931 NewFD->setImplicitlyInline();
8932 }
8933
8934 // If this is a method defined in an __interface, and is not a constructor
8935 // or an overloaded operator, then set the pure flag (isVirtual will already
8936 // return true).
8937 if (const CXXRecordDecl *Parent =
8938 dyn_cast<CXXRecordDecl>(NewFD->getDeclContext())) {
8939 if (Parent->isInterface() && cast<CXXMethodDecl>(NewFD)->isUserProvided())
8940 NewFD->setPure(true);
8941
8942 // C++ [class.union]p2
8943 // A union can have member functions, but not virtual functions.
8944 if (isVirtual && Parent->isUnion())
8945 Diag(D.getDeclSpec().getVirtualSpecLoc(), diag::err_virtual_in_union);
8946 }
8947
8948 SetNestedNameSpecifier(*this, NewFD, D);
8949 isMemberSpecialization = false;
8950 isFunctionTemplateSpecialization = false;
8951 if (D.isInvalidType())
8952 NewFD->setInvalidDecl();
8953
8954 // Match up the template parameter lists with the scope specifier, then
8955 // determine whether we have a template or a template specialization.
8956 bool Invalid = false;
8957 TemplateParameterList *TemplateParams =
8958 MatchTemplateParametersToScopeSpecifier(
8959 D.getDeclSpec().getBeginLoc(), D.getIdentifierLoc(),
8960 D.getCXXScopeSpec(),
8961 D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId
8962 ? D.getName().TemplateId
8963 : nullptr,
8964 TemplateParamLists, isFriend, isMemberSpecialization,
8965 Invalid);
8966 if (TemplateParams) {
8967 // Check that we can declare a template here.
8968 if (CheckTemplateDeclScope(S, TemplateParams))
8969 NewFD->setInvalidDecl();
8970
8971 if (TemplateParams->size() > 0) {
8972 // This is a function template
8973
8974 // A destructor cannot be a template.
8975 if (Name.getNameKind() == DeclarationName::CXXDestructorName) {
8976 Diag(NewFD->getLocation(), diag::err_destructor_template);
8977 NewFD->setInvalidDecl();
8978 }
8979
8980 // If we're adding a template to a dependent context, we may need to
8981 // rebuilding some of the types used within the template parameter list,
8982 // now that we know what the current instantiation is.
8983 if (DC->isDependentContext()) {
8984 ContextRAII SavedContext(*this, DC);
8985 if (RebuildTemplateParamsInCurrentInstantiation(TemplateParams))
8986 Invalid = true;
8987 }
8988
8989 FunctionTemplate = FunctionTemplateDecl::Create(Context, DC,
8990 NewFD->getLocation(),
8991 Name, TemplateParams,
8992 NewFD);
8993 FunctionTemplate->setLexicalDeclContext(CurContext);
8994 NewFD->setDescribedFunctionTemplate(FunctionTemplate);
8995
8996 // For source fidelity, store the other template param lists.
8997 if (TemplateParamLists.size() > 1) {
8998 NewFD->setTemplateParameterListsInfo(Context,
8999 ArrayRef<TemplateParameterList *>(TemplateParamLists)
9000 .drop_back(1));
9001 }
9002 } else {
9003 // This is a function template specialization.
9004 isFunctionTemplateSpecialization = true;
9005 // For source fidelity, store all the template param lists.
9006 if (TemplateParamLists.size() > 0)
9007 NewFD->setTemplateParameterListsInfo(Context, TemplateParamLists);
9008
9009 // C++0x [temp.expl.spec]p20 forbids "template<> friend void foo(int);".
9010 if (isFriend) {
9011 // We want to remove the "template<>", found here.
9012 SourceRange RemoveRange = TemplateParams->getSourceRange();
9013
9014 // If we remove the template<> and the name is not a
9015 // template-id, we're actually silently creating a problem:
9016 // the friend declaration will refer to an untemplated decl,
9017 // and clearly the user wants a template specialization. So
9018 // we need to insert '<>' after the name.
9019 SourceLocation InsertLoc;
9020 if (D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {
9021 InsertLoc = D.getName().getSourceRange().getEnd();
9022 InsertLoc = getLocForEndOfToken(InsertLoc);
9023 }
9024
9025 Diag(D.getIdentifierLoc(), diag::err_template_spec_decl_friend)
9026 << Name << RemoveRange
9027 << FixItHint::CreateRemoval(RemoveRange)
9028 << FixItHint::CreateInsertion(InsertLoc, "<>");
9029 }
9030 }
9031 } else {
9032 // Check that we can declare a template here.
9033 if (!TemplateParamLists.empty() && isMemberSpecialization &&
9034 CheckTemplateDeclScope(S, TemplateParamLists.back()))
9035 NewFD->setInvalidDecl();
9036
9037 // All template param lists were matched against the scope specifier:
9038 // this is NOT (an explicit specialization of) a template.
9039 if (TemplateParamLists.size() > 0)
9040 // For source fidelity, store all the template param lists.
9041 NewFD->setTemplateParameterListsInfo(Context, TemplateParamLists);
9042 }
9043
9044 if (Invalid) {
9045 NewFD->setInvalidDecl();
9046 if (FunctionTemplate)
9047 FunctionTemplate->setInvalidDecl();
9048 }
9049
9050 // C++ [dcl.fct.spec]p5:
9051 // The virtual specifier shall only be used in declarations of
9052 // nonstatic class member functions that appear within a
9053 // member-specification of a class declaration; see 10.3.
9054 //
9055 if (isVirtual && !NewFD->isInvalidDecl()) {
9056 if (!isVirtualOkay) {
9057 Diag(D.getDeclSpec().getVirtualSpecLoc(),
9058 diag::err_virtual_non_function);
9059 } else if (!CurContext->isRecord()) {
9060 // 'virtual' was specified outside of the class.
9061 Diag(D.getDeclSpec().getVirtualSpecLoc(),
9062 diag::err_virtual_out_of_class)
9063 << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc());
9064 } else if (NewFD->getDescribedFunctionTemplate()) {
9065 // C++ [temp.mem]p3:
9066 // A member function template shall not be virtual.
9067 Diag(D.getDeclSpec().getVirtualSpecLoc(),
9068 diag::err_virtual_member_function_template)
9069 << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc());
9070 } else {
9071 // Okay: Add virtual to the method.
9072 NewFD->setVirtualAsWritten(true);
9073 }
9074
9075 if (getLangOpts().CPlusPlus14 &&
9076 NewFD->getReturnType()->isUndeducedType())
9077 Diag(D.getDeclSpec().getVirtualSpecLoc(), diag::err_auto_fn_virtual);
9078 }
9079
9080 if (getLangOpts().CPlusPlus14 &&
9081 (NewFD->isDependentContext() ||
9082 (isFriend && CurContext->isDependentContext())) &&
9083 NewFD->getReturnType()->isUndeducedType()) {
9084 // If the function template is referenced directly (for instance, as a
9085 // member of the current instantiation), pretend it has a dependent type.
9086 // This is not really justified by the standard, but is the only sane
9087 // thing to do.
9088 // FIXME: For a friend function, we have not marked the function as being
9089 // a friend yet, so 'isDependentContext' on the FD doesn't work.
9090 const FunctionProtoType *FPT =
9091 NewFD->getType()->castAs<FunctionProtoType>();
9092 QualType Result =
9093 SubstAutoType(FPT->getReturnType(), Context.DependentTy);
9094 NewFD->setType(Context.getFunctionType(Result, FPT->getParamTypes(),
9095 FPT->getExtProtoInfo()));
9096 }
9097
9098 // C++ [dcl.fct.spec]p3:
9099 // The inline specifier shall not appear on a block scope function
9100 // declaration.
9101 if (isInline && !NewFD->isInvalidDecl()) {
9102 if (CurContext->isFunctionOrMethod()) {
9103 // 'inline' is not allowed on block scope function declaration.
9104 Diag(D.getDeclSpec().getInlineSpecLoc(),
9105 diag::err_inline_declaration_block_scope) << Name
9106 << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());
9107 }
9108 }
9109
9110 // C++ [dcl.fct.spec]p6:
9111 // The explicit specifier shall be used only in the declaration of a
9112 // constructor or conversion function within its class definition;
9113 // see 12.3.1 and 12.3.2.
9114 if (hasExplicit && !NewFD->isInvalidDecl() &&
9115 !isa<CXXDeductionGuideDecl>(NewFD)) {
9116 if (!CurContext->isRecord()) {
9117 // 'explicit' was specified outside of the class.
9118 Diag(D.getDeclSpec().getExplicitSpecLoc(),
9119 diag::err_explicit_out_of_class)
9120 << FixItHint::CreateRemoval(D.getDeclSpec().getExplicitSpecRange());
9121 } else if (!isa<CXXConstructorDecl>(NewFD) &&
9122 !isa<CXXConversionDecl>(NewFD)) {
9123 // 'explicit' was specified on a function that wasn't a constructor
9124 // or conversion function.
9125 Diag(D.getDeclSpec().getExplicitSpecLoc(),
9126 diag::err_explicit_non_ctor_or_conv_function)
9127 << FixItHint::CreateRemoval(D.getDeclSpec().getExplicitSpecRange());
9128 }
9129 }
9130
9131 ConstexprSpecKind ConstexprKind = D.getDeclSpec().getConstexprSpecifier();
9132 if (ConstexprKind != ConstexprSpecKind::Unspecified) {
9133 // C++11 [dcl.constexpr]p2: constexpr functions and constexpr constructors
9134 // are implicitly inline.
9135 NewFD->setImplicitlyInline();
9136
9137 // C++11 [dcl.constexpr]p3: functions declared constexpr are required to
9138 // be either constructors or to return a literal type. Therefore,
9139 // destructors cannot be declared constexpr.
9140 if (isa<CXXDestructorDecl>(NewFD) &&
9141 (!getLangOpts().CPlusPlus20 ||
9142 ConstexprKind == ConstexprSpecKind::Consteval)) {
9143 Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_dtor)
9144 << static_cast<int>(ConstexprKind);
9145 NewFD->setConstexprKind(getLangOpts().CPlusPlus20
9146 ? ConstexprSpecKind::Unspecified
9147 : ConstexprSpecKind::Constexpr);
9148 }
9149 // C++20 [dcl.constexpr]p2: An allocation function, or a
9150 // deallocation function shall not be declared with the consteval
9151 // specifier.
9152 if (ConstexprKind == ConstexprSpecKind::Consteval &&
9153 (NewFD->getOverloadedOperator() == OO_New ||
9154 NewFD->getOverloadedOperator() == OO_Array_New ||
9155 NewFD->getOverloadedOperator() == OO_Delete ||
9156 NewFD->getOverloadedOperator() == OO_Array_Delete)) {
9157 Diag(D.getDeclSpec().getConstexprSpecLoc(),
9158 diag::err_invalid_consteval_decl_kind)
9159 << NewFD;
9160 NewFD->setConstexprKind(ConstexprSpecKind::Constexpr);
9161 }
9162 }
9163
9164 // If __module_private__ was specified, mark the function accordingly.
9165 if (D.getDeclSpec().isModulePrivateSpecified()) {
9166 if (isFunctionTemplateSpecialization) {
9167 SourceLocation ModulePrivateLoc
9168 = D.getDeclSpec().getModulePrivateSpecLoc();
9169 Diag(ModulePrivateLoc, diag::err_module_private_specialization)
9170 << 0
9171 << FixItHint::CreateRemoval(ModulePrivateLoc);
9172 } else {
9173 NewFD->setModulePrivate();
9174 if (FunctionTemplate)
9175 FunctionTemplate->setModulePrivate();
9176 }
9177 }
9178
9179 if (isFriend) {
9180 if (FunctionTemplate) {
9181 FunctionTemplate->setObjectOfFriendDecl();
9182 FunctionTemplate->setAccess(AS_public);
9183 }
9184 NewFD->setObjectOfFriendDecl();
9185 NewFD->setAccess(AS_public);
9186 }
9187
9188 // If a function is defined as defaulted or deleted, mark it as such now.
9189 // We'll do the relevant checks on defaulted / deleted functions later.
9190 switch (D.getFunctionDefinitionKind()) {
9191 case FunctionDefinitionKind::Declaration:
9192 case FunctionDefinitionKind::Definition:
9193 break;
9194
9195 case FunctionDefinitionKind::Defaulted:
9196 NewFD->setDefaulted();
9197 break;
9198
9199 case FunctionDefinitionKind::Deleted:
9200 NewFD->setDeletedAsWritten();
9201 break;
9202 }
9203
9204 if (isa<CXXMethodDecl>(NewFD) && DC == CurContext &&
9205 D.isFunctionDefinition()) {
9206 // C++ [class.mfct]p2:
9207 // A member function may be defined (8.4) in its class definition, in
9208 // which case it is an inline member function (7.1.2)
9209 NewFD->setImplicitlyInline();
9210 }
9211
9212 if (SC == SC_Static && isa<CXXMethodDecl>(NewFD) &&
9213 !CurContext->isRecord()) {
9214 // C++ [class.static]p1:
9215 // A data or function member of a class may be declared static
9216 // in a class definition, in which case it is a static member of
9217 // the class.
9218
9219 // Complain about the 'static' specifier if it's on an out-of-line
9220 // member function definition.
9221
9222 // MSVC permits the use of a 'static' storage specifier on an out-of-line
9223 // member function template declaration and class member template
9224 // declaration (MSVC versions before 2015), warn about this.
9225 Diag(D.getDeclSpec().getStorageClassSpecLoc(),
9226 ((!getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) &&
9227 cast<CXXRecordDecl>(DC)->getDescribedClassTemplate()) ||
9228 (getLangOpts().MSVCCompat && NewFD->getDescribedFunctionTemplate()))
9229 ? diag::ext_static_out_of_line : diag::err_static_out_of_line)
9230 << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
9231 }
9232
9233 // C++11 [except.spec]p15:
9234 // A deallocation function with no exception-specification is treated
9235 // as if it were specified with noexcept(true).
9236 const FunctionProtoType *FPT = R->getAs<FunctionProtoType>();
9237 if ((Name.getCXXOverloadedOperator() == OO_Delete ||
9238 Name.getCXXOverloadedOperator() == OO_Array_Delete) &&
9239 getLangOpts().CPlusPlus11 && FPT && !FPT->hasExceptionSpec())
9240 NewFD->setType(Context.getFunctionType(
9241 FPT->getReturnType(), FPT->getParamTypes(),
9242 FPT->getExtProtoInfo().withExceptionSpec(EST_BasicNoexcept)));
9243 }
9244
9245 // Filter out previous declarations that don't match the scope.
9246 FilterLookupForScope(Previous, OriginalDC, S, shouldConsiderLinkage(NewFD),
9247 D.getCXXScopeSpec().isNotEmpty() ||
9248 isMemberSpecialization ||
9249 isFunctionTemplateSpecialization);
9250
9251 // Handle GNU asm-label extension (encoded as an attribute).
9252 if (Expr *E = (Expr*) D.getAsmLabel()) {
9253 // The parser guarantees this is a string.
9254 StringLiteral *SE = cast<StringLiteral>(E);
9255 NewFD->addAttr(AsmLabelAttr::Create(Context, SE->getString(),
9256 /*IsLiteralLabel=*/true,
9257 SE->getStrTokenLoc(0)));
9258 } else if (!ExtnameUndeclaredIdentifiers.empty()) {
9259 llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*>::iterator I =
9260 ExtnameUndeclaredIdentifiers.find(NewFD->getIdentifier());
9261 if (I != ExtnameUndeclaredIdentifiers.end()) {
9262 if (isDeclExternC(NewFD)) {
9263 NewFD->addAttr(I->second);
9264 ExtnameUndeclaredIdentifiers.erase(I);
9265 } else
9266 Diag(NewFD->getLocation(), diag::warn_redefine_extname_not_applied)
9267 << /*Variable*/0 << NewFD;
9268 }
9269 }
9270
9271 // Copy the parameter declarations from the declarator D to the function
9272 // declaration NewFD, if they are available. First scavenge them into Params.
9273 SmallVector<ParmVarDecl*, 16> Params;
9274 unsigned FTIIdx;
9275 if (D.isFunctionDeclarator(FTIIdx)) {
9276 DeclaratorChunk::FunctionTypeInfo &FTI = D.getTypeObject(FTIIdx).Fun;
9277
9278 // Check for C99 6.7.5.3p10 - foo(void) is a non-varargs
9279 // function that takes no arguments, not a function that takes a
9280 // single void argument.
9281 // We let through "const void" here because Sema::GetTypeForDeclarator
9282 // already checks for that case.
9283 if (FTIHasNonVoidParameters(FTI) && FTI.Params[0].Param) {
9284 for (unsigned i = 0, e = FTI.NumParams; i != e; ++i) {
9285 ParmVarDecl *Param = cast<ParmVarDecl>(FTI.Params[i].Param);
9286 assert(Param->getDeclContext() != NewFD && "Was set before ?");
9287 Param->setDeclContext(NewFD);
9288 Params.push_back(Param);
9289
9290 if (Param->isInvalidDecl())
9291 NewFD->setInvalidDecl();
9292 }
9293 }
9294
9295 if (!getLangOpts().CPlusPlus) {
9296 // In C, find all the tag declarations from the prototype and move them
9297 // into the function DeclContext. Remove them from the surrounding tag
9298 // injection context of the function, which is typically but not always
9299 // the TU.
9300 DeclContext *PrototypeTagContext =
9301 getTagInjectionContext(NewFD->getLexicalDeclContext());
9302 for (NamedDecl *NonParmDecl : FTI.getDeclsInPrototype()) {
9303 auto *TD = dyn_cast<TagDecl>(NonParmDecl);
9304
9305 // We don't want to reparent enumerators. Look at their parent enum
9306 // instead.
9307 if (!TD) {
9308 if (auto *ECD = dyn_cast<EnumConstantDecl>(NonParmDecl))
9309 TD = cast<EnumDecl>(ECD->getDeclContext());
9310 }
9311 if (!TD)
9312 continue;
9313 DeclContext *TagDC = TD->getLexicalDeclContext();
9314 if (!TagDC->containsDecl(TD))
9315 continue;
9316 TagDC->removeDecl(TD);
9317 TD->setDeclContext(NewFD);
9318 NewFD->addDecl(TD);
9319
9320 // Preserve the lexical DeclContext if it is not the surrounding tag
9321 // injection context of the FD. In this example, the semantic context of
9322 // E will be f and the lexical context will be S, while both the
9323 // semantic and lexical contexts of S will be f:
9324 // void f(struct S { enum E { a } f; } s);
9325 if (TagDC != PrototypeTagContext)
9326 TD->setLexicalDeclContext(TagDC);
9327 }
9328 }
9329 } else if (const FunctionProtoType *FT = R->getAs<FunctionProtoType>()) {
9330 // When we're declaring a function with a typedef, typeof, etc as in the
9331 // following example, we'll need to synthesize (unnamed)
9332 // parameters for use in the declaration.
9333 //
9334 // @code
9335 // typedef void fn(int);
9336 // fn f;
9337 // @endcode
9338
9339 // Synthesize a parameter for each argument type.
9340 for (const auto &AI : FT->param_types()) {
9341 ParmVarDecl *Param =
9342 BuildParmVarDeclForTypedef(NewFD, D.getIdentifierLoc(), AI);
9343 Param->setScopeInfo(0, Params.size());
9344 Params.push_back(Param);
9345 }
9346 } else {
9347 assert(R->isFunctionNoProtoType() && NewFD->getNumParams() == 0 &&
9348 "Should not need args for typedef of non-prototype fn");
9349 }
9350
9351 // Finally, we know we have the right number of parameters, install them.
9352 NewFD->setParams(Params);
9353
9354 if (D.getDeclSpec().isNoreturnSpecified())
9355 NewFD->addAttr(C11NoReturnAttr::Create(Context,
9356 D.getDeclSpec().getNoreturnSpecLoc(),
9357 AttributeCommonInfo::AS_Keyword));
9358
9359 // Functions returning a variably modified type violate C99 6.7.5.2p2
9360 // because all functions have linkage.
9361 if (!NewFD->isInvalidDecl() &&
9362 NewFD->getReturnType()->isVariablyModifiedType()) {
9363 Diag(NewFD->getLocation(), diag::err_vm_func_decl);
9364 NewFD->setInvalidDecl();
9365 }
9366
9367 // Apply an implicit SectionAttr if '#pragma clang section text' is active
9368 if (PragmaClangTextSection.Valid && D.isFunctionDefinition() &&
9369 !NewFD->hasAttr<SectionAttr>())
9370 NewFD->addAttr(PragmaClangTextSectionAttr::CreateImplicit(
9371 Context, PragmaClangTextSection.SectionName,
9372 PragmaClangTextSection.PragmaLocation, AttributeCommonInfo::AS_Pragma));
9373
9374 // Apply an implicit SectionAttr if #pragma code_seg is active.
9375 if (CodeSegStack.CurrentValue && D.isFunctionDefinition() &&
9376 !NewFD->hasAttr<SectionAttr>()) {
9377 NewFD->addAttr(SectionAttr::CreateImplicit(
9378 Context, CodeSegStack.CurrentValue->getString(),
9379 CodeSegStack.CurrentPragmaLocation, AttributeCommonInfo::AS_Pragma,
9380 SectionAttr::Declspec_allocate));
9381 if (UnifySection(CodeSegStack.CurrentValue->getString(),
9382 ASTContext::PSF_Implicit | ASTContext::PSF_Execute |
9383 ASTContext::PSF_Read,
9384 NewFD))
9385 NewFD->dropAttr<SectionAttr>();
9386 }
9387
9388 // Apply an implicit CodeSegAttr from class declspec or
9389 // apply an implicit SectionAttr from #pragma code_seg if active.
9390 if (!NewFD->hasAttr<CodeSegAttr>()) {
9391 if (Attr *SAttr = getImplicitCodeSegOrSectionAttrForFunction(NewFD,
9392 D.isFunctionDefinition())) {
9393 NewFD->addAttr(SAttr);
9394 }
9395 }
9396
9397 // Handle attributes.
9398 ProcessDeclAttributes(S, NewFD, D);
9399
9400 if (getLangOpts().OpenCL) {
9401 // OpenCL v1.1 s6.5: Using an address space qualifier in a function return
9402 // type declaration will generate a compilation error.
9403 LangAS AddressSpace = NewFD->getReturnType().getAddressSpace();
9404 if (AddressSpace != LangAS::Default) {
9405 Diag(NewFD->getLocation(),
9406 diag::err_opencl_return_value_with_address_space);
9407 NewFD->setInvalidDecl();
9408 }
9409 }
9410
9411 if (!getLangOpts().CPlusPlus) {
9412 // Perform semantic checking on the function declaration.
9413 if (!NewFD->isInvalidDecl() && NewFD->isMain())
9414 CheckMain(NewFD, D.getDeclSpec());
9415
9416 if (!NewFD->isInvalidDecl() && NewFD->isMSVCRTEntryPoint())
9417 CheckMSVCRTEntryPoint(NewFD);
9418
9419 if (!NewFD->isInvalidDecl())
9420 D.setRedeclaration(CheckFunctionDeclaration(S, NewFD, Previous,
9421 isMemberSpecialization));
9422 else if (!Previous.empty())
9423 // Recover gracefully from an invalid redeclaration.
9424 D.setRedeclaration(true);
9425 assert((NewFD->isInvalidDecl() || !D.isRedeclaration() ||
9426 Previous.getResultKind() != LookupResult::FoundOverloaded) &&
9427 "previous declaration set still overloaded");
9428
9429 // Diagnose no-prototype function declarations with calling conventions that
9430 // don't support variadic calls. Only do this in C and do it after merging
9431 // possibly prototyped redeclarations.
9432 const FunctionType *FT = NewFD->getType()->castAs<FunctionType>();
9433 if (isa<FunctionNoProtoType>(FT) && !D.isFunctionDefinition()) {
9434 CallingConv CC = FT->getExtInfo().getCC();
9435 if (!supportsVariadicCall(CC)) {
9436 // Windows system headers sometimes accidentally use stdcall without
9437 // (void) parameters, so we relax this to a warning.
9438 int DiagID =
9439 CC == CC_X86StdCall ? diag::warn_cconv_knr : diag::err_cconv_knr;
9440 Diag(NewFD->getLocation(), DiagID)
9441 << FunctionType::getNameForCallConv(CC);
9442 }
9443 }
9444
9445 if (NewFD->getReturnType().hasNonTrivialToPrimitiveDestructCUnion() ||
9446 NewFD->getReturnType().hasNonTrivialToPrimitiveCopyCUnion())
9447 checkNonTrivialCUnion(NewFD->getReturnType(),
9448 NewFD->getReturnTypeSourceRange().getBegin(),
9449 NTCUC_FunctionReturn, NTCUK_Destruct|NTCUK_Copy);
9450 } else {
9451 // C++11 [replacement.functions]p3:
9452 // The program's definitions shall not be specified as inline.
9453 //
9454 // N.B. We diagnose declarations instead of definitions per LWG issue 2340.
9455 //
9456 // Suppress the diagnostic if the function is __attribute__((used)), since
9457 // that forces an external definition to be emitted.
9458 if (D.getDeclSpec().isInlineSpecified() &&
9459 NewFD->isReplaceableGlobalAllocationFunction() &&
9460 !NewFD->hasAttr<UsedAttr>())
9461 Diag(D.getDeclSpec().getInlineSpecLoc(),
9462 diag::ext_operator_new_delete_declared_inline)
9463 << NewFD->getDeclName();
9464
9465 // If the declarator is a template-id, translate the parser's template
9466 // argument list into our AST format.
9467 if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {
9468 TemplateIdAnnotation *TemplateId = D.getName().TemplateId;
9469 TemplateArgs.setLAngleLoc(TemplateId->LAngleLoc);
9470 TemplateArgs.setRAngleLoc(TemplateId->RAngleLoc);
9471 ASTTemplateArgsPtr TemplateArgsPtr(TemplateId->getTemplateArgs(),
9472 TemplateId->NumArgs);
9473 translateTemplateArguments(TemplateArgsPtr,
9474 TemplateArgs);
9475
9476 HasExplicitTemplateArgs = true;
9477
9478 if (NewFD->isInvalidDecl()) {
9479 HasExplicitTemplateArgs = false;
9480 } else if (FunctionTemplate) {
9481 // Function template with explicit template arguments.
9482 Diag(D.getIdentifierLoc(), diag::err_function_template_partial_spec)
9483 << SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc);
9484
9485 HasExplicitTemplateArgs = false;
9486 } else {
9487 assert((isFunctionTemplateSpecialization ||
9488 D.getDeclSpec().isFriendSpecified()) &&
9489 "should have a 'template<>' for this decl");
9490 // "friend void foo<>(int);" is an implicit specialization decl.
9491 isFunctionTemplateSpecialization = true;
9492 }
9493 } else if (isFriend && isFunctionTemplateSpecialization) {
9494 // This combination is only possible in a recovery case; the user
9495 // wrote something like:
9496 // template <> friend void foo(int);
9497 // which we're recovering from as if the user had written:
9498 // friend void foo<>(int);
9499 // Go ahead and fake up a template id.
9500 HasExplicitTemplateArgs = true;
9501 TemplateArgs.setLAngleLoc(D.getIdentifierLoc());
9502 TemplateArgs.setRAngleLoc(D.getIdentifierLoc());
9503 }
9504
9505 // We do not add HD attributes to specializations here because
9506 // they may have different constexpr-ness compared to their
9507 // templates and, after maybeAddCUDAHostDeviceAttrs() is applied,
9508 // may end up with different effective targets. Instead, a
9509 // specialization inherits its target attributes from its template
9510 // in the CheckFunctionTemplateSpecialization() call below.
9511 if (getLangOpts().CUDA && !isFunctionTemplateSpecialization)
9512 maybeAddCUDAHostDeviceAttrs(NewFD, Previous);
9513
9514 // If it's a friend (and only if it's a friend), it's possible
9515 // that either the specialized function type or the specialized
9516 // template is dependent, and therefore matching will fail. In
9517 // this case, don't check the specialization yet.
9518 bool InstantiationDependent = false;
9519 if (isFunctionTemplateSpecialization && isFriend &&
9520 (NewFD->getType()->isDependentType() || DC->isDependentContext() ||
9521 TemplateSpecializationType::anyDependentTemplateArguments(
9522 TemplateArgs,
9523 InstantiationDependent))) {
9524 assert(HasExplicitTemplateArgs &&
9525 "friend function specialization without template args");
9526 if (CheckDependentFunctionTemplateSpecialization(NewFD, TemplateArgs,
9527 Previous))
9528 NewFD->setInvalidDecl();
9529 } else if (isFunctionTemplateSpecialization) {
9530 if (CurContext->isDependentContext() && CurContext->isRecord()
9531 && !isFriend) {
9532 isDependentClassScopeExplicitSpecialization = true;
9533 } else if (!NewFD->isInvalidDecl() &&
9534 CheckFunctionTemplateSpecialization(
9535 NewFD, (HasExplicitTemplateArgs ? &TemplateArgs : nullptr),
9536 Previous))
9537 NewFD->setInvalidDecl();
9538
9539 // C++ [dcl.stc]p1:
9540 // A storage-class-specifier shall not be specified in an explicit
9541 // specialization (14.7.3)
9542 FunctionTemplateSpecializationInfo *Info =
9543 NewFD->getTemplateSpecializationInfo();
9544 if (Info && SC != SC_None) {
9545 if (SC != Info->getTemplate()->getTemplatedDecl()->getStorageClass())
9546 Diag(NewFD->getLocation(),
9547 diag::err_explicit_specialization_inconsistent_storage_class)
9548 << SC
9549 << FixItHint::CreateRemoval(
9550 D.getDeclSpec().getStorageClassSpecLoc());
9551
9552 else
9553 Diag(NewFD->getLocation(),
9554 diag::ext_explicit_specialization_storage_class)
9555 << FixItHint::CreateRemoval(
9556 D.getDeclSpec().getStorageClassSpecLoc());
9557 }
9558 } else if (isMemberSpecialization && isa<CXXMethodDecl>(NewFD)) {
9559 if (CheckMemberSpecialization(NewFD, Previous))
9560 NewFD->setInvalidDecl();
9561 }
9562
9563 // Perform semantic checking on the function declaration.
9564 if (!isDependentClassScopeExplicitSpecialization) {
9565 if (!NewFD->isInvalidDecl() && NewFD->isMain())
9566 CheckMain(NewFD, D.getDeclSpec());
9567
9568 if (!NewFD->isInvalidDecl() && NewFD->isMSVCRTEntryPoint())
9569 CheckMSVCRTEntryPoint(NewFD);
9570
9571 if (!NewFD->isInvalidDecl())
9572 D.setRedeclaration(CheckFunctionDeclaration(S, NewFD, Previous,
9573 isMemberSpecialization));
9574 else if (!Previous.empty())
9575 // Recover gracefully from an invalid redeclaration.
9576 D.setRedeclaration(true);
9577 }
9578
9579 assert((NewFD->isInvalidDecl() || !D.isRedeclaration() ||
9580 Previous.getResultKind() != LookupResult::FoundOverloaded) &&
9581 "previous declaration set still overloaded");
9582
9583 NamedDecl *PrincipalDecl = (FunctionTemplate
9584 ? cast<NamedDecl>(FunctionTemplate)
9585 : NewFD);
9586
9587 if (isFriend && NewFD->getPreviousDecl()) {
9588 AccessSpecifier Access = AS_public;
9589 if (!NewFD->isInvalidDecl())
9590 Access = NewFD->getPreviousDecl()->getAccess();
9591
9592 NewFD->setAccess(Access);
9593 if (FunctionTemplate) FunctionTemplate->setAccess(Access);
9594 }
9595
9596 if (NewFD->isOverloadedOperator() && !DC->isRecord() &&
9597 PrincipalDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary))
9598 PrincipalDecl->setNonMemberOperator();
9599
9600 // If we have a function template, check the template parameter
9601 // list. This will check and merge default template arguments.
9602 if (FunctionTemplate) {
9603 FunctionTemplateDecl *PrevTemplate =
9604 FunctionTemplate->getPreviousDecl();
9605 CheckTemplateParameterList(FunctionTemplate->getTemplateParameters(),
9606 PrevTemplate ? PrevTemplate->getTemplateParameters()
9607 : nullptr,
9608 D.getDeclSpec().isFriendSpecified()
9609 ? (D.isFunctionDefinition()
9610 ? TPC_FriendFunctionTemplateDefinition
9611 : TPC_FriendFunctionTemplate)
9612 : (D.getCXXScopeSpec().isSet() &&
9613 DC && DC->isRecord() &&
9614 DC->isDependentContext())
9615 ? TPC_ClassTemplateMember
9616 : TPC_FunctionTemplate);
9617 }
9618
9619 if (NewFD->isInvalidDecl()) {
9620 // Ignore all the rest of this.
9621 } else if (!D.isRedeclaration()) {
9622 struct ActOnFDArgs ExtraArgs = { S, D, TemplateParamLists,
9623 AddToScope };
9624 // Fake up an access specifier if it's supposed to be a class member.
9625 if (isa<CXXRecordDecl>(NewFD->getDeclContext()))
9626 NewFD->setAccess(AS_public);
9627
9628 // Qualified decls generally require a previous declaration.
9629 if (D.getCXXScopeSpec().isSet()) {
9630 // ...with the major exception of templated-scope or
9631 // dependent-scope friend declarations.
9632
9633 // TODO: we currently also suppress this check in dependent
9634 // contexts because (1) the parameter depth will be off when
9635 // matching friend templates and (2) we might actually be
9636 // selecting a friend based on a dependent factor. But there
9637 // are situations where these conditions don't apply and we
9638 // can actually do this check immediately.
9639 //
9640 // Unless the scope is dependent, it's always an error if qualified
9641 // redeclaration lookup found nothing at all. Diagnose that now;
9642 // nothing will diagnose that error later.
9643 if (isFriend &&
9644 (D.getCXXScopeSpec().getScopeRep()->isDependent() ||
9645 (!Previous.empty() && CurContext->isDependentContext()))) {
9646 // ignore these
9647 } else {
9648 // The user tried to provide an out-of-line definition for a
9649 // function that is a member of a class or namespace, but there
9650 // was no such member function declared (C++ [class.mfct]p2,
9651 // C++ [namespace.memdef]p2). For example:
9652 //
9653 // class X {
9654 // void f() const;
9655 // };
9656 //
9657 // void X::f() { } // ill-formed
9658 //
9659 // Complain about this problem, and attempt to suggest close
9660 // matches (e.g., those that differ only in cv-qualifiers and
9661 // whether the parameter types are references).
9662
9663 if (NamedDecl *Result = DiagnoseInvalidRedeclaration(
9664 *this, Previous, NewFD, ExtraArgs, false, nullptr)) {
9665 AddToScope = ExtraArgs.AddToScope;
9666 return Result;
9667 }
9668 }
9669
9670 // Unqualified local friend declarations are required to resolve
9671 // to something.
9672 } else if (isFriend && cast<CXXRecordDecl>(CurContext)->isLocalClass()) {
9673 if (NamedDecl *Result = DiagnoseInvalidRedeclaration(
9674 *this, Previous, NewFD, ExtraArgs, true, S)) {
9675 AddToScope = ExtraArgs.AddToScope;
9676 return Result;
9677 }
9678 }
9679 } else if (!D.isFunctionDefinition() &&
9680 isa<CXXMethodDecl>(NewFD) && NewFD->isOutOfLine() &&
9681 !isFriend && !isFunctionTemplateSpecialization &&
9682 !isMemberSpecialization) {
9683 // An out-of-line member function declaration must also be a
9684 // definition (C++ [class.mfct]p2).
9685 // Note that this is not the case for explicit specializations of
9686 // function templates or member functions of class templates, per
9687 // C++ [temp.expl.spec]p2. We also allow these declarations as an
9688 // extension for compatibility with old SWIG code which likes to
9689 // generate them.
9690 Diag(NewFD->getLocation(), diag::ext_out_of_line_declaration)
9691 << D.getCXXScopeSpec().getRange();
9692 }
9693 }
9694
9695 // If this is the first declaration of a library builtin function, add
9696 // attributes as appropriate.
9697 if (!D.isRedeclaration() &&
9698 NewFD->getDeclContext()->getRedeclContext()->isFileContext()) {
9699 if (IdentifierInfo *II = Previous.getLookupName().getAsIdentifierInfo()) {
9700 if (unsigned BuiltinID = II->getBuiltinID()) {
9701 if (NewFD->getLanguageLinkage() == CLanguageLinkage) {
9702 // Validate the type matches unless this builtin is specified as
9703 // matching regardless of its declared type.
9704 if (Context.BuiltinInfo.allowTypeMismatch(BuiltinID)) {
9705 NewFD->addAttr(BuiltinAttr::CreateImplicit(Context, BuiltinID));
9706 } else {
9707 ASTContext::GetBuiltinTypeError Error;
9708 LookupNecessaryTypesForBuiltin(S, BuiltinID);
9709 QualType BuiltinType = Context.GetBuiltinType(BuiltinID, Error);
9710
9711 if (!Error && !BuiltinType.isNull() &&
9712 Context.hasSameFunctionTypeIgnoringExceptionSpec(
9713 NewFD->getType(), BuiltinType))
9714 NewFD->addAttr(BuiltinAttr::CreateImplicit(Context, BuiltinID));
9715 }
9716 } else if (BuiltinID == Builtin::BI__GetExceptionInfo &&
9717 Context.getTargetInfo().getCXXABI().isMicrosoft()) {
9718 // FIXME: We should consider this a builtin only in the std namespace.
9719 NewFD->addAttr(BuiltinAttr::CreateImplicit(Context, BuiltinID));
9720 }
9721 }
9722 }
9723 }
9724
9725 ProcessPragmaWeak(S, NewFD);
9726 checkAttributesAfterMerging(*this, *NewFD);
9727
9728 AddKnownFunctionAttributes(NewFD);
9729
9730 if (NewFD->hasAttr<OverloadableAttr>() &&
9731 !NewFD->getType()->getAs<FunctionProtoType>()) {
9732 Diag(NewFD->getLocation(),
9733 diag::err_attribute_overloadable_no_prototype)
9734 << NewFD;
9735
9736 // Turn this into a variadic function with no parameters.
9737 const FunctionType *FT = NewFD->getType()->getAs<FunctionType>();
9738 FunctionProtoType::ExtProtoInfo EPI(
9739 Context.getDefaultCallingConvention(true, false));
9740 EPI.Variadic = true;
9741 EPI.ExtInfo = FT->getExtInfo();
9742
9743 QualType R = Context.getFunctionType(FT->getReturnType(), None, EPI);
9744 NewFD->setType(R);
9745 }
9746
9747 // If there's a #pragma GCC visibility in scope, and this isn't a class
9748 // member, set the visibility of this function.
9749 if (!DC->isRecord() && NewFD->isExternallyVisible())
9750 AddPushedVisibilityAttribute(NewFD);
9751
9752 // If there's a #pragma clang arc_cf_code_audited in scope, consider
9753 // marking the function.
9754 AddCFAuditedAttribute(NewFD);
9755
9756 // If this is a function definition, check if we have to apply optnone due to
9757 // a pragma.
9758 if(D.isFunctionDefinition())
9759 AddRangeBasedOptnone(NewFD);
9760
9761 // If this is the first declaration of an extern C variable, update
9762 // the map of such variables.
9763 if (NewFD->isFirstDecl() && !NewFD->isInvalidDecl() &&
9764 isIncompleteDeclExternC(*this, NewFD))
9765 RegisterLocallyScopedExternCDecl(NewFD, S);
9766
9767 // Set this FunctionDecl's range up to the right paren.
9768 NewFD->setRangeEnd(D.getSourceRange().getEnd());
9769
9770 if (D.isRedeclaration() && !Previous.empty()) {
9771 NamedDecl *Prev = Previous.getRepresentativeDecl();
9772 checkDLLAttributeRedeclaration(*this, Prev, NewFD,
9773 isMemberSpecialization ||
9774 isFunctionTemplateSpecialization,
9775 D.isFunctionDefinition());
9776 }
9777
9778 if (getLangOpts().CUDA) {
9779 IdentifierInfo *II = NewFD->getIdentifier();
9780 if (II && II->isStr(getCudaConfigureFuncName()) &&
9781 !NewFD->isInvalidDecl() &&
9782 NewFD->getDeclContext()->getRedeclContext()->isTranslationUnit()) {
9783 if (!R->getAs<FunctionType>()->getReturnType()->isScalarType())
9784 Diag(NewFD->getLocation(), diag::err_config_scalar_return)
9785 << getCudaConfigureFuncName();
9786 Context.setcudaConfigureCallDecl(NewFD);
9787 }
9788
9789 // Variadic functions, other than a *declaration* of printf, are not allowed
9790 // in device-side CUDA code, unless someone passed
9791 // -fcuda-allow-variadic-functions.
9792 if (!getLangOpts().CUDAAllowVariadicFunctions && NewFD->isVariadic() &&
9793 (NewFD->hasAttr<CUDADeviceAttr>() ||
9794 NewFD->hasAttr<CUDAGlobalAttr>()) &&
9795 !(II && II->isStr("printf") && NewFD->isExternC() &&
9796 !D.isFunctionDefinition())) {
9797 Diag(NewFD->getLocation(), diag::err_variadic_device_fn);
9798 }
9799 }
9800
9801 MarkUnusedFileScopedDecl(NewFD);
9802
9803
9804
9805 if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {
9806 // OpenCL v1.2 s6.8 static is invalid for kernel functions.
9807 if ((getLangOpts().OpenCLVersion >= 120)
9808 && (SC == SC_Static)) {
9809 Diag(D.getIdentifierLoc(), diag::err_static_kernel);
9810 D.setInvalidType();
9811 }
9812
9813 // OpenCL v1.2, s6.9 -- Kernels can only have return type void.
9814 if (!NewFD->getReturnType()->isVoidType()) {
9815 SourceRange RTRange = NewFD->getReturnTypeSourceRange();
9816 Diag(D.getIdentifierLoc(), diag::err_expected_kernel_void_return_type)
9817 << (RTRange.isValid() ? FixItHint::CreateReplacement(RTRange, "void")
9818 : FixItHint());
9819 D.setInvalidType();
9820 }
9821
9822 llvm::SmallPtrSet<const Type *, 16> ValidTypes;
9823 for (auto Param : NewFD->parameters())
9824 checkIsValidOpenCLKernelParameter(*this, D, Param, ValidTypes);
9825
9826 if (getLangOpts().OpenCLCPlusPlus) {
9827 if (DC->isRecord()) {
9828 Diag(D.getIdentifierLoc(), diag::err_method_kernel);
9829 D.setInvalidType();
9830 }
9831 if (FunctionTemplate) {
9832 Diag(D.getIdentifierLoc(), diag::err_template_kernel);
9833 D.setInvalidType();
9834 }
9835 }
9836 }
9837
9838 if (getLangOpts().CPlusPlus) {
9839 if (FunctionTemplate) {
9840 if (NewFD->isInvalidDecl())
9841 FunctionTemplate->setInvalidDecl();
9842 return FunctionTemplate;
9843 }
9844
9845 if (isMemberSpecialization && !NewFD->isInvalidDecl())
9846 CompleteMemberSpecialization(NewFD, Previous);
9847 }
9848
9849 for (const ParmVarDecl *Param : NewFD->parameters()) {
9850 QualType PT = Param->getType();
9851
9852 // OpenCL 2.0 pipe restrictions forbids pipe packet types to be non-value
9853 // types.
9854 if (getLangOpts().OpenCLVersion >= 200 || getLangOpts().OpenCLCPlusPlus) {
9855 if(const PipeType *PipeTy = PT->getAs<PipeType>()) {
9856 QualType ElemTy = PipeTy->getElementType();
9857 if (ElemTy->isReferenceType() || ElemTy->isPointerType()) {
9858 Diag(Param->getTypeSpecStartLoc(), diag::err_reference_pipe_type );
9859 D.setInvalidType();
9860 }
9861 }
9862 }
9863 }
9864
9865 // Here we have an function template explicit specialization at class scope.
9866 // The actual specialization will be postponed to template instatiation
9867 // time via the ClassScopeFunctionSpecializationDecl node.
9868 if (isDependentClassScopeExplicitSpecialization) {
9869 ClassScopeFunctionSpecializationDecl *NewSpec =
9870 ClassScopeFunctionSpecializationDecl::Create(
9871 Context, CurContext, NewFD->getLocation(),
9872 cast<CXXMethodDecl>(NewFD),
9873 HasExplicitTemplateArgs, TemplateArgs);
9874 CurContext->addDecl(NewSpec);
9875 AddToScope = false;
9876 }
9877
9878 // Diagnose availability attributes. Availability cannot be used on functions
9879 // that are run during load/unload.
9880 if (const auto *attr = NewFD->getAttr<AvailabilityAttr>()) {
9881 if (NewFD->hasAttr<ConstructorAttr>()) {
9882 Diag(attr->getLocation(), diag::warn_availability_on_static_initializer)
9883 << 1;
9884 NewFD->dropAttr<AvailabilityAttr>();
9885 }
9886 if (NewFD->hasAttr<DestructorAttr>()) {
9887 Diag(attr->getLocation(), diag::warn_availability_on_static_initializer)
9888 << 2;
9889 NewFD->dropAttr<AvailabilityAttr>();
9890 }
9891 }
9892
9893 // Diagnose no_builtin attribute on function declaration that are not a
9894 // definition.
9895 // FIXME: We should really be doing this in
9896 // SemaDeclAttr.cpp::handleNoBuiltinAttr, unfortunately we only have access to
9897 // the FunctionDecl and at this point of the code
9898 // FunctionDecl::isThisDeclarationADefinition() which always returns `false`
9899 // because Sema::ActOnStartOfFunctionDef has not been called yet.
9900 if (const auto *NBA = NewFD->getAttr<NoBuiltinAttr>())
9901 switch (D.getFunctionDefinitionKind()) {
9902 case FunctionDefinitionKind::Defaulted:
9903 case FunctionDefinitionKind::Deleted:
9904 Diag(NBA->getLocation(),
9905 diag::err_attribute_no_builtin_on_defaulted_deleted_function)
9906 << NBA->getSpelling();
9907 break;
9908 case FunctionDefinitionKind::Declaration:
9909 Diag(NBA->getLocation(), diag::err_attribute_no_builtin_on_non_definition)
9910 << NBA->getSpelling();
9911 break;
9912 case FunctionDefinitionKind::Definition:
9913 break;
9914 }
9915
9916 return NewFD;
9917 }
9918
9919 /// Return a CodeSegAttr from a containing class. The Microsoft docs say
9920 /// when __declspec(code_seg) "is applied to a class, all member functions of
9921 /// the class and nested classes -- this includes compiler-generated special
9922 /// member functions -- are put in the specified segment."
9923 /// The actual behavior is a little more complicated. The Microsoft compiler
9924 /// won't check outer classes if there is an active value from #pragma code_seg.
9925 /// The CodeSeg is always applied from the direct parent but only from outer
9926 /// classes when the #pragma code_seg stack is empty. See:
9927 /// https://reviews.llvm.org/D22931, the Microsoft feedback page is no longer
9928 /// available since MS has removed the page.
getImplicitCodeSegAttrFromClass(Sema & S,const FunctionDecl * FD)9929 static Attr *getImplicitCodeSegAttrFromClass(Sema &S, const FunctionDecl *FD) {
9930 const auto *Method = dyn_cast<CXXMethodDecl>(FD);
9931 if (!Method)
9932 return nullptr;
9933 const CXXRecordDecl *Parent = Method->getParent();
9934 if (const auto *SAttr = Parent->getAttr<CodeSegAttr>()) {
9935 Attr *NewAttr = SAttr->clone(S.getASTContext());
9936 NewAttr->setImplicit(true);
9937 return NewAttr;
9938 }
9939
9940 // The Microsoft compiler won't check outer classes for the CodeSeg
9941 // when the #pragma code_seg stack is active.
9942 if (S.CodeSegStack.CurrentValue)
9943 return nullptr;
9944
9945 while ((Parent = dyn_cast<CXXRecordDecl>(Parent->getParent()))) {
9946 if (const auto *SAttr = Parent->getAttr<CodeSegAttr>()) {
9947 Attr *NewAttr = SAttr->clone(S.getASTContext());
9948 NewAttr->setImplicit(true);
9949 return NewAttr;
9950 }
9951 }
9952 return nullptr;
9953 }
9954
9955 /// Returns an implicit CodeSegAttr if a __declspec(code_seg) is found on a
9956 /// containing class. Otherwise it will return implicit SectionAttr if the
9957 /// function is a definition and there is an active value on CodeSegStack
9958 /// (from the current #pragma code-seg value).
9959 ///
9960 /// \param FD Function being declared.
9961 /// \param IsDefinition Whether it is a definition or just a declarartion.
9962 /// \returns A CodeSegAttr or SectionAttr to apply to the function or
9963 /// nullptr if no attribute should be added.
getImplicitCodeSegOrSectionAttrForFunction(const FunctionDecl * FD,bool IsDefinition)9964 Attr *Sema::getImplicitCodeSegOrSectionAttrForFunction(const FunctionDecl *FD,
9965 bool IsDefinition) {
9966 if (Attr *A = getImplicitCodeSegAttrFromClass(*this, FD))
9967 return A;
9968 if (!FD->hasAttr<SectionAttr>() && IsDefinition &&
9969 CodeSegStack.CurrentValue)
9970 return SectionAttr::CreateImplicit(
9971 getASTContext(), CodeSegStack.CurrentValue->getString(),
9972 CodeSegStack.CurrentPragmaLocation, AttributeCommonInfo::AS_Pragma,
9973 SectionAttr::Declspec_allocate);
9974 return nullptr;
9975 }
9976
9977 /// Determines if we can perform a correct type check for \p D as a
9978 /// redeclaration of \p PrevDecl. If not, we can generally still perform a
9979 /// best-effort check.
9980 ///
9981 /// \param NewD The new declaration.
9982 /// \param OldD The old declaration.
9983 /// \param NewT The portion of the type of the new declaration to check.
9984 /// \param OldT The portion of the type of the old declaration to check.
canFullyTypeCheckRedeclaration(ValueDecl * NewD,ValueDecl * OldD,QualType NewT,QualType OldT)9985 bool Sema::canFullyTypeCheckRedeclaration(ValueDecl *NewD, ValueDecl *OldD,
9986 QualType NewT, QualType OldT) {
9987 if (!NewD->getLexicalDeclContext()->isDependentContext())
9988 return true;
9989
9990 // For dependently-typed local extern declarations and friends, we can't
9991 // perform a correct type check in general until instantiation:
9992 //
9993 // int f();
9994 // template<typename T> void g() { T f(); }
9995 //
9996 // (valid if g() is only instantiated with T = int).
9997 if (NewT->isDependentType() &&
9998 (NewD->isLocalExternDecl() || NewD->getFriendObjectKind()))
9999 return false;
10000
10001 // Similarly, if the previous declaration was a dependent local extern
10002 // declaration, we don't really know its type yet.
10003 if (OldT->isDependentType() && OldD->isLocalExternDecl())
10004 return false;
10005
10006 return true;
10007 }
10008
10009 /// Checks if the new declaration declared in dependent context must be
10010 /// put in the same redeclaration chain as the specified declaration.
10011 ///
10012 /// \param D Declaration that is checked.
10013 /// \param PrevDecl Previous declaration found with proper lookup method for the
10014 /// same declaration name.
10015 /// \returns True if D must be added to the redeclaration chain which PrevDecl
10016 /// belongs to.
10017 ///
shouldLinkDependentDeclWithPrevious(Decl * D,Decl * PrevDecl)10018 bool Sema::shouldLinkDependentDeclWithPrevious(Decl *D, Decl *PrevDecl) {
10019 if (!D->getLexicalDeclContext()->isDependentContext())
10020 return true;
10021
10022 // Don't chain dependent friend function definitions until instantiation, to
10023 // permit cases like
10024 //
10025 // void func();
10026 // template<typename T> class C1 { friend void func() {} };
10027 // template<typename T> class C2 { friend void func() {} };
10028 //
10029 // ... which is valid if only one of C1 and C2 is ever instantiated.
10030 //
10031 // FIXME: This need only apply to function definitions. For now, we proxy
10032 // this by checking for a file-scope function. We do not want this to apply
10033 // to friend declarations nominating member functions, because that gets in
10034 // the way of access checks.
10035 if (D->getFriendObjectKind() && D->getDeclContext()->isFileContext())
10036 return false;
10037
10038 auto *VD = dyn_cast<ValueDecl>(D);
10039 auto *PrevVD = dyn_cast<ValueDecl>(PrevDecl);
10040 return !VD || !PrevVD ||
10041 canFullyTypeCheckRedeclaration(VD, PrevVD, VD->getType(),
10042 PrevVD->getType());
10043 }
10044
10045 /// Check the target attribute of the function for MultiVersion
10046 /// validity.
10047 ///
10048 /// Returns true if there was an error, false otherwise.
CheckMultiVersionValue(Sema & S,const FunctionDecl * FD)10049 static bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {
10050 const auto *TA = FD->getAttr<TargetAttr>();
10051 assert(TA && "MultiVersion Candidate requires a target attribute");
10052 ParsedTargetAttr ParseInfo = TA->parse();
10053 const TargetInfo &TargetInfo = S.Context.getTargetInfo();
10054 enum ErrType { Feature = 0, Architecture = 1 };
10055
10056 if (!ParseInfo.Architecture.empty() &&
10057 !TargetInfo.validateCpuIs(ParseInfo.Architecture)) {
10058 S.Diag(FD->getLocation(), diag::err_bad_multiversion_option)
10059 << Architecture << ParseInfo.Architecture;
10060 return true;
10061 }
10062
10063 for (const auto &Feat : ParseInfo.Features) {
10064 auto BareFeat = StringRef{Feat}.substr(1);
10065 if (Feat[0] == '-') {
10066 S.Diag(FD->getLocation(), diag::err_bad_multiversion_option)
10067 << Feature << ("no-" + BareFeat).str();
10068 return true;
10069 }
10070
10071 if (!TargetInfo.validateCpuSupports(BareFeat) ||
10072 !TargetInfo.isValidFeatureName(BareFeat)) {
10073 S.Diag(FD->getLocation(), diag::err_bad_multiversion_option)
10074 << Feature << BareFeat;
10075 return true;
10076 }
10077 }
10078 return false;
10079 }
10080
10081 // Provide a white-list of attributes that are allowed to be combined with
10082 // multiversion functions.
AttrCompatibleWithMultiVersion(attr::Kind Kind,MultiVersionKind MVType)10083 static bool AttrCompatibleWithMultiVersion(attr::Kind Kind,
10084 MultiVersionKind MVType) {
10085 // Note: this list/diagnosis must match the list in
10086 // checkMultiversionAttributesAllSame.
10087 switch (Kind) {
10088 default:
10089 return false;
10090 case attr::Used:
10091 return MVType == MultiVersionKind::Target;
10092 case attr::NonNull:
10093 case attr::NoThrow:
10094 return true;
10095 }
10096 }
10097
checkNonMultiVersionCompatAttributes(Sema & S,const FunctionDecl * FD,const FunctionDecl * CausedFD,MultiVersionKind MVType)10098 static bool checkNonMultiVersionCompatAttributes(Sema &S,
10099 const FunctionDecl *FD,
10100 const FunctionDecl *CausedFD,
10101 MultiVersionKind MVType) {
10102 bool IsCPUSpecificCPUDispatchMVType =
10103 MVType == MultiVersionKind::CPUDispatch ||
10104 MVType == MultiVersionKind::CPUSpecific;
10105 const auto Diagnose = [FD, CausedFD, IsCPUSpecificCPUDispatchMVType](
10106 Sema &S, const Attr *A) {
10107 S.Diag(FD->getLocation(), diag::err_multiversion_disallowed_other_attr)
10108 << IsCPUSpecificCPUDispatchMVType << A;
10109 if (CausedFD)
10110 S.Diag(CausedFD->getLocation(), diag::note_multiversioning_caused_here);
10111 return true;
10112 };
10113
10114 for (const Attr *A : FD->attrs()) {
10115 switch (A->getKind()) {
10116 case attr::CPUDispatch:
10117 case attr::CPUSpecific:
10118 if (MVType != MultiVersionKind::CPUDispatch &&
10119 MVType != MultiVersionKind::CPUSpecific)
10120 return Diagnose(S, A);
10121 break;
10122 case attr::Target:
10123 if (MVType != MultiVersionKind::Target)
10124 return Diagnose(S, A);
10125 break;
10126 default:
10127 if (!AttrCompatibleWithMultiVersion(A->getKind(), MVType))
10128 return Diagnose(S, A);
10129 break;
10130 }
10131 }
10132 return false;
10133 }
10134
areMultiversionVariantFunctionsCompatible(const FunctionDecl * OldFD,const FunctionDecl * NewFD,const PartialDiagnostic & NoProtoDiagID,const PartialDiagnosticAt & NoteCausedDiagIDAt,const PartialDiagnosticAt & NoSupportDiagIDAt,const PartialDiagnosticAt & DiffDiagIDAt,bool TemplatesSupported,bool ConstexprSupported,bool CLinkageMayDiffer)10135 bool Sema::areMultiversionVariantFunctionsCompatible(
10136 const FunctionDecl *OldFD, const FunctionDecl *NewFD,
10137 const PartialDiagnostic &NoProtoDiagID,
10138 const PartialDiagnosticAt &NoteCausedDiagIDAt,
10139 const PartialDiagnosticAt &NoSupportDiagIDAt,
10140 const PartialDiagnosticAt &DiffDiagIDAt, bool TemplatesSupported,
10141 bool ConstexprSupported, bool CLinkageMayDiffer) {
10142 enum DoesntSupport {
10143 FuncTemplates = 0,
10144 VirtFuncs = 1,
10145 DeducedReturn = 2,
10146 Constructors = 3,
10147 Destructors = 4,
10148 DeletedFuncs = 5,
10149 DefaultedFuncs = 6,
10150 ConstexprFuncs = 7,
10151 ConstevalFuncs = 8,
10152 };
10153 enum Different {
10154 CallingConv = 0,
10155 ReturnType = 1,
10156 ConstexprSpec = 2,
10157 InlineSpec = 3,
10158 StorageClass = 4,
10159 Linkage = 5,
10160 };
10161
10162 if (NoProtoDiagID.getDiagID() != 0 && OldFD &&
10163 !OldFD->getType()->getAs<FunctionProtoType>()) {
10164 Diag(OldFD->getLocation(), NoProtoDiagID);
10165 Diag(NoteCausedDiagIDAt.first, NoteCausedDiagIDAt.second);
10166 return true;
10167 }
10168
10169 if (NoProtoDiagID.getDiagID() != 0 &&
10170 !NewFD->getType()->getAs<FunctionProtoType>())
10171 return Diag(NewFD->getLocation(), NoProtoDiagID);
10172
10173 if (!TemplatesSupported &&
10174 NewFD->getTemplatedKind() == FunctionDecl::TK_FunctionTemplate)
10175 return Diag(NoSupportDiagIDAt.first, NoSupportDiagIDAt.second)
10176 << FuncTemplates;
10177
10178 if (const auto *NewCXXFD = dyn_cast<CXXMethodDecl>(NewFD)) {
10179 if (NewCXXFD->isVirtual())
10180 return Diag(NoSupportDiagIDAt.first, NoSupportDiagIDAt.second)
10181 << VirtFuncs;
10182
10183 if (isa<CXXConstructorDecl>(NewCXXFD))
10184 return Diag(NoSupportDiagIDAt.first, NoSupportDiagIDAt.second)
10185 << Constructors;
10186
10187 if (isa<CXXDestructorDecl>(NewCXXFD))
10188 return Diag(NoSupportDiagIDAt.first, NoSupportDiagIDAt.second)
10189 << Destructors;
10190 }
10191
10192 if (NewFD->isDeleted())
10193 return Diag(NoSupportDiagIDAt.first, NoSupportDiagIDAt.second)
10194 << DeletedFuncs;
10195
10196 if (NewFD->isDefaulted())
10197 return Diag(NoSupportDiagIDAt.first, NoSupportDiagIDAt.second)
10198 << DefaultedFuncs;
10199
10200 if (!ConstexprSupported && NewFD->isConstexpr())
10201 return Diag(NoSupportDiagIDAt.first, NoSupportDiagIDAt.second)
10202 << (NewFD->isConsteval() ? ConstevalFuncs : ConstexprFuncs);
10203
10204 QualType NewQType = Context.getCanonicalType(NewFD->getType());
10205 const auto *NewType = cast<FunctionType>(NewQType);
10206 QualType NewReturnType = NewType->getReturnType();
10207
10208 if (NewReturnType->isUndeducedType())
10209 return Diag(NoSupportDiagIDAt.first, NoSupportDiagIDAt.second)
10210 << DeducedReturn;
10211
10212 // Ensure the return type is identical.
10213 if (OldFD) {
10214 QualType OldQType = Context.getCanonicalType(OldFD->getType());
10215 const auto *OldType = cast<FunctionType>(OldQType);
10216 FunctionType::ExtInfo OldTypeInfo = OldType->getExtInfo();
10217 FunctionType::ExtInfo NewTypeInfo = NewType->getExtInfo();
10218
10219 if (OldTypeInfo.getCC() != NewTypeInfo.getCC())
10220 return Diag(DiffDiagIDAt.first, DiffDiagIDAt.second) << CallingConv;
10221
10222 QualType OldReturnType = OldType->getReturnType();
10223
10224 if (OldReturnType != NewReturnType)
10225 return Diag(DiffDiagIDAt.first, DiffDiagIDAt.second) << ReturnType;
10226
10227 if (OldFD->getConstexprKind() != NewFD->getConstexprKind())
10228 return Diag(DiffDiagIDAt.first, DiffDiagIDAt.second) << ConstexprSpec;
10229
10230 if (OldFD->isInlineSpecified() != NewFD->isInlineSpecified())
10231 return Diag(DiffDiagIDAt.first, DiffDiagIDAt.second) << InlineSpec;
10232
10233 if (OldFD->getStorageClass() != NewFD->getStorageClass())
10234 return Diag(DiffDiagIDAt.first, DiffDiagIDAt.second) << StorageClass;
10235
10236 if (!CLinkageMayDiffer && OldFD->isExternC() != NewFD->isExternC())
10237 return Diag(DiffDiagIDAt.first, DiffDiagIDAt.second) << Linkage;
10238
10239 if (CheckEquivalentExceptionSpec(
10240 OldFD->getType()->getAs<FunctionProtoType>(), OldFD->getLocation(),
10241 NewFD->getType()->getAs<FunctionProtoType>(), NewFD->getLocation()))
10242 return true;
10243 }
10244 return false;
10245 }
10246
CheckMultiVersionAdditionalRules(Sema & S,const FunctionDecl * OldFD,const FunctionDecl * NewFD,bool CausesMV,MultiVersionKind MVType)10247 static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD,
10248 const FunctionDecl *NewFD,
10249 bool CausesMV,
10250 MultiVersionKind MVType) {
10251 if (!S.getASTContext().getTargetInfo().supportsMultiVersioning()) {
10252 S.Diag(NewFD->getLocation(), diag::err_multiversion_not_supported);
10253 if (OldFD)
10254 S.Diag(OldFD->getLocation(), diag::note_previous_declaration);
10255 return true;
10256 }
10257
10258 bool IsCPUSpecificCPUDispatchMVType =
10259 MVType == MultiVersionKind::CPUDispatch ||
10260 MVType == MultiVersionKind::CPUSpecific;
10261
10262 if (CausesMV && OldFD &&
10263 checkNonMultiVersionCompatAttributes(S, OldFD, NewFD, MVType))
10264 return true;
10265
10266 if (checkNonMultiVersionCompatAttributes(S, NewFD, nullptr, MVType))
10267 return true;
10268
10269 // Only allow transition to MultiVersion if it hasn't been used.
10270 if (OldFD && CausesMV && OldFD->isUsed(false))
10271 return S.Diag(NewFD->getLocation(), diag::err_multiversion_after_used);
10272
10273 return S.areMultiversionVariantFunctionsCompatible(
10274 OldFD, NewFD, S.PDiag(diag::err_multiversion_noproto),
10275 PartialDiagnosticAt(NewFD->getLocation(),
10276 S.PDiag(diag::note_multiversioning_caused_here)),
10277 PartialDiagnosticAt(NewFD->getLocation(),
10278 S.PDiag(diag::err_multiversion_doesnt_support)
10279 << IsCPUSpecificCPUDispatchMVType),
10280 PartialDiagnosticAt(NewFD->getLocation(),
10281 S.PDiag(diag::err_multiversion_diff)),
10282 /*TemplatesSupported=*/false,
10283 /*ConstexprSupported=*/!IsCPUSpecificCPUDispatchMVType,
10284 /*CLinkageMayDiffer=*/false);
10285 }
10286
10287 /// Check the validity of a multiversion function declaration that is the
10288 /// first of its kind. Also sets the multiversion'ness' of the function itself.
10289 ///
10290 /// This sets NewFD->isInvalidDecl() to true if there was an error.
10291 ///
10292 /// Returns true if there was an error, false otherwise.
CheckMultiVersionFirstFunction(Sema & S,FunctionDecl * FD,MultiVersionKind MVType,const TargetAttr * TA)10293 static bool CheckMultiVersionFirstFunction(Sema &S, FunctionDecl *FD,
10294 MultiVersionKind MVType,
10295 const TargetAttr *TA) {
10296 assert(MVType != MultiVersionKind::None &&
10297 "Function lacks multiversion attribute");
10298
10299 // Target only causes MV if it is default, otherwise this is a normal
10300 // function.
10301 if (MVType == MultiVersionKind::Target && !TA->isDefaultVersion())
10302 return false;
10303
10304 if (MVType == MultiVersionKind::Target && CheckMultiVersionValue(S, FD)) {
10305 FD->setInvalidDecl();
10306 return true;
10307 }
10308
10309 if (CheckMultiVersionAdditionalRules(S, nullptr, FD, true, MVType)) {
10310 FD->setInvalidDecl();
10311 return true;
10312 }
10313
10314 FD->setIsMultiVersion();
10315 return false;
10316 }
10317
PreviousDeclsHaveMultiVersionAttribute(const FunctionDecl * FD)10318 static bool PreviousDeclsHaveMultiVersionAttribute(const FunctionDecl *FD) {
10319 for (const Decl *D = FD->getPreviousDecl(); D; D = D->getPreviousDecl()) {
10320 if (D->getAsFunction()->getMultiVersionKind() != MultiVersionKind::None)
10321 return true;
10322 }
10323
10324 return false;
10325 }
10326
CheckTargetCausesMultiVersioning(Sema & S,FunctionDecl * OldFD,FunctionDecl * NewFD,const TargetAttr * NewTA,bool & Redeclaration,NamedDecl * & OldDecl,bool & MergeTypeWithPrevious,LookupResult & Previous)10327 static bool CheckTargetCausesMultiVersioning(
10328 Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, const TargetAttr *NewTA,
10329 bool &Redeclaration, NamedDecl *&OldDecl, bool &MergeTypeWithPrevious,
10330 LookupResult &Previous) {
10331 const auto *OldTA = OldFD->getAttr<TargetAttr>();
10332 ParsedTargetAttr NewParsed = NewTA->parse();
10333 // Sort order doesn't matter, it just needs to be consistent.
10334 llvm::sort(NewParsed.Features);
10335
10336 // If the old decl is NOT MultiVersioned yet, and we don't cause that
10337 // to change, this is a simple redeclaration.
10338 if (!NewTA->isDefaultVersion() &&
10339 (!OldTA || OldTA->getFeaturesStr() == NewTA->getFeaturesStr()))
10340 return false;
10341
10342 // Otherwise, this decl causes MultiVersioning.
10343 if (!S.getASTContext().getTargetInfo().supportsMultiVersioning()) {
10344 S.Diag(NewFD->getLocation(), diag::err_multiversion_not_supported);
10345 S.Diag(OldFD->getLocation(), diag::note_previous_declaration);
10346 NewFD->setInvalidDecl();
10347 return true;
10348 }
10349
10350 if (CheckMultiVersionAdditionalRules(S, OldFD, NewFD, true,
10351 MultiVersionKind::Target)) {
10352 NewFD->setInvalidDecl();
10353 return true;
10354 }
10355
10356 if (CheckMultiVersionValue(S, NewFD)) {
10357 NewFD->setInvalidDecl();
10358 return true;
10359 }
10360
10361 // If this is 'default', permit the forward declaration.
10362 if (!OldFD->isMultiVersion() && !OldTA && NewTA->isDefaultVersion()) {
10363 Redeclaration = true;
10364 OldDecl = OldFD;
10365 OldFD->setIsMultiVersion();
10366 NewFD->setIsMultiVersion();
10367 return false;
10368 }
10369
10370 if (CheckMultiVersionValue(S, OldFD)) {
10371 S.Diag(NewFD->getLocation(), diag::note_multiversioning_caused_here);
10372 NewFD->setInvalidDecl();
10373 return true;
10374 }
10375
10376 ParsedTargetAttr OldParsed = OldTA->parse(std::less<std::string>());
10377
10378 if (OldParsed == NewParsed) {
10379 S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);
10380 S.Diag(OldFD->getLocation(), diag::note_previous_declaration);
10381 NewFD->setInvalidDecl();
10382 return true;
10383 }
10384
10385 for (const auto *FD : OldFD->redecls()) {
10386 const auto *CurTA = FD->getAttr<TargetAttr>();
10387 // We allow forward declarations before ANY multiversioning attributes, but
10388 // nothing after the fact.
10389 if (PreviousDeclsHaveMultiVersionAttribute(FD) &&
10390 (!CurTA || CurTA->isInherited())) {
10391 S.Diag(FD->getLocation(), diag::err_multiversion_required_in_redecl)
10392 << 0;
10393 S.Diag(NewFD->getLocation(), diag::note_multiversioning_caused_here);
10394 NewFD->setInvalidDecl();
10395 return true;
10396 }
10397 }
10398
10399 OldFD->setIsMultiVersion();
10400 NewFD->setIsMultiVersion();
10401 Redeclaration = false;
10402 MergeTypeWithPrevious = false;
10403 OldDecl = nullptr;
10404 Previous.clear();
10405 return false;
10406 }
10407
10408 /// Check the validity of a new function declaration being added to an existing
10409 /// multiversioned declaration collection.
CheckMultiVersionAdditionalDecl(Sema & S,FunctionDecl * OldFD,FunctionDecl * NewFD,MultiVersionKind NewMVType,const TargetAttr * NewTA,const CPUDispatchAttr * NewCPUDisp,const CPUSpecificAttr * NewCPUSpec,bool & Redeclaration,NamedDecl * & OldDecl,bool & MergeTypeWithPrevious,LookupResult & Previous)10410 static bool CheckMultiVersionAdditionalDecl(
10411 Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD,
10412 MultiVersionKind NewMVType, const TargetAttr *NewTA,
10413 const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec,
10414 bool &Redeclaration, NamedDecl *&OldDecl, bool &MergeTypeWithPrevious,
10415 LookupResult &Previous) {
10416
10417 MultiVersionKind OldMVType = OldFD->getMultiVersionKind();
10418 // Disallow mixing of multiversioning types.
10419 if ((OldMVType == MultiVersionKind::Target &&
10420 NewMVType != MultiVersionKind::Target) ||
10421 (NewMVType == MultiVersionKind::Target &&
10422 OldMVType != MultiVersionKind::Target)) {
10423 S.Diag(NewFD->getLocation(), diag::err_multiversion_types_mixed);
10424 S.Diag(OldFD->getLocation(), diag::note_previous_declaration);
10425 NewFD->setInvalidDecl();
10426 return true;
10427 }
10428
10429 ParsedTargetAttr NewParsed;
10430 if (NewTA) {
10431 NewParsed = NewTA->parse();
10432 llvm::sort(NewParsed.Features);
10433 }
10434
10435 bool UseMemberUsingDeclRules =
10436 S.CurContext->isRecord() && !NewFD->getFriendObjectKind();
10437
10438 // Next, check ALL non-overloads to see if this is a redeclaration of a
10439 // previous member of the MultiVersion set.
10440 for (NamedDecl *ND : Previous) {
10441 FunctionDecl *CurFD = ND->getAsFunction();
10442 if (!CurFD)
10443 continue;
10444 if (S.IsOverload(NewFD, CurFD, UseMemberUsingDeclRules))
10445 continue;
10446
10447 if (NewMVType == MultiVersionKind::Target) {
10448 const auto *CurTA = CurFD->getAttr<TargetAttr>();
10449 if (CurTA->getFeaturesStr() == NewTA->getFeaturesStr()) {
10450 NewFD->setIsMultiVersion();
10451 Redeclaration = true;
10452 OldDecl = ND;
10453 return false;
10454 }
10455
10456 ParsedTargetAttr CurParsed = CurTA->parse(std::less<std::string>());
10457 if (CurParsed == NewParsed) {
10458 S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);
10459 S.Diag(CurFD->getLocation(), diag::note_previous_declaration);
10460 NewFD->setInvalidDecl();
10461 return true;
10462 }
10463 } else {
10464 const auto *CurCPUSpec = CurFD->getAttr<CPUSpecificAttr>();
10465 const auto *CurCPUDisp = CurFD->getAttr<CPUDispatchAttr>();
10466 // Handle CPUDispatch/CPUSpecific versions.
10467 // Only 1 CPUDispatch function is allowed, this will make it go through
10468 // the redeclaration errors.
10469 if (NewMVType == MultiVersionKind::CPUDispatch &&
10470 CurFD->hasAttr<CPUDispatchAttr>()) {
10471 if (CurCPUDisp->cpus_size() == NewCPUDisp->cpus_size() &&
10472 std::equal(
10473 CurCPUDisp->cpus_begin(), CurCPUDisp->cpus_end(),
10474 NewCPUDisp->cpus_begin(),
10475 [](const IdentifierInfo *Cur, const IdentifierInfo *New) {
10476 return Cur->getName() == New->getName();
10477 })) {
10478 NewFD->setIsMultiVersion();
10479 Redeclaration = true;
10480 OldDecl = ND;
10481 return false;
10482 }
10483
10484 // If the declarations don't match, this is an error condition.
10485 S.Diag(NewFD->getLocation(), diag::err_cpu_dispatch_mismatch);
10486 S.Diag(CurFD->getLocation(), diag::note_previous_declaration);
10487 NewFD->setInvalidDecl();
10488 return true;
10489 }
10490 if (NewMVType == MultiVersionKind::CPUSpecific && CurCPUSpec) {
10491
10492 if (CurCPUSpec->cpus_size() == NewCPUSpec->cpus_size() &&
10493 std::equal(
10494 CurCPUSpec->cpus_begin(), CurCPUSpec->cpus_end(),
10495 NewCPUSpec->cpus_begin(),
10496 [](const IdentifierInfo *Cur, const IdentifierInfo *New) {
10497 return Cur->getName() == New->getName();
10498 })) {
10499 NewFD->setIsMultiVersion();
10500 Redeclaration = true;
10501 OldDecl = ND;
10502 return false;
10503 }
10504
10505 // Only 1 version of CPUSpecific is allowed for each CPU.
10506 for (const IdentifierInfo *CurII : CurCPUSpec->cpus()) {
10507 for (const IdentifierInfo *NewII : NewCPUSpec->cpus()) {
10508 if (CurII == NewII) {
10509 S.Diag(NewFD->getLocation(), diag::err_cpu_specific_multiple_defs)
10510 << NewII;
10511 S.Diag(CurFD->getLocation(), diag::note_previous_declaration);
10512 NewFD->setInvalidDecl();
10513 return true;
10514 }
10515 }
10516 }
10517 }
10518 // If the two decls aren't the same MVType, there is no possible error
10519 // condition.
10520 }
10521 }
10522
10523 // Else, this is simply a non-redecl case. Checking the 'value' is only
10524 // necessary in the Target case, since The CPUSpecific/Dispatch cases are
10525 // handled in the attribute adding step.
10526 if (NewMVType == MultiVersionKind::Target &&
10527 CheckMultiVersionValue(S, NewFD)) {
10528 NewFD->setInvalidDecl();
10529 return true;
10530 }
10531
10532 if (CheckMultiVersionAdditionalRules(S, OldFD, NewFD,
10533 !OldFD->isMultiVersion(), NewMVType)) {
10534 NewFD->setInvalidDecl();
10535 return true;
10536 }
10537
10538 // Permit forward declarations in the case where these two are compatible.
10539 if (!OldFD->isMultiVersion()) {
10540 OldFD->setIsMultiVersion();
10541 NewFD->setIsMultiVersion();
10542 Redeclaration = true;
10543 OldDecl = OldFD;
10544 return false;
10545 }
10546
10547 NewFD->setIsMultiVersion();
10548 Redeclaration = false;
10549 MergeTypeWithPrevious = false;
10550 OldDecl = nullptr;
10551 Previous.clear();
10552 return false;
10553 }
10554
10555
10556 /// Check the validity of a mulitversion function declaration.
10557 /// Also sets the multiversion'ness' of the function itself.
10558 ///
10559 /// This sets NewFD->isInvalidDecl() to true if there was an error.
10560 ///
10561 /// Returns true if there was an error, false otherwise.
CheckMultiVersionFunction(Sema & S,FunctionDecl * NewFD,bool & Redeclaration,NamedDecl * & OldDecl,bool & MergeTypeWithPrevious,LookupResult & Previous)10562 static bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD,
10563 bool &Redeclaration, NamedDecl *&OldDecl,
10564 bool &MergeTypeWithPrevious,
10565 LookupResult &Previous) {
10566 const auto *NewTA = NewFD->getAttr<TargetAttr>();
10567 const auto *NewCPUDisp = NewFD->getAttr<CPUDispatchAttr>();
10568 const auto *NewCPUSpec = NewFD->getAttr<CPUSpecificAttr>();
10569
10570 // Mixing Multiversioning types is prohibited.
10571 if ((NewTA && NewCPUDisp) || (NewTA && NewCPUSpec) ||
10572 (NewCPUDisp && NewCPUSpec)) {
10573 S.Diag(NewFD->getLocation(), diag::err_multiversion_types_mixed);
10574 NewFD->setInvalidDecl();
10575 return true;
10576 }
10577
10578 MultiVersionKind MVType = NewFD->getMultiVersionKind();
10579
10580 // Main isn't allowed to become a multiversion function, however it IS
10581 // permitted to have 'main' be marked with the 'target' optimization hint.
10582 if (NewFD->isMain()) {
10583 if ((MVType == MultiVersionKind::Target && NewTA->isDefaultVersion()) ||
10584 MVType == MultiVersionKind::CPUDispatch ||
10585 MVType == MultiVersionKind::CPUSpecific) {
10586 S.Diag(NewFD->getLocation(), diag::err_multiversion_not_allowed_on_main);
10587 NewFD->setInvalidDecl();
10588 return true;
10589 }
10590 return false;
10591 }
10592
10593 if (!OldDecl || !OldDecl->getAsFunction() ||
10594 OldDecl->getDeclContext()->getRedeclContext() !=
10595 NewFD->getDeclContext()->getRedeclContext()) {
10596 // If there's no previous declaration, AND this isn't attempting to cause
10597 // multiversioning, this isn't an error condition.
10598 if (MVType == MultiVersionKind::None)
10599 return false;
10600 return CheckMultiVersionFirstFunction(S, NewFD, MVType, NewTA);
10601 }
10602
10603 FunctionDecl *OldFD = OldDecl->getAsFunction();
10604
10605 if (!OldFD->isMultiVersion() && MVType == MultiVersionKind::None)
10606 return false;
10607
10608 if (OldFD->isMultiVersion() && MVType == MultiVersionKind::None) {
10609 S.Diag(NewFD->getLocation(), diag::err_multiversion_required_in_redecl)
10610 << (OldFD->getMultiVersionKind() != MultiVersionKind::Target);
10611 NewFD->setInvalidDecl();
10612 return true;
10613 }
10614
10615 // Handle the target potentially causes multiversioning case.
10616 if (!OldFD->isMultiVersion() && MVType == MultiVersionKind::Target)
10617 return CheckTargetCausesMultiVersioning(S, OldFD, NewFD, NewTA,
10618 Redeclaration, OldDecl,
10619 MergeTypeWithPrevious, Previous);
10620
10621 // At this point, we have a multiversion function decl (in OldFD) AND an
10622 // appropriate attribute in the current function decl. Resolve that these are
10623 // still compatible with previous declarations.
10624 return CheckMultiVersionAdditionalDecl(
10625 S, OldFD, NewFD, MVType, NewTA, NewCPUDisp, NewCPUSpec, Redeclaration,
10626 OldDecl, MergeTypeWithPrevious, Previous);
10627 }
10628
10629 /// Perform semantic checking of a new function declaration.
10630 ///
10631 /// Performs semantic analysis of the new function declaration
10632 /// NewFD. This routine performs all semantic checking that does not
10633 /// require the actual declarator involved in the declaration, and is
10634 /// used both for the declaration of functions as they are parsed
10635 /// (called via ActOnDeclarator) and for the declaration of functions
10636 /// that have been instantiated via C++ template instantiation (called
10637 /// via InstantiateDecl).
10638 ///
10639 /// \param IsMemberSpecialization whether this new function declaration is
10640 /// a member specialization (that replaces any definition provided by the
10641 /// previous declaration).
10642 ///
10643 /// This sets NewFD->isInvalidDecl() to true if there was an error.
10644 ///
10645 /// \returns true if the function declaration is a redeclaration.
CheckFunctionDeclaration(Scope * S,FunctionDecl * NewFD,LookupResult & Previous,bool IsMemberSpecialization)10646 bool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD,
10647 LookupResult &Previous,
10648 bool IsMemberSpecialization) {
10649 assert(!NewFD->getReturnType()->isVariablyModifiedType() &&
10650 "Variably modified return types are not handled here");
10651
10652 // Determine whether the type of this function should be merged with
10653 // a previous visible declaration. This never happens for functions in C++,
10654 // and always happens in C if the previous declaration was visible.
10655 bool MergeTypeWithPrevious = !getLangOpts().CPlusPlus &&
10656 !Previous.isShadowed();
10657
10658 bool Redeclaration = false;
10659 NamedDecl *OldDecl = nullptr;
10660 bool MayNeedOverloadableChecks = false;
10661
10662 // Merge or overload the declaration with an existing declaration of
10663 // the same name, if appropriate.
10664 if (!Previous.empty()) {
10665 // Determine whether NewFD is an overload of PrevDecl or
10666 // a declaration that requires merging. If it's an overload,
10667 // there's no more work to do here; we'll just add the new
10668 // function to the scope.
10669 if (!AllowOverloadingOfFunction(Previous, Context, NewFD)) {
10670 NamedDecl *Candidate = Previous.getRepresentativeDecl();
10671 if (shouldLinkPossiblyHiddenDecl(Candidate, NewFD)) {
10672 Redeclaration = true;
10673 OldDecl = Candidate;
10674 }
10675 } else {
10676 MayNeedOverloadableChecks = true;
10677 switch (CheckOverload(S, NewFD, Previous, OldDecl,
10678 /*NewIsUsingDecl*/ false)) {
10679 case Ovl_Match:
10680 Redeclaration = true;
10681 break;
10682
10683 case Ovl_NonFunction:
10684 Redeclaration = true;
10685 break;
10686
10687 case Ovl_Overload:
10688 Redeclaration = false;
10689 break;
10690 }
10691 }
10692 }
10693
10694 // Check for a previous extern "C" declaration with this name.
10695 if (!Redeclaration &&
10696 checkForConflictWithNonVisibleExternC(*this, NewFD, Previous)) {
10697 if (!Previous.empty()) {
10698 // This is an extern "C" declaration with the same name as a previous
10699 // declaration, and thus redeclares that entity...
10700 Redeclaration = true;
10701 OldDecl = Previous.getFoundDecl();
10702 MergeTypeWithPrevious = false;
10703
10704 // ... except in the presence of __attribute__((overloadable)).
10705 if (OldDecl->hasAttr<OverloadableAttr>() ||
10706 NewFD->hasAttr<OverloadableAttr>()) {
10707 if (IsOverload(NewFD, cast<FunctionDecl>(OldDecl), false)) {
10708 MayNeedOverloadableChecks = true;
10709 Redeclaration = false;
10710 OldDecl = nullptr;
10711 }
10712 }
10713 }
10714 }
10715
10716 if (CheckMultiVersionFunction(*this, NewFD, Redeclaration, OldDecl,
10717 MergeTypeWithPrevious, Previous))
10718 return Redeclaration;
10719
10720 // PPC MMA non-pointer types are not allowed as function return types.
10721 if (Context.getTargetInfo().getTriple().isPPC64() &&
10722 CheckPPCMMAType(NewFD->getReturnType(), NewFD->getLocation())) {
10723 NewFD->setInvalidDecl();
10724 }
10725
10726 // C++11 [dcl.constexpr]p8:
10727 // A constexpr specifier for a non-static member function that is not
10728 // a constructor declares that member function to be const.
10729 //
10730 // This needs to be delayed until we know whether this is an out-of-line
10731 // definition of a static member function.
10732 //
10733 // This rule is not present in C++1y, so we produce a backwards
10734 // compatibility warning whenever it happens in C++11.
10735 CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
10736 if (!getLangOpts().CPlusPlus14 && MD && MD->isConstexpr() &&
10737 !MD->isStatic() && !isa<CXXConstructorDecl>(MD) &&
10738 !isa<CXXDestructorDecl>(MD) && !MD->getMethodQualifiers().hasConst()) {
10739 CXXMethodDecl *OldMD = nullptr;
10740 if (OldDecl)
10741 OldMD = dyn_cast_or_null<CXXMethodDecl>(OldDecl->getAsFunction());
10742 if (!OldMD || !OldMD->isStatic()) {
10743 const FunctionProtoType *FPT =
10744 MD->getType()->castAs<FunctionProtoType>();
10745 FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
10746 EPI.TypeQuals.addConst();
10747 MD->setType(Context.getFunctionType(FPT->getReturnType(),
10748 FPT->getParamTypes(), EPI));
10749
10750 // Warn that we did this, if we're not performing template instantiation.
10751 // In that case, we'll have warned already when the template was defined.
10752 if (!inTemplateInstantiation()) {
10753 SourceLocation AddConstLoc;
10754 if (FunctionTypeLoc FTL = MD->getTypeSourceInfo()->getTypeLoc()
10755 .IgnoreParens().getAs<FunctionTypeLoc>())
10756 AddConstLoc = getLocForEndOfToken(FTL.getRParenLoc());
10757
10758 Diag(MD->getLocation(), diag::warn_cxx14_compat_constexpr_not_const)
10759 << FixItHint::CreateInsertion(AddConstLoc, " const");
10760 }
10761 }
10762 }
10763
10764 if (Redeclaration) {
10765 // NewFD and OldDecl represent declarations that need to be
10766 // merged.
10767 if (MergeFunctionDecl(NewFD, OldDecl, S, MergeTypeWithPrevious)) {
10768 NewFD->setInvalidDecl();
10769 return Redeclaration;
10770 }
10771
10772 Previous.clear();
10773 Previous.addDecl(OldDecl);
10774
10775 if (FunctionTemplateDecl *OldTemplateDecl =
10776 dyn_cast<FunctionTemplateDecl>(OldDecl)) {
10777 auto *OldFD = OldTemplateDecl->getTemplatedDecl();
10778 FunctionTemplateDecl *NewTemplateDecl
10779 = NewFD->getDescribedFunctionTemplate();
10780 assert(NewTemplateDecl && "Template/non-template mismatch");
10781
10782 // The call to MergeFunctionDecl above may have created some state in
10783 // NewTemplateDecl that needs to be merged with OldTemplateDecl before we
10784 // can add it as a redeclaration.
10785 NewTemplateDecl->mergePrevDecl(OldTemplateDecl);
10786
10787 NewFD->setPreviousDeclaration(OldFD);
10788 adjustDeclContextForDeclaratorDecl(NewFD, OldFD);
10789 if (NewFD->isCXXClassMember()) {
10790 NewFD->setAccess(OldTemplateDecl->getAccess());
10791 NewTemplateDecl->setAccess(OldTemplateDecl->getAccess());
10792 }
10793
10794 // If this is an explicit specialization of a member that is a function
10795 // template, mark it as a member specialization.
10796 if (IsMemberSpecialization &&
10797 NewTemplateDecl->getInstantiatedFromMemberTemplate()) {
10798 NewTemplateDecl->setMemberSpecialization();
10799 assert(OldTemplateDecl->isMemberSpecialization());
10800 // Explicit specializations of a member template do not inherit deleted
10801 // status from the parent member template that they are specializing.
10802 if (OldFD->isDeleted()) {
10803 // FIXME: This assert will not hold in the presence of modules.
10804 assert(OldFD->getCanonicalDecl() == OldFD);
10805 // FIXME: We need an update record for this AST mutation.
10806 OldFD->setDeletedAsWritten(false);
10807 }
10808 }
10809
10810 } else {
10811 if (shouldLinkDependentDeclWithPrevious(NewFD, OldDecl)) {
10812 auto *OldFD = cast<FunctionDecl>(OldDecl);
10813 // This needs to happen first so that 'inline' propagates.
10814 NewFD->setPreviousDeclaration(OldFD);
10815 adjustDeclContextForDeclaratorDecl(NewFD, OldFD);
10816 if (NewFD->isCXXClassMember())
10817 NewFD->setAccess(OldFD->getAccess());
10818 }
10819 }
10820 } else if (!getLangOpts().CPlusPlus && MayNeedOverloadableChecks &&
10821 !NewFD->getAttr<OverloadableAttr>()) {
10822 assert((Previous.empty() ||
10823 llvm::any_of(Previous,
10824 [](const NamedDecl *ND) {
10825 return ND->hasAttr<OverloadableAttr>();
10826 })) &&
10827 "Non-redecls shouldn't happen without overloadable present");
10828
10829 auto OtherUnmarkedIter = llvm::find_if(Previous, [](const NamedDecl *ND) {
10830 const auto *FD = dyn_cast<FunctionDecl>(ND);
10831 return FD && !FD->hasAttr<OverloadableAttr>();
10832 });
10833
10834 if (OtherUnmarkedIter != Previous.end()) {
10835 Diag(NewFD->getLocation(),
10836 diag::err_attribute_overloadable_multiple_unmarked_overloads);
10837 Diag((*OtherUnmarkedIter)->getLocation(),
10838 diag::note_attribute_overloadable_prev_overload)
10839 << false;
10840
10841 NewFD->addAttr(OverloadableAttr::CreateImplicit(Context));
10842 }
10843 }
10844
10845 // Semantic checking for this function declaration (in isolation).
10846
10847 if (getLangOpts().CPlusPlus) {
10848 // C++-specific checks.
10849 if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(NewFD)) {
10850 CheckConstructor(Constructor);
10851 } else if (CXXDestructorDecl *Destructor =
10852 dyn_cast<CXXDestructorDecl>(NewFD)) {
10853 CXXRecordDecl *Record = Destructor->getParent();
10854 QualType ClassType = Context.getTypeDeclType(Record);
10855
10856 // FIXME: Shouldn't we be able to perform this check even when the class
10857 // type is dependent? Both gcc and edg can handle that.
10858 if (!ClassType->isDependentType()) {
10859 DeclarationName Name
10860 = Context.DeclarationNames.getCXXDestructorName(
10861 Context.getCanonicalType(ClassType));
10862 if (NewFD->getDeclName() != Name) {
10863 Diag(NewFD->getLocation(), diag::err_destructor_name);
10864 NewFD->setInvalidDecl();
10865 return Redeclaration;
10866 }
10867 }
10868 } else if (auto *Guide = dyn_cast<CXXDeductionGuideDecl>(NewFD)) {
10869 if (auto *TD = Guide->getDescribedFunctionTemplate())
10870 CheckDeductionGuideTemplate(TD);
10871
10872 // A deduction guide is not on the list of entities that can be
10873 // explicitly specialized.
10874 if (Guide->getTemplateSpecializationKind() == TSK_ExplicitSpecialization)
10875 Diag(Guide->getBeginLoc(), diag::err_deduction_guide_specialized)
10876 << /*explicit specialization*/ 1;
10877 }
10878
10879 // Find any virtual functions that this function overrides.
10880 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD)) {
10881 if (!Method->isFunctionTemplateSpecialization() &&
10882 !Method->getDescribedFunctionTemplate() &&
10883 Method->isCanonicalDecl()) {
10884 AddOverriddenMethods(Method->getParent(), Method);
10885 }
10886 if (Method->isVirtual() && NewFD->getTrailingRequiresClause())
10887 // C++2a [class.virtual]p6
10888 // A virtual method shall not have a requires-clause.
10889 Diag(NewFD->getTrailingRequiresClause()->getBeginLoc(),
10890 diag::err_constrained_virtual_method);
10891
10892 if (Method->isStatic())
10893 checkThisInStaticMemberFunctionType(Method);
10894 }
10895
10896 if (CXXConversionDecl *Conversion = dyn_cast<CXXConversionDecl>(NewFD))
10897 ActOnConversionDeclarator(Conversion);
10898
10899 // Extra checking for C++ overloaded operators (C++ [over.oper]).
10900 if (NewFD->isOverloadedOperator() &&
10901 CheckOverloadedOperatorDeclaration(NewFD)) {
10902 NewFD->setInvalidDecl();
10903 return Redeclaration;
10904 }
10905
10906 // Extra checking for C++0x literal operators (C++0x [over.literal]).
10907 if (NewFD->getLiteralIdentifier() &&
10908 CheckLiteralOperatorDeclaration(NewFD)) {
10909 NewFD->setInvalidDecl();
10910 return Redeclaration;
10911 }
10912
10913 // In C++, check default arguments now that we have merged decls. Unless
10914 // the lexical context is the class, because in this case this is done
10915 // during delayed parsing anyway.
10916 if (!CurContext->isRecord())
10917 CheckCXXDefaultArguments(NewFD);
10918
10919 // If this function declares a builtin function, check the type of this
10920 // declaration against the expected type for the builtin.
10921 if (unsigned BuiltinID = NewFD->getBuiltinID()) {
10922 ASTContext::GetBuiltinTypeError Error;
10923 LookupNecessaryTypesForBuiltin(S, BuiltinID);
10924 QualType T = Context.GetBuiltinType(BuiltinID, Error);
10925 // If the type of the builtin differs only in its exception
10926 // specification, that's OK.
10927 // FIXME: If the types do differ in this way, it would be better to
10928 // retain the 'noexcept' form of the type.
10929 if (!T.isNull() &&
10930 !Context.hasSameFunctionTypeIgnoringExceptionSpec(T,
10931 NewFD->getType()))
10932 // The type of this function differs from the type of the builtin,
10933 // so forget about the builtin entirely.
10934 Context.BuiltinInfo.forgetBuiltin(BuiltinID, Context.Idents);
10935 }
10936
10937 // If this function is declared as being extern "C", then check to see if
10938 // the function returns a UDT (class, struct, or union type) that is not C
10939 // compatible, and if it does, warn the user.
10940 // But, issue any diagnostic on the first declaration only.
10941 if (Previous.empty() && NewFD->isExternC()) {
10942 QualType R = NewFD->getReturnType();
10943 if (R->isIncompleteType() && !R->isVoidType())
10944 Diag(NewFD->getLocation(), diag::warn_return_value_udt_incomplete)
10945 << NewFD << R;
10946 else if (!R.isPODType(Context) && !R->isVoidType() &&
10947 !R->isObjCObjectPointerType())
10948 Diag(NewFD->getLocation(), diag::warn_return_value_udt) << NewFD << R;
10949 }
10950
10951 // C++1z [dcl.fct]p6:
10952 // [...] whether the function has a non-throwing exception-specification
10953 // [is] part of the function type
10954 //
10955 // This results in an ABI break between C++14 and C++17 for functions whose
10956 // declared type includes an exception-specification in a parameter or
10957 // return type. (Exception specifications on the function itself are OK in
10958 // most cases, and exception specifications are not permitted in most other
10959 // contexts where they could make it into a mangling.)
10960 if (!getLangOpts().CPlusPlus17 && !NewFD->getPrimaryTemplate()) {
10961 auto HasNoexcept = [&](QualType T) -> bool {
10962 // Strip off declarator chunks that could be between us and a function
10963 // type. We don't need to look far, exception specifications are very
10964 // restricted prior to C++17.
10965 if (auto *RT = T->getAs<ReferenceType>())
10966 T = RT->getPointeeType();
10967 else if (T->isAnyPointerType())
10968 T = T->getPointeeType();
10969 else if (auto *MPT = T->getAs<MemberPointerType>())
10970 T = MPT->getPointeeType();
10971 if (auto *FPT = T->getAs<FunctionProtoType>())
10972 if (FPT->isNothrow())
10973 return true;
10974 return false;
10975 };
10976
10977 auto *FPT = NewFD->getType()->castAs<FunctionProtoType>();
10978 bool AnyNoexcept = HasNoexcept(FPT->getReturnType());
10979 for (QualType T : FPT->param_types())
10980 AnyNoexcept |= HasNoexcept(T);
10981 if (AnyNoexcept)
10982 Diag(NewFD->getLocation(),
10983 diag::warn_cxx17_compat_exception_spec_in_signature)
10984 << NewFD;
10985 }
10986
10987 if (!Redeclaration && LangOpts.CUDA)
10988 checkCUDATargetOverload(NewFD, Previous);
10989 }
10990 return Redeclaration;
10991 }
10992
CheckMain(FunctionDecl * FD,const DeclSpec & DS)10993 void Sema::CheckMain(FunctionDecl* FD, const DeclSpec& DS) {
10994 // C++11 [basic.start.main]p3:
10995 // A program that [...] declares main to be inline, static or
10996 // constexpr is ill-formed.
10997 // C11 6.7.4p4: In a hosted environment, no function specifier(s) shall
10998 // appear in a declaration of main.
10999 // static main is not an error under C99, but we should warn about it.
11000 // We accept _Noreturn main as an extension.
11001 if (FD->getStorageClass() == SC_Static)
11002 Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus
11003 ? diag::err_static_main : diag::warn_static_main)
11004 << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());
11005 if (FD->isInlineSpecified())
11006 Diag(DS.getInlineSpecLoc(), diag::err_inline_main)
11007 << FixItHint::CreateRemoval(DS.getInlineSpecLoc());
11008 if (DS.isNoreturnSpecified()) {
11009 SourceLocation NoreturnLoc = DS.getNoreturnSpecLoc();
11010 SourceRange NoreturnRange(NoreturnLoc, getLocForEndOfToken(NoreturnLoc));
11011 Diag(NoreturnLoc, diag::ext_noreturn_main);
11012 Diag(NoreturnLoc, diag::note_main_remove_noreturn)
11013 << FixItHint::CreateRemoval(NoreturnRange);
11014 }
11015 if (FD->isConstexpr()) {
11016 Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_main)
11017 << FD->isConsteval()
11018 << FixItHint::CreateRemoval(DS.getConstexprSpecLoc());
11019 FD->setConstexprKind(ConstexprSpecKind::Unspecified);
11020 }
11021
11022 if (getLangOpts().OpenCL) {
11023 Diag(FD->getLocation(), diag::err_opencl_no_main)
11024 << FD->hasAttr<OpenCLKernelAttr>();
11025 FD->setInvalidDecl();
11026 return;
11027 }
11028
11029 QualType T = FD->getType();
11030 assert(T->isFunctionType() && "function decl is not of function type");
11031 const FunctionType* FT = T->castAs<FunctionType>();
11032
11033 // Set default calling convention for main()
11034 if (FT->getCallConv() != CC_C) {
11035 FT = Context.adjustFunctionType(FT, FT->getExtInfo().withCallingConv(CC_C));
11036 FD->setType(QualType(FT, 0));
11037 T = Context.getCanonicalType(FD->getType());
11038 }
11039
11040 if (getLangOpts().GNUMode && !getLangOpts().CPlusPlus) {
11041 // In C with GNU extensions we allow main() to have non-integer return
11042 // type, but we should warn about the extension, and we disable the
11043 // implicit-return-zero rule.
11044
11045 // GCC in C mode accepts qualified 'int'.
11046 if (Context.hasSameUnqualifiedType(FT->getReturnType(), Context.IntTy))
11047 FD->setHasImplicitReturnZero(true);
11048 else {
11049 Diag(FD->getTypeSpecStartLoc(), diag::ext_main_returns_nonint);
11050 SourceRange RTRange = FD->getReturnTypeSourceRange();
11051 if (RTRange.isValid())
11052 Diag(RTRange.getBegin(), diag::note_main_change_return_type)
11053 << FixItHint::CreateReplacement(RTRange, "int");
11054 }
11055 } else {
11056 // In C and C++, main magically returns 0 if you fall off the end;
11057 // set the flag which tells us that.
11058 // This is C++ [basic.start.main]p5 and C99 5.1.2.2.3.
11059
11060 // All the standards say that main() should return 'int'.
11061 if (Context.hasSameType(FT->getReturnType(), Context.IntTy))
11062 FD->setHasImplicitReturnZero(true);
11063 else {
11064 // Otherwise, this is just a flat-out error.
11065 SourceRange RTRange = FD->getReturnTypeSourceRange();
11066 Diag(FD->getTypeSpecStartLoc(), diag::err_main_returns_nonint)
11067 << (RTRange.isValid() ? FixItHint::CreateReplacement(RTRange, "int")
11068 : FixItHint());
11069 FD->setInvalidDecl(true);
11070 }
11071 }
11072
11073 // Treat protoless main() as nullary.
11074 if (isa<FunctionNoProtoType>(FT)) return;
11075
11076 const FunctionProtoType* FTP = cast<const FunctionProtoType>(FT);
11077 unsigned nparams = FTP->getNumParams();
11078 assert(FD->getNumParams() == nparams);
11079
11080 bool HasExtraParameters = (nparams > 3);
11081
11082 if (FTP->isVariadic()) {
11083 Diag(FD->getLocation(), diag::ext_variadic_main);
11084 // FIXME: if we had information about the location of the ellipsis, we
11085 // could add a FixIt hint to remove it as a parameter.
11086 }
11087
11088 // Darwin passes an undocumented fourth argument of type char**. If
11089 // other platforms start sprouting these, the logic below will start
11090 // getting shifty.
11091 if (nparams == 4 && Context.getTargetInfo().getTriple().isOSDarwin())
11092 HasExtraParameters = false;
11093
11094 if (HasExtraParameters) {
11095 Diag(FD->getLocation(), diag::err_main_surplus_args) << nparams;
11096 FD->setInvalidDecl(true);
11097 nparams = 3;
11098 }
11099
11100 // FIXME: a lot of the following diagnostics would be improved
11101 // if we had some location information about types.
11102
11103 QualType CharPP =
11104 Context.getPointerType(Context.getPointerType(Context.CharTy));
11105 QualType Expected[] = { Context.IntTy, CharPP, CharPP, CharPP };
11106
11107 for (unsigned i = 0; i < nparams; ++i) {
11108 QualType AT = FTP->getParamType(i);
11109
11110 bool mismatch = true;
11111
11112 if (Context.hasSameUnqualifiedType(AT, Expected[i]))
11113 mismatch = false;
11114 else if (Expected[i] == CharPP) {
11115 // As an extension, the following forms are okay:
11116 // char const **
11117 // char const * const *
11118 // char * const *
11119
11120 QualifierCollector qs;
11121 const PointerType* PT;
11122 if ((PT = qs.strip(AT)->getAs<PointerType>()) &&
11123 (PT = qs.strip(PT->getPointeeType())->getAs<PointerType>()) &&
11124 Context.hasSameType(QualType(qs.strip(PT->getPointeeType()), 0),
11125 Context.CharTy)) {
11126 qs.removeConst();
11127 mismatch = !qs.empty();
11128 }
11129 }
11130
11131 if (mismatch) {
11132 Diag(FD->getLocation(), diag::err_main_arg_wrong) << i << Expected[i];
11133 // TODO: suggest replacing given type with expected type
11134 FD->setInvalidDecl(true);
11135 }
11136 }
11137
11138 if (nparams == 1 && !FD->isInvalidDecl()) {
11139 Diag(FD->getLocation(), diag::warn_main_one_arg);
11140 }
11141
11142 if (!FD->isInvalidDecl() && FD->getDescribedFunctionTemplate()) {
11143 Diag(FD->getLocation(), diag::err_mainlike_template_decl) << FD;
11144 FD->setInvalidDecl();
11145 }
11146 }
11147
CheckMSVCRTEntryPoint(FunctionDecl * FD)11148 void Sema::CheckMSVCRTEntryPoint(FunctionDecl *FD) {
11149 QualType T = FD->getType();
11150 assert(T->isFunctionType() && "function decl is not of function type");
11151 const FunctionType *FT = T->castAs<FunctionType>();
11152
11153 // Set an implicit return of 'zero' if the function can return some integral,
11154 // enumeration, pointer or nullptr type.
11155 if (FT->getReturnType()->isIntegralOrEnumerationType() ||
11156 FT->getReturnType()->isAnyPointerType() ||
11157 FT->getReturnType()->isNullPtrType())
11158 // DllMain is exempt because a return value of zero means it failed.
11159 if (FD->getName() != "DllMain")
11160 FD->setHasImplicitReturnZero(true);
11161
11162 if (!FD->isInvalidDecl() && FD->getDescribedFunctionTemplate()) {
11163 Diag(FD->getLocation(), diag::err_mainlike_template_decl) << FD;
11164 FD->setInvalidDecl();
11165 }
11166 }
11167
CheckForConstantInitializer(Expr * Init,QualType DclT)11168 bool Sema::CheckForConstantInitializer(Expr *Init, QualType DclT) {
11169 // FIXME: Need strict checking. In C89, we need to check for
11170 // any assignment, increment, decrement, function-calls, or
11171 // commas outside of a sizeof. In C99, it's the same list,
11172 // except that the aforementioned are allowed in unevaluated
11173 // expressions. Everything else falls under the
11174 // "may accept other forms of constant expressions" exception.
11175 //
11176 // Regular C++ code will not end up here (exceptions: language extensions,
11177 // OpenCL C++ etc), so the constant expression rules there don't matter.
11178 if (Init->isValueDependent()) {
11179 assert(Init->containsErrors() &&
11180 "Dependent code should only occur in error-recovery path.");
11181 return true;
11182 }
11183 const Expr *Culprit;
11184 if (Init->isConstantInitializer(Context, false, &Culprit))
11185 return false;
11186 Diag(Culprit->getExprLoc(), diag::err_init_element_not_constant)
11187 << Culprit->getSourceRange();
11188 return true;
11189 }
11190
11191 namespace {
11192 // Visits an initialization expression to see if OrigDecl is evaluated in
11193 // its own initialization and throws a warning if it does.
11194 class SelfReferenceChecker
11195 : public EvaluatedExprVisitor<SelfReferenceChecker> {
11196 Sema &S;
11197 Decl *OrigDecl;
11198 bool isRecordType;
11199 bool isPODType;
11200 bool isReferenceType;
11201
11202 bool isInitList;
11203 llvm::SmallVector<unsigned, 4> InitFieldIndex;
11204
11205 public:
11206 typedef EvaluatedExprVisitor<SelfReferenceChecker> Inherited;
11207
SelfReferenceChecker(Sema & S,Decl * OrigDecl)11208 SelfReferenceChecker(Sema &S, Decl *OrigDecl) : Inherited(S.Context),
11209 S(S), OrigDecl(OrigDecl) {
11210 isPODType = false;
11211 isRecordType = false;
11212 isReferenceType = false;
11213 isInitList = false;
11214 if (ValueDecl *VD = dyn_cast<ValueDecl>(OrigDecl)) {
11215 isPODType = VD->getType().isPODType(S.Context);
11216 isRecordType = VD->getType()->isRecordType();
11217 isReferenceType = VD->getType()->isReferenceType();
11218 }
11219 }
11220
11221 // For most expressions, just call the visitor. For initializer lists,
11222 // track the index of the field being initialized since fields are
11223 // initialized in order allowing use of previously initialized fields.
CheckExpr(Expr * E)11224 void CheckExpr(Expr *E) {
11225 InitListExpr *InitList = dyn_cast<InitListExpr>(E);
11226 if (!InitList) {
11227 Visit(E);
11228 return;
11229 }
11230
11231 // Track and increment the index here.
11232 isInitList = true;
11233 InitFieldIndex.push_back(0);
11234 for (auto Child : InitList->children()) {
11235 CheckExpr(cast<Expr>(Child));
11236 ++InitFieldIndex.back();
11237 }
11238 InitFieldIndex.pop_back();
11239 }
11240
11241 // Returns true if MemberExpr is checked and no further checking is needed.
11242 // Returns false if additional checking is required.
CheckInitListMemberExpr(MemberExpr * E,bool CheckReference)11243 bool CheckInitListMemberExpr(MemberExpr *E, bool CheckReference) {
11244 llvm::SmallVector<FieldDecl*, 4> Fields;
11245 Expr *Base = E;
11246 bool ReferenceField = false;
11247
11248 // Get the field members used.
11249 while (MemberExpr *ME = dyn_cast<MemberExpr>(Base)) {
11250 FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl());
11251 if (!FD)
11252 return false;
11253 Fields.push_back(FD);
11254 if (FD->getType()->isReferenceType())
11255 ReferenceField = true;
11256 Base = ME->getBase()->IgnoreParenImpCasts();
11257 }
11258
11259 // Keep checking only if the base Decl is the same.
11260 DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Base);
11261 if (!DRE || DRE->getDecl() != OrigDecl)
11262 return false;
11263
11264 // A reference field can be bound to an unininitialized field.
11265 if (CheckReference && !ReferenceField)
11266 return true;
11267
11268 // Convert FieldDecls to their index number.
11269 llvm::SmallVector<unsigned, 4> UsedFieldIndex;
11270 for (const FieldDecl *I : llvm::reverse(Fields))
11271 UsedFieldIndex.push_back(I->getFieldIndex());
11272
11273 // See if a warning is needed by checking the first difference in index
11274 // numbers. If field being used has index less than the field being
11275 // initialized, then the use is safe.
11276 for (auto UsedIter = UsedFieldIndex.begin(),
11277 UsedEnd = UsedFieldIndex.end(),
11278 OrigIter = InitFieldIndex.begin(),
11279 OrigEnd = InitFieldIndex.end();
11280 UsedIter != UsedEnd && OrigIter != OrigEnd; ++UsedIter, ++OrigIter) {
11281 if (*UsedIter < *OrigIter)
11282 return true;
11283 if (*UsedIter > *OrigIter)
11284 break;
11285 }
11286
11287 // TODO: Add a different warning which will print the field names.
11288 HandleDeclRefExpr(DRE);
11289 return true;
11290 }
11291
11292 // For most expressions, the cast is directly above the DeclRefExpr.
11293 // For conditional operators, the cast can be outside the conditional
11294 // operator if both expressions are DeclRefExpr's.
HandleValue(Expr * E)11295 void HandleValue(Expr *E) {
11296 E = E->IgnoreParens();
11297 if (DeclRefExpr* DRE = dyn_cast<DeclRefExpr>(E)) {
11298 HandleDeclRefExpr(DRE);
11299 return;
11300 }
11301
11302 if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
11303 Visit(CO->getCond());
11304 HandleValue(CO->getTrueExpr());
11305 HandleValue(CO->getFalseExpr());
11306 return;
11307 }
11308
11309 if (BinaryConditionalOperator *BCO =
11310 dyn_cast<BinaryConditionalOperator>(E)) {
11311 Visit(BCO->getCond());
11312 HandleValue(BCO->getFalseExpr());
11313 return;
11314 }
11315
11316 if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E)) {
11317 HandleValue(OVE->getSourceExpr());
11318 return;
11319 }
11320
11321 if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
11322 if (BO->getOpcode() == BO_Comma) {
11323 Visit(BO->getLHS());
11324 HandleValue(BO->getRHS());
11325 return;
11326 }
11327 }
11328
11329 if (isa<MemberExpr>(E)) {
11330 if (isInitList) {
11331 if (CheckInitListMemberExpr(cast<MemberExpr>(E),
11332 false /*CheckReference*/))
11333 return;
11334 }
11335
11336 Expr *Base = E->IgnoreParenImpCasts();
11337 while (MemberExpr *ME = dyn_cast<MemberExpr>(Base)) {
11338 // Check for static member variables and don't warn on them.
11339 if (!isa<FieldDecl>(ME->getMemberDecl()))
11340 return;
11341 Base = ME->getBase()->IgnoreParenImpCasts();
11342 }
11343 if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Base))
11344 HandleDeclRefExpr(DRE);
11345 return;
11346 }
11347
11348 Visit(E);
11349 }
11350
11351 // Reference types not handled in HandleValue are handled here since all
11352 // uses of references are bad, not just r-value uses.
VisitDeclRefExpr(DeclRefExpr * E)11353 void VisitDeclRefExpr(DeclRefExpr *E) {
11354 if (isReferenceType)
11355 HandleDeclRefExpr(E);
11356 }
11357
VisitImplicitCastExpr(ImplicitCastExpr * E)11358 void VisitImplicitCastExpr(ImplicitCastExpr *E) {
11359 if (E->getCastKind() == CK_LValueToRValue) {
11360 HandleValue(E->getSubExpr());
11361 return;
11362 }
11363
11364 Inherited::VisitImplicitCastExpr(E);
11365 }
11366
VisitMemberExpr(MemberExpr * E)11367 void VisitMemberExpr(MemberExpr *E) {
11368 if (isInitList) {
11369 if (CheckInitListMemberExpr(E, true /*CheckReference*/))
11370 return;
11371 }
11372
11373 // Don't warn on arrays since they can be treated as pointers.
11374 if (E->getType()->canDecayToPointerType()) return;
11375
11376 // Warn when a non-static method call is followed by non-static member
11377 // field accesses, which is followed by a DeclRefExpr.
11378 CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(E->getMemberDecl());
11379 bool Warn = (MD && !MD->isStatic());
11380 Expr *Base = E->getBase()->IgnoreParenImpCasts();
11381 while (MemberExpr *ME = dyn_cast<MemberExpr>(Base)) {
11382 if (!isa<FieldDecl>(ME->getMemberDecl()))
11383 Warn = false;
11384 Base = ME->getBase()->IgnoreParenImpCasts();
11385 }
11386
11387 if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Base)) {
11388 if (Warn)
11389 HandleDeclRefExpr(DRE);
11390 return;
11391 }
11392
11393 // The base of a MemberExpr is not a MemberExpr or a DeclRefExpr.
11394 // Visit that expression.
11395 Visit(Base);
11396 }
11397
VisitCXXOperatorCallExpr(CXXOperatorCallExpr * E)11398 void VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) {
11399 Expr *Callee = E->getCallee();
11400
11401 if (isa<UnresolvedLookupExpr>(Callee))
11402 return Inherited::VisitCXXOperatorCallExpr(E);
11403
11404 Visit(Callee);
11405 for (auto Arg: E->arguments())
11406 HandleValue(Arg->IgnoreParenImpCasts());
11407 }
11408
VisitUnaryOperator(UnaryOperator * E)11409 void VisitUnaryOperator(UnaryOperator *E) {
11410 // For POD record types, addresses of its own members are well-defined.
11411 if (E->getOpcode() == UO_AddrOf && isRecordType &&
11412 isa<MemberExpr>(E->getSubExpr()->IgnoreParens())) {
11413 if (!isPODType)
11414 HandleValue(E->getSubExpr());
11415 return;
11416 }
11417
11418 if (E->isIncrementDecrementOp()) {
11419 HandleValue(E->getSubExpr());
11420 return;
11421 }
11422
11423 Inherited::VisitUnaryOperator(E);
11424 }
11425
VisitObjCMessageExpr(ObjCMessageExpr * E)11426 void VisitObjCMessageExpr(ObjCMessageExpr *E) {}
11427
VisitCXXConstructExpr(CXXConstructExpr * E)11428 void VisitCXXConstructExpr(CXXConstructExpr *E) {
11429 if (E->getConstructor()->isCopyConstructor()) {
11430 Expr *ArgExpr = E->getArg(0);
11431 if (InitListExpr *ILE = dyn_cast<InitListExpr>(ArgExpr))
11432 if (ILE->getNumInits() == 1)
11433 ArgExpr = ILE->getInit(0);
11434 if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(ArgExpr))
11435 if (ICE->getCastKind() == CK_NoOp)
11436 ArgExpr = ICE->getSubExpr();
11437 HandleValue(ArgExpr);
11438 return;
11439 }
11440 Inherited::VisitCXXConstructExpr(E);
11441 }
11442
VisitCallExpr(CallExpr * E)11443 void VisitCallExpr(CallExpr *E) {
11444 // Treat std::move as a use.
11445 if (E->isCallToStdMove()) {
11446 HandleValue(E->getArg(0));
11447 return;
11448 }
11449
11450 Inherited::VisitCallExpr(E);
11451 }
11452
VisitBinaryOperator(BinaryOperator * E)11453 void VisitBinaryOperator(BinaryOperator *E) {
11454 if (E->isCompoundAssignmentOp()) {
11455 HandleValue(E->getLHS());
11456 Visit(E->getRHS());
11457 return;
11458 }
11459
11460 Inherited::VisitBinaryOperator(E);
11461 }
11462
11463 // A custom visitor for BinaryConditionalOperator is needed because the
11464 // regular visitor would check the condition and true expression separately
11465 // but both point to the same place giving duplicate diagnostics.
VisitBinaryConditionalOperator(BinaryConditionalOperator * E)11466 void VisitBinaryConditionalOperator(BinaryConditionalOperator *E) {
11467 Visit(E->getCond());
11468 Visit(E->getFalseExpr());
11469 }
11470
HandleDeclRefExpr(DeclRefExpr * DRE)11471 void HandleDeclRefExpr(DeclRefExpr *DRE) {
11472 Decl* ReferenceDecl = DRE->getDecl();
11473 if (OrigDecl != ReferenceDecl) return;
11474 unsigned diag;
11475 if (isReferenceType) {
11476 diag = diag::warn_uninit_self_reference_in_reference_init;
11477 } else if (cast<VarDecl>(OrigDecl)->isStaticLocal()) {
11478 diag = diag::warn_static_self_reference_in_init;
11479 } else if (isa<TranslationUnitDecl>(OrigDecl->getDeclContext()) ||
11480 isa<NamespaceDecl>(OrigDecl->getDeclContext()) ||
11481 DRE->getDecl()->getType()->isRecordType()) {
11482 diag = diag::warn_uninit_self_reference_in_init;
11483 } else {
11484 // Local variables will be handled by the CFG analysis.
11485 return;
11486 }
11487
11488 S.DiagRuntimeBehavior(DRE->getBeginLoc(), DRE,
11489 S.PDiag(diag)
11490 << DRE->getDecl() << OrigDecl->getLocation()
11491 << DRE->getSourceRange());
11492 }
11493 };
11494
11495 /// CheckSelfReference - Warns if OrigDecl is used in expression E.
CheckSelfReference(Sema & S,Decl * OrigDecl,Expr * E,bool DirectInit)11496 static void CheckSelfReference(Sema &S, Decl* OrigDecl, Expr *E,
11497 bool DirectInit) {
11498 // Parameters arguments are occassionially constructed with itself,
11499 // for instance, in recursive functions. Skip them.
11500 if (isa<ParmVarDecl>(OrigDecl))
11501 return;
11502
11503 E = E->IgnoreParens();
11504
11505 // Skip checking T a = a where T is not a record or reference type.
11506 // Doing so is a way to silence uninitialized warnings.
11507 if (!DirectInit && !cast<VarDecl>(OrigDecl)->getType()->isRecordType())
11508 if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E))
11509 if (ICE->getCastKind() == CK_LValueToRValue)
11510 if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(ICE->getSubExpr()))
11511 if (DRE->getDecl() == OrigDecl)
11512 return;
11513
11514 SelfReferenceChecker(S, OrigDecl).CheckExpr(E);
11515 }
11516 } // end anonymous namespace
11517
11518 namespace {
11519 // Simple wrapper to add the name of a variable or (if no variable is
11520 // available) a DeclarationName into a diagnostic.
11521 struct VarDeclOrName {
11522 VarDecl *VDecl;
11523 DeclarationName Name;
11524
11525 friend const Sema::SemaDiagnosticBuilder &
operator <<(const Sema::SemaDiagnosticBuilder & Diag,VarDeclOrName VN)11526 operator<<(const Sema::SemaDiagnosticBuilder &Diag, VarDeclOrName VN) {
11527 return VN.VDecl ? Diag << VN.VDecl : Diag << VN.Name;
11528 }
11529 };
11530 } // end anonymous namespace
11531
deduceVarTypeFromInitializer(VarDecl * VDecl,DeclarationName Name,QualType Type,TypeSourceInfo * TSI,SourceRange Range,bool DirectInit,Expr * Init)11532 QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl,
11533 DeclarationName Name, QualType Type,
11534 TypeSourceInfo *TSI,
11535 SourceRange Range, bool DirectInit,
11536 Expr *Init) {
11537 bool IsInitCapture = !VDecl;
11538 assert((!VDecl || !VDecl->isInitCapture()) &&
11539 "init captures are expected to be deduced prior to initialization");
11540
11541 VarDeclOrName VN{VDecl, Name};
11542
11543 DeducedType *Deduced = Type->getContainedDeducedType();
11544 assert(Deduced && "deduceVarTypeFromInitializer for non-deduced type");
11545
11546 // C++11 [dcl.spec.auto]p3
11547 if (!Init) {
11548 assert(VDecl && "no init for init capture deduction?");
11549
11550 // Except for class argument deduction, and then for an initializing
11551 // declaration only, i.e. no static at class scope or extern.
11552 if (!isa<DeducedTemplateSpecializationType>(Deduced) ||
11553 VDecl->hasExternalStorage() ||
11554 VDecl->isStaticDataMember()) {
11555 Diag(VDecl->getLocation(), diag::err_auto_var_requires_init)
11556 << VDecl->getDeclName() << Type;
11557 return QualType();
11558 }
11559 }
11560
11561 ArrayRef<Expr*> DeduceInits;
11562 if (Init)
11563 DeduceInits = Init;
11564
11565 if (DirectInit) {
11566 if (auto *PL = dyn_cast_or_null<ParenListExpr>(Init))
11567 DeduceInits = PL->exprs();
11568 }
11569
11570 if (isa<DeducedTemplateSpecializationType>(Deduced)) {
11571 assert(VDecl && "non-auto type for init capture deduction?");
11572 InitializedEntity Entity = InitializedEntity::InitializeVariable(VDecl);
11573 InitializationKind Kind = InitializationKind::CreateForInit(
11574 VDecl->getLocation(), DirectInit, Init);
11575 // FIXME: Initialization should not be taking a mutable list of inits.
11576 SmallVector<Expr*, 8> InitsCopy(DeduceInits.begin(), DeduceInits.end());
11577 return DeduceTemplateSpecializationFromInitializer(TSI, Entity, Kind,
11578 InitsCopy);
11579 }
11580
11581 if (DirectInit) {
11582 if (auto *IL = dyn_cast<InitListExpr>(Init))
11583 DeduceInits = IL->inits();
11584 }
11585
11586 // Deduction only works if we have exactly one source expression.
11587 if (DeduceInits.empty()) {
11588 // It isn't possible to write this directly, but it is possible to
11589 // end up in this situation with "auto x(some_pack...);"
11590 Diag(Init->getBeginLoc(), IsInitCapture
11591 ? diag::err_init_capture_no_expression
11592 : diag::err_auto_var_init_no_expression)
11593 << VN << Type << Range;
11594 return QualType();
11595 }
11596
11597 if (DeduceInits.size() > 1) {
11598 Diag(DeduceInits[1]->getBeginLoc(),
11599 IsInitCapture ? diag::err_init_capture_multiple_expressions
11600 : diag::err_auto_var_init_multiple_expressions)
11601 << VN << Type << Range;
11602 return QualType();
11603 }
11604
11605 Expr *DeduceInit = DeduceInits[0];
11606 if (DirectInit && isa<InitListExpr>(DeduceInit)) {
11607 Diag(Init->getBeginLoc(), IsInitCapture
11608 ? diag::err_init_capture_paren_braces
11609 : diag::err_auto_var_init_paren_braces)
11610 << isa<InitListExpr>(Init) << VN << Type << Range;
11611 return QualType();
11612 }
11613
11614 // Expressions default to 'id' when we're in a debugger.
11615 bool DefaultedAnyToId = false;
11616 if (getLangOpts().DebuggerCastResultToId &&
11617 Init->getType() == Context.UnknownAnyTy && !IsInitCapture) {
11618 ExprResult Result = forceUnknownAnyToType(Init, Context.getObjCIdType());
11619 if (Result.isInvalid()) {
11620 return QualType();
11621 }
11622 Init = Result.get();
11623 DefaultedAnyToId = true;
11624 }
11625
11626 // C++ [dcl.decomp]p1:
11627 // If the assignment-expression [...] has array type A and no ref-qualifier
11628 // is present, e has type cv A
11629 if (VDecl && isa<DecompositionDecl>(VDecl) &&
11630 Context.hasSameUnqualifiedType(Type, Context.getAutoDeductType()) &&
11631 DeduceInit->getType()->isConstantArrayType())
11632 return Context.getQualifiedType(DeduceInit->getType(),
11633 Type.getQualifiers());
11634
11635 QualType DeducedType;
11636 if (DeduceAutoType(TSI, DeduceInit, DeducedType) == DAR_Failed) {
11637 if (!IsInitCapture)
11638 DiagnoseAutoDeductionFailure(VDecl, DeduceInit);
11639 else if (isa<InitListExpr>(Init))
11640 Diag(Range.getBegin(),
11641 diag::err_init_capture_deduction_failure_from_init_list)
11642 << VN
11643 << (DeduceInit->getType().isNull() ? TSI->getType()
11644 : DeduceInit->getType())
11645 << DeduceInit->getSourceRange();
11646 else
11647 Diag(Range.getBegin(), diag::err_init_capture_deduction_failure)
11648 << VN << TSI->getType()
11649 << (DeduceInit->getType().isNull() ? TSI->getType()
11650 : DeduceInit->getType())
11651 << DeduceInit->getSourceRange();
11652 }
11653
11654 // Warn if we deduced 'id'. 'auto' usually implies type-safety, but using
11655 // 'id' instead of a specific object type prevents most of our usual
11656 // checks.
11657 // We only want to warn outside of template instantiations, though:
11658 // inside a template, the 'id' could have come from a parameter.
11659 if (!inTemplateInstantiation() && !DefaultedAnyToId && !IsInitCapture &&
11660 !DeducedType.isNull() && DeducedType->isObjCIdType()) {
11661 SourceLocation Loc = TSI->getTypeLoc().getBeginLoc();
11662 Diag(Loc, diag::warn_auto_var_is_id) << VN << Range;
11663 }
11664
11665 return DeducedType;
11666 }
11667
DeduceVariableDeclarationType(VarDecl * VDecl,bool DirectInit,Expr * Init)11668 bool Sema::DeduceVariableDeclarationType(VarDecl *VDecl, bool DirectInit,
11669 Expr *Init) {
11670 assert(!Init || !Init->containsErrors());
11671 QualType DeducedType = deduceVarTypeFromInitializer(
11672 VDecl, VDecl->getDeclName(), VDecl->getType(), VDecl->getTypeSourceInfo(),
11673 VDecl->getSourceRange(), DirectInit, Init);
11674 if (DeducedType.isNull()) {
11675 VDecl->setInvalidDecl();
11676 return true;
11677 }
11678
11679 VDecl->setType(DeducedType);
11680 assert(VDecl->isLinkageValid());
11681
11682 // In ARC, infer lifetime.
11683 if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(VDecl))
11684 VDecl->setInvalidDecl();
11685
11686 if (getLangOpts().OpenCL)
11687 deduceOpenCLAddressSpace(VDecl);
11688
11689 // If this is a redeclaration, check that the type we just deduced matches
11690 // the previously declared type.
11691 if (VarDecl *Old = VDecl->getPreviousDecl()) {
11692 // We never need to merge the type, because we cannot form an incomplete
11693 // array of auto, nor deduce such a type.
11694 MergeVarDeclTypes(VDecl, Old, /*MergeTypeWithPrevious*/ false);
11695 }
11696
11697 // Check the deduced type is valid for a variable declaration.
11698 CheckVariableDeclarationType(VDecl);
11699 return VDecl->isInvalidDecl();
11700 }
11701
checkNonTrivialCUnionInInitializer(const Expr * Init,SourceLocation Loc)11702 void Sema::checkNonTrivialCUnionInInitializer(const Expr *Init,
11703 SourceLocation Loc) {
11704 if (auto *EWC = dyn_cast<ExprWithCleanups>(Init))
11705 Init = EWC->getSubExpr();
11706
11707 if (auto *CE = dyn_cast<ConstantExpr>(Init))
11708 Init = CE->getSubExpr();
11709
11710 QualType InitType = Init->getType();
11711 assert((InitType.hasNonTrivialToPrimitiveDefaultInitializeCUnion() ||
11712 InitType.hasNonTrivialToPrimitiveCopyCUnion()) &&
11713 "shouldn't be called if type doesn't have a non-trivial C struct");
11714 if (auto *ILE = dyn_cast<InitListExpr>(Init)) {
11715 for (auto I : ILE->inits()) {
11716 if (!I->getType().hasNonTrivialToPrimitiveDefaultInitializeCUnion() &&
11717 !I->getType().hasNonTrivialToPrimitiveCopyCUnion())
11718 continue;
11719 SourceLocation SL = I->getExprLoc();
11720 checkNonTrivialCUnionInInitializer(I, SL.isValid() ? SL : Loc);
11721 }
11722 return;
11723 }
11724
11725 if (isa<ImplicitValueInitExpr>(Init)) {
11726 if (InitType.hasNonTrivialToPrimitiveDefaultInitializeCUnion())
11727 checkNonTrivialCUnion(InitType, Loc, NTCUC_DefaultInitializedObject,
11728 NTCUK_Init);
11729 } else {
11730 // Assume all other explicit initializers involving copying some existing
11731 // object.
11732 // TODO: ignore any explicit initializers where we can guarantee
11733 // copy-elision.
11734 if (InitType.hasNonTrivialToPrimitiveCopyCUnion())
11735 checkNonTrivialCUnion(InitType, Loc, NTCUC_CopyInit, NTCUK_Copy);
11736 }
11737 }
11738
11739 namespace {
11740
shouldIgnoreForRecordTriviality(const FieldDecl * FD)11741 bool shouldIgnoreForRecordTriviality(const FieldDecl *FD) {
11742 // Ignore unavailable fields. A field can be marked as unavailable explicitly
11743 // in the source code or implicitly by the compiler if it is in a union
11744 // defined in a system header and has non-trivial ObjC ownership
11745 // qualifications. We don't want those fields to participate in determining
11746 // whether the containing union is non-trivial.
11747 return FD->hasAttr<UnavailableAttr>();
11748 }
11749
11750 struct DiagNonTrivalCUnionDefaultInitializeVisitor
11751 : DefaultInitializedTypeVisitor<DiagNonTrivalCUnionDefaultInitializeVisitor,
11752 void> {
11753 using Super =
11754 DefaultInitializedTypeVisitor<DiagNonTrivalCUnionDefaultInitializeVisitor,
11755 void>;
11756
DiagNonTrivalCUnionDefaultInitializeVisitor__anone17936841511::DiagNonTrivalCUnionDefaultInitializeVisitor11757 DiagNonTrivalCUnionDefaultInitializeVisitor(
11758 QualType OrigTy, SourceLocation OrigLoc,
11759 Sema::NonTrivialCUnionContext UseContext, Sema &S)
11760 : OrigTy(OrigTy), OrigLoc(OrigLoc), UseContext(UseContext), S(S) {}
11761
visitWithKind__anone17936841511::DiagNonTrivalCUnionDefaultInitializeVisitor11762 void visitWithKind(QualType::PrimitiveDefaultInitializeKind PDIK, QualType QT,
11763 const FieldDecl *FD, bool InNonTrivialUnion) {
11764 if (const auto *AT = S.Context.getAsArrayType(QT))
11765 return this->asDerived().visit(S.Context.getBaseElementType(AT), FD,
11766 InNonTrivialUnion);
11767 return Super::visitWithKind(PDIK, QT, FD, InNonTrivialUnion);
11768 }
11769
visitARCStrong__anone17936841511::DiagNonTrivalCUnionDefaultInitializeVisitor11770 void visitARCStrong(QualType QT, const FieldDecl *FD,
11771 bool InNonTrivialUnion) {
11772 if (InNonTrivialUnion)
11773 S.Diag(FD->getLocation(), diag::note_non_trivial_c_union)
11774 << 1 << 0 << QT << FD->getName();
11775 }
11776
visitARCWeak__anone17936841511::DiagNonTrivalCUnionDefaultInitializeVisitor11777 void visitARCWeak(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {
11778 if (InNonTrivialUnion)
11779 S.Diag(FD->getLocation(), diag::note_non_trivial_c_union)
11780 << 1 << 0 << QT << FD->getName();
11781 }
11782
visitStruct__anone17936841511::DiagNonTrivalCUnionDefaultInitializeVisitor11783 void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {
11784 const RecordDecl *RD = QT->castAs<RecordType>()->getDecl();
11785 if (RD->isUnion()) {
11786 if (OrigLoc.isValid()) {
11787 bool IsUnion = false;
11788 if (auto *OrigRD = OrigTy->getAsRecordDecl())
11789 IsUnion = OrigRD->isUnion();
11790 S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context)
11791 << 0 << OrigTy << IsUnion << UseContext;
11792 // Reset OrigLoc so that this diagnostic is emitted only once.
11793 OrigLoc = SourceLocation();
11794 }
11795 InNonTrivialUnion = true;
11796 }
11797
11798 if (InNonTrivialUnion)
11799 S.Diag(RD->getLocation(), diag::note_non_trivial_c_union)
11800 << 0 << 0 << QT.getUnqualifiedType() << "";
11801
11802 for (const FieldDecl *FD : RD->fields())
11803 if (!shouldIgnoreForRecordTriviality(FD))
11804 asDerived().visit(FD->getType(), FD, InNonTrivialUnion);
11805 }
11806
visitTrivial__anone17936841511::DiagNonTrivalCUnionDefaultInitializeVisitor11807 void visitTrivial(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {}
11808
11809 // The non-trivial C union type or the struct/union type that contains a
11810 // non-trivial C union.
11811 QualType OrigTy;
11812 SourceLocation OrigLoc;
11813 Sema::NonTrivialCUnionContext UseContext;
11814 Sema &S;
11815 };
11816
11817 struct DiagNonTrivalCUnionDestructedTypeVisitor
11818 : DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void> {
11819 using Super =
11820 DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void>;
11821
DiagNonTrivalCUnionDestructedTypeVisitor__anone17936841511::DiagNonTrivalCUnionDestructedTypeVisitor11822 DiagNonTrivalCUnionDestructedTypeVisitor(
11823 QualType OrigTy, SourceLocation OrigLoc,
11824 Sema::NonTrivialCUnionContext UseContext, Sema &S)
11825 : OrigTy(OrigTy), OrigLoc(OrigLoc), UseContext(UseContext), S(S) {}
11826
visitWithKind__anone17936841511::DiagNonTrivalCUnionDestructedTypeVisitor11827 void visitWithKind(QualType::DestructionKind DK, QualType QT,
11828 const FieldDecl *FD, bool InNonTrivialUnion) {
11829 if (const auto *AT = S.Context.getAsArrayType(QT))
11830 return this->asDerived().visit(S.Context.getBaseElementType(AT), FD,
11831 InNonTrivialUnion);
11832 return Super::visitWithKind(DK, QT, FD, InNonTrivialUnion);
11833 }
11834
visitARCStrong__anone17936841511::DiagNonTrivalCUnionDestructedTypeVisitor11835 void visitARCStrong(QualType QT, const FieldDecl *FD,
11836 bool InNonTrivialUnion) {
11837 if (InNonTrivialUnion)
11838 S.Diag(FD->getLocation(), diag::note_non_trivial_c_union)
11839 << 1 << 1 << QT << FD->getName();
11840 }
11841
visitARCWeak__anone17936841511::DiagNonTrivalCUnionDestructedTypeVisitor11842 void visitARCWeak(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {
11843 if (InNonTrivialUnion)
11844 S.Diag(FD->getLocation(), diag::note_non_trivial_c_union)
11845 << 1 << 1 << QT << FD->getName();
11846 }
11847
visitStruct__anone17936841511::DiagNonTrivalCUnionDestructedTypeVisitor11848 void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {
11849 const RecordDecl *RD = QT->castAs<RecordType>()->getDecl();
11850 if (RD->isUnion()) {
11851 if (OrigLoc.isValid()) {
11852 bool IsUnion = false;
11853 if (auto *OrigRD = OrigTy->getAsRecordDecl())
11854 IsUnion = OrigRD->isUnion();
11855 S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context)
11856 << 1 << OrigTy << IsUnion << UseContext;
11857 // Reset OrigLoc so that this diagnostic is emitted only once.
11858 OrigLoc = SourceLocation();
11859 }
11860 InNonTrivialUnion = true;
11861 }
11862
11863 if (InNonTrivialUnion)
11864 S.Diag(RD->getLocation(), diag::note_non_trivial_c_union)
11865 << 0 << 1 << QT.getUnqualifiedType() << "";
11866
11867 for (const FieldDecl *FD : RD->fields())
11868 if (!shouldIgnoreForRecordTriviality(FD))
11869 asDerived().visit(FD->getType(), FD, InNonTrivialUnion);
11870 }
11871
visitTrivial__anone17936841511::DiagNonTrivalCUnionDestructedTypeVisitor11872 void visitTrivial(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {}
visitCXXDestructor__anone17936841511::DiagNonTrivalCUnionDestructedTypeVisitor11873 void visitCXXDestructor(QualType QT, const FieldDecl *FD,
11874 bool InNonTrivialUnion) {}
11875
11876 // The non-trivial C union type or the struct/union type that contains a
11877 // non-trivial C union.
11878 QualType OrigTy;
11879 SourceLocation OrigLoc;
11880 Sema::NonTrivialCUnionContext UseContext;
11881 Sema &S;
11882 };
11883
11884 struct DiagNonTrivalCUnionCopyVisitor
11885 : CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void> {
11886 using Super = CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void>;
11887
DiagNonTrivalCUnionCopyVisitor__anone17936841511::DiagNonTrivalCUnionCopyVisitor11888 DiagNonTrivalCUnionCopyVisitor(QualType OrigTy, SourceLocation OrigLoc,
11889 Sema::NonTrivialCUnionContext UseContext,
11890 Sema &S)
11891 : OrigTy(OrigTy), OrigLoc(OrigLoc), UseContext(UseContext), S(S) {}
11892
visitWithKind__anone17936841511::DiagNonTrivalCUnionCopyVisitor11893 void visitWithKind(QualType::PrimitiveCopyKind PCK, QualType QT,
11894 const FieldDecl *FD, bool InNonTrivialUnion) {
11895 if (const auto *AT = S.Context.getAsArrayType(QT))
11896 return this->asDerived().visit(S.Context.getBaseElementType(AT), FD,
11897 InNonTrivialUnion);
11898 return Super::visitWithKind(PCK, QT, FD, InNonTrivialUnion);
11899 }
11900
visitARCStrong__anone17936841511::DiagNonTrivalCUnionCopyVisitor11901 void visitARCStrong(QualType QT, const FieldDecl *FD,
11902 bool InNonTrivialUnion) {
11903 if (InNonTrivialUnion)
11904 S.Diag(FD->getLocation(), diag::note_non_trivial_c_union)
11905 << 1 << 2 << QT << FD->getName();
11906 }
11907
visitARCWeak__anone17936841511::DiagNonTrivalCUnionCopyVisitor11908 void visitARCWeak(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {
11909 if (InNonTrivialUnion)
11910 S.Diag(FD->getLocation(), diag::note_non_trivial_c_union)
11911 << 1 << 2 << QT << FD->getName();
11912 }
11913
visitStruct__anone17936841511::DiagNonTrivalCUnionCopyVisitor11914 void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {
11915 const RecordDecl *RD = QT->castAs<RecordType>()->getDecl();
11916 if (RD->isUnion()) {
11917 if (OrigLoc.isValid()) {
11918 bool IsUnion = false;
11919 if (auto *OrigRD = OrigTy->getAsRecordDecl())
11920 IsUnion = OrigRD->isUnion();
11921 S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context)
11922 << 2 << OrigTy << IsUnion << UseContext;
11923 // Reset OrigLoc so that this diagnostic is emitted only once.
11924 OrigLoc = SourceLocation();
11925 }
11926 InNonTrivialUnion = true;
11927 }
11928
11929 if (InNonTrivialUnion)
11930 S.Diag(RD->getLocation(), diag::note_non_trivial_c_union)
11931 << 0 << 2 << QT.getUnqualifiedType() << "";
11932
11933 for (const FieldDecl *FD : RD->fields())
11934 if (!shouldIgnoreForRecordTriviality(FD))
11935 asDerived().visit(FD->getType(), FD, InNonTrivialUnion);
11936 }
11937
preVisit__anone17936841511::DiagNonTrivalCUnionCopyVisitor11938 void preVisit(QualType::PrimitiveCopyKind PCK, QualType QT,
11939 const FieldDecl *FD, bool InNonTrivialUnion) {}
visitTrivial__anone17936841511::DiagNonTrivalCUnionCopyVisitor11940 void visitTrivial(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {}
visitVolatileTrivial__anone17936841511::DiagNonTrivalCUnionCopyVisitor11941 void visitVolatileTrivial(QualType QT, const FieldDecl *FD,
11942 bool InNonTrivialUnion) {}
11943
11944 // The non-trivial C union type or the struct/union type that contains a
11945 // non-trivial C union.
11946 QualType OrigTy;
11947 SourceLocation OrigLoc;
11948 Sema::NonTrivialCUnionContext UseContext;
11949 Sema &S;
11950 };
11951
11952 } // namespace
11953
checkNonTrivialCUnion(QualType QT,SourceLocation Loc,NonTrivialCUnionContext UseContext,unsigned NonTrivialKind)11954 void Sema::checkNonTrivialCUnion(QualType QT, SourceLocation Loc,
11955 NonTrivialCUnionContext UseContext,
11956 unsigned NonTrivialKind) {
11957 assert((QT.hasNonTrivialToPrimitiveDefaultInitializeCUnion() ||
11958 QT.hasNonTrivialToPrimitiveDestructCUnion() ||
11959 QT.hasNonTrivialToPrimitiveCopyCUnion()) &&
11960 "shouldn't be called if type doesn't have a non-trivial C union");
11961
11962 if ((NonTrivialKind & NTCUK_Init) &&
11963 QT.hasNonTrivialToPrimitiveDefaultInitializeCUnion())
11964 DiagNonTrivalCUnionDefaultInitializeVisitor(QT, Loc, UseContext, *this)
11965 .visit(QT, nullptr, false);
11966 if ((NonTrivialKind & NTCUK_Destruct) &&
11967 QT.hasNonTrivialToPrimitiveDestructCUnion())
11968 DiagNonTrivalCUnionDestructedTypeVisitor(QT, Loc, UseContext, *this)
11969 .visit(QT, nullptr, false);
11970 if ((NonTrivialKind & NTCUK_Copy) && QT.hasNonTrivialToPrimitiveCopyCUnion())
11971 DiagNonTrivalCUnionCopyVisitor(QT, Loc, UseContext, *this)
11972 .visit(QT, nullptr, false);
11973 }
11974
11975 /// AddInitializerToDecl - Adds the initializer Init to the
11976 /// declaration dcl. If DirectInit is true, this is C++ direct
11977 /// initialization rather than copy initialization.
AddInitializerToDecl(Decl * RealDecl,Expr * Init,bool DirectInit)11978 void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {
11979 // If there is no declaration, there was an error parsing it. Just ignore
11980 // the initializer.
11981 if (!RealDecl || RealDecl->isInvalidDecl()) {
11982 CorrectDelayedTyposInExpr(Init, dyn_cast_or_null<VarDecl>(RealDecl));
11983 return;
11984 }
11985
11986 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(RealDecl)) {
11987 // Pure-specifiers are handled in ActOnPureSpecifier.
11988 Diag(Method->getLocation(), diag::err_member_function_initialization)
11989 << Method->getDeclName() << Init->getSourceRange();
11990 Method->setInvalidDecl();
11991 return;
11992 }
11993
11994 VarDecl *VDecl = dyn_cast<VarDecl>(RealDecl);
11995 if (!VDecl) {
11996 assert(!isa<FieldDecl>(RealDecl) && "field init shouldn't get here");
11997 Diag(RealDecl->getLocation(), diag::err_illegal_initializer);
11998 RealDecl->setInvalidDecl();
11999 return;
12000 }
12001
12002 // C++11 [decl.spec.auto]p6. Deduce the type which 'auto' stands in for.
12003 if (VDecl->getType()->isUndeducedType()) {
12004 // Attempt typo correction early so that the type of the init expression can
12005 // be deduced based on the chosen correction if the original init contains a
12006 // TypoExpr.
12007 ExprResult Res = CorrectDelayedTyposInExpr(Init, VDecl);
12008 if (!Res.isUsable()) {
12009 // There are unresolved typos in Init, just drop them.
12010 // FIXME: improve the recovery strategy to preserve the Init.
12011 RealDecl->setInvalidDecl();
12012 return;
12013 }
12014 if (Res.get()->containsErrors()) {
12015 // Invalidate the decl as we don't know the type for recovery-expr yet.
12016 RealDecl->setInvalidDecl();
12017 VDecl->setInit(Res.get());
12018 return;
12019 }
12020 Init = Res.get();
12021
12022 if (DeduceVariableDeclarationType(VDecl, DirectInit, Init))
12023 return;
12024 }
12025
12026 // dllimport cannot be used on variable definitions.
12027 if (VDecl->hasAttr<DLLImportAttr>() && !VDecl->isStaticDataMember()) {
12028 Diag(VDecl->getLocation(), diag::err_attribute_dllimport_data_definition);
12029 VDecl->setInvalidDecl();
12030 return;
12031 }
12032
12033 if (VDecl->isLocalVarDecl() && VDecl->hasExternalStorage()) {
12034 // C99 6.7.8p5. C++ has no such restriction, but that is a defect.
12035 Diag(VDecl->getLocation(), diag::err_block_extern_cant_init);
12036 VDecl->setInvalidDecl();
12037 return;
12038 }
12039
12040 if (!VDecl->getType()->isDependentType()) {
12041 // A definition must end up with a complete type, which means it must be
12042 // complete with the restriction that an array type might be completed by
12043 // the initializer; note that later code assumes this restriction.
12044 QualType BaseDeclType = VDecl->getType();
12045 if (const ArrayType *Array = Context.getAsIncompleteArrayType(BaseDeclType))
12046 BaseDeclType = Array->getElementType();
12047 if (RequireCompleteType(VDecl->getLocation(), BaseDeclType,
12048 diag::err_typecheck_decl_incomplete_type)) {
12049 RealDecl->setInvalidDecl();
12050 return;
12051 }
12052
12053 // The variable can not have an abstract class type.
12054 if (RequireNonAbstractType(VDecl->getLocation(), VDecl->getType(),
12055 diag::err_abstract_type_in_decl,
12056 AbstractVariableType))
12057 VDecl->setInvalidDecl();
12058 }
12059
12060 // If adding the initializer will turn this declaration into a definition,
12061 // and we already have a definition for this variable, diagnose or otherwise
12062 // handle the situation.
12063 VarDecl *Def;
12064 if ((Def = VDecl->getDefinition()) && Def != VDecl &&
12065 (!VDecl->isStaticDataMember() || VDecl->isOutOfLine()) &&
12066 !VDecl->isThisDeclarationADemotedDefinition() &&
12067 checkVarDeclRedefinition(Def, VDecl))
12068 return;
12069
12070 if (getLangOpts().CPlusPlus) {
12071 // C++ [class.static.data]p4
12072 // If a static data member is of const integral or const
12073 // enumeration type, its declaration in the class definition can
12074 // specify a constant-initializer which shall be an integral
12075 // constant expression (5.19). In that case, the member can appear
12076 // in integral constant expressions. The member shall still be
12077 // defined in a namespace scope if it is used in the program and the
12078 // namespace scope definition shall not contain an initializer.
12079 //
12080 // We already performed a redefinition check above, but for static
12081 // data members we also need to check whether there was an in-class
12082 // declaration with an initializer.
12083 if (VDecl->isStaticDataMember() && VDecl->getCanonicalDecl()->hasInit()) {
12084 Diag(Init->getExprLoc(), diag::err_static_data_member_reinitialization)
12085 << VDecl->getDeclName();
12086 Diag(VDecl->getCanonicalDecl()->getInit()->getExprLoc(),
12087 diag::note_previous_initializer)
12088 << 0;
12089 return;
12090 }
12091
12092 if (VDecl->hasLocalStorage())
12093 setFunctionHasBranchProtectedScope();
12094
12095 if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer)) {
12096 VDecl->setInvalidDecl();
12097 return;
12098 }
12099 }
12100
12101 // OpenCL 1.1 6.5.2: "Variables allocated in the __local address space inside
12102 // a kernel function cannot be initialized."
12103 if (VDecl->getType().getAddressSpace() == LangAS::opencl_local) {
12104 Diag(VDecl->getLocation(), diag::err_local_cant_init);
12105 VDecl->setInvalidDecl();
12106 return;
12107 }
12108
12109 // The LoaderUninitialized attribute acts as a definition (of undef).
12110 if (VDecl->hasAttr<LoaderUninitializedAttr>()) {
12111 Diag(VDecl->getLocation(), diag::err_loader_uninitialized_cant_init);
12112 VDecl->setInvalidDecl();
12113 return;
12114 }
12115
12116 // Get the decls type and save a reference for later, since
12117 // CheckInitializerTypes may change it.
12118 QualType DclT = VDecl->getType(), SavT = DclT;
12119
12120 // Expressions default to 'id' when we're in a debugger
12121 // and we are assigning it to a variable of Objective-C pointer type.
12122 if (getLangOpts().DebuggerCastResultToId && DclT->isObjCObjectPointerType() &&
12123 Init->getType() == Context.UnknownAnyTy) {
12124 ExprResult Result = forceUnknownAnyToType(Init, Context.getObjCIdType());
12125 if (Result.isInvalid()) {
12126 VDecl->setInvalidDecl();
12127 return;
12128 }
12129 Init = Result.get();
12130 }
12131
12132 // Perform the initialization.
12133 ParenListExpr *CXXDirectInit = dyn_cast<ParenListExpr>(Init);
12134 if (!VDecl->isInvalidDecl()) {
12135 InitializedEntity Entity = InitializedEntity::InitializeVariable(VDecl);
12136 InitializationKind Kind = InitializationKind::CreateForInit(
12137 VDecl->getLocation(), DirectInit, Init);
12138
12139 MultiExprArg Args = Init;
12140 if (CXXDirectInit)
12141 Args = MultiExprArg(CXXDirectInit->getExprs(),
12142 CXXDirectInit->getNumExprs());
12143
12144 // Try to correct any TypoExprs in the initialization arguments.
12145 for (size_t Idx = 0; Idx < Args.size(); ++Idx) {
12146 ExprResult Res = CorrectDelayedTyposInExpr(
12147 Args[Idx], VDecl, /*RecoverUncorrectedTypos=*/true,
12148 [this, Entity, Kind](Expr *E) {
12149 InitializationSequence Init(*this, Entity, Kind, MultiExprArg(E));
12150 return Init.Failed() ? ExprError() : E;
12151 });
12152 if (Res.isInvalid()) {
12153 VDecl->setInvalidDecl();
12154 } else if (Res.get() != Args[Idx]) {
12155 Args[Idx] = Res.get();
12156 }
12157 }
12158 if (VDecl->isInvalidDecl())
12159 return;
12160
12161 InitializationSequence InitSeq(*this, Entity, Kind, Args,
12162 /*TopLevelOfInitList=*/false,
12163 /*TreatUnavailableAsInvalid=*/false);
12164 ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Args, &DclT);
12165 if (Result.isInvalid()) {
12166 // If the provied initializer fails to initialize the var decl,
12167 // we attach a recovery expr for better recovery.
12168 auto RecoveryExpr =
12169 CreateRecoveryExpr(Init->getBeginLoc(), Init->getEndLoc(), Args);
12170 if (RecoveryExpr.get())
12171 VDecl->setInit(RecoveryExpr.get());
12172 return;
12173 }
12174
12175 Init = Result.getAs<Expr>();
12176 }
12177
12178 // Check for self-references within variable initializers.
12179 // Variables declared within a function/method body (except for references)
12180 // are handled by a dataflow analysis.
12181 // This is undefined behavior in C++, but valid in C.
12182 if (getLangOpts().CPlusPlus) {
12183 if (!VDecl->hasLocalStorage() || VDecl->getType()->isRecordType() ||
12184 VDecl->getType()->isReferenceType()) {
12185 CheckSelfReference(*this, RealDecl, Init, DirectInit);
12186 }
12187 }
12188
12189 // If the type changed, it means we had an incomplete type that was
12190 // completed by the initializer. For example:
12191 // int ary[] = { 1, 3, 5 };
12192 // "ary" transitions from an IncompleteArrayType to a ConstantArrayType.
12193 if (!VDecl->isInvalidDecl() && (DclT != SavT))
12194 VDecl->setType(DclT);
12195
12196 if (!VDecl->isInvalidDecl()) {
12197 checkUnsafeAssigns(VDecl->getLocation(), VDecl->getType(), Init);
12198
12199 if (VDecl->hasAttr<BlocksAttr>())
12200 checkRetainCycles(VDecl, Init);
12201
12202 // It is safe to assign a weak reference into a strong variable.
12203 // Although this code can still have problems:
12204 // id x = self.weakProp;
12205 // id y = self.weakProp;
12206 // we do not warn to warn spuriously when 'x' and 'y' are on separate
12207 // paths through the function. This should be revisited if
12208 // -Wrepeated-use-of-weak is made flow-sensitive.
12209 if (FunctionScopeInfo *FSI = getCurFunction())
12210 if ((VDecl->getType().getObjCLifetime() == Qualifiers::OCL_Strong ||
12211 VDecl->getType().isNonWeakInMRRWithObjCWeak(Context)) &&
12212 !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak,
12213 Init->getBeginLoc()))
12214 FSI->markSafeWeakUse(Init);
12215 }
12216
12217 // The initialization is usually a full-expression.
12218 //
12219 // FIXME: If this is a braced initialization of an aggregate, it is not
12220 // an expression, and each individual field initializer is a separate
12221 // full-expression. For instance, in:
12222 //
12223 // struct Temp { ~Temp(); };
12224 // struct S { S(Temp); };
12225 // struct T { S a, b; } t = { Temp(), Temp() }
12226 //
12227 // we should destroy the first Temp before constructing the second.
12228 ExprResult Result =
12229 ActOnFinishFullExpr(Init, VDecl->getLocation(),
12230 /*DiscardedValue*/ false, VDecl->isConstexpr());
12231 if (Result.isInvalid()) {
12232 VDecl->setInvalidDecl();
12233 return;
12234 }
12235 Init = Result.get();
12236
12237 // Attach the initializer to the decl.
12238 VDecl->setInit(Init);
12239
12240 if (VDecl->isLocalVarDecl()) {
12241 // Don't check the initializer if the declaration is malformed.
12242 if (VDecl->isInvalidDecl()) {
12243 // do nothing
12244
12245 // OpenCL v1.2 s6.5.3: __constant locals must be constant-initialized.
12246 // This is true even in C++ for OpenCL.
12247 } else if (VDecl->getType().getAddressSpace() == LangAS::opencl_constant) {
12248 CheckForConstantInitializer(Init, DclT);
12249
12250 // Otherwise, C++ does not restrict the initializer.
12251 } else if (getLangOpts().CPlusPlus) {
12252 // do nothing
12253
12254 // C99 6.7.8p4: All the expressions in an initializer for an object that has
12255 // static storage duration shall be constant expressions or string literals.
12256 } else if (VDecl->getStorageClass() == SC_Static) {
12257 CheckForConstantInitializer(Init, DclT);
12258
12259 // C89 is stricter than C99 for aggregate initializers.
12260 // C89 6.5.7p3: All the expressions [...] in an initializer list
12261 // for an object that has aggregate or union type shall be
12262 // constant expressions.
12263 } else if (!getLangOpts().C99 && VDecl->getType()->isAggregateType() &&
12264 isa<InitListExpr>(Init)) {
12265 const Expr *Culprit;
12266 if (!Init->isConstantInitializer(Context, false, &Culprit)) {
12267 Diag(Culprit->getExprLoc(),
12268 diag::ext_aggregate_init_not_constant)
12269 << Culprit->getSourceRange();
12270 }
12271 }
12272
12273 if (auto *E = dyn_cast<ExprWithCleanups>(Init))
12274 if (auto *BE = dyn_cast<BlockExpr>(E->getSubExpr()->IgnoreParens()))
12275 if (VDecl->hasLocalStorage())
12276 BE->getBlockDecl()->setCanAvoidCopyToHeap();
12277 } else if (VDecl->isStaticDataMember() && !VDecl->isInline() &&
12278 VDecl->getLexicalDeclContext()->isRecord()) {
12279 // This is an in-class initialization for a static data member, e.g.,
12280 //
12281 // struct S {
12282 // static const int value = 17;
12283 // };
12284
12285 // C++ [class.mem]p4:
12286 // A member-declarator can contain a constant-initializer only
12287 // if it declares a static member (9.4) of const integral or
12288 // const enumeration type, see 9.4.2.
12289 //
12290 // C++11 [class.static.data]p3:
12291 // If a non-volatile non-inline const static data member is of integral
12292 // or enumeration type, its declaration in the class definition can
12293 // specify a brace-or-equal-initializer in which every initializer-clause
12294 // that is an assignment-expression is a constant expression. A static
12295 // data member of literal type can be declared in the class definition
12296 // with the constexpr specifier; if so, its declaration shall specify a
12297 // brace-or-equal-initializer in which every initializer-clause that is
12298 // an assignment-expression is a constant expression.
12299
12300 // Do nothing on dependent types.
12301 if (DclT->isDependentType()) {
12302
12303 // Allow any 'static constexpr' members, whether or not they are of literal
12304 // type. We separately check that every constexpr variable is of literal
12305 // type.
12306 } else if (VDecl->isConstexpr()) {
12307
12308 // Require constness.
12309 } else if (!DclT.isConstQualified()) {
12310 Diag(VDecl->getLocation(), diag::err_in_class_initializer_non_const)
12311 << Init->getSourceRange();
12312 VDecl->setInvalidDecl();
12313
12314 // We allow integer constant expressions in all cases.
12315 } else if (DclT->isIntegralOrEnumerationType()) {
12316 // Check whether the expression is a constant expression.
12317 SourceLocation Loc;
12318 if (getLangOpts().CPlusPlus11 && DclT.isVolatileQualified())
12319 // In C++11, a non-constexpr const static data member with an
12320 // in-class initializer cannot be volatile.
12321 Diag(VDecl->getLocation(), diag::err_in_class_initializer_volatile);
12322 else if (Init->isValueDependent())
12323 ; // Nothing to check.
12324 else if (Init->isIntegerConstantExpr(Context, &Loc))
12325 ; // Ok, it's an ICE!
12326 else if (Init->getType()->isScopedEnumeralType() &&
12327 Init->isCXX11ConstantExpr(Context))
12328 ; // Ok, it is a scoped-enum constant expression.
12329 else if (Init->isEvaluatable(Context)) {
12330 // If we can constant fold the initializer through heroics, accept it,
12331 // but report this as a use of an extension for -pedantic.
12332 Diag(Loc, diag::ext_in_class_initializer_non_constant)
12333 << Init->getSourceRange();
12334 } else {
12335 // Otherwise, this is some crazy unknown case. Report the issue at the
12336 // location provided by the isIntegerConstantExpr failed check.
12337 Diag(Loc, diag::err_in_class_initializer_non_constant)
12338 << Init->getSourceRange();
12339 VDecl->setInvalidDecl();
12340 }
12341
12342 // We allow foldable floating-point constants as an extension.
12343 } else if (DclT->isFloatingType()) { // also permits complex, which is ok
12344 // In C++98, this is a GNU extension. In C++11, it is not, but we support
12345 // it anyway and provide a fixit to add the 'constexpr'.
12346 if (getLangOpts().CPlusPlus11) {
12347 Diag(VDecl->getLocation(),
12348 diag::ext_in_class_initializer_float_type_cxx11)
12349 << DclT << Init->getSourceRange();
12350 Diag(VDecl->getBeginLoc(),
12351 diag::note_in_class_initializer_float_type_cxx11)
12352 << FixItHint::CreateInsertion(VDecl->getBeginLoc(), "constexpr ");
12353 } else {
12354 Diag(VDecl->getLocation(), diag::ext_in_class_initializer_float_type)
12355 << DclT << Init->getSourceRange();
12356
12357 if (!Init->isValueDependent() && !Init->isEvaluatable(Context)) {
12358 Diag(Init->getExprLoc(), diag::err_in_class_initializer_non_constant)
12359 << Init->getSourceRange();
12360 VDecl->setInvalidDecl();
12361 }
12362 }
12363
12364 // Suggest adding 'constexpr' in C++11 for literal types.
12365 } else if (getLangOpts().CPlusPlus11 && DclT->isLiteralType(Context)) {
12366 Diag(VDecl->getLocation(), diag::err_in_class_initializer_literal_type)
12367 << DclT << Init->getSourceRange()
12368 << FixItHint::CreateInsertion(VDecl->getBeginLoc(), "constexpr ");
12369 VDecl->setConstexpr(true);
12370
12371 } else {
12372 Diag(VDecl->getLocation(), diag::err_in_class_initializer_bad_type)
12373 << DclT << Init->getSourceRange();
12374 VDecl->setInvalidDecl();
12375 }
12376 } else if (VDecl->isFileVarDecl()) {
12377 // In C, extern is typically used to avoid tentative definitions when
12378 // declaring variables in headers, but adding an intializer makes it a
12379 // definition. This is somewhat confusing, so GCC and Clang both warn on it.
12380 // In C++, extern is often used to give implictly static const variables
12381 // external linkage, so don't warn in that case. If selectany is present,
12382 // this might be header code intended for C and C++ inclusion, so apply the
12383 // C++ rules.
12384 if (VDecl->getStorageClass() == SC_Extern &&
12385 ((!getLangOpts().CPlusPlus && !VDecl->hasAttr<SelectAnyAttr>()) ||
12386 !Context.getBaseElementType(VDecl->getType()).isConstQualified()) &&
12387 !(getLangOpts().CPlusPlus && VDecl->isExternC()) &&
12388 !isTemplateInstantiation(VDecl->getTemplateSpecializationKind()))
12389 Diag(VDecl->getLocation(), diag::warn_extern_init);
12390
12391 // In Microsoft C++ mode, a const variable defined in namespace scope has
12392 // external linkage by default if the variable is declared with
12393 // __declspec(dllexport).
12394 if (Context.getTargetInfo().getCXXABI().isMicrosoft() &&
12395 getLangOpts().CPlusPlus && VDecl->getType().isConstQualified() &&
12396 VDecl->hasAttr<DLLExportAttr>() && VDecl->getDefinition())
12397 VDecl->setStorageClass(SC_Extern);
12398
12399 // C99 6.7.8p4. All file scoped initializers need to be constant.
12400 if (!getLangOpts().CPlusPlus && !VDecl->isInvalidDecl())
12401 CheckForConstantInitializer(Init, DclT);
12402 }
12403
12404 QualType InitType = Init->getType();
12405 if (!InitType.isNull() &&
12406 (InitType.hasNonTrivialToPrimitiveDefaultInitializeCUnion() ||
12407 InitType.hasNonTrivialToPrimitiveCopyCUnion()))
12408 checkNonTrivialCUnionInInitializer(Init, Init->getExprLoc());
12409
12410 // We will represent direct-initialization similarly to copy-initialization:
12411 // int x(1); -as-> int x = 1;
12412 // ClassType x(a,b,c); -as-> ClassType x = ClassType(a,b,c);
12413 //
12414 // Clients that want to distinguish between the two forms, can check for
12415 // direct initializer using VarDecl::getInitStyle().
12416 // A major benefit is that clients that don't particularly care about which
12417 // exactly form was it (like the CodeGen) can handle both cases without
12418 // special case code.
12419
12420 // C++ 8.5p11:
12421 // The form of initialization (using parentheses or '=') is generally
12422 // insignificant, but does matter when the entity being initialized has a
12423 // class type.
12424 if (CXXDirectInit) {
12425 assert(DirectInit && "Call-style initializer must be direct init.");
12426 VDecl->setInitStyle(VarDecl::CallInit);
12427 } else if (DirectInit) {
12428 // This must be list-initialization. No other way is direct-initialization.
12429 VDecl->setInitStyle(VarDecl::ListInit);
12430 }
12431
12432 if (LangOpts.OpenMP && VDecl->isFileVarDecl())
12433 DeclsToCheckForDeferredDiags.push_back(VDecl);
12434 CheckCompleteVariableDeclaration(VDecl);
12435 }
12436
12437 /// ActOnInitializerError - Given that there was an error parsing an
12438 /// initializer for the given declaration, try to return to some form
12439 /// of sanity.
ActOnInitializerError(Decl * D)12440 void Sema::ActOnInitializerError(Decl *D) {
12441 // Our main concern here is re-establishing invariants like "a
12442 // variable's type is either dependent or complete".
12443 if (!D || D->isInvalidDecl()) return;
12444
12445 VarDecl *VD = dyn_cast<VarDecl>(D);
12446 if (!VD) return;
12447
12448 // Bindings are not usable if we can't make sense of the initializer.
12449 if (auto *DD = dyn_cast<DecompositionDecl>(D))
12450 for (auto *BD : DD->bindings())
12451 BD->setInvalidDecl();
12452
12453 // Auto types are meaningless if we can't make sense of the initializer.
12454 if (VD->getType()->isUndeducedType()) {
12455 D->setInvalidDecl();
12456 return;
12457 }
12458
12459 QualType Ty = VD->getType();
12460 if (Ty->isDependentType()) return;
12461
12462 // Require a complete type.
12463 if (RequireCompleteType(VD->getLocation(),
12464 Context.getBaseElementType(Ty),
12465 diag::err_typecheck_decl_incomplete_type)) {
12466 VD->setInvalidDecl();
12467 return;
12468 }
12469
12470 // Require a non-abstract type.
12471 if (RequireNonAbstractType(VD->getLocation(), Ty,
12472 diag::err_abstract_type_in_decl,
12473 AbstractVariableType)) {
12474 VD->setInvalidDecl();
12475 return;
12476 }
12477
12478 // Don't bother complaining about constructors or destructors,
12479 // though.
12480 }
12481
ActOnUninitializedDecl(Decl * RealDecl)12482 void Sema::ActOnUninitializedDecl(Decl *RealDecl) {
12483 // If there is no declaration, there was an error parsing it. Just ignore it.
12484 if (!RealDecl)
12485 return;
12486
12487 if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {
12488 QualType Type = Var->getType();
12489
12490 // C++1z [dcl.dcl]p1 grammar implies that an initializer is mandatory.
12491 if (isa<DecompositionDecl>(RealDecl)) {
12492 Diag(Var->getLocation(), diag::err_decomp_decl_requires_init) << Var;
12493 Var->setInvalidDecl();
12494 return;
12495 }
12496
12497 if (Type->isUndeducedType() &&
12498 DeduceVariableDeclarationType(Var, false, nullptr))
12499 return;
12500
12501 // C++11 [class.static.data]p3: A static data member can be declared with
12502 // the constexpr specifier; if so, its declaration shall specify
12503 // a brace-or-equal-initializer.
12504 // C++11 [dcl.constexpr]p1: The constexpr specifier shall be applied only to
12505 // the definition of a variable [...] or the declaration of a static data
12506 // member.
12507 if (Var->isConstexpr() && !Var->isThisDeclarationADefinition() &&
12508 !Var->isThisDeclarationADemotedDefinition()) {
12509 if (Var->isStaticDataMember()) {
12510 // C++1z removes the relevant rule; the in-class declaration is always
12511 // a definition there.
12512 if (!getLangOpts().CPlusPlus17 &&
12513 !Context.getTargetInfo().getCXXABI().isMicrosoft()) {
12514 Diag(Var->getLocation(),
12515 diag::err_constexpr_static_mem_var_requires_init)
12516 << Var;
12517 Var->setInvalidDecl();
12518 return;
12519 }
12520 } else {
12521 Diag(Var->getLocation(), diag::err_invalid_constexpr_var_decl);
12522 Var->setInvalidDecl();
12523 return;
12524 }
12525 }
12526
12527 // OpenCL v1.1 s6.5.3: variables declared in the constant address space must
12528 // be initialized.
12529 if (!Var->isInvalidDecl() &&
12530 Var->getType().getAddressSpace() == LangAS::opencl_constant &&
12531 Var->getStorageClass() != SC_Extern && !Var->getInit()) {
12532 Diag(Var->getLocation(), diag::err_opencl_constant_no_init);
12533 Var->setInvalidDecl();
12534 return;
12535 }
12536
12537 if (!Var->isInvalidDecl() && RealDecl->hasAttr<LoaderUninitializedAttr>()) {
12538 if (Var->getStorageClass() == SC_Extern) {
12539 Diag(Var->getLocation(), diag::err_loader_uninitialized_extern_decl)
12540 << Var;
12541 Var->setInvalidDecl();
12542 return;
12543 }
12544 if (RequireCompleteType(Var->getLocation(), Var->getType(),
12545 diag::err_typecheck_decl_incomplete_type)) {
12546 Var->setInvalidDecl();
12547 return;
12548 }
12549 if (CXXRecordDecl *RD = Var->getType()->getAsCXXRecordDecl()) {
12550 if (!RD->hasTrivialDefaultConstructor()) {
12551 Diag(Var->getLocation(), diag::err_loader_uninitialized_trivial_ctor);
12552 Var->setInvalidDecl();
12553 return;
12554 }
12555 }
12556 }
12557
12558 VarDecl::DefinitionKind DefKind = Var->isThisDeclarationADefinition();
12559 if (!Var->isInvalidDecl() && DefKind != VarDecl::DeclarationOnly &&
12560 Var->getType().hasNonTrivialToPrimitiveDefaultInitializeCUnion())
12561 checkNonTrivialCUnion(Var->getType(), Var->getLocation(),
12562 NTCUC_DefaultInitializedObject, NTCUK_Init);
12563
12564
12565 switch (DefKind) {
12566 case VarDecl::Definition:
12567 if (!Var->isStaticDataMember() || !Var->getAnyInitializer())
12568 break;
12569
12570 // We have an out-of-line definition of a static data member
12571 // that has an in-class initializer, so we type-check this like
12572 // a declaration.
12573 //
12574 LLVM_FALLTHROUGH;
12575
12576 case VarDecl::DeclarationOnly:
12577 // It's only a declaration.
12578
12579 // Block scope. C99 6.7p7: If an identifier for an object is
12580 // declared with no linkage (C99 6.2.2p6), the type for the
12581 // object shall be complete.
12582 if (!Type->isDependentType() && Var->isLocalVarDecl() &&
12583 !Var->hasLinkage() && !Var->isInvalidDecl() &&
12584 RequireCompleteType(Var->getLocation(), Type,
12585 diag::err_typecheck_decl_incomplete_type))
12586 Var->setInvalidDecl();
12587
12588 // Make sure that the type is not abstract.
12589 if (!Type->isDependentType() && !Var->isInvalidDecl() &&
12590 RequireNonAbstractType(Var->getLocation(), Type,
12591 diag::err_abstract_type_in_decl,
12592 AbstractVariableType))
12593 Var->setInvalidDecl();
12594 if (!Type->isDependentType() && !Var->isInvalidDecl() &&
12595 Var->getStorageClass() == SC_PrivateExtern) {
12596 Diag(Var->getLocation(), diag::warn_private_extern);
12597 Diag(Var->getLocation(), diag::note_private_extern);
12598 }
12599
12600 if (Context.getTargetInfo().allowDebugInfoForExternalVar() &&
12601 !Var->isInvalidDecl() && !getLangOpts().CPlusPlus)
12602 ExternalDeclarations.push_back(Var);
12603
12604 return;
12605
12606 case VarDecl::TentativeDefinition:
12607 // File scope. C99 6.9.2p2: A declaration of an identifier for an
12608 // object that has file scope without an initializer, and without a
12609 // storage-class specifier or with the storage-class specifier "static",
12610 // constitutes a tentative definition. Note: A tentative definition with
12611 // external linkage is valid (C99 6.2.2p5).
12612 if (!Var->isInvalidDecl()) {
12613 if (const IncompleteArrayType *ArrayT
12614 = Context.getAsIncompleteArrayType(Type)) {
12615 if (RequireCompleteSizedType(
12616 Var->getLocation(), ArrayT->getElementType(),
12617 diag::err_array_incomplete_or_sizeless_type))
12618 Var->setInvalidDecl();
12619 } else if (Var->getStorageClass() == SC_Static) {
12620 // C99 6.9.2p3: If the declaration of an identifier for an object is
12621 // a tentative definition and has internal linkage (C99 6.2.2p3), the
12622 // declared type shall not be an incomplete type.
12623 // NOTE: code such as the following
12624 // static struct s;
12625 // struct s { int a; };
12626 // is accepted by gcc. Hence here we issue a warning instead of
12627 // an error and we do not invalidate the static declaration.
12628 // NOTE: to avoid multiple warnings, only check the first declaration.
12629 if (Var->isFirstDecl())
12630 RequireCompleteType(Var->getLocation(), Type,
12631 diag::ext_typecheck_decl_incomplete_type);
12632 }
12633 }
12634
12635 // Record the tentative definition; we're done.
12636 if (!Var->isInvalidDecl())
12637 TentativeDefinitions.push_back(Var);
12638 return;
12639 }
12640
12641 // Provide a specific diagnostic for uninitialized variable
12642 // definitions with incomplete array type.
12643 if (Type->isIncompleteArrayType()) {
12644 Diag(Var->getLocation(),
12645 diag::err_typecheck_incomplete_array_needs_initializer);
12646 Var->setInvalidDecl();
12647 return;
12648 }
12649
12650 // Provide a specific diagnostic for uninitialized variable
12651 // definitions with reference type.
12652 if (Type->isReferenceType()) {
12653 Diag(Var->getLocation(), diag::err_reference_var_requires_init)
12654 << Var << SourceRange(Var->getLocation(), Var->getLocation());
12655 Var->setInvalidDecl();
12656 return;
12657 }
12658
12659 // Do not attempt to type-check the default initializer for a
12660 // variable with dependent type.
12661 if (Type->isDependentType())
12662 return;
12663
12664 if (Var->isInvalidDecl())
12665 return;
12666
12667 if (!Var->hasAttr<AliasAttr>()) {
12668 if (RequireCompleteType(Var->getLocation(),
12669 Context.getBaseElementType(Type),
12670 diag::err_typecheck_decl_incomplete_type)) {
12671 Var->setInvalidDecl();
12672 return;
12673 }
12674 } else {
12675 return;
12676 }
12677
12678 // The variable can not have an abstract class type.
12679 if (RequireNonAbstractType(Var->getLocation(), Type,
12680 diag::err_abstract_type_in_decl,
12681 AbstractVariableType)) {
12682 Var->setInvalidDecl();
12683 return;
12684 }
12685
12686 // Check for jumps past the implicit initializer. C++0x
12687 // clarifies that this applies to a "variable with automatic
12688 // storage duration", not a "local variable".
12689 // C++11 [stmt.dcl]p3
12690 // A program that jumps from a point where a variable with automatic
12691 // storage duration is not in scope to a point where it is in scope is
12692 // ill-formed unless the variable has scalar type, class type with a
12693 // trivial default constructor and a trivial destructor, a cv-qualified
12694 // version of one of these types, or an array of one of the preceding
12695 // types and is declared without an initializer.
12696 if (getLangOpts().CPlusPlus && Var->hasLocalStorage()) {
12697 if (const RecordType *Record
12698 = Context.getBaseElementType(Type)->getAs<RecordType>()) {
12699 CXXRecordDecl *CXXRecord = cast<CXXRecordDecl>(Record->getDecl());
12700 // Mark the function (if we're in one) for further checking even if the
12701 // looser rules of C++11 do not require such checks, so that we can
12702 // diagnose incompatibilities with C++98.
12703 if (!CXXRecord->isPOD())
12704 setFunctionHasBranchProtectedScope();
12705 }
12706 }
12707 // In OpenCL, we can't initialize objects in the __local address space,
12708 // even implicitly, so don't synthesize an implicit initializer.
12709 if (getLangOpts().OpenCL &&
12710 Var->getType().getAddressSpace() == LangAS::opencl_local)
12711 return;
12712 // C++03 [dcl.init]p9:
12713 // If no initializer is specified for an object, and the
12714 // object is of (possibly cv-qualified) non-POD class type (or
12715 // array thereof), the object shall be default-initialized; if
12716 // the object is of const-qualified type, the underlying class
12717 // type shall have a user-declared default
12718 // constructor. Otherwise, if no initializer is specified for
12719 // a non- static object, the object and its subobjects, if
12720 // any, have an indeterminate initial value); if the object
12721 // or any of its subobjects are of const-qualified type, the
12722 // program is ill-formed.
12723 // C++0x [dcl.init]p11:
12724 // If no initializer is specified for an object, the object is
12725 // default-initialized; [...].
12726 InitializedEntity Entity = InitializedEntity::InitializeVariable(Var);
12727 InitializationKind Kind
12728 = InitializationKind::CreateDefault(Var->getLocation());
12729
12730 InitializationSequence InitSeq(*this, Entity, Kind, None);
12731 ExprResult Init = InitSeq.Perform(*this, Entity, Kind, None);
12732
12733 if (Init.get()) {
12734 Var->setInit(MaybeCreateExprWithCleanups(Init.get()));
12735 // This is important for template substitution.
12736 Var->setInitStyle(VarDecl::CallInit);
12737 } else if (Init.isInvalid()) {
12738 // If default-init fails, attach a recovery-expr initializer to track
12739 // that initialization was attempted and failed.
12740 auto RecoveryExpr =
12741 CreateRecoveryExpr(Var->getLocation(), Var->getLocation(), {});
12742 if (RecoveryExpr.get())
12743 Var->setInit(RecoveryExpr.get());
12744 }
12745
12746 CheckCompleteVariableDeclaration(Var);
12747 }
12748 }
12749
ActOnCXXForRangeDecl(Decl * D)12750 void Sema::ActOnCXXForRangeDecl(Decl *D) {
12751 // If there is no declaration, there was an error parsing it. Ignore it.
12752 if (!D)
12753 return;
12754
12755 VarDecl *VD = dyn_cast<VarDecl>(D);
12756 if (!VD) {
12757 Diag(D->getLocation(), diag::err_for_range_decl_must_be_var);
12758 D->setInvalidDecl();
12759 return;
12760 }
12761
12762 VD->setCXXForRangeDecl(true);
12763
12764 // for-range-declaration cannot be given a storage class specifier.
12765 int Error = -1;
12766 switch (VD->getStorageClass()) {
12767 case SC_None:
12768 break;
12769 case SC_Extern:
12770 Error = 0;
12771 break;
12772 case SC_Static:
12773 Error = 1;
12774 break;
12775 case SC_PrivateExtern:
12776 Error = 2;
12777 break;
12778 case SC_Auto:
12779 Error = 3;
12780 break;
12781 case SC_Register:
12782 Error = 4;
12783 break;
12784 }
12785
12786 // for-range-declaration cannot be given a storage class specifier con't.
12787 switch (VD->getTSCSpec()) {
12788 case TSCS_thread_local:
12789 Error = 6;
12790 break;
12791 case TSCS___thread:
12792 case TSCS__Thread_local:
12793 case TSCS_unspecified:
12794 break;
12795 }
12796
12797 if (Error != -1) {
12798 Diag(VD->getOuterLocStart(), diag::err_for_range_storage_class)
12799 << VD << Error;
12800 D->setInvalidDecl();
12801 }
12802 }
12803
12804 StmtResult
ActOnCXXForRangeIdentifier(Scope * S,SourceLocation IdentLoc,IdentifierInfo * Ident,ParsedAttributes & Attrs,SourceLocation AttrEnd)12805 Sema::ActOnCXXForRangeIdentifier(Scope *S, SourceLocation IdentLoc,
12806 IdentifierInfo *Ident,
12807 ParsedAttributes &Attrs,
12808 SourceLocation AttrEnd) {
12809 // C++1y [stmt.iter]p1:
12810 // A range-based for statement of the form
12811 // for ( for-range-identifier : for-range-initializer ) statement
12812 // is equivalent to
12813 // for ( auto&& for-range-identifier : for-range-initializer ) statement
12814 DeclSpec DS(Attrs.getPool().getFactory());
12815
12816 const char *PrevSpec;
12817 unsigned DiagID;
12818 DS.SetTypeSpecType(DeclSpec::TST_auto, IdentLoc, PrevSpec, DiagID,
12819 getPrintingPolicy());
12820
12821 Declarator D(DS, DeclaratorContext::ForInit);
12822 D.SetIdentifier(Ident, IdentLoc);
12823 D.takeAttributes(Attrs, AttrEnd);
12824
12825 D.AddTypeInfo(DeclaratorChunk::getReference(0, IdentLoc, /*lvalue*/ false),
12826 IdentLoc);
12827 Decl *Var = ActOnDeclarator(S, D);
12828 cast<VarDecl>(Var)->setCXXForRangeDecl(true);
12829 FinalizeDeclaration(Var);
12830 return ActOnDeclStmt(FinalizeDeclaratorGroup(S, DS, Var), IdentLoc,
12831 AttrEnd.isValid() ? AttrEnd : IdentLoc);
12832 }
12833
CheckCompleteVariableDeclaration(VarDecl * var)12834 void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {
12835 if (var->isInvalidDecl()) return;
12836
12837 if (getLangOpts().OpenCL) {
12838 // OpenCL v2.0 s6.12.5 - Every block variable declaration must have an
12839 // initialiser
12840 if (var->getTypeSourceInfo()->getType()->isBlockPointerType() &&
12841 !var->hasInit()) {
12842 Diag(var->getLocation(), diag::err_opencl_invalid_block_declaration)
12843 << 1 /*Init*/;
12844 var->setInvalidDecl();
12845 return;
12846 }
12847 }
12848
12849 // In Objective-C, don't allow jumps past the implicit initialization of a
12850 // local retaining variable.
12851 if (getLangOpts().ObjC &&
12852 var->hasLocalStorage()) {
12853 switch (var->getType().getObjCLifetime()) {
12854 case Qualifiers::OCL_None:
12855 case Qualifiers::OCL_ExplicitNone:
12856 case Qualifiers::OCL_Autoreleasing:
12857 break;
12858
12859 case Qualifiers::OCL_Weak:
12860 case Qualifiers::OCL_Strong:
12861 setFunctionHasBranchProtectedScope();
12862 break;
12863 }
12864 }
12865
12866 if (var->hasLocalStorage() &&
12867 var->getType().isDestructedType() == QualType::DK_nontrivial_c_struct)
12868 setFunctionHasBranchProtectedScope();
12869
12870 // Warn about externally-visible variables being defined without a
12871 // prior declaration. We only want to do this for global
12872 // declarations, but we also specifically need to avoid doing it for
12873 // class members because the linkage of an anonymous class can
12874 // change if it's later given a typedef name.
12875 if (var->isThisDeclarationADefinition() &&
12876 var->getDeclContext()->getRedeclContext()->isFileContext() &&
12877 var->isExternallyVisible() && var->hasLinkage() &&
12878 !var->isInline() && !var->getDescribedVarTemplate() &&
12879 !isa<VarTemplatePartialSpecializationDecl>(var) &&
12880 !isTemplateInstantiation(var->getTemplateSpecializationKind()) &&
12881 !getDiagnostics().isIgnored(diag::warn_missing_variable_declarations,
12882 var->getLocation())) {
12883 // Find a previous declaration that's not a definition.
12884 VarDecl *prev = var->getPreviousDecl();
12885 while (prev && prev->isThisDeclarationADefinition())
12886 prev = prev->getPreviousDecl();
12887
12888 if (!prev) {
12889 Diag(var->getLocation(), diag::warn_missing_variable_declarations) << var;
12890 Diag(var->getTypeSpecStartLoc(), diag::note_static_for_internal_linkage)
12891 << /* variable */ 0;
12892 }
12893 }
12894
12895 // Cache the result of checking for constant initialization.
12896 Optional<bool> CacheHasConstInit;
12897 const Expr *CacheCulprit = nullptr;
12898 auto checkConstInit = [&]() mutable {
12899 if (!CacheHasConstInit)
12900 CacheHasConstInit = var->getInit()->isConstantInitializer(
12901 Context, var->getType()->isReferenceType(), &CacheCulprit);
12902 return *CacheHasConstInit;
12903 };
12904
12905 if (var->getTLSKind() == VarDecl::TLS_Static) {
12906 if (var->getType().isDestructedType()) {
12907 // GNU C++98 edits for __thread, [basic.start.term]p3:
12908 // The type of an object with thread storage duration shall not
12909 // have a non-trivial destructor.
12910 Diag(var->getLocation(), diag::err_thread_nontrivial_dtor);
12911 if (getLangOpts().CPlusPlus11)
12912 Diag(var->getLocation(), diag::note_use_thread_local);
12913 } else if (getLangOpts().CPlusPlus && var->hasInit()) {
12914 if (!checkConstInit()) {
12915 // GNU C++98 edits for __thread, [basic.start.init]p4:
12916 // An object of thread storage duration shall not require dynamic
12917 // initialization.
12918 // FIXME: Need strict checking here.
12919 Diag(CacheCulprit->getExprLoc(), diag::err_thread_dynamic_init)
12920 << CacheCulprit->getSourceRange();
12921 if (getLangOpts().CPlusPlus11)
12922 Diag(var->getLocation(), diag::note_use_thread_local);
12923 }
12924 }
12925 }
12926
12927 // Apply section attributes and pragmas to global variables.
12928 bool GlobalStorage = var->hasGlobalStorage();
12929 if (GlobalStorage && var->isThisDeclarationADefinition() &&
12930 !inTemplateInstantiation()) {
12931 PragmaStack<StringLiteral *> *Stack = nullptr;
12932 int SectionFlags = ASTContext::PSF_Read;
12933 if (var->getType().isConstQualified())
12934 Stack = &ConstSegStack;
12935 else if (!var->getInit()) {
12936 Stack = &BSSSegStack;
12937 SectionFlags |= ASTContext::PSF_Write;
12938 } else {
12939 Stack = &DataSegStack;
12940 SectionFlags |= ASTContext::PSF_Write;
12941 }
12942 if (const SectionAttr *SA = var->getAttr<SectionAttr>()) {
12943 if (SA->getSyntax() == AttributeCommonInfo::AS_Declspec)
12944 SectionFlags |= ASTContext::PSF_Implicit;
12945 UnifySection(SA->getName(), SectionFlags, var);
12946 } else if (Stack->CurrentValue) {
12947 SectionFlags |= ASTContext::PSF_Implicit;
12948 auto SectionName = Stack->CurrentValue->getString();
12949 var->addAttr(SectionAttr::CreateImplicit(
12950 Context, SectionName, Stack->CurrentPragmaLocation,
12951 AttributeCommonInfo::AS_Pragma, SectionAttr::Declspec_allocate));
12952 if (UnifySection(SectionName, SectionFlags, var))
12953 var->dropAttr<SectionAttr>();
12954 }
12955
12956 // Apply the init_seg attribute if this has an initializer. If the
12957 // initializer turns out to not be dynamic, we'll end up ignoring this
12958 // attribute.
12959 if (CurInitSeg && var->getInit())
12960 var->addAttr(InitSegAttr::CreateImplicit(Context, CurInitSeg->getString(),
12961 CurInitSegLoc,
12962 AttributeCommonInfo::AS_Pragma));
12963 }
12964
12965 if (!var->getType()->isStructureType() && var->hasInit() &&
12966 isa<InitListExpr>(var->getInit())) {
12967 const auto *ILE = cast<InitListExpr>(var->getInit());
12968 unsigned NumInits = ILE->getNumInits();
12969 if (NumInits > 2)
12970 for (unsigned I = 0; I < NumInits; ++I) {
12971 const auto *Init = ILE->getInit(I);
12972 if (!Init)
12973 break;
12974 const auto *SL = dyn_cast<StringLiteral>(Init->IgnoreImpCasts());
12975 if (!SL)
12976 break;
12977
12978 unsigned NumConcat = SL->getNumConcatenated();
12979 // Diagnose missing comma in string array initialization.
12980 // Do not warn when all the elements in the initializer are concatenated
12981 // together. Do not warn for macros too.
12982 if (NumConcat == 2 && !SL->getBeginLoc().isMacroID()) {
12983 bool OnlyOneMissingComma = true;
12984 for (unsigned J = I + 1; J < NumInits; ++J) {
12985 const auto *Init = ILE->getInit(J);
12986 if (!Init)
12987 break;
12988 const auto *SLJ = dyn_cast<StringLiteral>(Init->IgnoreImpCasts());
12989 if (!SLJ || SLJ->getNumConcatenated() > 1) {
12990 OnlyOneMissingComma = false;
12991 break;
12992 }
12993 }
12994
12995 if (OnlyOneMissingComma) {
12996 SmallVector<FixItHint, 1> Hints;
12997 for (unsigned i = 0; i < NumConcat - 1; ++i)
12998 Hints.push_back(FixItHint::CreateInsertion(
12999 PP.getLocForEndOfToken(SL->getStrTokenLoc(i)), ","));
13000
13001 Diag(SL->getStrTokenLoc(1),
13002 diag::warn_concatenated_literal_array_init)
13003 << Hints;
13004 Diag(SL->getBeginLoc(),
13005 diag::note_concatenated_string_literal_silence);
13006 }
13007 // In any case, stop now.
13008 break;
13009 }
13010 }
13011 }
13012
13013 // All the following checks are C++ only.
13014 if (!getLangOpts().CPlusPlus) {
13015 // If this variable must be emitted, add it as an initializer for the
13016 // current module.
13017 if (Context.DeclMustBeEmitted(var) && !ModuleScopes.empty())
13018 Context.addModuleInitializer(ModuleScopes.back().Module, var);
13019 return;
13020 }
13021
13022 QualType type = var->getType();
13023
13024 if (var->hasAttr<BlocksAttr>())
13025 getCurFunction()->addByrefBlockVar(var);
13026
13027 Expr *Init = var->getInit();
13028 bool IsGlobal = GlobalStorage && !var->isStaticLocal();
13029 QualType baseType = Context.getBaseElementType(type);
13030
13031 // Check whether the initializer is sufficiently constant.
13032 if (!type->isDependentType() && Init && !Init->isValueDependent() &&
13033 (GlobalStorage || var->isConstexpr() ||
13034 var->mightBeUsableInConstantExpressions(Context))) {
13035 // If this variable might have a constant initializer or might be usable in
13036 // constant expressions, check whether or not it actually is now. We can't
13037 // do this lazily, because the result might depend on things that change
13038 // later, such as which constexpr functions happen to be defined.
13039 SmallVector<PartialDiagnosticAt, 8> Notes;
13040 bool HasConstInit;
13041 if (!getLangOpts().CPlusPlus11) {
13042 // Prior to C++11, in contexts where a constant initializer is required,
13043 // the set of valid constant initializers is described by syntactic rules
13044 // in [expr.const]p2-6.
13045 // FIXME: Stricter checking for these rules would be useful for constinit /
13046 // -Wglobal-constructors.
13047 HasConstInit = checkConstInit();
13048
13049 // Compute and cache the constant value, and remember that we have a
13050 // constant initializer.
13051 if (HasConstInit) {
13052 (void)var->checkForConstantInitialization(Notes);
13053 Notes.clear();
13054 } else if (CacheCulprit) {
13055 Notes.emplace_back(CacheCulprit->getExprLoc(),
13056 PDiag(diag::note_invalid_subexpr_in_const_expr));
13057 Notes.back().second << CacheCulprit->getSourceRange();
13058 }
13059 } else {
13060 // Evaluate the initializer to see if it's a constant initializer.
13061 HasConstInit = var->checkForConstantInitialization(Notes);
13062 }
13063
13064 if (HasConstInit) {
13065 // FIXME: Consider replacing the initializer with a ConstantExpr.
13066 } else if (var->isConstexpr()) {
13067 SourceLocation DiagLoc = var->getLocation();
13068 // If the note doesn't add any useful information other than a source
13069 // location, fold it into the primary diagnostic.
13070 if (Notes.size() == 1 && Notes[0].second.getDiagID() ==
13071 diag::note_invalid_subexpr_in_const_expr) {
13072 DiagLoc = Notes[0].first;
13073 Notes.clear();
13074 }
13075 Diag(DiagLoc, diag::err_constexpr_var_requires_const_init)
13076 << var << Init->getSourceRange();
13077 for (unsigned I = 0, N = Notes.size(); I != N; ++I)
13078 Diag(Notes[I].first, Notes[I].second);
13079 } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {
13080 auto *Attr = var->getAttr<ConstInitAttr>();
13081 Diag(var->getLocation(), diag::err_require_constant_init_failed)
13082 << Init->getSourceRange();
13083 Diag(Attr->getLocation(), diag::note_declared_required_constant_init_here)
13084 << Attr->getRange() << Attr->isConstinit();
13085 for (auto &it : Notes)
13086 Diag(it.first, it.second);
13087 } else if (IsGlobal &&
13088 !getDiagnostics().isIgnored(diag::warn_global_constructor,
13089 var->getLocation())) {
13090 // Warn about globals which don't have a constant initializer. Don't
13091 // warn about globals with a non-trivial destructor because we already
13092 // warned about them.
13093 CXXRecordDecl *RD = baseType->getAsCXXRecordDecl();
13094 if (!(RD && !RD->hasTrivialDestructor())) {
13095 // checkConstInit() here permits trivial default initialization even in
13096 // C++11 onwards, where such an initializer is not a constant initializer
13097 // but nonetheless doesn't require a global constructor.
13098 if (!checkConstInit())
13099 Diag(var->getLocation(), diag::warn_global_constructor)
13100 << Init->getSourceRange();
13101 }
13102 }
13103 }
13104
13105 // Require the destructor.
13106 if (!type->isDependentType())
13107 if (const RecordType *recordType = baseType->getAs<RecordType>())
13108 FinalizeVarWithDestructor(var, recordType);
13109
13110 // If this variable must be emitted, add it as an initializer for the current
13111 // module.
13112 if (Context.DeclMustBeEmitted(var) && !ModuleScopes.empty())
13113 Context.addModuleInitializer(ModuleScopes.back().Module, var);
13114
13115 // Build the bindings if this is a structured binding declaration.
13116 if (auto *DD = dyn_cast<DecompositionDecl>(var))
13117 CheckCompleteDecompositionDeclaration(DD);
13118 }
13119
13120 /// Determines if a variable's alignment is dependent.
hasDependentAlignment(VarDecl * VD)13121 static bool hasDependentAlignment(VarDecl *VD) {
13122 if (VD->getType()->isDependentType())
13123 return true;
13124 for (auto *I : VD->specific_attrs<AlignedAttr>())
13125 if (I->isAlignmentDependent())
13126 return true;
13127 return false;
13128 }
13129
13130 /// Check if VD needs to be dllexport/dllimport due to being in a
13131 /// dllexport/import function.
CheckStaticLocalForDllExport(VarDecl * VD)13132 void Sema::CheckStaticLocalForDllExport(VarDecl *VD) {
13133 assert(VD->isStaticLocal());
13134
13135 auto *FD = dyn_cast_or_null<FunctionDecl>(VD->getParentFunctionOrMethod());
13136
13137 // Find outermost function when VD is in lambda function.
13138 while (FD && !getDLLAttr(FD) &&
13139 !FD->hasAttr<DLLExportStaticLocalAttr>() &&
13140 !FD->hasAttr<DLLImportStaticLocalAttr>()) {
13141 FD = dyn_cast_or_null<FunctionDecl>(FD->getParentFunctionOrMethod());
13142 }
13143
13144 if (!FD)
13145 return;
13146
13147 // Static locals inherit dll attributes from their function.
13148 if (Attr *A = getDLLAttr(FD)) {
13149 auto *NewAttr = cast<InheritableAttr>(A->clone(getASTContext()));
13150 NewAttr->setInherited(true);
13151 VD->addAttr(NewAttr);
13152 } else if (Attr *A = FD->getAttr<DLLExportStaticLocalAttr>()) {
13153 auto *NewAttr = DLLExportAttr::CreateImplicit(getASTContext(), *A);
13154 NewAttr->setInherited(true);
13155 VD->addAttr(NewAttr);
13156
13157 // Export this function to enforce exporting this static variable even
13158 // if it is not used in this compilation unit.
13159 if (!FD->hasAttr<DLLExportAttr>())
13160 FD->addAttr(NewAttr);
13161
13162 } else if (Attr *A = FD->getAttr<DLLImportStaticLocalAttr>()) {
13163 auto *NewAttr = DLLImportAttr::CreateImplicit(getASTContext(), *A);
13164 NewAttr->setInherited(true);
13165 VD->addAttr(NewAttr);
13166 }
13167 }
13168
13169 /// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform
13170 /// any semantic actions necessary after any initializer has been attached.
FinalizeDeclaration(Decl * ThisDecl)13171 void Sema::FinalizeDeclaration(Decl *ThisDecl) {
13172 // Note that we are no longer parsing the initializer for this declaration.
13173 ParsingInitForAutoVars.erase(ThisDecl);
13174
13175 VarDecl *VD = dyn_cast_or_null<VarDecl>(ThisDecl);
13176 if (!VD)
13177 return;
13178
13179 // Apply an implicit SectionAttr if '#pragma clang section bss|data|rodata' is active
13180 if (VD->hasGlobalStorage() && VD->isThisDeclarationADefinition() &&
13181 !inTemplateInstantiation() && !VD->hasAttr<SectionAttr>()) {
13182 if (PragmaClangBSSSection.Valid)
13183 VD->addAttr(PragmaClangBSSSectionAttr::CreateImplicit(
13184 Context, PragmaClangBSSSection.SectionName,
13185 PragmaClangBSSSection.PragmaLocation,
13186 AttributeCommonInfo::AS_Pragma));
13187 if (PragmaClangDataSection.Valid)
13188 VD->addAttr(PragmaClangDataSectionAttr::CreateImplicit(
13189 Context, PragmaClangDataSection.SectionName,
13190 PragmaClangDataSection.PragmaLocation,
13191 AttributeCommonInfo::AS_Pragma));
13192 if (PragmaClangRodataSection.Valid)
13193 VD->addAttr(PragmaClangRodataSectionAttr::CreateImplicit(
13194 Context, PragmaClangRodataSection.SectionName,
13195 PragmaClangRodataSection.PragmaLocation,
13196 AttributeCommonInfo::AS_Pragma));
13197 if (PragmaClangRelroSection.Valid)
13198 VD->addAttr(PragmaClangRelroSectionAttr::CreateImplicit(
13199 Context, PragmaClangRelroSection.SectionName,
13200 PragmaClangRelroSection.PragmaLocation,
13201 AttributeCommonInfo::AS_Pragma));
13202 }
13203
13204 if (auto *DD = dyn_cast<DecompositionDecl>(ThisDecl)) {
13205 for (auto *BD : DD->bindings()) {
13206 FinalizeDeclaration(BD);
13207 }
13208 }
13209
13210 checkAttributesAfterMerging(*this, *VD);
13211
13212 // Perform TLS alignment check here after attributes attached to the variable
13213 // which may affect the alignment have been processed. Only perform the check
13214 // if the target has a maximum TLS alignment (zero means no constraints).
13215 if (unsigned MaxAlign = Context.getTargetInfo().getMaxTLSAlign()) {
13216 // Protect the check so that it's not performed on dependent types and
13217 // dependent alignments (we can't determine the alignment in that case).
13218 if (VD->getTLSKind() && !hasDependentAlignment(VD) &&
13219 !VD->isInvalidDecl()) {
13220 CharUnits MaxAlignChars = Context.toCharUnitsFromBits(MaxAlign);
13221 if (Context.getDeclAlign(VD) > MaxAlignChars) {
13222 Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum)
13223 << (unsigned)Context.getDeclAlign(VD).getQuantity() << VD
13224 << (unsigned)MaxAlignChars.getQuantity();
13225 }
13226 }
13227 }
13228
13229 if (VD->isStaticLocal())
13230 CheckStaticLocalForDllExport(VD);
13231
13232 // Perform check for initializers of device-side global variables.
13233 // CUDA allows empty constructors as initializers (see E.2.3.1, CUDA
13234 // 7.5). We must also apply the same checks to all __shared__
13235 // variables whether they are local or not. CUDA also allows
13236 // constant initializers for __constant__ and __device__ variables.
13237 if (getLangOpts().CUDA)
13238 checkAllowedCUDAInitializer(VD);
13239
13240 // Grab the dllimport or dllexport attribute off of the VarDecl.
13241 const InheritableAttr *DLLAttr = getDLLAttr(VD);
13242
13243 // Imported static data members cannot be defined out-of-line.
13244 if (const auto *IA = dyn_cast_or_null<DLLImportAttr>(DLLAttr)) {
13245 if (VD->isStaticDataMember() && VD->isOutOfLine() &&
13246 VD->isThisDeclarationADefinition()) {
13247 // We allow definitions of dllimport class template static data members
13248 // with a warning.
13249 CXXRecordDecl *Context =
13250 cast<CXXRecordDecl>(VD->getFirstDecl()->getDeclContext());
13251 bool IsClassTemplateMember =
13252 isa<ClassTemplatePartialSpecializationDecl>(Context) ||
13253 Context->getDescribedClassTemplate();
13254
13255 Diag(VD->getLocation(),
13256 IsClassTemplateMember
13257 ? diag::warn_attribute_dllimport_static_field_definition
13258 : diag::err_attribute_dllimport_static_field_definition);
13259 Diag(IA->getLocation(), diag::note_attribute);
13260 if (!IsClassTemplateMember)
13261 VD->setInvalidDecl();
13262 }
13263 }
13264
13265 // dllimport/dllexport variables cannot be thread local, their TLS index
13266 // isn't exported with the variable.
13267 if (DLLAttr && VD->getTLSKind()) {
13268 auto *F = dyn_cast_or_null<FunctionDecl>(VD->getParentFunctionOrMethod());
13269 if (F && getDLLAttr(F)) {
13270 assert(VD->isStaticLocal());
13271 // But if this is a static local in a dlimport/dllexport function, the
13272 // function will never be inlined, which means the var would never be
13273 // imported, so having it marked import/export is safe.
13274 } else {
13275 Diag(VD->getLocation(), diag::err_attribute_dll_thread_local) << VD
13276 << DLLAttr;
13277 VD->setInvalidDecl();
13278 }
13279 }
13280
13281 if (UsedAttr *Attr = VD->getAttr<UsedAttr>()) {
13282 if (!Attr->isInherited() && !VD->isThisDeclarationADefinition()) {
13283 Diag(Attr->getLocation(), diag::warn_attribute_ignored) << Attr;
13284 VD->dropAttr<UsedAttr>();
13285 }
13286 }
13287
13288 const DeclContext *DC = VD->getDeclContext();
13289 // If there's a #pragma GCC visibility in scope, and this isn't a class
13290 // member, set the visibility of this variable.
13291 if (DC->getRedeclContext()->isFileContext() && VD->isExternallyVisible())
13292 AddPushedVisibilityAttribute(VD);
13293
13294 // FIXME: Warn on unused var template partial specializations.
13295 if (VD->isFileVarDecl() && !isa<VarTemplatePartialSpecializationDecl>(VD))
13296 MarkUnusedFileScopedDecl(VD);
13297
13298 // Now we have parsed the initializer and can update the table of magic
13299 // tag values.
13300 if (!VD->hasAttr<TypeTagForDatatypeAttr>() ||
13301 !VD->getType()->isIntegralOrEnumerationType())
13302 return;
13303
13304 for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {
13305 const Expr *MagicValueExpr = VD->getInit();
13306 if (!MagicValueExpr) {
13307 continue;
13308 }
13309 Optional<llvm::APSInt> MagicValueInt;
13310 if (!(MagicValueInt = MagicValueExpr->getIntegerConstantExpr(Context))) {
13311 Diag(I->getRange().getBegin(),
13312 diag::err_type_tag_for_datatype_not_ice)
13313 << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();
13314 continue;
13315 }
13316 if (MagicValueInt->getActiveBits() > 64) {
13317 Diag(I->getRange().getBegin(),
13318 diag::err_type_tag_for_datatype_too_large)
13319 << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();
13320 continue;
13321 }
13322 uint64_t MagicValue = MagicValueInt->getZExtValue();
13323 RegisterTypeTagForDatatype(I->getArgumentKind(),
13324 MagicValue,
13325 I->getMatchingCType(),
13326 I->getLayoutCompatible(),
13327 I->getMustBeNull());
13328 }
13329 }
13330
hasDeducedAuto(DeclaratorDecl * DD)13331 static bool hasDeducedAuto(DeclaratorDecl *DD) {
13332 auto *VD = dyn_cast<VarDecl>(DD);
13333 return VD && !VD->getType()->hasAutoForTrailingReturnType();
13334 }
13335
FinalizeDeclaratorGroup(Scope * S,const DeclSpec & DS,ArrayRef<Decl * > Group)13336 Sema::DeclGroupPtrTy Sema::FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS,
13337 ArrayRef<Decl *> Group) {
13338 SmallVector<Decl*, 8> Decls;
13339
13340 if (DS.isTypeSpecOwned())
13341 Decls.push_back(DS.getRepAsDecl());
13342
13343 DeclaratorDecl *FirstDeclaratorInGroup = nullptr;
13344 DecompositionDecl *FirstDecompDeclaratorInGroup = nullptr;
13345 bool DiagnosedMultipleDecomps = false;
13346 DeclaratorDecl *FirstNonDeducedAutoInGroup = nullptr;
13347 bool DiagnosedNonDeducedAuto = false;
13348
13349 for (unsigned i = 0, e = Group.size(); i != e; ++i) {
13350 if (Decl *D = Group[i]) {
13351 // For declarators, there are some additional syntactic-ish checks we need
13352 // to perform.
13353 if (auto *DD = dyn_cast<DeclaratorDecl>(D)) {
13354 if (!FirstDeclaratorInGroup)
13355 FirstDeclaratorInGroup = DD;
13356 if (!FirstDecompDeclaratorInGroup)
13357 FirstDecompDeclaratorInGroup = dyn_cast<DecompositionDecl>(D);
13358 if (!FirstNonDeducedAutoInGroup && DS.hasAutoTypeSpec() &&
13359 !hasDeducedAuto(DD))
13360 FirstNonDeducedAutoInGroup = DD;
13361
13362 if (FirstDeclaratorInGroup != DD) {
13363 // A decomposition declaration cannot be combined with any other
13364 // declaration in the same group.
13365 if (FirstDecompDeclaratorInGroup && !DiagnosedMultipleDecomps) {
13366 Diag(FirstDecompDeclaratorInGroup->getLocation(),
13367 diag::err_decomp_decl_not_alone)
13368 << FirstDeclaratorInGroup->getSourceRange()
13369 << DD->getSourceRange();
13370 DiagnosedMultipleDecomps = true;
13371 }
13372
13373 // A declarator that uses 'auto' in any way other than to declare a
13374 // variable with a deduced type cannot be combined with any other
13375 // declarator in the same group.
13376 if (FirstNonDeducedAutoInGroup && !DiagnosedNonDeducedAuto) {
13377 Diag(FirstNonDeducedAutoInGroup->getLocation(),
13378 diag::err_auto_non_deduced_not_alone)
13379 << FirstNonDeducedAutoInGroup->getType()
13380 ->hasAutoForTrailingReturnType()
13381 << FirstDeclaratorInGroup->getSourceRange()
13382 << DD->getSourceRange();
13383 DiagnosedNonDeducedAuto = true;
13384 }
13385 }
13386 }
13387
13388 Decls.push_back(D);
13389 }
13390 }
13391
13392 if (DeclSpec::isDeclRep(DS.getTypeSpecType())) {
13393 if (TagDecl *Tag = dyn_cast_or_null<TagDecl>(DS.getRepAsDecl())) {
13394 handleTagNumbering(Tag, S);
13395 if (FirstDeclaratorInGroup && !Tag->hasNameForLinkage() &&
13396 getLangOpts().CPlusPlus)
13397 Context.addDeclaratorForUnnamedTagDecl(Tag, FirstDeclaratorInGroup);
13398 }
13399 }
13400
13401 return BuildDeclaratorGroup(Decls);
13402 }
13403
13404 /// BuildDeclaratorGroup - convert a list of declarations into a declaration
13405 /// group, performing any necessary semantic checking.
13406 Sema::DeclGroupPtrTy
BuildDeclaratorGroup(MutableArrayRef<Decl * > Group)13407 Sema::BuildDeclaratorGroup(MutableArrayRef<Decl *> Group) {
13408 // C++14 [dcl.spec.auto]p7: (DR1347)
13409 // If the type that replaces the placeholder type is not the same in each
13410 // deduction, the program is ill-formed.
13411 if (Group.size() > 1) {
13412 QualType Deduced;
13413 VarDecl *DeducedDecl = nullptr;
13414 for (unsigned i = 0, e = Group.size(); i != e; ++i) {
13415 VarDecl *D = dyn_cast<VarDecl>(Group[i]);
13416 if (!D || D->isInvalidDecl())
13417 break;
13418 DeducedType *DT = D->getType()->getContainedDeducedType();
13419 if (!DT || DT->getDeducedType().isNull())
13420 continue;
13421 if (Deduced.isNull()) {
13422 Deduced = DT->getDeducedType();
13423 DeducedDecl = D;
13424 } else if (!Context.hasSameType(DT->getDeducedType(), Deduced)) {
13425 auto *AT = dyn_cast<AutoType>(DT);
13426 auto Dia = Diag(D->getTypeSourceInfo()->getTypeLoc().getBeginLoc(),
13427 diag::err_auto_different_deductions)
13428 << (AT ? (unsigned)AT->getKeyword() : 3) << Deduced
13429 << DeducedDecl->getDeclName() << DT->getDeducedType()
13430 << D->getDeclName();
13431 if (DeducedDecl->hasInit())
13432 Dia << DeducedDecl->getInit()->getSourceRange();
13433 if (D->getInit())
13434 Dia << D->getInit()->getSourceRange();
13435 D->setInvalidDecl();
13436 break;
13437 }
13438 }
13439 }
13440
13441 ActOnDocumentableDecls(Group);
13442
13443 return DeclGroupPtrTy::make(
13444 DeclGroupRef::Create(Context, Group.data(), Group.size()));
13445 }
13446
ActOnDocumentableDecl(Decl * D)13447 void Sema::ActOnDocumentableDecl(Decl *D) {
13448 ActOnDocumentableDecls(D);
13449 }
13450
ActOnDocumentableDecls(ArrayRef<Decl * > Group)13451 void Sema::ActOnDocumentableDecls(ArrayRef<Decl *> Group) {
13452 // Don't parse the comment if Doxygen diagnostics are ignored.
13453 if (Group.empty() || !Group[0])
13454 return;
13455
13456 if (Diags.isIgnored(diag::warn_doc_param_not_found,
13457 Group[0]->getLocation()) &&
13458 Diags.isIgnored(diag::warn_unknown_comment_command_name,
13459 Group[0]->getLocation()))
13460 return;
13461
13462 if (Group.size() >= 2) {
13463 // This is a decl group. Normally it will contain only declarations
13464 // produced from declarator list. But in case we have any definitions or
13465 // additional declaration references:
13466 // 'typedef struct S {} S;'
13467 // 'typedef struct S *S;'
13468 // 'struct S *pS;'
13469 // FinalizeDeclaratorGroup adds these as separate declarations.
13470 Decl *MaybeTagDecl = Group[0];
13471 if (MaybeTagDecl && isa<TagDecl>(MaybeTagDecl)) {
13472 Group = Group.slice(1);
13473 }
13474 }
13475
13476 // FIMXE: We assume every Decl in the group is in the same file.
13477 // This is false when preprocessor constructs the group from decls in
13478 // different files (e. g. macros or #include).
13479 Context.attachCommentsToJustParsedDecls(Group, &getPreprocessor());
13480 }
13481
13482 /// Common checks for a parameter-declaration that should apply to both function
13483 /// parameters and non-type template parameters.
CheckFunctionOrTemplateParamDeclarator(Scope * S,Declarator & D)13484 void Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {
13485 // Check that there are no default arguments inside the type of this
13486 // parameter.
13487 if (getLangOpts().CPlusPlus)
13488 CheckExtraCXXDefaultArguments(D);
13489
13490 // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).
13491 if (D.getCXXScopeSpec().isSet()) {
13492 Diag(D.getIdentifierLoc(), diag::err_qualified_param_declarator)
13493 << D.getCXXScopeSpec().getRange();
13494 }
13495
13496 // [dcl.meaning]p1: An unqualified-id occurring in a declarator-id shall be a
13497 // simple identifier except [...irrelevant cases...].
13498 switch (D.getName().getKind()) {
13499 case UnqualifiedIdKind::IK_Identifier:
13500 break;
13501
13502 case UnqualifiedIdKind::IK_OperatorFunctionId:
13503 case UnqualifiedIdKind::IK_ConversionFunctionId:
13504 case UnqualifiedIdKind::IK_LiteralOperatorId:
13505 case UnqualifiedIdKind::IK_ConstructorName:
13506 case UnqualifiedIdKind::IK_DestructorName:
13507 case UnqualifiedIdKind::IK_ImplicitSelfParam:
13508 case UnqualifiedIdKind::IK_DeductionGuideName:
13509 Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name)
13510 << GetNameForDeclarator(D).getName();
13511 break;
13512
13513 case UnqualifiedIdKind::IK_TemplateId:
13514 case UnqualifiedIdKind::IK_ConstructorTemplateId:
13515 // GetNameForDeclarator would not produce a useful name in this case.
13516 Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name_template_id);
13517 break;
13518 }
13519 }
13520
13521 /// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()
13522 /// to introduce parameters into function prototype scope.
ActOnParamDeclarator(Scope * S,Declarator & D)13523 Decl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {
13524 const DeclSpec &DS = D.getDeclSpec();
13525
13526 // Verify C99 6.7.5.3p2: The only SCS allowed is 'register'.
13527
13528 // C++03 [dcl.stc]p2 also permits 'auto'.
13529 StorageClass SC = SC_None;
13530 if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {
13531 SC = SC_Register;
13532 // In C++11, the 'register' storage class specifier is deprecated.
13533 // In C++17, it is not allowed, but we tolerate it as an extension.
13534 if (getLangOpts().CPlusPlus11) {
13535 Diag(DS.getStorageClassSpecLoc(),
13536 getLangOpts().CPlusPlus17 ? diag::ext_register_storage_class
13537 : diag::warn_deprecated_register)
13538 << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());
13539 }
13540 } else if (getLangOpts().CPlusPlus &&
13541 DS.getStorageClassSpec() == DeclSpec::SCS_auto) {
13542 SC = SC_Auto;
13543 } else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified) {
13544 Diag(DS.getStorageClassSpecLoc(),
13545 diag::err_invalid_storage_class_in_func_decl);
13546 D.getMutableDeclSpec().ClearStorageClassSpecs();
13547 }
13548
13549 if (DeclSpec::TSCS TSCS = DS.getThreadStorageClassSpec())
13550 Diag(DS.getThreadStorageClassSpecLoc(), diag::err_invalid_thread)
13551 << DeclSpec::getSpecifierName(TSCS);
13552 if (DS.isInlineSpecified())
13553 Diag(DS.getInlineSpecLoc(), diag::err_inline_non_function)
13554 << getLangOpts().CPlusPlus17;
13555 if (DS.hasConstexprSpecifier())
13556 Diag(DS.getConstexprSpecLoc(), diag::err_invalid_constexpr)
13557 << 0 << static_cast<int>(D.getDeclSpec().getConstexprSpecifier());
13558
13559 DiagnoseFunctionSpecifiers(DS);
13560
13561 CheckFunctionOrTemplateParamDeclarator(S, D);
13562
13563 TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
13564 QualType parmDeclType = TInfo->getType();
13565
13566 // Check for redeclaration of parameters, e.g. int foo(int x, int x);
13567 IdentifierInfo *II = D.getIdentifier();
13568 if (II) {
13569 LookupResult R(*this, II, D.getIdentifierLoc(), LookupOrdinaryName,
13570 ForVisibleRedeclaration);
13571 LookupName(R, S);
13572 if (R.isSingleResult()) {
13573 NamedDecl *PrevDecl = R.getFoundDecl();
13574 if (PrevDecl->isTemplateParameter()) {
13575 // Maybe we will complain about the shadowed template parameter.
13576 DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
13577 // Just pretend that we didn't see the previous declaration.
13578 PrevDecl = nullptr;
13579 } else if (S->isDeclScope(PrevDecl)) {
13580 Diag(D.getIdentifierLoc(), diag::err_param_redefinition) << II;
13581 Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
13582
13583 // Recover by removing the name
13584 II = nullptr;
13585 D.SetIdentifier(nullptr, D.getIdentifierLoc());
13586 D.setInvalidType(true);
13587 }
13588 }
13589 }
13590
13591 // Temporarily put parameter variables in the translation unit, not
13592 // the enclosing context. This prevents them from accidentally
13593 // looking like class members in C++.
13594 ParmVarDecl *New =
13595 CheckParameter(Context.getTranslationUnitDecl(), D.getBeginLoc(),
13596 D.getIdentifierLoc(), II, parmDeclType, TInfo, SC);
13597
13598 if (D.isInvalidType())
13599 New->setInvalidDecl();
13600
13601 assert(S->isFunctionPrototypeScope());
13602 assert(S->getFunctionPrototypeDepth() >= 1);
13603 New->setScopeInfo(S->getFunctionPrototypeDepth() - 1,
13604 S->getNextFunctionPrototypeIndex());
13605
13606 // Add the parameter declaration into this scope.
13607 S->AddDecl(New);
13608 if (II)
13609 IdResolver.AddDecl(New);
13610
13611 ProcessDeclAttributes(S, New, D);
13612
13613 if (D.getDeclSpec().isModulePrivateSpecified())
13614 Diag(New->getLocation(), diag::err_module_private_local)
13615 << 1 << New << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc())
13616 << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());
13617
13618 if (New->hasAttr<BlocksAttr>()) {
13619 Diag(New->getLocation(), diag::err_block_on_nonlocal);
13620 }
13621
13622 if (getLangOpts().OpenCL)
13623 deduceOpenCLAddressSpace(New);
13624
13625 return New;
13626 }
13627
13628 /// Synthesizes a variable for a parameter arising from a
13629 /// typedef.
BuildParmVarDeclForTypedef(DeclContext * DC,SourceLocation Loc,QualType T)13630 ParmVarDecl *Sema::BuildParmVarDeclForTypedef(DeclContext *DC,
13631 SourceLocation Loc,
13632 QualType T) {
13633 /* FIXME: setting StartLoc == Loc.
13634 Would it be worth to modify callers so as to provide proper source
13635 location for the unnamed parameters, embedding the parameter's type? */
13636 ParmVarDecl *Param = ParmVarDecl::Create(Context, DC, Loc, Loc, nullptr,
13637 T, Context.getTrivialTypeSourceInfo(T, Loc),
13638 SC_None, nullptr);
13639 Param->setImplicit();
13640 return Param;
13641 }
13642
DiagnoseUnusedParameters(ArrayRef<ParmVarDecl * > Parameters)13643 void Sema::DiagnoseUnusedParameters(ArrayRef<ParmVarDecl *> Parameters) {
13644 // Don't diagnose unused-parameter errors in template instantiations; we
13645 // will already have done so in the template itself.
13646 if (inTemplateInstantiation())
13647 return;
13648
13649 for (const ParmVarDecl *Parameter : Parameters) {
13650 if (!Parameter->isReferenced() && Parameter->getDeclName() &&
13651 !Parameter->hasAttr<UnusedAttr>()) {
13652 Diag(Parameter->getLocation(), diag::warn_unused_parameter)
13653 << Parameter->getDeclName();
13654 }
13655 }
13656 }
13657
DiagnoseSizeOfParametersAndReturnValue(ArrayRef<ParmVarDecl * > Parameters,QualType ReturnTy,NamedDecl * D)13658 void Sema::DiagnoseSizeOfParametersAndReturnValue(
13659 ArrayRef<ParmVarDecl *> Parameters, QualType ReturnTy, NamedDecl *D) {
13660 if (LangOpts.NumLargeByValueCopy == 0) // No check.
13661 return;
13662
13663 // Warn if the return value is pass-by-value and larger than the specified
13664 // threshold.
13665 if (!ReturnTy->isDependentType() && ReturnTy.isPODType(Context)) {
13666 unsigned Size = Context.getTypeSizeInChars(ReturnTy).getQuantity();
13667 if (Size > LangOpts.NumLargeByValueCopy)
13668 Diag(D->getLocation(), diag::warn_return_value_size) << D << Size;
13669 }
13670
13671 // Warn if any parameter is pass-by-value and larger than the specified
13672 // threshold.
13673 for (const ParmVarDecl *Parameter : Parameters) {
13674 QualType T = Parameter->getType();
13675 if (T->isDependentType() || !T.isPODType(Context))
13676 continue;
13677 unsigned Size = Context.getTypeSizeInChars(T).getQuantity();
13678 if (Size > LangOpts.NumLargeByValueCopy)
13679 Diag(Parameter->getLocation(), diag::warn_parameter_size)
13680 << Parameter << Size;
13681 }
13682 }
13683
CheckParameter(DeclContext * DC,SourceLocation StartLoc,SourceLocation NameLoc,IdentifierInfo * Name,QualType T,TypeSourceInfo * TSInfo,StorageClass SC)13684 ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc,
13685 SourceLocation NameLoc, IdentifierInfo *Name,
13686 QualType T, TypeSourceInfo *TSInfo,
13687 StorageClass SC) {
13688 // In ARC, infer a lifetime qualifier for appropriate parameter types.
13689 if (getLangOpts().ObjCAutoRefCount &&
13690 T.getObjCLifetime() == Qualifiers::OCL_None &&
13691 T->isObjCLifetimeType()) {
13692
13693 Qualifiers::ObjCLifetime lifetime;
13694
13695 // Special cases for arrays:
13696 // - if it's const, use __unsafe_unretained
13697 // - otherwise, it's an error
13698 if (T->isArrayType()) {
13699 if (!T.isConstQualified()) {
13700 if (DelayedDiagnostics.shouldDelayDiagnostics())
13701 DelayedDiagnostics.add(
13702 sema::DelayedDiagnostic::makeForbiddenType(
13703 NameLoc, diag::err_arc_array_param_no_ownership, T, false));
13704 else
13705 Diag(NameLoc, diag::err_arc_array_param_no_ownership)
13706 << TSInfo->getTypeLoc().getSourceRange();
13707 }
13708 lifetime = Qualifiers::OCL_ExplicitNone;
13709 } else {
13710 lifetime = T->getObjCARCImplicitLifetime();
13711 }
13712 T = Context.getLifetimeQualifiedType(T, lifetime);
13713 }
13714
13715 ParmVarDecl *New = ParmVarDecl::Create(Context, DC, StartLoc, NameLoc, Name,
13716 Context.getAdjustedParameterType(T),
13717 TSInfo, SC, nullptr);
13718
13719 // Make a note if we created a new pack in the scope of a lambda, so that
13720 // we know that references to that pack must also be expanded within the
13721 // lambda scope.
13722 if (New->isParameterPack())
13723 if (auto *LSI = getEnclosingLambda())
13724 LSI->LocalPacks.push_back(New);
13725
13726 if (New->getType().hasNonTrivialToPrimitiveDestructCUnion() ||
13727 New->getType().hasNonTrivialToPrimitiveCopyCUnion())
13728 checkNonTrivialCUnion(New->getType(), New->getLocation(),
13729 NTCUC_FunctionParam, NTCUK_Destruct|NTCUK_Copy);
13730
13731 // Parameters can not be abstract class types.
13732 // For record types, this is done by the AbstractClassUsageDiagnoser once
13733 // the class has been completely parsed.
13734 if (!CurContext->isRecord() &&
13735 RequireNonAbstractType(NameLoc, T, diag::err_abstract_type_in_decl,
13736 AbstractParamType))
13737 New->setInvalidDecl();
13738
13739 // Parameter declarators cannot be interface types. All ObjC objects are
13740 // passed by reference.
13741 if (T->isObjCObjectType()) {
13742 SourceLocation TypeEndLoc =
13743 getLocForEndOfToken(TSInfo->getTypeLoc().getEndLoc());
13744 Diag(NameLoc,
13745 diag::err_object_cannot_be_passed_returned_by_value) << 1 << T
13746 << FixItHint::CreateInsertion(TypeEndLoc, "*");
13747 T = Context.getObjCObjectPointerType(T);
13748 New->setType(T);
13749 }
13750
13751 // ISO/IEC TR 18037 S6.7.3: "The type of an object with automatic storage
13752 // duration shall not be qualified by an address-space qualifier."
13753 // Since all parameters have automatic store duration, they can not have
13754 // an address space.
13755 if (T.getAddressSpace() != LangAS::Default &&
13756 // OpenCL allows function arguments declared to be an array of a type
13757 // to be qualified with an address space.
13758 !(getLangOpts().OpenCL &&
13759 (T->isArrayType() || T.getAddressSpace() == LangAS::opencl_private))) {
13760 Diag(NameLoc, diag::err_arg_with_address_space);
13761 New->setInvalidDecl();
13762 }
13763
13764 // PPC MMA non-pointer types are not allowed as function argument types.
13765 if (Context.getTargetInfo().getTriple().isPPC64() &&
13766 CheckPPCMMAType(New->getOriginalType(), New->getLocation())) {
13767 New->setInvalidDecl();
13768 }
13769
13770 return New;
13771 }
13772
ActOnFinishKNRParamDeclarations(Scope * S,Declarator & D,SourceLocation LocAfterDecls)13773 void Sema::ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D,
13774 SourceLocation LocAfterDecls) {
13775 DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
13776
13777 // Verify 6.9.1p6: 'every identifier in the identifier list shall be declared'
13778 // for a K&R function.
13779 if (!FTI.hasPrototype) {
13780 for (int i = FTI.NumParams; i != 0; /* decrement in loop */) {
13781 --i;
13782 if (FTI.Params[i].Param == nullptr) {
13783 SmallString<256> Code;
13784 llvm::raw_svector_ostream(Code)
13785 << " int " << FTI.Params[i].Ident->getName() << ";\n";
13786 Diag(FTI.Params[i].IdentLoc, diag::ext_param_not_declared)
13787 << FTI.Params[i].Ident
13788 << FixItHint::CreateInsertion(LocAfterDecls, Code);
13789
13790 // Implicitly declare the argument as type 'int' for lack of a better
13791 // type.
13792 AttributeFactory attrs;
13793 DeclSpec DS(attrs);
13794 const char* PrevSpec; // unused
13795 unsigned DiagID; // unused
13796 DS.SetTypeSpecType(DeclSpec::TST_int, FTI.Params[i].IdentLoc, PrevSpec,
13797 DiagID, Context.getPrintingPolicy());
13798 // Use the identifier location for the type source range.
13799 DS.SetRangeStart(FTI.Params[i].IdentLoc);
13800 DS.SetRangeEnd(FTI.Params[i].IdentLoc);
13801 Declarator ParamD(DS, DeclaratorContext::KNRTypeList);
13802 ParamD.SetIdentifier(FTI.Params[i].Ident, FTI.Params[i].IdentLoc);
13803 FTI.Params[i].Param = ActOnParamDeclarator(S, ParamD);
13804 }
13805 }
13806 }
13807 }
13808
13809 Decl *
ActOnStartOfFunctionDef(Scope * FnBodyScope,Declarator & D,MultiTemplateParamsArg TemplateParameterLists,SkipBodyInfo * SkipBody)13810 Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Declarator &D,
13811 MultiTemplateParamsArg TemplateParameterLists,
13812 SkipBodyInfo *SkipBody) {
13813 assert(getCurFunctionDecl() == nullptr && "Function parsing confused");
13814 assert(D.isFunctionDeclarator() && "Not a function declarator!");
13815 Scope *ParentScope = FnBodyScope->getParent();
13816
13817 // Check if we are in an `omp begin/end declare variant` scope. If we are, and
13818 // we define a non-templated function definition, we will create a declaration
13819 // instead (=BaseFD), and emit the definition with a mangled name afterwards.
13820 // The base function declaration will have the equivalent of an `omp declare
13821 // variant` annotation which specifies the mangled definition as a
13822 // specialization function under the OpenMP context defined as part of the
13823 // `omp begin declare variant`.
13824 SmallVector<FunctionDecl *, 4> Bases;
13825 if (LangOpts.OpenMP && isInOpenMPDeclareVariantScope())
13826 ActOnStartOfFunctionDefinitionInOpenMPDeclareVariantScope(
13827 ParentScope, D, TemplateParameterLists, Bases);
13828
13829 D.setFunctionDefinitionKind(FunctionDefinitionKind::Definition);
13830 Decl *DP = HandleDeclarator(ParentScope, D, TemplateParameterLists);
13831 Decl *Dcl = ActOnStartOfFunctionDef(FnBodyScope, DP, SkipBody);
13832
13833 if (!Bases.empty())
13834 ActOnFinishedFunctionDefinitionInOpenMPDeclareVariantScope(Dcl, Bases);
13835
13836 return Dcl;
13837 }
13838
ActOnFinishInlineFunctionDef(FunctionDecl * D)13839 void Sema::ActOnFinishInlineFunctionDef(FunctionDecl *D) {
13840 Consumer.HandleInlineFunctionDefinition(D);
13841 }
13842
13843 static bool
ShouldWarnAboutMissingPrototype(const FunctionDecl * FD,const FunctionDecl * & PossiblePrototype)13844 ShouldWarnAboutMissingPrototype(const FunctionDecl *FD,
13845 const FunctionDecl *&PossiblePrototype) {
13846 // Don't warn about invalid declarations.
13847 if (FD->isInvalidDecl())
13848 return false;
13849
13850 // Or declarations that aren't global.
13851 if (!FD->isGlobal())
13852 return false;
13853
13854 // Don't warn about C++ member functions.
13855 if (isa<CXXMethodDecl>(FD))
13856 return false;
13857
13858 // Don't warn about 'main'.
13859 if (isa<TranslationUnitDecl>(FD->getDeclContext()->getRedeclContext()))
13860 if (IdentifierInfo *II = FD->getIdentifier())
13861 if (II->isStr("main"))
13862 return false;
13863
13864 // Don't warn about inline functions.
13865 if (FD->isInlined())
13866 return false;
13867
13868 // Don't warn about function templates.
13869 if (FD->getDescribedFunctionTemplate())
13870 return false;
13871
13872 // Don't warn about function template specializations.
13873 if (FD->isFunctionTemplateSpecialization())
13874 return false;
13875
13876 // Don't warn for OpenCL kernels.
13877 if (FD->hasAttr<OpenCLKernelAttr>())
13878 return false;
13879
13880 // Don't warn on explicitly deleted functions.
13881 if (FD->isDeleted())
13882 return false;
13883
13884 for (const FunctionDecl *Prev = FD->getPreviousDecl();
13885 Prev; Prev = Prev->getPreviousDecl()) {
13886 // Ignore any declarations that occur in function or method
13887 // scope, because they aren't visible from the header.
13888 if (Prev->getLexicalDeclContext()->isFunctionOrMethod())
13889 continue;
13890
13891 PossiblePrototype = Prev;
13892 return Prev->getType()->isFunctionNoProtoType();
13893 }
13894
13895 return true;
13896 }
13897
13898 void
CheckForFunctionRedefinition(FunctionDecl * FD,const FunctionDecl * EffectiveDefinition,SkipBodyInfo * SkipBody)13899 Sema::CheckForFunctionRedefinition(FunctionDecl *FD,
13900 const FunctionDecl *EffectiveDefinition,
13901 SkipBodyInfo *SkipBody) {
13902 const FunctionDecl *Definition = EffectiveDefinition;
13903 if (!Definition &&
13904 !FD->isDefined(Definition, /*CheckForPendingFriendDefinition*/ true))
13905 return;
13906
13907 if (Definition->getFriendObjectKind() != Decl::FOK_None) {
13908 if (FunctionDecl *OrigDef = Definition->getInstantiatedFromMemberFunction()) {
13909 if (FunctionDecl *OrigFD = FD->getInstantiatedFromMemberFunction()) {
13910 // A merged copy of the same function, instantiated as a member of
13911 // the same class, is OK.
13912 if (declaresSameEntity(OrigFD, OrigDef) &&
13913 declaresSameEntity(cast<Decl>(Definition->getLexicalDeclContext()),
13914 cast<Decl>(FD->getLexicalDeclContext())))
13915 return;
13916 }
13917 }
13918 }
13919
13920 if (canRedefineFunction(Definition, getLangOpts()))
13921 return;
13922
13923 // Don't emit an error when this is redefinition of a typo-corrected
13924 // definition.
13925 if (TypoCorrectedFunctionDefinitions.count(Definition))
13926 return;
13927
13928 // If we don't have a visible definition of the function, and it's inline or
13929 // a template, skip the new definition.
13930 if (SkipBody && !hasVisibleDefinition(Definition) &&
13931 (Definition->getFormalLinkage() == InternalLinkage ||
13932 Definition->isInlined() ||
13933 Definition->getDescribedFunctionTemplate() ||
13934 Definition->getNumTemplateParameterLists())) {
13935 SkipBody->ShouldSkip = true;
13936 SkipBody->Previous = const_cast<FunctionDecl*>(Definition);
13937 if (auto *TD = Definition->getDescribedFunctionTemplate())
13938 makeMergedDefinitionVisible(TD);
13939 makeMergedDefinitionVisible(const_cast<FunctionDecl*>(Definition));
13940 return;
13941 }
13942
13943 if (getLangOpts().GNUMode && Definition->isInlineSpecified() &&
13944 Definition->getStorageClass() == SC_Extern)
13945 Diag(FD->getLocation(), diag::err_redefinition_extern_inline)
13946 << FD << getLangOpts().CPlusPlus;
13947 else
13948 Diag(FD->getLocation(), diag::err_redefinition) << FD;
13949
13950 Diag(Definition->getLocation(), diag::note_previous_definition);
13951 FD->setInvalidDecl();
13952 }
13953
RebuildLambdaScopeInfo(CXXMethodDecl * CallOperator,Sema & S)13954 static void RebuildLambdaScopeInfo(CXXMethodDecl *CallOperator,
13955 Sema &S) {
13956 CXXRecordDecl *const LambdaClass = CallOperator->getParent();
13957
13958 LambdaScopeInfo *LSI = S.PushLambdaScope();
13959 LSI->CallOperator = CallOperator;
13960 LSI->Lambda = LambdaClass;
13961 LSI->ReturnType = CallOperator->getReturnType();
13962 const LambdaCaptureDefault LCD = LambdaClass->getLambdaCaptureDefault();
13963
13964 if (LCD == LCD_None)
13965 LSI->ImpCaptureStyle = CapturingScopeInfo::ImpCap_None;
13966 else if (LCD == LCD_ByCopy)
13967 LSI->ImpCaptureStyle = CapturingScopeInfo::ImpCap_LambdaByval;
13968 else if (LCD == LCD_ByRef)
13969 LSI->ImpCaptureStyle = CapturingScopeInfo::ImpCap_LambdaByref;
13970 DeclarationNameInfo DNI = CallOperator->getNameInfo();
13971
13972 LSI->IntroducerRange = DNI.getCXXOperatorNameRange();
13973 LSI->Mutable = !CallOperator->isConst();
13974
13975 // Add the captures to the LSI so they can be noted as already
13976 // captured within tryCaptureVar.
13977 auto I = LambdaClass->field_begin();
13978 for (const auto &C : LambdaClass->captures()) {
13979 if (C.capturesVariable()) {
13980 VarDecl *VD = C.getCapturedVar();
13981 if (VD->isInitCapture())
13982 S.CurrentInstantiationScope->InstantiatedLocal(VD, VD);
13983 const bool ByRef = C.getCaptureKind() == LCK_ByRef;
13984 LSI->addCapture(VD, /*IsBlock*/false, ByRef,
13985 /*RefersToEnclosingVariableOrCapture*/true, C.getLocation(),
13986 /*EllipsisLoc*/C.isPackExpansion()
13987 ? C.getEllipsisLoc() : SourceLocation(),
13988 I->getType(), /*Invalid*/false);
13989
13990 } else if (C.capturesThis()) {
13991 LSI->addThisCapture(/*Nested*/ false, C.getLocation(), I->getType(),
13992 C.getCaptureKind() == LCK_StarThis);
13993 } else {
13994 LSI->addVLATypeCapture(C.getLocation(), I->getCapturedVLAType(),
13995 I->getType());
13996 }
13997 ++I;
13998 }
13999 }
14000
ActOnStartOfFunctionDef(Scope * FnBodyScope,Decl * D,SkipBodyInfo * SkipBody)14001 Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D,
14002 SkipBodyInfo *SkipBody) {
14003 if (!D) {
14004 // Parsing the function declaration failed in some way. Push on a fake scope
14005 // anyway so we can try to parse the function body.
14006 PushFunctionScope();
14007 PushExpressionEvaluationContext(ExprEvalContexts.back().Context);
14008 return D;
14009 }
14010
14011 FunctionDecl *FD = nullptr;
14012
14013 if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D))
14014 FD = FunTmpl->getTemplatedDecl();
14015 else
14016 FD = cast<FunctionDecl>(D);
14017
14018 // Do not push if it is a lambda because one is already pushed when building
14019 // the lambda in ActOnStartOfLambdaDefinition().
14020 if (!isLambdaCallOperator(FD))
14021 PushExpressionEvaluationContext(
14022 FD->isConsteval() ? ExpressionEvaluationContext::ConstantEvaluated
14023 : ExprEvalContexts.back().Context);
14024
14025 // Check for defining attributes before the check for redefinition.
14026 if (const auto *Attr = FD->getAttr<AliasAttr>()) {
14027 Diag(Attr->getLocation(), diag::err_alias_is_definition) << FD << 0;
14028 FD->dropAttr<AliasAttr>();
14029 FD->setInvalidDecl();
14030 }
14031 if (const auto *Attr = FD->getAttr<IFuncAttr>()) {
14032 Diag(Attr->getLocation(), diag::err_alias_is_definition) << FD << 1;
14033 FD->dropAttr<IFuncAttr>();
14034 FD->setInvalidDecl();
14035 }
14036
14037 if (auto *Ctor = dyn_cast<CXXConstructorDecl>(FD)) {
14038 if (Ctor->getTemplateSpecializationKind() == TSK_ExplicitSpecialization &&
14039 Ctor->isDefaultConstructor() &&
14040 Context.getTargetInfo().getCXXABI().isMicrosoft()) {
14041 // If this is an MS ABI dllexport default constructor, instantiate any
14042 // default arguments.
14043 InstantiateDefaultCtorDefaultArgs(Ctor);
14044 }
14045 }
14046
14047 // See if this is a redefinition. If 'will have body' (or similar) is already
14048 // set, then these checks were already performed when it was set.
14049 if (!FD->willHaveBody() && !FD->isLateTemplateParsed() &&
14050 !FD->isThisDeclarationInstantiatedFromAFriendDefinition()) {
14051 CheckForFunctionRedefinition(FD, nullptr, SkipBody);
14052
14053 // If we're skipping the body, we're done. Don't enter the scope.
14054 if (SkipBody && SkipBody->ShouldSkip)
14055 return D;
14056 }
14057
14058 // Mark this function as "will have a body eventually". This lets users to
14059 // call e.g. isInlineDefinitionExternallyVisible while we're still parsing
14060 // this function.
14061 FD->setWillHaveBody();
14062
14063 // If we are instantiating a generic lambda call operator, push
14064 // a LambdaScopeInfo onto the function stack. But use the information
14065 // that's already been calculated (ActOnLambdaExpr) to prime the current
14066 // LambdaScopeInfo.
14067 // When the template operator is being specialized, the LambdaScopeInfo,
14068 // has to be properly restored so that tryCaptureVariable doesn't try
14069 // and capture any new variables. In addition when calculating potential
14070 // captures during transformation of nested lambdas, it is necessary to
14071 // have the LSI properly restored.
14072 if (isGenericLambdaCallOperatorSpecialization(FD)) {
14073 assert(inTemplateInstantiation() &&
14074 "There should be an active template instantiation on the stack "
14075 "when instantiating a generic lambda!");
14076 RebuildLambdaScopeInfo(cast<CXXMethodDecl>(D), *this);
14077 } else {
14078 // Enter a new function scope
14079 PushFunctionScope();
14080 }
14081
14082 // Builtin functions cannot be defined.
14083 if (unsigned BuiltinID = FD->getBuiltinID()) {
14084 if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID) &&
14085 !Context.BuiltinInfo.isPredefinedRuntimeFunction(BuiltinID)) {
14086 Diag(FD->getLocation(), diag::err_builtin_definition) << FD;
14087 FD->setInvalidDecl();
14088 }
14089 }
14090
14091 // The return type of a function definition must be complete
14092 // (C99 6.9.1p3, C++ [dcl.fct]p6).
14093 QualType ResultType = FD->getReturnType();
14094 if (!ResultType->isDependentType() && !ResultType->isVoidType() &&
14095 !FD->isInvalidDecl() &&
14096 RequireCompleteType(FD->getLocation(), ResultType,
14097 diag::err_func_def_incomplete_result))
14098 FD->setInvalidDecl();
14099
14100 if (FnBodyScope)
14101 PushDeclContext(FnBodyScope, FD);
14102
14103 // Check the validity of our function parameters
14104 CheckParmsForFunctionDef(FD->parameters(),
14105 /*CheckParameterNames=*/true);
14106
14107 // Add non-parameter declarations already in the function to the current
14108 // scope.
14109 if (FnBodyScope) {
14110 for (Decl *NPD : FD->decls()) {
14111 auto *NonParmDecl = dyn_cast<NamedDecl>(NPD);
14112 if (!NonParmDecl)
14113 continue;
14114 assert(!isa<ParmVarDecl>(NonParmDecl) &&
14115 "parameters should not be in newly created FD yet");
14116
14117 // If the decl has a name, make it accessible in the current scope.
14118 if (NonParmDecl->getDeclName())
14119 PushOnScopeChains(NonParmDecl, FnBodyScope, /*AddToContext=*/false);
14120
14121 // Similarly, dive into enums and fish their constants out, making them
14122 // accessible in this scope.
14123 if (auto *ED = dyn_cast<EnumDecl>(NonParmDecl)) {
14124 for (auto *EI : ED->enumerators())
14125 PushOnScopeChains(EI, FnBodyScope, /*AddToContext=*/false);
14126 }
14127 }
14128 }
14129
14130 // Introduce our parameters into the function scope
14131 for (auto Param : FD->parameters()) {
14132 Param->setOwningFunction(FD);
14133
14134 // If this has an identifier, add it to the scope stack.
14135 if (Param->getIdentifier() && FnBodyScope) {
14136 CheckShadow(FnBodyScope, Param);
14137
14138 PushOnScopeChains(Param, FnBodyScope);
14139 }
14140 }
14141
14142 // Ensure that the function's exception specification is instantiated.
14143 if (const FunctionProtoType *FPT = FD->getType()->getAs<FunctionProtoType>())
14144 ResolveExceptionSpec(D->getLocation(), FPT);
14145
14146 // dllimport cannot be applied to non-inline function definitions.
14147 if (FD->hasAttr<DLLImportAttr>() && !FD->isInlined() &&
14148 !FD->isTemplateInstantiation()) {
14149 assert(!FD->hasAttr<DLLExportAttr>());
14150 Diag(FD->getLocation(), diag::err_attribute_dllimport_function_definition);
14151 FD->setInvalidDecl();
14152 return D;
14153 }
14154 // We want to attach documentation to original Decl (which might be
14155 // a function template).
14156 ActOnDocumentableDecl(D);
14157 if (getCurLexicalContext()->isObjCContainer() &&
14158 getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl &&
14159 getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation)
14160 Diag(FD->getLocation(), diag::warn_function_def_in_objc_container);
14161
14162 return D;
14163 }
14164
14165 /// Given the set of return statements within a function body,
14166 /// compute the variables that are subject to the named return value
14167 /// optimization.
14168 ///
14169 /// Each of the variables that is subject to the named return value
14170 /// optimization will be marked as NRVO variables in the AST, and any
14171 /// return statement that has a marked NRVO variable as its NRVO candidate can
14172 /// use the named return value optimization.
14173 ///
14174 /// This function applies a very simplistic algorithm for NRVO: if every return
14175 /// statement in the scope of a variable has the same NRVO candidate, that
14176 /// candidate is an NRVO variable.
computeNRVO(Stmt * Body,FunctionScopeInfo * Scope)14177 void Sema::computeNRVO(Stmt *Body, FunctionScopeInfo *Scope) {
14178 ReturnStmt **Returns = Scope->Returns.data();
14179
14180 for (unsigned I = 0, E = Scope->Returns.size(); I != E; ++I) {
14181 if (const VarDecl *NRVOCandidate = Returns[I]->getNRVOCandidate()) {
14182 if (!NRVOCandidate->isNRVOVariable())
14183 Returns[I]->setNRVOCandidate(nullptr);
14184 }
14185 }
14186 }
14187
canDelayFunctionBody(const Declarator & D)14188 bool Sema::canDelayFunctionBody(const Declarator &D) {
14189 // We can't delay parsing the body of a constexpr function template (yet).
14190 if (D.getDeclSpec().hasConstexprSpecifier())
14191 return false;
14192
14193 // We can't delay parsing the body of a function template with a deduced
14194 // return type (yet).
14195 if (D.getDeclSpec().hasAutoTypeSpec()) {
14196 // If the placeholder introduces a non-deduced trailing return type,
14197 // we can still delay parsing it.
14198 if (D.getNumTypeObjects()) {
14199 const auto &Outer = D.getTypeObject(D.getNumTypeObjects() - 1);
14200 if (Outer.Kind == DeclaratorChunk::Function &&
14201 Outer.Fun.hasTrailingReturnType()) {
14202 QualType Ty = GetTypeFromParser(Outer.Fun.getTrailingReturnType());
14203 return Ty.isNull() || !Ty->isUndeducedType();
14204 }
14205 }
14206 return false;
14207 }
14208
14209 return true;
14210 }
14211
canSkipFunctionBody(Decl * D)14212 bool Sema::canSkipFunctionBody(Decl *D) {
14213 // We cannot skip the body of a function (or function template) which is
14214 // constexpr, since we may need to evaluate its body in order to parse the
14215 // rest of the file.
14216 // We cannot skip the body of a function with an undeduced return type,
14217 // because any callers of that function need to know the type.
14218 if (const FunctionDecl *FD = D->getAsFunction()) {
14219 if (FD->isConstexpr())
14220 return false;
14221 // We can't simply call Type::isUndeducedType here, because inside template
14222 // auto can be deduced to a dependent type, which is not considered
14223 // "undeduced".
14224 if (FD->getReturnType()->getContainedDeducedType())
14225 return false;
14226 }
14227 return Consumer.shouldSkipFunctionBody(D);
14228 }
14229
ActOnSkippedFunctionBody(Decl * Decl)14230 Decl *Sema::ActOnSkippedFunctionBody(Decl *Decl) {
14231 if (!Decl)
14232 return nullptr;
14233 if (FunctionDecl *FD = Decl->getAsFunction())
14234 FD->setHasSkippedBody();
14235 else if (ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(Decl))
14236 MD->setHasSkippedBody();
14237 return Decl;
14238 }
14239
ActOnFinishFunctionBody(Decl * D,Stmt * BodyArg)14240 Decl *Sema::ActOnFinishFunctionBody(Decl *D, Stmt *BodyArg) {
14241 return ActOnFinishFunctionBody(D, BodyArg, false);
14242 }
14243
14244 /// RAII object that pops an ExpressionEvaluationContext when exiting a function
14245 /// body.
14246 class ExitFunctionBodyRAII {
14247 public:
ExitFunctionBodyRAII(Sema & S,bool IsLambda)14248 ExitFunctionBodyRAII(Sema &S, bool IsLambda) : S(S), IsLambda(IsLambda) {}
~ExitFunctionBodyRAII()14249 ~ExitFunctionBodyRAII() {
14250 if (!IsLambda)
14251 S.PopExpressionEvaluationContext();
14252 }
14253
14254 private:
14255 Sema &S;
14256 bool IsLambda = false;
14257 };
14258
diagnoseImplicitlyRetainedSelf(Sema & S)14259 static void diagnoseImplicitlyRetainedSelf(Sema &S) {
14260 llvm::DenseMap<const BlockDecl *, bool> EscapeInfo;
14261
14262 auto IsOrNestedInEscapingBlock = [&](const BlockDecl *BD) {
14263 if (EscapeInfo.count(BD))
14264 return EscapeInfo[BD];
14265
14266 bool R = false;
14267 const BlockDecl *CurBD = BD;
14268
14269 do {
14270 R = !CurBD->doesNotEscape();
14271 if (R)
14272 break;
14273 CurBD = CurBD->getParent()->getInnermostBlockDecl();
14274 } while (CurBD);
14275
14276 return EscapeInfo[BD] = R;
14277 };
14278
14279 // If the location where 'self' is implicitly retained is inside a escaping
14280 // block, emit a diagnostic.
14281 for (const std::pair<SourceLocation, const BlockDecl *> &P :
14282 S.ImplicitlyRetainedSelfLocs)
14283 if (IsOrNestedInEscapingBlock(P.second))
14284 S.Diag(P.first, diag::warn_implicitly_retains_self)
14285 << FixItHint::CreateInsertion(P.first, "self->");
14286 }
14287
ActOnFinishFunctionBody(Decl * dcl,Stmt * Body,bool IsInstantiation)14288 Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body,
14289 bool IsInstantiation) {
14290 FunctionScopeInfo *FSI = getCurFunction();
14291 FunctionDecl *FD = dcl ? dcl->getAsFunction() : nullptr;
14292
14293 if (FSI->UsesFPIntrin && !FD->hasAttr<StrictFPAttr>())
14294 FD->addAttr(StrictFPAttr::CreateImplicit(Context));
14295
14296 sema::AnalysisBasedWarnings::Policy WP = AnalysisWarnings.getDefaultPolicy();
14297 sema::AnalysisBasedWarnings::Policy *ActivePolicy = nullptr;
14298
14299 if (getLangOpts().Coroutines && FSI->isCoroutine())
14300 CheckCompletedCoroutineBody(FD, Body);
14301
14302 // Do not call PopExpressionEvaluationContext() if it is a lambda because one
14303 // is already popped when finishing the lambda in BuildLambdaExpr(). This is
14304 // meant to pop the context added in ActOnStartOfFunctionDef().
14305 ExitFunctionBodyRAII ExitRAII(*this, isLambdaCallOperator(FD));
14306
14307 if (FD) {
14308 FD->setBody(Body);
14309 FD->setWillHaveBody(false);
14310
14311 if (getLangOpts().CPlusPlus14) {
14312 if (!FD->isInvalidDecl() && Body && !FD->isDependentContext() &&
14313 FD->getReturnType()->isUndeducedType()) {
14314 // If the function has a deduced result type but contains no 'return'
14315 // statements, the result type as written must be exactly 'auto', and
14316 // the deduced result type is 'void'.
14317 if (!FD->getReturnType()->getAs<AutoType>()) {
14318 Diag(dcl->getLocation(), diag::err_auto_fn_no_return_but_not_auto)
14319 << FD->getReturnType();
14320 FD->setInvalidDecl();
14321 } else {
14322 // Substitute 'void' for the 'auto' in the type.
14323 TypeLoc ResultType = getReturnTypeLoc(FD);
14324 Context.adjustDeducedFunctionResultType(
14325 FD, SubstAutoType(ResultType.getType(), Context.VoidTy));
14326 }
14327 }
14328 } else if (getLangOpts().CPlusPlus11 && isLambdaCallOperator(FD)) {
14329 // In C++11, we don't use 'auto' deduction rules for lambda call
14330 // operators because we don't support return type deduction.
14331 auto *LSI = getCurLambda();
14332 if (LSI->HasImplicitReturnType) {
14333 deduceClosureReturnType(*LSI);
14334
14335 // C++11 [expr.prim.lambda]p4:
14336 // [...] if there are no return statements in the compound-statement
14337 // [the deduced type is] the type void
14338 QualType RetType =
14339 LSI->ReturnType.isNull() ? Context.VoidTy : LSI->ReturnType;
14340
14341 // Update the return type to the deduced type.
14342 const auto *Proto = FD->getType()->castAs<FunctionProtoType>();
14343 FD->setType(Context.getFunctionType(RetType, Proto->getParamTypes(),
14344 Proto->getExtProtoInfo()));
14345 }
14346 }
14347
14348 // If the function implicitly returns zero (like 'main') or is naked,
14349 // don't complain about missing return statements.
14350 if (FD->hasImplicitReturnZero() || FD->hasAttr<NakedAttr>())
14351 WP.disableCheckFallThrough();
14352
14353 // MSVC permits the use of pure specifier (=0) on function definition,
14354 // defined at class scope, warn about this non-standard construct.
14355 if (getLangOpts().MicrosoftExt && FD->isPure() && !FD->isOutOfLine())
14356 Diag(FD->getLocation(), diag::ext_pure_function_definition);
14357
14358 if (!FD->isInvalidDecl()) {
14359 // Don't diagnose unused parameters of defaulted or deleted functions.
14360 if (!FD->isDeleted() && !FD->isDefaulted() && !FD->hasSkippedBody())
14361 DiagnoseUnusedParameters(FD->parameters());
14362 DiagnoseSizeOfParametersAndReturnValue(FD->parameters(),
14363 FD->getReturnType(), FD);
14364
14365 // If this is a structor, we need a vtable.
14366 if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(FD))
14367 MarkVTableUsed(FD->getLocation(), Constructor->getParent());
14368 else if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(FD))
14369 MarkVTableUsed(FD->getLocation(), Destructor->getParent());
14370
14371 // Try to apply the named return value optimization. We have to check
14372 // if we can do this here because lambdas keep return statements around
14373 // to deduce an implicit return type.
14374 if (FD->getReturnType()->isRecordType() &&
14375 (!getLangOpts().CPlusPlus || !FD->isDependentContext()))
14376 computeNRVO(Body, FSI);
14377 }
14378
14379 // GNU warning -Wmissing-prototypes:
14380 // Warn if a global function is defined without a previous
14381 // prototype declaration. This warning is issued even if the
14382 // definition itself provides a prototype. The aim is to detect
14383 // global functions that fail to be declared in header files.
14384 const FunctionDecl *PossiblePrototype = nullptr;
14385 if (ShouldWarnAboutMissingPrototype(FD, PossiblePrototype)) {
14386 Diag(FD->getLocation(), diag::warn_missing_prototype) << FD;
14387
14388 if (PossiblePrototype) {
14389 // We found a declaration that is not a prototype,
14390 // but that could be a zero-parameter prototype
14391 if (TypeSourceInfo *TI = PossiblePrototype->getTypeSourceInfo()) {
14392 TypeLoc TL = TI->getTypeLoc();
14393 if (FunctionNoProtoTypeLoc FTL = TL.getAs<FunctionNoProtoTypeLoc>())
14394 Diag(PossiblePrototype->getLocation(),
14395 diag::note_declaration_not_a_prototype)
14396 << (FD->getNumParams() != 0)
14397 << (FD->getNumParams() == 0
14398 ? FixItHint::CreateInsertion(FTL.getRParenLoc(), "void")
14399 : FixItHint{});
14400 }
14401 } else {
14402 // Returns true if the token beginning at this Loc is `const`.
14403 auto isLocAtConst = [&](SourceLocation Loc, const SourceManager &SM,
14404 const LangOptions &LangOpts) {
14405 std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc);
14406 if (LocInfo.first.isInvalid())
14407 return false;
14408
14409 bool Invalid = false;
14410 StringRef Buffer = SM.getBufferData(LocInfo.first, &Invalid);
14411 if (Invalid)
14412 return false;
14413
14414 if (LocInfo.second > Buffer.size())
14415 return false;
14416
14417 const char *LexStart = Buffer.data() + LocInfo.second;
14418 StringRef StartTok(LexStart, Buffer.size() - LocInfo.second);
14419
14420 return StartTok.consume_front("const") &&
14421 (StartTok.empty() || isWhitespace(StartTok[0]) ||
14422 StartTok.startswith("/*") || StartTok.startswith("//"));
14423 };
14424
14425 auto findBeginLoc = [&]() {
14426 // If the return type has `const` qualifier, we want to insert
14427 // `static` before `const` (and not before the typename).
14428 if ((FD->getReturnType()->isAnyPointerType() &&
14429 FD->getReturnType()->getPointeeType().isConstQualified()) ||
14430 FD->getReturnType().isConstQualified()) {
14431 // But only do this if we can determine where the `const` is.
14432
14433 if (isLocAtConst(FD->getBeginLoc(), getSourceManager(),
14434 getLangOpts()))
14435
14436 return FD->getBeginLoc();
14437 }
14438 return FD->getTypeSpecStartLoc();
14439 };
14440 Diag(FD->getTypeSpecStartLoc(), diag::note_static_for_internal_linkage)
14441 << /* function */ 1
14442 << (FD->getStorageClass() == SC_None
14443 ? FixItHint::CreateInsertion(findBeginLoc(), "static ")
14444 : FixItHint{});
14445 }
14446
14447 // GNU warning -Wstrict-prototypes
14448 // Warn if K&R function is defined without a previous declaration.
14449 // This warning is issued only if the definition itself does not provide
14450 // a prototype. Only K&R definitions do not provide a prototype.
14451 if (!FD->hasWrittenPrototype()) {
14452 TypeSourceInfo *TI = FD->getTypeSourceInfo();
14453 TypeLoc TL = TI->getTypeLoc();
14454 FunctionTypeLoc FTL = TL.getAsAdjusted<FunctionTypeLoc>();
14455 Diag(FTL.getLParenLoc(), diag::warn_strict_prototypes) << 2;
14456 }
14457 }
14458
14459 // Warn on CPUDispatch with an actual body.
14460 if (FD->isMultiVersion() && FD->hasAttr<CPUDispatchAttr>() && Body)
14461 if (const auto *CmpndBody = dyn_cast<CompoundStmt>(Body))
14462 if (!CmpndBody->body_empty())
14463 Diag(CmpndBody->body_front()->getBeginLoc(),
14464 diag::warn_dispatch_body_ignored);
14465
14466 if (auto *MD = dyn_cast<CXXMethodDecl>(FD)) {
14467 const CXXMethodDecl *KeyFunction;
14468 if (MD->isOutOfLine() && (MD = MD->getCanonicalDecl()) &&
14469 MD->isVirtual() &&
14470 (KeyFunction = Context.getCurrentKeyFunction(MD->getParent())) &&
14471 MD == KeyFunction->getCanonicalDecl()) {
14472 // Update the key-function state if necessary for this ABI.
14473 if (FD->isInlined() &&
14474 !Context.getTargetInfo().getCXXABI().canKeyFunctionBeInline()) {
14475 Context.setNonKeyFunction(MD);
14476
14477 // If the newly-chosen key function is already defined, then we
14478 // need to mark the vtable as used retroactively.
14479 KeyFunction = Context.getCurrentKeyFunction(MD->getParent());
14480 const FunctionDecl *Definition;
14481 if (KeyFunction && KeyFunction->isDefined(Definition))
14482 MarkVTableUsed(Definition->getLocation(), MD->getParent(), true);
14483 } else {
14484 // We just defined they key function; mark the vtable as used.
14485 MarkVTableUsed(FD->getLocation(), MD->getParent(), true);
14486 }
14487 }
14488 }
14489
14490 assert((FD == getCurFunctionDecl() || getCurLambda()->CallOperator == FD) &&
14491 "Function parsing confused");
14492 } else if (ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(dcl)) {
14493 assert(MD == getCurMethodDecl() && "Method parsing confused");
14494 MD->setBody(Body);
14495 if (!MD->isInvalidDecl()) {
14496 DiagnoseSizeOfParametersAndReturnValue(MD->parameters(),
14497 MD->getReturnType(), MD);
14498
14499 if (Body)
14500 computeNRVO(Body, FSI);
14501 }
14502 if (FSI->ObjCShouldCallSuper) {
14503 Diag(MD->getEndLoc(), diag::warn_objc_missing_super_call)
14504 << MD->getSelector().getAsString();
14505 FSI->ObjCShouldCallSuper = false;
14506 }
14507 if (FSI->ObjCWarnForNoDesignatedInitChain) {
14508 const ObjCMethodDecl *InitMethod = nullptr;
14509 bool isDesignated =
14510 MD->isDesignatedInitializerForTheInterface(&InitMethod);
14511 assert(isDesignated && InitMethod);
14512 (void)isDesignated;
14513
14514 auto superIsNSObject = [&](const ObjCMethodDecl *MD) {
14515 auto IFace = MD->getClassInterface();
14516 if (!IFace)
14517 return false;
14518 auto SuperD = IFace->getSuperClass();
14519 if (!SuperD)
14520 return false;
14521 return SuperD->getIdentifier() ==
14522 NSAPIObj->getNSClassId(NSAPI::ClassId_NSObject);
14523 };
14524 // Don't issue this warning for unavailable inits or direct subclasses
14525 // of NSObject.
14526 if (!MD->isUnavailable() && !superIsNSObject(MD)) {
14527 Diag(MD->getLocation(),
14528 diag::warn_objc_designated_init_missing_super_call);
14529 Diag(InitMethod->getLocation(),
14530 diag::note_objc_designated_init_marked_here);
14531 }
14532 FSI->ObjCWarnForNoDesignatedInitChain = false;
14533 }
14534 if (FSI->ObjCWarnForNoInitDelegation) {
14535 // Don't issue this warning for unavaialable inits.
14536 if (!MD->isUnavailable())
14537 Diag(MD->getLocation(),
14538 diag::warn_objc_secondary_init_missing_init_call);
14539 FSI->ObjCWarnForNoInitDelegation = false;
14540 }
14541
14542 diagnoseImplicitlyRetainedSelf(*this);
14543 } else {
14544 // Parsing the function declaration failed in some way. Pop the fake scope
14545 // we pushed on.
14546 PopFunctionScopeInfo(ActivePolicy, dcl);
14547 return nullptr;
14548 }
14549
14550 if (Body && FSI->HasPotentialAvailabilityViolations)
14551 DiagnoseUnguardedAvailabilityViolations(dcl);
14552
14553 assert(!FSI->ObjCShouldCallSuper &&
14554 "This should only be set for ObjC methods, which should have been "
14555 "handled in the block above.");
14556
14557 // Verify and clean out per-function state.
14558 if (Body && (!FD || !FD->isDefaulted())) {
14559 // C++ constructors that have function-try-blocks can't have return
14560 // statements in the handlers of that block. (C++ [except.handle]p14)
14561 // Verify this.
14562 if (FD && isa<CXXConstructorDecl>(FD) && isa<CXXTryStmt>(Body))
14563 DiagnoseReturnInConstructorExceptionHandler(cast<CXXTryStmt>(Body));
14564
14565 // Verify that gotos and switch cases don't jump into scopes illegally.
14566 if (FSI->NeedsScopeChecking() &&
14567 !PP.isCodeCompletionEnabled())
14568 DiagnoseInvalidJumps(Body);
14569
14570 if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(dcl)) {
14571 if (!Destructor->getParent()->isDependentType())
14572 CheckDestructor(Destructor);
14573
14574 MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
14575 Destructor->getParent());
14576 }
14577
14578 // If any errors have occurred, clear out any temporaries that may have
14579 // been leftover. This ensures that these temporaries won't be picked up for
14580 // deletion in some later function.
14581 if (hasUncompilableErrorOccurred() ||
14582 getDiagnostics().getSuppressAllDiagnostics()) {
14583 DiscardCleanupsInEvaluationContext();
14584 }
14585 if (!hasUncompilableErrorOccurred() &&
14586 !isa<FunctionTemplateDecl>(dcl)) {
14587 // Since the body is valid, issue any analysis-based warnings that are
14588 // enabled.
14589 ActivePolicy = &WP;
14590 }
14591
14592 if (!IsInstantiation && FD && FD->isConstexpr() && !FD->isInvalidDecl() &&
14593 !CheckConstexprFunctionDefinition(FD, CheckConstexprKind::Diagnose))
14594 FD->setInvalidDecl();
14595
14596 if (FD && FD->hasAttr<NakedAttr>()) {
14597 for (const Stmt *S : Body->children()) {
14598 // Allow local register variables without initializer as they don't
14599 // require prologue.
14600 bool RegisterVariables = false;
14601 if (auto *DS = dyn_cast<DeclStmt>(S)) {
14602 for (const auto *Decl : DS->decls()) {
14603 if (const auto *Var = dyn_cast<VarDecl>(Decl)) {
14604 RegisterVariables =
14605 Var->hasAttr<AsmLabelAttr>() && !Var->hasInit();
14606 if (!RegisterVariables)
14607 break;
14608 }
14609 }
14610 }
14611 if (RegisterVariables)
14612 continue;
14613 if (!isa<AsmStmt>(S) && !isa<NullStmt>(S)) {
14614 Diag(S->getBeginLoc(), diag::err_non_asm_stmt_in_naked_function);
14615 Diag(FD->getAttr<NakedAttr>()->getLocation(), diag::note_attribute);
14616 FD->setInvalidDecl();
14617 break;
14618 }
14619 }
14620 }
14621
14622 assert(ExprCleanupObjects.size() ==
14623 ExprEvalContexts.back().NumCleanupObjects &&
14624 "Leftover temporaries in function");
14625 assert(!Cleanup.exprNeedsCleanups() && "Unaccounted cleanups in function");
14626 assert(MaybeODRUseExprs.empty() &&
14627 "Leftover expressions for odr-use checking");
14628 }
14629
14630 if (!IsInstantiation)
14631 PopDeclContext();
14632
14633 PopFunctionScopeInfo(ActivePolicy, dcl);
14634 // If any errors have occurred, clear out any temporaries that may have
14635 // been leftover. This ensures that these temporaries won't be picked up for
14636 // deletion in some later function.
14637 if (hasUncompilableErrorOccurred()) {
14638 DiscardCleanupsInEvaluationContext();
14639 }
14640
14641 if (FD && (LangOpts.OpenMP || LangOpts.CUDA || LangOpts.SYCLIsDevice)) {
14642 auto ES = getEmissionStatus(FD);
14643 if (ES == Sema::FunctionEmissionStatus::Emitted ||
14644 ES == Sema::FunctionEmissionStatus::Unknown)
14645 DeclsToCheckForDeferredDiags.push_back(FD);
14646 }
14647
14648 return dcl;
14649 }
14650
14651 /// When we finish delayed parsing of an attribute, we must attach it to the
14652 /// relevant Decl.
ActOnFinishDelayedAttribute(Scope * S,Decl * D,ParsedAttributes & Attrs)14653 void Sema::ActOnFinishDelayedAttribute(Scope *S, Decl *D,
14654 ParsedAttributes &Attrs) {
14655 // Always attach attributes to the underlying decl.
14656 if (TemplateDecl *TD = dyn_cast<TemplateDecl>(D))
14657 D = TD->getTemplatedDecl();
14658 ProcessDeclAttributeList(S, D, Attrs);
14659
14660 if (CXXMethodDecl *Method = dyn_cast_or_null<CXXMethodDecl>(D))
14661 if (Method->isStatic())
14662 checkThisInStaticMemberFunctionAttributes(Method);
14663 }
14664
14665 /// ImplicitlyDefineFunction - An undeclared identifier was used in a function
14666 /// call, forming a call to an implicitly defined function (per C99 6.5.1p2).
ImplicitlyDefineFunction(SourceLocation Loc,IdentifierInfo & II,Scope * S)14667 NamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc,
14668 IdentifierInfo &II, Scope *S) {
14669 // Find the scope in which the identifier is injected and the corresponding
14670 // DeclContext.
14671 // FIXME: C89 does not say what happens if there is no enclosing block scope.
14672 // In that case, we inject the declaration into the translation unit scope
14673 // instead.
14674 Scope *BlockScope = S;
14675 while (!BlockScope->isCompoundStmtScope() && BlockScope->getParent())
14676 BlockScope = BlockScope->getParent();
14677
14678 Scope *ContextScope = BlockScope;
14679 while (!ContextScope->getEntity())
14680 ContextScope = ContextScope->getParent();
14681 ContextRAII SavedContext(*this, ContextScope->getEntity());
14682
14683 // Before we produce a declaration for an implicitly defined
14684 // function, see whether there was a locally-scoped declaration of
14685 // this name as a function or variable. If so, use that
14686 // (non-visible) declaration, and complain about it.
14687 NamedDecl *ExternCPrev = findLocallyScopedExternCDecl(&II);
14688 if (ExternCPrev) {
14689 // We still need to inject the function into the enclosing block scope so
14690 // that later (non-call) uses can see it.
14691 PushOnScopeChains(ExternCPrev, BlockScope, /*AddToContext*/false);
14692
14693 // C89 footnote 38:
14694 // If in fact it is not defined as having type "function returning int",
14695 // the behavior is undefined.
14696 if (!isa<FunctionDecl>(ExternCPrev) ||
14697 !Context.typesAreCompatible(
14698 cast<FunctionDecl>(ExternCPrev)->getType(),
14699 Context.getFunctionNoProtoType(Context.IntTy))) {
14700 Diag(Loc, diag::ext_use_out_of_scope_declaration)
14701 << ExternCPrev << !getLangOpts().C99;
14702 Diag(ExternCPrev->getLocation(), diag::note_previous_declaration);
14703 return ExternCPrev;
14704 }
14705 }
14706
14707 // Extension in C99. Legal in C90, but warn about it.
14708 unsigned diag_id;
14709 if (II.getName().startswith("__builtin_"))
14710 diag_id = diag::warn_builtin_unknown;
14711 // OpenCL v2.0 s6.9.u - Implicit function declaration is not supported.
14712 else if (getLangOpts().OpenCL)
14713 diag_id = diag::err_opencl_implicit_function_decl;
14714 else if (getLangOpts().C99)
14715 diag_id = diag::ext_implicit_function_decl;
14716 else
14717 diag_id = diag::warn_implicit_function_decl;
14718 Diag(Loc, diag_id) << &II;
14719
14720 // If we found a prior declaration of this function, don't bother building
14721 // another one. We've already pushed that one into scope, so there's nothing
14722 // more to do.
14723 if (ExternCPrev)
14724 return ExternCPrev;
14725
14726 // Because typo correction is expensive, only do it if the implicit
14727 // function declaration is going to be treated as an error.
14728 if (Diags.getDiagnosticLevel(diag_id, Loc) >= DiagnosticsEngine::Error) {
14729 TypoCorrection Corrected;
14730 DeclFilterCCC<FunctionDecl> CCC{};
14731 if (S && (Corrected =
14732 CorrectTypo(DeclarationNameInfo(&II, Loc), LookupOrdinaryName,
14733 S, nullptr, CCC, CTK_NonError)))
14734 diagnoseTypo(Corrected, PDiag(diag::note_function_suggestion),
14735 /*ErrorRecovery*/false);
14736 }
14737
14738 // Set a Declarator for the implicit definition: int foo();
14739 const char *Dummy;
14740 AttributeFactory attrFactory;
14741 DeclSpec DS(attrFactory);
14742 unsigned DiagID;
14743 bool Error = DS.SetTypeSpecType(DeclSpec::TST_int, Loc, Dummy, DiagID,
14744 Context.getPrintingPolicy());
14745 (void)Error; // Silence warning.
14746 assert(!Error && "Error setting up implicit decl!");
14747 SourceLocation NoLoc;
14748 Declarator D(DS, DeclaratorContext::Block);
14749 D.AddTypeInfo(DeclaratorChunk::getFunction(/*HasProto=*/false,
14750 /*IsAmbiguous=*/false,
14751 /*LParenLoc=*/NoLoc,
14752 /*Params=*/nullptr,
14753 /*NumParams=*/0,
14754 /*EllipsisLoc=*/NoLoc,
14755 /*RParenLoc=*/NoLoc,
14756 /*RefQualifierIsLvalueRef=*/true,
14757 /*RefQualifierLoc=*/NoLoc,
14758 /*MutableLoc=*/NoLoc, EST_None,
14759 /*ESpecRange=*/SourceRange(),
14760 /*Exceptions=*/nullptr,
14761 /*ExceptionRanges=*/nullptr,
14762 /*NumExceptions=*/0,
14763 /*NoexceptExpr=*/nullptr,
14764 /*ExceptionSpecTokens=*/nullptr,
14765 /*DeclsInPrototype=*/None, Loc,
14766 Loc, D),
14767 std::move(DS.getAttributes()), SourceLocation());
14768 D.SetIdentifier(&II, Loc);
14769
14770 // Insert this function into the enclosing block scope.
14771 FunctionDecl *FD = cast<FunctionDecl>(ActOnDeclarator(BlockScope, D));
14772 FD->setImplicit();
14773
14774 AddKnownFunctionAttributes(FD);
14775
14776 return FD;
14777 }
14778
14779 /// If this function is a C++ replaceable global allocation function
14780 /// (C++2a [basic.stc.dynamic.allocation], C++2a [new.delete]),
14781 /// adds any function attributes that we know a priori based on the standard.
14782 ///
14783 /// We need to check for duplicate attributes both here and where user-written
14784 /// attributes are applied to declarations.
AddKnownFunctionAttributesForReplaceableGlobalAllocationFunction(FunctionDecl * FD)14785 void Sema::AddKnownFunctionAttributesForReplaceableGlobalAllocationFunction(
14786 FunctionDecl *FD) {
14787 if (FD->isInvalidDecl())
14788 return;
14789
14790 if (FD->getDeclName().getCXXOverloadedOperator() != OO_New &&
14791 FD->getDeclName().getCXXOverloadedOperator() != OO_Array_New)
14792 return;
14793
14794 Optional<unsigned> AlignmentParam;
14795 bool IsNothrow = false;
14796 if (!FD->isReplaceableGlobalAllocationFunction(&AlignmentParam, &IsNothrow))
14797 return;
14798
14799 // C++2a [basic.stc.dynamic.allocation]p4:
14800 // An allocation function that has a non-throwing exception specification
14801 // indicates failure by returning a null pointer value. Any other allocation
14802 // function never returns a null pointer value and indicates failure only by
14803 // throwing an exception [...]
14804 if (!IsNothrow && !FD->hasAttr<ReturnsNonNullAttr>())
14805 FD->addAttr(ReturnsNonNullAttr::CreateImplicit(Context, FD->getLocation()));
14806
14807 // C++2a [basic.stc.dynamic.allocation]p2:
14808 // An allocation function attempts to allocate the requested amount of
14809 // storage. [...] If the request succeeds, the value returned by a
14810 // replaceable allocation function is a [...] pointer value p0 different
14811 // from any previously returned value p1 [...]
14812 //
14813 // However, this particular information is being added in codegen,
14814 // because there is an opt-out switch for it (-fno-assume-sane-operator-new)
14815
14816 // C++2a [basic.stc.dynamic.allocation]p2:
14817 // An allocation function attempts to allocate the requested amount of
14818 // storage. If it is successful, it returns the address of the start of a
14819 // block of storage whose length in bytes is at least as large as the
14820 // requested size.
14821 if (!FD->hasAttr<AllocSizeAttr>()) {
14822 FD->addAttr(AllocSizeAttr::CreateImplicit(
14823 Context, /*ElemSizeParam=*/ParamIdx(1, FD),
14824 /*NumElemsParam=*/ParamIdx(), FD->getLocation()));
14825 }
14826
14827 // C++2a [basic.stc.dynamic.allocation]p3:
14828 // For an allocation function [...], the pointer returned on a successful
14829 // call shall represent the address of storage that is aligned as follows:
14830 // (3.1) If the allocation function takes an argument of type
14831 // std::align_val_t, the storage will have the alignment
14832 // specified by the value of this argument.
14833 if (AlignmentParam.hasValue() && !FD->hasAttr<AllocAlignAttr>()) {
14834 FD->addAttr(AllocAlignAttr::CreateImplicit(
14835 Context, ParamIdx(AlignmentParam.getValue(), FD), FD->getLocation()));
14836 }
14837
14838 // FIXME:
14839 // C++2a [basic.stc.dynamic.allocation]p3:
14840 // For an allocation function [...], the pointer returned on a successful
14841 // call shall represent the address of storage that is aligned as follows:
14842 // (3.2) Otherwise, if the allocation function is named operator new[],
14843 // the storage is aligned for any object that does not have
14844 // new-extended alignment ([basic.align]) and is no larger than the
14845 // requested size.
14846 // (3.3) Otherwise, the storage is aligned for any object that does not
14847 // have new-extended alignment and is of the requested size.
14848 }
14849
14850 /// Adds any function attributes that we know a priori based on
14851 /// the declaration of this function.
14852 ///
14853 /// These attributes can apply both to implicitly-declared builtins
14854 /// (like __builtin___printf_chk) or to library-declared functions
14855 /// like NSLog or printf.
14856 ///
14857 /// We need to check for duplicate attributes both here and where user-written
14858 /// attributes are applied to declarations.
AddKnownFunctionAttributes(FunctionDecl * FD)14859 void Sema::AddKnownFunctionAttributes(FunctionDecl *FD) {
14860 if (FD->isInvalidDecl())
14861 return;
14862
14863 // If this is a built-in function, map its builtin attributes to
14864 // actual attributes.
14865 if (unsigned BuiltinID = FD->getBuiltinID()) {
14866 // Handle printf-formatting attributes.
14867 unsigned FormatIdx;
14868 bool HasVAListArg;
14869 if (Context.BuiltinInfo.isPrintfLike(BuiltinID, FormatIdx, HasVAListArg)) {
14870 if (!FD->hasAttr<FormatAttr>()) {
14871 const char *fmt = "printf";
14872 unsigned int NumParams = FD->getNumParams();
14873 if (FormatIdx < NumParams && // NumParams may be 0 (e.g. vfprintf)
14874 FD->getParamDecl(FormatIdx)->getType()->isObjCObjectPointerType())
14875 fmt = "NSString";
14876 FD->addAttr(FormatAttr::CreateImplicit(Context,
14877 &Context.Idents.get(fmt),
14878 FormatIdx+1,
14879 HasVAListArg ? 0 : FormatIdx+2,
14880 FD->getLocation()));
14881 }
14882 }
14883 if (Context.BuiltinInfo.isScanfLike(BuiltinID, FormatIdx,
14884 HasVAListArg)) {
14885 if (!FD->hasAttr<FormatAttr>())
14886 FD->addAttr(FormatAttr::CreateImplicit(Context,
14887 &Context.Idents.get("scanf"),
14888 FormatIdx+1,
14889 HasVAListArg ? 0 : FormatIdx+2,
14890 FD->getLocation()));
14891 }
14892
14893 // Handle automatically recognized callbacks.
14894 SmallVector<int, 4> Encoding;
14895 if (!FD->hasAttr<CallbackAttr>() &&
14896 Context.BuiltinInfo.performsCallback(BuiltinID, Encoding))
14897 FD->addAttr(CallbackAttr::CreateImplicit(
14898 Context, Encoding.data(), Encoding.size(), FD->getLocation()));
14899
14900 // Mark const if we don't care about errno and that is the only thing
14901 // preventing the function from being const. This allows IRgen to use LLVM
14902 // intrinsics for such functions.
14903 if (!getLangOpts().MathErrno && !FD->hasAttr<ConstAttr>() &&
14904 Context.BuiltinInfo.isConstWithoutErrno(BuiltinID))
14905 FD->addAttr(ConstAttr::CreateImplicit(Context, FD->getLocation()));
14906
14907 // We make "fma" on some platforms const because we know it does not set
14908 // errno in those environments even though it could set errno based on the
14909 // C standard.
14910 const llvm::Triple &Trip = Context.getTargetInfo().getTriple();
14911 if ((Trip.isGNUEnvironment() || Trip.isAndroid() || Trip.isOSMSVCRT()) &&
14912 !FD->hasAttr<ConstAttr>()) {
14913 switch (BuiltinID) {
14914 case Builtin::BI__builtin_fma:
14915 case Builtin::BI__builtin_fmaf:
14916 case Builtin::BI__builtin_fmal:
14917 case Builtin::BIfma:
14918 case Builtin::BIfmaf:
14919 case Builtin::BIfmal:
14920 FD->addAttr(ConstAttr::CreateImplicit(Context, FD->getLocation()));
14921 break;
14922 default:
14923 break;
14924 }
14925 }
14926
14927 if (Context.BuiltinInfo.isReturnsTwice(BuiltinID) &&
14928 !FD->hasAttr<ReturnsTwiceAttr>())
14929 FD->addAttr(ReturnsTwiceAttr::CreateImplicit(Context,
14930 FD->getLocation()));
14931 if (Context.BuiltinInfo.isNoThrow(BuiltinID) && !FD->hasAttr<NoThrowAttr>())
14932 FD->addAttr(NoThrowAttr::CreateImplicit(Context, FD->getLocation()));
14933 if (Context.BuiltinInfo.isPure(BuiltinID) && !FD->hasAttr<PureAttr>())
14934 FD->addAttr(PureAttr::CreateImplicit(Context, FD->getLocation()));
14935 if (Context.BuiltinInfo.isConst(BuiltinID) && !FD->hasAttr<ConstAttr>())
14936 FD->addAttr(ConstAttr::CreateImplicit(Context, FD->getLocation()));
14937 if (getLangOpts().CUDA && Context.BuiltinInfo.isTSBuiltin(BuiltinID) &&
14938 !FD->hasAttr<CUDADeviceAttr>() && !FD->hasAttr<CUDAHostAttr>()) {
14939 // Add the appropriate attribute, depending on the CUDA compilation mode
14940 // and which target the builtin belongs to. For example, during host
14941 // compilation, aux builtins are __device__, while the rest are __host__.
14942 if (getLangOpts().CUDAIsDevice !=
14943 Context.BuiltinInfo.isAuxBuiltinID(BuiltinID))
14944 FD->addAttr(CUDADeviceAttr::CreateImplicit(Context, FD->getLocation()));
14945 else
14946 FD->addAttr(CUDAHostAttr::CreateImplicit(Context, FD->getLocation()));
14947 }
14948 }
14949
14950 AddKnownFunctionAttributesForReplaceableGlobalAllocationFunction(FD);
14951
14952 // If C++ exceptions are enabled but we are told extern "C" functions cannot
14953 // throw, add an implicit nothrow attribute to any extern "C" function we come
14954 // across.
14955 if (getLangOpts().CXXExceptions && getLangOpts().ExternCNoUnwind &&
14956 FD->isExternC() && !FD->hasAttr<NoThrowAttr>()) {
14957 const auto *FPT = FD->getType()->getAs<FunctionProtoType>();
14958 if (!FPT || FPT->getExceptionSpecType() == EST_None)
14959 FD->addAttr(NoThrowAttr::CreateImplicit(Context, FD->getLocation()));
14960 }
14961
14962 IdentifierInfo *Name = FD->getIdentifier();
14963 if (!Name)
14964 return;
14965 if ((!getLangOpts().CPlusPlus &&
14966 FD->getDeclContext()->isTranslationUnit()) ||
14967 (isa<LinkageSpecDecl>(FD->getDeclContext()) &&
14968 cast<LinkageSpecDecl>(FD->getDeclContext())->getLanguage() ==
14969 LinkageSpecDecl::lang_c)) {
14970 // Okay: this could be a libc/libm/Objective-C function we know
14971 // about.
14972 } else
14973 return;
14974
14975 if (Name->isStr("asprintf") || Name->isStr("vasprintf")) {
14976 // FIXME: asprintf and vasprintf aren't C99 functions. Should they be
14977 // target-specific builtins, perhaps?
14978 if (!FD->hasAttr<FormatAttr>())
14979 FD->addAttr(FormatAttr::CreateImplicit(Context,
14980 &Context.Idents.get("printf"), 2,
14981 Name->isStr("vasprintf") ? 0 : 3,
14982 FD->getLocation()));
14983 }
14984
14985 if (Name->isStr("__CFStringMakeConstantString")) {
14986 // We already have a __builtin___CFStringMakeConstantString,
14987 // but builds that use -fno-constant-cfstrings don't go through that.
14988 if (!FD->hasAttr<FormatArgAttr>())
14989 FD->addAttr(FormatArgAttr::CreateImplicit(Context, ParamIdx(1, FD),
14990 FD->getLocation()));
14991 }
14992 }
14993
ParseTypedefDecl(Scope * S,Declarator & D,QualType T,TypeSourceInfo * TInfo)14994 TypedefDecl *Sema::ParseTypedefDecl(Scope *S, Declarator &D, QualType T,
14995 TypeSourceInfo *TInfo) {
14996 assert(D.getIdentifier() && "Wrong callback for declspec without declarator");
14997 assert(!T.isNull() && "GetTypeForDeclarator() returned null type");
14998
14999 if (!TInfo) {
15000 assert(D.isInvalidType() && "no declarator info for valid type");
15001 TInfo = Context.getTrivialTypeSourceInfo(T);
15002 }
15003
15004 // Scope manipulation handled by caller.
15005 TypedefDecl *NewTD =
15006 TypedefDecl::Create(Context, CurContext, D.getBeginLoc(),
15007 D.getIdentifierLoc(), D.getIdentifier(), TInfo);
15008
15009 // Bail out immediately if we have an invalid declaration.
15010 if (D.isInvalidType()) {
15011 NewTD->setInvalidDecl();
15012 return NewTD;
15013 }
15014
15015 if (D.getDeclSpec().isModulePrivateSpecified()) {
15016 if (CurContext->isFunctionOrMethod())
15017 Diag(NewTD->getLocation(), diag::err_module_private_local)
15018 << 2 << NewTD
15019 << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc())
15020 << FixItHint::CreateRemoval(
15021 D.getDeclSpec().getModulePrivateSpecLoc());
15022 else
15023 NewTD->setModulePrivate();
15024 }
15025
15026 // C++ [dcl.typedef]p8:
15027 // If the typedef declaration defines an unnamed class (or
15028 // enum), the first typedef-name declared by the declaration
15029 // to be that class type (or enum type) is used to denote the
15030 // class type (or enum type) for linkage purposes only.
15031 // We need to check whether the type was declared in the declaration.
15032 switch (D.getDeclSpec().getTypeSpecType()) {
15033 case TST_enum:
15034 case TST_struct:
15035 case TST_interface:
15036 case TST_union:
15037 case TST_class: {
15038 TagDecl *tagFromDeclSpec = cast<TagDecl>(D.getDeclSpec().getRepAsDecl());
15039 setTagNameForLinkagePurposes(tagFromDeclSpec, NewTD);
15040 break;
15041 }
15042
15043 default:
15044 break;
15045 }
15046
15047 return NewTD;
15048 }
15049
15050 /// Check that this is a valid underlying type for an enum declaration.
CheckEnumUnderlyingType(TypeSourceInfo * TI)15051 bool Sema::CheckEnumUnderlyingType(TypeSourceInfo *TI) {
15052 SourceLocation UnderlyingLoc = TI->getTypeLoc().getBeginLoc();
15053 QualType T = TI->getType();
15054
15055 if (T->isDependentType())
15056 return false;
15057
15058 // This doesn't use 'isIntegralType' despite the error message mentioning
15059 // integral type because isIntegralType would also allow enum types in C.
15060 if (const BuiltinType *BT = T->getAs<BuiltinType>())
15061 if (BT->isInteger())
15062 return false;
15063
15064 if (T->isExtIntType())
15065 return false;
15066
15067 return Diag(UnderlyingLoc, diag::err_enum_invalid_underlying) << T;
15068 }
15069
15070 /// Check whether this is a valid redeclaration of a previous enumeration.
15071 /// \return true if the redeclaration was invalid.
CheckEnumRedeclaration(SourceLocation EnumLoc,bool IsScoped,QualType EnumUnderlyingTy,bool IsFixed,const EnumDecl * Prev)15072 bool Sema::CheckEnumRedeclaration(SourceLocation EnumLoc, bool IsScoped,
15073 QualType EnumUnderlyingTy, bool IsFixed,
15074 const EnumDecl *Prev) {
15075 if (IsScoped != Prev->isScoped()) {
15076 Diag(EnumLoc, diag::err_enum_redeclare_scoped_mismatch)
15077 << Prev->isScoped();
15078 Diag(Prev->getLocation(), diag::note_previous_declaration);
15079 return true;
15080 }
15081
15082 if (IsFixed && Prev->isFixed()) {
15083 if (!EnumUnderlyingTy->isDependentType() &&
15084 !Prev->getIntegerType()->isDependentType() &&
15085 !Context.hasSameUnqualifiedType(EnumUnderlyingTy,
15086 Prev->getIntegerType())) {
15087 // TODO: Highlight the underlying type of the redeclaration.
15088 Diag(EnumLoc, diag::err_enum_redeclare_type_mismatch)
15089 << EnumUnderlyingTy << Prev->getIntegerType();
15090 Diag(Prev->getLocation(), diag::note_previous_declaration)
15091 << Prev->getIntegerTypeRange();
15092 return true;
15093 }
15094 } else if (IsFixed != Prev->isFixed()) {
15095 Diag(EnumLoc, diag::err_enum_redeclare_fixed_mismatch)
15096 << Prev->isFixed();
15097 Diag(Prev->getLocation(), diag::note_previous_declaration);
15098 return true;
15099 }
15100
15101 return false;
15102 }
15103
15104 /// Get diagnostic %select index for tag kind for
15105 /// redeclaration diagnostic message.
15106 /// WARNING: Indexes apply to particular diagnostics only!
15107 ///
15108 /// \returns diagnostic %select index.
getRedeclDiagFromTagKind(TagTypeKind Tag)15109 static unsigned getRedeclDiagFromTagKind(TagTypeKind Tag) {
15110 switch (Tag) {
15111 case TTK_Struct: return 0;
15112 case TTK_Interface: return 1;
15113 case TTK_Class: return 2;
15114 default: llvm_unreachable("Invalid tag kind for redecl diagnostic!");
15115 }
15116 }
15117
15118 /// Determine if tag kind is a class-key compatible with
15119 /// class for redeclaration (class, struct, or __interface).
15120 ///
15121 /// \returns true iff the tag kind is compatible.
isClassCompatTagKind(TagTypeKind Tag)15122 static bool isClassCompatTagKind(TagTypeKind Tag)
15123 {
15124 return Tag == TTK_Struct || Tag == TTK_Class || Tag == TTK_Interface;
15125 }
15126
getNonTagTypeDeclKind(const Decl * PrevDecl,TagTypeKind TTK)15127 Sema::NonTagKind Sema::getNonTagTypeDeclKind(const Decl *PrevDecl,
15128 TagTypeKind TTK) {
15129 if (isa<TypedefDecl>(PrevDecl))
15130 return NTK_Typedef;
15131 else if (isa<TypeAliasDecl>(PrevDecl))
15132 return NTK_TypeAlias;
15133 else if (isa<ClassTemplateDecl>(PrevDecl))
15134 return NTK_Template;
15135 else if (isa<TypeAliasTemplateDecl>(PrevDecl))
15136 return NTK_TypeAliasTemplate;
15137 else if (isa<TemplateTemplateParmDecl>(PrevDecl))
15138 return NTK_TemplateTemplateArgument;
15139 switch (TTK) {
15140 case TTK_Struct:
15141 case TTK_Interface:
15142 case TTK_Class:
15143 return getLangOpts().CPlusPlus ? NTK_NonClass : NTK_NonStruct;
15144 case TTK_Union:
15145 return NTK_NonUnion;
15146 case TTK_Enum:
15147 return NTK_NonEnum;
15148 }
15149 llvm_unreachable("invalid TTK");
15150 }
15151
15152 /// Determine whether a tag with a given kind is acceptable
15153 /// as a redeclaration of the given tag declaration.
15154 ///
15155 /// \returns true if the new tag kind is acceptable, false otherwise.
isAcceptableTagRedeclaration(const TagDecl * Previous,TagTypeKind NewTag,bool isDefinition,SourceLocation NewTagLoc,const IdentifierInfo * Name)15156 bool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous,
15157 TagTypeKind NewTag, bool isDefinition,
15158 SourceLocation NewTagLoc,
15159 const IdentifierInfo *Name) {
15160 // C++ [dcl.type.elab]p3:
15161 // The class-key or enum keyword present in the
15162 // elaborated-type-specifier shall agree in kind with the
15163 // declaration to which the name in the elaborated-type-specifier
15164 // refers. This rule also applies to the form of
15165 // elaborated-type-specifier that declares a class-name or
15166 // friend class since it can be construed as referring to the
15167 // definition of the class. Thus, in any
15168 // elaborated-type-specifier, the enum keyword shall be used to
15169 // refer to an enumeration (7.2), the union class-key shall be
15170 // used to refer to a union (clause 9), and either the class or
15171 // struct class-key shall be used to refer to a class (clause 9)
15172 // declared using the class or struct class-key.
15173 TagTypeKind OldTag = Previous->getTagKind();
15174 if (OldTag != NewTag &&
15175 !(isClassCompatTagKind(OldTag) && isClassCompatTagKind(NewTag)))
15176 return false;
15177
15178 // Tags are compatible, but we might still want to warn on mismatched tags.
15179 // Non-class tags can't be mismatched at this point.
15180 if (!isClassCompatTagKind(NewTag))
15181 return true;
15182
15183 // Declarations for which -Wmismatched-tags is disabled are entirely ignored
15184 // by our warning analysis. We don't want to warn about mismatches with (eg)
15185 // declarations in system headers that are designed to be specialized, but if
15186 // a user asks us to warn, we should warn if their code contains mismatched
15187 // declarations.
15188 auto IsIgnoredLoc = [&](SourceLocation Loc) {
15189 return getDiagnostics().isIgnored(diag::warn_struct_class_tag_mismatch,
15190 Loc);
15191 };
15192 if (IsIgnoredLoc(NewTagLoc))
15193 return true;
15194
15195 auto IsIgnored = [&](const TagDecl *Tag) {
15196 return IsIgnoredLoc(Tag->getLocation());
15197 };
15198 while (IsIgnored(Previous)) {
15199 Previous = Previous->getPreviousDecl();
15200 if (!Previous)
15201 return true;
15202 OldTag = Previous->getTagKind();
15203 }
15204
15205 bool isTemplate = false;
15206 if (const CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Previous))
15207 isTemplate = Record->getDescribedClassTemplate();
15208
15209 if (inTemplateInstantiation()) {
15210 if (OldTag != NewTag) {
15211 // In a template instantiation, do not offer fix-its for tag mismatches
15212 // since they usually mess up the template instead of fixing the problem.
15213 Diag(NewTagLoc, diag::warn_struct_class_tag_mismatch)
15214 << getRedeclDiagFromTagKind(NewTag) << isTemplate << Name
15215 << getRedeclDiagFromTagKind(OldTag);
15216 // FIXME: Note previous location?
15217 }
15218 return true;
15219 }
15220
15221 if (isDefinition) {
15222 // On definitions, check all previous tags and issue a fix-it for each
15223 // one that doesn't match the current tag.
15224 if (Previous->getDefinition()) {
15225 // Don't suggest fix-its for redefinitions.
15226 return true;
15227 }
15228
15229 bool previousMismatch = false;
15230 for (const TagDecl *I : Previous->redecls()) {
15231 if (I->getTagKind() != NewTag) {
15232 // Ignore previous declarations for which the warning was disabled.
15233 if (IsIgnored(I))
15234 continue;
15235
15236 if (!previousMismatch) {
15237 previousMismatch = true;
15238 Diag(NewTagLoc, diag::warn_struct_class_previous_tag_mismatch)
15239 << getRedeclDiagFromTagKind(NewTag) << isTemplate << Name
15240 << getRedeclDiagFromTagKind(I->getTagKind());
15241 }
15242 Diag(I->getInnerLocStart(), diag::note_struct_class_suggestion)
15243 << getRedeclDiagFromTagKind(NewTag)
15244 << FixItHint::CreateReplacement(I->getInnerLocStart(),
15245 TypeWithKeyword::getTagTypeKindName(NewTag));
15246 }
15247 }
15248 return true;
15249 }
15250
15251 // Identify the prevailing tag kind: this is the kind of the definition (if
15252 // there is a non-ignored definition), or otherwise the kind of the prior
15253 // (non-ignored) declaration.
15254 const TagDecl *PrevDef = Previous->getDefinition();
15255 if (PrevDef && IsIgnored(PrevDef))
15256 PrevDef = nullptr;
15257 const TagDecl *Redecl = PrevDef ? PrevDef : Previous;
15258 if (Redecl->getTagKind() != NewTag) {
15259 Diag(NewTagLoc, diag::warn_struct_class_tag_mismatch)
15260 << getRedeclDiagFromTagKind(NewTag) << isTemplate << Name
15261 << getRedeclDiagFromTagKind(OldTag);
15262 Diag(Redecl->getLocation(), diag::note_previous_use);
15263
15264 // If there is a previous definition, suggest a fix-it.
15265 if (PrevDef) {
15266 Diag(NewTagLoc, diag::note_struct_class_suggestion)
15267 << getRedeclDiagFromTagKind(Redecl->getTagKind())
15268 << FixItHint::CreateReplacement(SourceRange(NewTagLoc),
15269 TypeWithKeyword::getTagTypeKindName(Redecl->getTagKind()));
15270 }
15271 }
15272
15273 return true;
15274 }
15275
15276 /// Add a minimal nested name specifier fixit hint to allow lookup of a tag name
15277 /// from an outer enclosing namespace or file scope inside a friend declaration.
15278 /// This should provide the commented out code in the following snippet:
15279 /// namespace N {
15280 /// struct X;
15281 /// namespace M {
15282 /// struct Y { friend struct /*N::*/ X; };
15283 /// }
15284 /// }
createFriendTagNNSFixIt(Sema & SemaRef,NamedDecl * ND,Scope * S,SourceLocation NameLoc)15285 static FixItHint createFriendTagNNSFixIt(Sema &SemaRef, NamedDecl *ND, Scope *S,
15286 SourceLocation NameLoc) {
15287 // While the decl is in a namespace, do repeated lookup of that name and see
15288 // if we get the same namespace back. If we do not, continue until
15289 // translation unit scope, at which point we have a fully qualified NNS.
15290 SmallVector<IdentifierInfo *, 4> Namespaces;
15291 DeclContext *DC = ND->getDeclContext()->getRedeclContext();
15292 for (; !DC->isTranslationUnit(); DC = DC->getParent()) {
15293 // This tag should be declared in a namespace, which can only be enclosed by
15294 // other namespaces. Bail if there's an anonymous namespace in the chain.
15295 NamespaceDecl *Namespace = dyn_cast<NamespaceDecl>(DC);
15296 if (!Namespace || Namespace->isAnonymousNamespace())
15297 return FixItHint();
15298 IdentifierInfo *II = Namespace->getIdentifier();
15299 Namespaces.push_back(II);
15300 NamedDecl *Lookup = SemaRef.LookupSingleName(
15301 S, II, NameLoc, Sema::LookupNestedNameSpecifierName);
15302 if (Lookup == Namespace)
15303 break;
15304 }
15305
15306 // Once we have all the namespaces, reverse them to go outermost first, and
15307 // build an NNS.
15308 SmallString<64> Insertion;
15309 llvm::raw_svector_ostream OS(Insertion);
15310 if (DC->isTranslationUnit())
15311 OS << "::";
15312 std::reverse(Namespaces.begin(), Namespaces.end());
15313 for (auto *II : Namespaces)
15314 OS << II->getName() << "::";
15315 return FixItHint::CreateInsertion(NameLoc, Insertion);
15316 }
15317
15318 /// Determine whether a tag originally declared in context \p OldDC can
15319 /// be redeclared with an unqualified name in \p NewDC (assuming name lookup
15320 /// found a declaration in \p OldDC as a previous decl, perhaps through a
15321 /// using-declaration).
isAcceptableTagRedeclContext(Sema & S,DeclContext * OldDC,DeclContext * NewDC)15322 static bool isAcceptableTagRedeclContext(Sema &S, DeclContext *OldDC,
15323 DeclContext *NewDC) {
15324 OldDC = OldDC->getRedeclContext();
15325 NewDC = NewDC->getRedeclContext();
15326
15327 if (OldDC->Equals(NewDC))
15328 return true;
15329
15330 // In MSVC mode, we allow a redeclaration if the contexts are related (either
15331 // encloses the other).
15332 if (S.getLangOpts().MSVCCompat &&
15333 (OldDC->Encloses(NewDC) || NewDC->Encloses(OldDC)))
15334 return true;
15335
15336 return false;
15337 }
15338
15339 /// This is invoked when we see 'struct foo' or 'struct {'. In the
15340 /// former case, Name will be non-null. In the later case, Name will be null.
15341 /// TagSpec indicates what kind of tag this is. TUK indicates whether this is a
15342 /// reference/declaration/definition of a tag.
15343 ///
15344 /// \param IsTypeSpecifier \c true if this is a type-specifier (or
15345 /// trailing-type-specifier) other than one in an alias-declaration.
15346 ///
15347 /// \param SkipBody If non-null, will be set to indicate if the caller should
15348 /// skip the definition of this tag and treat it as if it were a declaration.
ActOnTag(Scope * S,unsigned TagSpec,TagUseKind TUK,SourceLocation KWLoc,CXXScopeSpec & SS,IdentifierInfo * Name,SourceLocation NameLoc,const ParsedAttributesView & Attrs,AccessSpecifier AS,SourceLocation ModulePrivateLoc,MultiTemplateParamsArg TemplateParameterLists,bool & OwnedDecl,bool & IsDependent,SourceLocation ScopedEnumKWLoc,bool ScopedEnumUsesClassTag,TypeResult UnderlyingType,bool IsTypeSpecifier,bool IsTemplateParamOrArg,SkipBodyInfo * SkipBody)15349 Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
15350 SourceLocation KWLoc, CXXScopeSpec &SS,
15351 IdentifierInfo *Name, SourceLocation NameLoc,
15352 const ParsedAttributesView &Attrs, AccessSpecifier AS,
15353 SourceLocation ModulePrivateLoc,
15354 MultiTemplateParamsArg TemplateParameterLists,
15355 bool &OwnedDecl, bool &IsDependent,
15356 SourceLocation ScopedEnumKWLoc,
15357 bool ScopedEnumUsesClassTag, TypeResult UnderlyingType,
15358 bool IsTypeSpecifier, bool IsTemplateParamOrArg,
15359 SkipBodyInfo *SkipBody) {
15360 // If this is not a definition, it must have a name.
15361 IdentifierInfo *OrigName = Name;
15362 assert((Name != nullptr || TUK == TUK_Definition) &&
15363 "Nameless record must be a definition!");
15364 assert(TemplateParameterLists.size() == 0 || TUK != TUK_Reference);
15365
15366 OwnedDecl = false;
15367 TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
15368 bool ScopedEnum = ScopedEnumKWLoc.isValid();
15369
15370 // FIXME: Check member specializations more carefully.
15371 bool isMemberSpecialization = false;
15372 bool Invalid = false;
15373
15374 // We only need to do this matching if we have template parameters
15375 // or a scope specifier, which also conveniently avoids this work
15376 // for non-C++ cases.
15377 if (TemplateParameterLists.size() > 0 ||
15378 (SS.isNotEmpty() && TUK != TUK_Reference)) {
15379 if (TemplateParameterList *TemplateParams =
15380 MatchTemplateParametersToScopeSpecifier(
15381 KWLoc, NameLoc, SS, nullptr, TemplateParameterLists,
15382 TUK == TUK_Friend, isMemberSpecialization, Invalid)) {
15383 if (Kind == TTK_Enum) {
15384 Diag(KWLoc, diag::err_enum_template);
15385 return nullptr;
15386 }
15387
15388 if (TemplateParams->size() > 0) {
15389 // This is a declaration or definition of a class template (which may
15390 // be a member of another template).
15391
15392 if (Invalid)
15393 return nullptr;
15394
15395 OwnedDecl = false;
15396 DeclResult Result = CheckClassTemplate(
15397 S, TagSpec, TUK, KWLoc, SS, Name, NameLoc, Attrs, TemplateParams,
15398 AS, ModulePrivateLoc,
15399 /*FriendLoc*/ SourceLocation(), TemplateParameterLists.size() - 1,
15400 TemplateParameterLists.data(), SkipBody);
15401 return Result.get();
15402 } else {
15403 // The "template<>" header is extraneous.
15404 Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
15405 << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
15406 isMemberSpecialization = true;
15407 }
15408 }
15409
15410 if (!TemplateParameterLists.empty() && isMemberSpecialization &&
15411 CheckTemplateDeclScope(S, TemplateParameterLists.back()))
15412 return nullptr;
15413 }
15414
15415 // Figure out the underlying type if this a enum declaration. We need to do
15416 // this early, because it's needed to detect if this is an incompatible
15417 // redeclaration.
15418 llvm::PointerUnion<const Type*, TypeSourceInfo*> EnumUnderlying;
15419 bool IsFixed = !UnderlyingType.isUnset() || ScopedEnum;
15420
15421 if (Kind == TTK_Enum) {
15422 if (UnderlyingType.isInvalid() || (!UnderlyingType.get() && ScopedEnum)) {
15423 // No underlying type explicitly specified, or we failed to parse the
15424 // type, default to int.
15425 EnumUnderlying = Context.IntTy.getTypePtr();
15426 } else if (UnderlyingType.get()) {
15427 // C++0x 7.2p2: The type-specifier-seq of an enum-base shall name an
15428 // integral type; any cv-qualification is ignored.
15429 TypeSourceInfo *TI = nullptr;
15430 GetTypeFromParser(UnderlyingType.get(), &TI);
15431 EnumUnderlying = TI;
15432
15433 if (CheckEnumUnderlyingType(TI))
15434 // Recover by falling back to int.
15435 EnumUnderlying = Context.IntTy.getTypePtr();
15436
15437 if (DiagnoseUnexpandedParameterPack(TI->getTypeLoc().getBeginLoc(), TI,
15438 UPPC_FixedUnderlyingType))
15439 EnumUnderlying = Context.IntTy.getTypePtr();
15440
15441 } else if (Context.getTargetInfo().getTriple().isWindowsMSVCEnvironment()) {
15442 // For MSVC ABI compatibility, unfixed enums must use an underlying type
15443 // of 'int'. However, if this is an unfixed forward declaration, don't set
15444 // the underlying type unless the user enables -fms-compatibility. This
15445 // makes unfixed forward declared enums incomplete and is more conforming.
15446 if (TUK == TUK_Definition || getLangOpts().MSVCCompat)
15447 EnumUnderlying = Context.IntTy.getTypePtr();
15448 }
15449 }
15450
15451 DeclContext *SearchDC = CurContext;
15452 DeclContext *DC = CurContext;
15453 bool isStdBadAlloc = false;
15454 bool isStdAlignValT = false;
15455
15456 RedeclarationKind Redecl = forRedeclarationInCurContext();
15457 if (TUK == TUK_Friend || TUK == TUK_Reference)
15458 Redecl = NotForRedeclaration;
15459
15460 /// Create a new tag decl in C/ObjC. Since the ODR-like semantics for ObjC/C
15461 /// implemented asks for structural equivalence checking, the returned decl
15462 /// here is passed back to the parser, allowing the tag body to be parsed.
15463 auto createTagFromNewDecl = [&]() -> TagDecl * {
15464 assert(!getLangOpts().CPlusPlus && "not meant for C++ usage");
15465 // If there is an identifier, use the location of the identifier as the
15466 // location of the decl, otherwise use the location of the struct/union
15467 // keyword.
15468 SourceLocation Loc = NameLoc.isValid() ? NameLoc : KWLoc;
15469 TagDecl *New = nullptr;
15470
15471 if (Kind == TTK_Enum) {
15472 New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name, nullptr,
15473 ScopedEnum, ScopedEnumUsesClassTag, IsFixed);
15474 // If this is an undefined enum, bail.
15475 if (TUK != TUK_Definition && !Invalid)
15476 return nullptr;
15477 if (EnumUnderlying) {
15478 EnumDecl *ED = cast<EnumDecl>(New);
15479 if (TypeSourceInfo *TI = EnumUnderlying.dyn_cast<TypeSourceInfo *>())
15480 ED->setIntegerTypeSourceInfo(TI);
15481 else
15482 ED->setIntegerType(QualType(EnumUnderlying.get<const Type *>(), 0));
15483 ED->setPromotionType(ED->getIntegerType());
15484 }
15485 } else { // struct/union
15486 New = RecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name,
15487 nullptr);
15488 }
15489
15490 if (RecordDecl *RD = dyn_cast<RecordDecl>(New)) {
15491 // Add alignment attributes if necessary; these attributes are checked
15492 // when the ASTContext lays out the structure.
15493 //
15494 // It is important for implementing the correct semantics that this
15495 // happen here (in ActOnTag). The #pragma pack stack is
15496 // maintained as a result of parser callbacks which can occur at
15497 // many points during the parsing of a struct declaration (because
15498 // the #pragma tokens are effectively skipped over during the
15499 // parsing of the struct).
15500 if (TUK == TUK_Definition && (!SkipBody || !SkipBody->ShouldSkip)) {
15501 AddAlignmentAttributesForRecord(RD);
15502 AddMsStructLayoutForRecord(RD);
15503 }
15504 }
15505 New->setLexicalDeclContext(CurContext);
15506 return New;
15507 };
15508
15509 LookupResult Previous(*this, Name, NameLoc, LookupTagName, Redecl);
15510 if (Name && SS.isNotEmpty()) {
15511 // We have a nested-name tag ('struct foo::bar').
15512
15513 // Check for invalid 'foo::'.
15514 if (SS.isInvalid()) {
15515 Name = nullptr;
15516 goto CreateNewDecl;
15517 }
15518
15519 // If this is a friend or a reference to a class in a dependent
15520 // context, don't try to make a decl for it.
15521 if (TUK == TUK_Friend || TUK == TUK_Reference) {
15522 DC = computeDeclContext(SS, false);
15523 if (!DC) {
15524 IsDependent = true;
15525 return nullptr;
15526 }
15527 } else {
15528 DC = computeDeclContext(SS, true);
15529 if (!DC) {
15530 Diag(SS.getRange().getBegin(), diag::err_dependent_nested_name_spec)
15531 << SS.getRange();
15532 return nullptr;
15533 }
15534 }
15535
15536 if (RequireCompleteDeclContext(SS, DC))
15537 return nullptr;
15538
15539 SearchDC = DC;
15540 // Look-up name inside 'foo::'.
15541 LookupQualifiedName(Previous, DC);
15542
15543 if (Previous.isAmbiguous())
15544 return nullptr;
15545
15546 if (Previous.empty()) {
15547 // Name lookup did not find anything. However, if the
15548 // nested-name-specifier refers to the current instantiation,
15549 // and that current instantiation has any dependent base
15550 // classes, we might find something at instantiation time: treat
15551 // this as a dependent elaborated-type-specifier.
15552 // But this only makes any sense for reference-like lookups.
15553 if (Previous.wasNotFoundInCurrentInstantiation() &&
15554 (TUK == TUK_Reference || TUK == TUK_Friend)) {
15555 IsDependent = true;
15556 return nullptr;
15557 }
15558
15559 // A tag 'foo::bar' must already exist.
15560 Diag(NameLoc, diag::err_not_tag_in_scope)
15561 << Kind << Name << DC << SS.getRange();
15562 Name = nullptr;
15563 Invalid = true;
15564 goto CreateNewDecl;
15565 }
15566 } else if (Name) {
15567 // C++14 [class.mem]p14:
15568 // If T is the name of a class, then each of the following shall have a
15569 // name different from T:
15570 // -- every member of class T that is itself a type
15571 if (TUK != TUK_Reference && TUK != TUK_Friend &&
15572 DiagnoseClassNameShadow(SearchDC, DeclarationNameInfo(Name, NameLoc)))
15573 return nullptr;
15574
15575 // If this is a named struct, check to see if there was a previous forward
15576 // declaration or definition.
15577 // FIXME: We're looking into outer scopes here, even when we
15578 // shouldn't be. Doing so can result in ambiguities that we
15579 // shouldn't be diagnosing.
15580 LookupName(Previous, S);
15581
15582 // When declaring or defining a tag, ignore ambiguities introduced
15583 // by types using'ed into this scope.
15584 if (Previous.isAmbiguous() &&
15585 (TUK == TUK_Definition || TUK == TUK_Declaration)) {
15586 LookupResult::Filter F = Previous.makeFilter();
15587 while (F.hasNext()) {
15588 NamedDecl *ND = F.next();
15589 if (!ND->getDeclContext()->getRedeclContext()->Equals(
15590 SearchDC->getRedeclContext()))
15591 F.erase();
15592 }
15593 F.done();
15594 }
15595
15596 // C++11 [namespace.memdef]p3:
15597 // If the name in a friend declaration is neither qualified nor
15598 // a template-id and the declaration is a function or an
15599 // elaborated-type-specifier, the lookup to determine whether
15600 // the entity has been previously declared shall not consider
15601 // any scopes outside the innermost enclosing namespace.
15602 //
15603 // MSVC doesn't implement the above rule for types, so a friend tag
15604 // declaration may be a redeclaration of a type declared in an enclosing
15605 // scope. They do implement this rule for friend functions.
15606 //
15607 // Does it matter that this should be by scope instead of by
15608 // semantic context?
15609 if (!Previous.empty() && TUK == TUK_Friend) {
15610 DeclContext *EnclosingNS = SearchDC->getEnclosingNamespaceContext();
15611 LookupResult::Filter F = Previous.makeFilter();
15612 bool FriendSawTagOutsideEnclosingNamespace = false;
15613 while (F.hasNext()) {
15614 NamedDecl *ND = F.next();
15615 DeclContext *DC = ND->getDeclContext()->getRedeclContext();
15616 if (DC->isFileContext() &&
15617 !EnclosingNS->Encloses(ND->getDeclContext())) {
15618 if (getLangOpts().MSVCCompat)
15619 FriendSawTagOutsideEnclosingNamespace = true;
15620 else
15621 F.erase();
15622 }
15623 }
15624 F.done();
15625
15626 // Diagnose this MSVC extension in the easy case where lookup would have
15627 // unambiguously found something outside the enclosing namespace.
15628 if (Previous.isSingleResult() && FriendSawTagOutsideEnclosingNamespace) {
15629 NamedDecl *ND = Previous.getFoundDecl();
15630 Diag(NameLoc, diag::ext_friend_tag_redecl_outside_namespace)
15631 << createFriendTagNNSFixIt(*this, ND, S, NameLoc);
15632 }
15633 }
15634
15635 // Note: there used to be some attempt at recovery here.
15636 if (Previous.isAmbiguous())
15637 return nullptr;
15638
15639 if (!getLangOpts().CPlusPlus && TUK != TUK_Reference) {
15640 // FIXME: This makes sure that we ignore the contexts associated
15641 // with C structs, unions, and enums when looking for a matching
15642 // tag declaration or definition. See the similar lookup tweak
15643 // in Sema::LookupName; is there a better way to deal with this?
15644 while (isa<RecordDecl>(SearchDC) || isa<EnumDecl>(SearchDC))
15645 SearchDC = SearchDC->getParent();
15646 }
15647 }
15648
15649 if (Previous.isSingleResult() &&
15650 Previous.getFoundDecl()->isTemplateParameter()) {
15651 // Maybe we will complain about the shadowed template parameter.
15652 DiagnoseTemplateParameterShadow(NameLoc, Previous.getFoundDecl());
15653 // Just pretend that we didn't see the previous declaration.
15654 Previous.clear();
15655 }
15656
15657 if (getLangOpts().CPlusPlus && Name && DC && StdNamespace &&
15658 DC->Equals(getStdNamespace())) {
15659 if (Name->isStr("bad_alloc")) {
15660 // This is a declaration of or a reference to "std::bad_alloc".
15661 isStdBadAlloc = true;
15662
15663 // If std::bad_alloc has been implicitly declared (but made invisible to
15664 // name lookup), fill in this implicit declaration as the previous
15665 // declaration, so that the declarations get chained appropriately.
15666 if (Previous.empty() && StdBadAlloc)
15667 Previous.addDecl(getStdBadAlloc());
15668 } else if (Name->isStr("align_val_t")) {
15669 isStdAlignValT = true;
15670 if (Previous.empty() && StdAlignValT)
15671 Previous.addDecl(getStdAlignValT());
15672 }
15673 }
15674
15675 // If we didn't find a previous declaration, and this is a reference
15676 // (or friend reference), move to the correct scope. In C++, we
15677 // also need to do a redeclaration lookup there, just in case
15678 // there's a shadow friend decl.
15679 if (Name && Previous.empty() &&
15680 (TUK == TUK_Reference || TUK == TUK_Friend || IsTemplateParamOrArg)) {
15681 if (Invalid) goto CreateNewDecl;
15682 assert(SS.isEmpty());
15683
15684 if (TUK == TUK_Reference || IsTemplateParamOrArg) {
15685 // C++ [basic.scope.pdecl]p5:
15686 // -- for an elaborated-type-specifier of the form
15687 //
15688 // class-key identifier
15689 //
15690 // if the elaborated-type-specifier is used in the
15691 // decl-specifier-seq or parameter-declaration-clause of a
15692 // function defined in namespace scope, the identifier is
15693 // declared as a class-name in the namespace that contains
15694 // the declaration; otherwise, except as a friend
15695 // declaration, the identifier is declared in the smallest
15696 // non-class, non-function-prototype scope that contains the
15697 // declaration.
15698 //
15699 // C99 6.7.2.3p8 has a similar (but not identical!) provision for
15700 // C structs and unions.
15701 //
15702 // It is an error in C++ to declare (rather than define) an enum
15703 // type, including via an elaborated type specifier. We'll
15704 // diagnose that later; for now, declare the enum in the same
15705 // scope as we would have picked for any other tag type.
15706 //
15707 // GNU C also supports this behavior as part of its incomplete
15708 // enum types extension, while GNU C++ does not.
15709 //
15710 // Find the context where we'll be declaring the tag.
15711 // FIXME: We would like to maintain the current DeclContext as the
15712 // lexical context,
15713 SearchDC = getTagInjectionContext(SearchDC);
15714
15715 // Find the scope where we'll be declaring the tag.
15716 S = getTagInjectionScope(S, getLangOpts());
15717 } else {
15718 assert(TUK == TUK_Friend);
15719 // C++ [namespace.memdef]p3:
15720 // If a friend declaration in a non-local class first declares a
15721 // class or function, the friend class or function is a member of
15722 // the innermost enclosing namespace.
15723 SearchDC = SearchDC->getEnclosingNamespaceContext();
15724 }
15725
15726 // In C++, we need to do a redeclaration lookup to properly
15727 // diagnose some problems.
15728 // FIXME: redeclaration lookup is also used (with and without C++) to find a
15729 // hidden declaration so that we don't get ambiguity errors when using a
15730 // type declared by an elaborated-type-specifier. In C that is not correct
15731 // and we should instead merge compatible types found by lookup.
15732 if (getLangOpts().CPlusPlus) {
15733 // FIXME: This can perform qualified lookups into function contexts,
15734 // which are meaningless.
15735 Previous.setRedeclarationKind(forRedeclarationInCurContext());
15736 LookupQualifiedName(Previous, SearchDC);
15737 } else {
15738 Previous.setRedeclarationKind(forRedeclarationInCurContext());
15739 LookupName(Previous, S);
15740 }
15741 }
15742
15743 // If we have a known previous declaration to use, then use it.
15744 if (Previous.empty() && SkipBody && SkipBody->Previous)
15745 Previous.addDecl(SkipBody->Previous);
15746
15747 if (!Previous.empty()) {
15748 NamedDecl *PrevDecl = Previous.getFoundDecl();
15749 NamedDecl *DirectPrevDecl = Previous.getRepresentativeDecl();
15750
15751 // It's okay to have a tag decl in the same scope as a typedef
15752 // which hides a tag decl in the same scope. Finding this
15753 // insanity with a redeclaration lookup can only actually happen
15754 // in C++.
15755 //
15756 // This is also okay for elaborated-type-specifiers, which is
15757 // technically forbidden by the current standard but which is
15758 // okay according to the likely resolution of an open issue;
15759 // see http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#407
15760 if (getLangOpts().CPlusPlus) {
15761 if (TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(PrevDecl)) {
15762 if (const TagType *TT = TD->getUnderlyingType()->getAs<TagType>()) {
15763 TagDecl *Tag = TT->getDecl();
15764 if (Tag->getDeclName() == Name &&
15765 Tag->getDeclContext()->getRedeclContext()
15766 ->Equals(TD->getDeclContext()->getRedeclContext())) {
15767 PrevDecl = Tag;
15768 Previous.clear();
15769 Previous.addDecl(Tag);
15770 Previous.resolveKind();
15771 }
15772 }
15773 }
15774 }
15775
15776 // If this is a redeclaration of a using shadow declaration, it must
15777 // declare a tag in the same context. In MSVC mode, we allow a
15778 // redefinition if either context is within the other.
15779 if (auto *Shadow = dyn_cast<UsingShadowDecl>(DirectPrevDecl)) {
15780 auto *OldTag = dyn_cast<TagDecl>(PrevDecl);
15781 if (SS.isEmpty() && TUK != TUK_Reference && TUK != TUK_Friend &&
15782 isDeclInScope(Shadow, SearchDC, S, isMemberSpecialization) &&
15783 !(OldTag && isAcceptableTagRedeclContext(
15784 *this, OldTag->getDeclContext(), SearchDC))) {
15785 Diag(KWLoc, diag::err_using_decl_conflict_reverse);
15786 Diag(Shadow->getTargetDecl()->getLocation(),
15787 diag::note_using_decl_target);
15788 Diag(Shadow->getUsingDecl()->getLocation(), diag::note_using_decl)
15789 << 0;
15790 // Recover by ignoring the old declaration.
15791 Previous.clear();
15792 goto CreateNewDecl;
15793 }
15794 }
15795
15796 if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {
15797 // If this is a use of a previous tag, or if the tag is already declared
15798 // in the same scope (so that the definition/declaration completes or
15799 // rementions the tag), reuse the decl.
15800 if (TUK == TUK_Reference || TUK == TUK_Friend ||
15801 isDeclInScope(DirectPrevDecl, SearchDC, S,
15802 SS.isNotEmpty() || isMemberSpecialization)) {
15803 // Make sure that this wasn't declared as an enum and now used as a
15804 // struct or something similar.
15805 if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind,
15806 TUK == TUK_Definition, KWLoc,
15807 Name)) {
15808 bool SafeToContinue
15809 = (PrevTagDecl->getTagKind() != TTK_Enum &&
15810 Kind != TTK_Enum);
15811 if (SafeToContinue)
15812 Diag(KWLoc, diag::err_use_with_wrong_tag)
15813 << Name
15814 << FixItHint::CreateReplacement(SourceRange(KWLoc),
15815 PrevTagDecl->getKindName());
15816 else
15817 Diag(KWLoc, diag::err_use_with_wrong_tag) << Name;
15818 Diag(PrevTagDecl->getLocation(), diag::note_previous_use);
15819
15820 if (SafeToContinue)
15821 Kind = PrevTagDecl->getTagKind();
15822 else {
15823 // Recover by making this an anonymous redefinition.
15824 Name = nullptr;
15825 Previous.clear();
15826 Invalid = true;
15827 }
15828 }
15829
15830 if (Kind == TTK_Enum && PrevTagDecl->getTagKind() == TTK_Enum) {
15831 const EnumDecl *PrevEnum = cast<EnumDecl>(PrevTagDecl);
15832 if (TUK == TUK_Reference || TUK == TUK_Friend)
15833 return PrevTagDecl;
15834
15835 QualType EnumUnderlyingTy;
15836 if (TypeSourceInfo *TI = EnumUnderlying.dyn_cast<TypeSourceInfo*>())
15837 EnumUnderlyingTy = TI->getType().getUnqualifiedType();
15838 else if (const Type *T = EnumUnderlying.dyn_cast<const Type*>())
15839 EnumUnderlyingTy = QualType(T, 0);
15840
15841 // All conflicts with previous declarations are recovered by
15842 // returning the previous declaration, unless this is a definition,
15843 // in which case we want the caller to bail out.
15844 if (CheckEnumRedeclaration(NameLoc.isValid() ? NameLoc : KWLoc,
15845 ScopedEnum, EnumUnderlyingTy,
15846 IsFixed, PrevEnum))
15847 return TUK == TUK_Declaration ? PrevTagDecl : nullptr;
15848 }
15849
15850 // C++11 [class.mem]p1:
15851 // A member shall not be declared twice in the member-specification,
15852 // except that a nested class or member class template can be declared
15853 // and then later defined.
15854 if (TUK == TUK_Declaration && PrevDecl->isCXXClassMember() &&
15855 S->isDeclScope(PrevDecl)) {
15856 Diag(NameLoc, diag::ext_member_redeclared);
15857 Diag(PrevTagDecl->getLocation(), diag::note_previous_declaration);
15858 }
15859
15860 if (!Invalid) {
15861 // If this is a use, just return the declaration we found, unless
15862 // we have attributes.
15863 if (TUK == TUK_Reference || TUK == TUK_Friend) {
15864 if (!Attrs.empty()) {
15865 // FIXME: Diagnose these attributes. For now, we create a new
15866 // declaration to hold them.
15867 } else if (TUK == TUK_Reference &&
15868 (PrevTagDecl->getFriendObjectKind() ==
15869 Decl::FOK_Undeclared ||
15870 PrevDecl->getOwningModule() != getCurrentModule()) &&
15871 SS.isEmpty()) {
15872 // This declaration is a reference to an existing entity, but
15873 // has different visibility from that entity: it either makes
15874 // a friend visible or it makes a type visible in a new module.
15875 // In either case, create a new declaration. We only do this if
15876 // the declaration would have meant the same thing if no prior
15877 // declaration were found, that is, if it was found in the same
15878 // scope where we would have injected a declaration.
15879 if (!getTagInjectionContext(CurContext)->getRedeclContext()
15880 ->Equals(PrevDecl->getDeclContext()->getRedeclContext()))
15881 return PrevTagDecl;
15882 // This is in the injected scope, create a new declaration in
15883 // that scope.
15884 S = getTagInjectionScope(S, getLangOpts());
15885 } else {
15886 return PrevTagDecl;
15887 }
15888 }
15889
15890 // Diagnose attempts to redefine a tag.
15891 if (TUK == TUK_Definition) {
15892 if (NamedDecl *Def = PrevTagDecl->getDefinition()) {
15893 // If we're defining a specialization and the previous definition
15894 // is from an implicit instantiation, don't emit an error
15895 // here; we'll catch this in the general case below.
15896 bool IsExplicitSpecializationAfterInstantiation = false;
15897 if (isMemberSpecialization) {
15898 if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Def))
15899 IsExplicitSpecializationAfterInstantiation =
15900 RD->getTemplateSpecializationKind() !=
15901 TSK_ExplicitSpecialization;
15902 else if (EnumDecl *ED = dyn_cast<EnumDecl>(Def))
15903 IsExplicitSpecializationAfterInstantiation =
15904 ED->getTemplateSpecializationKind() !=
15905 TSK_ExplicitSpecialization;
15906 }
15907
15908 // Note that clang allows ODR-like semantics for ObjC/C, i.e., do
15909 // not keep more that one definition around (merge them). However,
15910 // ensure the decl passes the structural compatibility check in
15911 // C11 6.2.7/1 (or 6.1.2.6/1 in C89).
15912 NamedDecl *Hidden = nullptr;
15913 if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {
15914 // There is a definition of this tag, but it is not visible. We
15915 // explicitly make use of C++'s one definition rule here, and
15916 // assume that this definition is identical to the hidden one
15917 // we already have. Make the existing definition visible and
15918 // use it in place of this one.
15919 if (!getLangOpts().CPlusPlus) {
15920 // Postpone making the old definition visible until after we
15921 // complete parsing the new one and do the structural
15922 // comparison.
15923 SkipBody->CheckSameAsPrevious = true;
15924 SkipBody->New = createTagFromNewDecl();
15925 SkipBody->Previous = Def;
15926 return Def;
15927 } else {
15928 SkipBody->ShouldSkip = true;
15929 SkipBody->Previous = Def;
15930 makeMergedDefinitionVisible(Hidden);
15931 // Carry on and handle it like a normal definition. We'll
15932 // skip starting the definitiion later.
15933 }
15934 } else if (!IsExplicitSpecializationAfterInstantiation) {
15935 // A redeclaration in function prototype scope in C isn't
15936 // visible elsewhere, so merely issue a warning.
15937 if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope())
15938 Diag(NameLoc, diag::warn_redefinition_in_param_list) << Name;
15939 else
15940 Diag(NameLoc, diag::err_redefinition) << Name;
15941 notePreviousDefinition(Def,
15942 NameLoc.isValid() ? NameLoc : KWLoc);
15943 // If this is a redefinition, recover by making this
15944 // struct be anonymous, which will make any later
15945 // references get the previous definition.
15946 Name = nullptr;
15947 Previous.clear();
15948 Invalid = true;
15949 }
15950 } else {
15951 // If the type is currently being defined, complain
15952 // about a nested redefinition.
15953 auto *TD = Context.getTagDeclType(PrevTagDecl)->getAsTagDecl();
15954 if (TD->isBeingDefined()) {
15955 Diag(NameLoc, diag::err_nested_redefinition) << Name;
15956 Diag(PrevTagDecl->getLocation(),
15957 diag::note_previous_definition);
15958 Name = nullptr;
15959 Previous.clear();
15960 Invalid = true;
15961 }
15962 }
15963
15964 // Okay, this is definition of a previously declared or referenced
15965 // tag. We're going to create a new Decl for it.
15966 }
15967
15968 // Okay, we're going to make a redeclaration. If this is some kind
15969 // of reference, make sure we build the redeclaration in the same DC
15970 // as the original, and ignore the current access specifier.
15971 if (TUK == TUK_Friend || TUK == TUK_Reference) {
15972 SearchDC = PrevTagDecl->getDeclContext();
15973 AS = AS_none;
15974 }
15975 }
15976 // If we get here we have (another) forward declaration or we
15977 // have a definition. Just create a new decl.
15978
15979 } else {
15980 // If we get here, this is a definition of a new tag type in a nested
15981 // scope, e.g. "struct foo; void bar() { struct foo; }", just create a
15982 // new decl/type. We set PrevDecl to NULL so that the entities
15983 // have distinct types.
15984 Previous.clear();
15985 }
15986 // If we get here, we're going to create a new Decl. If PrevDecl
15987 // is non-NULL, it's a definition of the tag declared by
15988 // PrevDecl. If it's NULL, we have a new definition.
15989
15990 // Otherwise, PrevDecl is not a tag, but was found with tag
15991 // lookup. This is only actually possible in C++, where a few
15992 // things like templates still live in the tag namespace.
15993 } else {
15994 // Use a better diagnostic if an elaborated-type-specifier
15995 // found the wrong kind of type on the first
15996 // (non-redeclaration) lookup.
15997 if ((TUK == TUK_Reference || TUK == TUK_Friend) &&
15998 !Previous.isForRedeclaration()) {
15999 NonTagKind NTK = getNonTagTypeDeclKind(PrevDecl, Kind);
16000 Diag(NameLoc, diag::err_tag_reference_non_tag) << PrevDecl << NTK
16001 << Kind;
16002 Diag(PrevDecl->getLocation(), diag::note_declared_at);
16003 Invalid = true;
16004
16005 // Otherwise, only diagnose if the declaration is in scope.
16006 } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S,
16007 SS.isNotEmpty() || isMemberSpecialization)) {
16008 // do nothing
16009
16010 // Diagnose implicit declarations introduced by elaborated types.
16011 } else if (TUK == TUK_Reference || TUK == TUK_Friend) {
16012 NonTagKind NTK = getNonTagTypeDeclKind(PrevDecl, Kind);
16013 Diag(NameLoc, diag::err_tag_reference_conflict) << NTK;
16014 Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;
16015 Invalid = true;
16016
16017 // Otherwise it's a declaration. Call out a particularly common
16018 // case here.
16019 } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {
16020 unsigned Kind = 0;
16021 if (isa<TypeAliasDecl>(PrevDecl)) Kind = 1;
16022 Diag(NameLoc, diag::err_tag_definition_of_typedef)
16023 << Name << Kind << TND->getUnderlyingType();
16024 Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl;
16025 Invalid = true;
16026
16027 // Otherwise, diagnose.
16028 } else {
16029 // The tag name clashes with something else in the target scope,
16030 // issue an error and recover by making this tag be anonymous.
16031 Diag(NameLoc, diag::err_redefinition_different_kind) << Name;
16032 notePreviousDefinition(PrevDecl, NameLoc);
16033 Name = nullptr;
16034 Invalid = true;
16035 }
16036
16037 // The existing declaration isn't relevant to us; we're in a
16038 // new scope, so clear out the previous declaration.
16039 Previous.clear();
16040 }
16041 }
16042
16043 CreateNewDecl:
16044
16045 TagDecl *PrevDecl = nullptr;
16046 if (Previous.isSingleResult())
16047 PrevDecl = cast<TagDecl>(Previous.getFoundDecl());
16048
16049 // If there is an identifier, use the location of the identifier as the
16050 // location of the decl, otherwise use the location of the struct/union
16051 // keyword.
16052 SourceLocation Loc = NameLoc.isValid() ? NameLoc : KWLoc;
16053
16054 // Otherwise, create a new declaration. If there is a previous
16055 // declaration of the same entity, the two will be linked via
16056 // PrevDecl.
16057 TagDecl *New;
16058
16059 if (Kind == TTK_Enum) {
16060 // FIXME: Tag decls should be chained to any simultaneous vardecls, e.g.:
16061 // enum X { A, B, C } D; D should chain to X.
16062 New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name,
16063 cast_or_null<EnumDecl>(PrevDecl), ScopedEnum,
16064 ScopedEnumUsesClassTag, IsFixed);
16065
16066 if (isStdAlignValT && (!StdAlignValT || getStdAlignValT()->isImplicit()))
16067 StdAlignValT = cast<EnumDecl>(New);
16068
16069 // If this is an undefined enum, warn.
16070 if (TUK != TUK_Definition && !Invalid) {
16071 TagDecl *Def;
16072 if (IsFixed && cast<EnumDecl>(New)->isFixed()) {
16073 // C++0x: 7.2p2: opaque-enum-declaration.
16074 // Conflicts are diagnosed above. Do nothing.
16075 }
16076 else if (PrevDecl && (Def = cast<EnumDecl>(PrevDecl)->getDefinition())) {
16077 Diag(Loc, diag::ext_forward_ref_enum_def)
16078 << New;
16079 Diag(Def->getLocation(), diag::note_previous_definition);
16080 } else {
16081 unsigned DiagID = diag::ext_forward_ref_enum;
16082 if (getLangOpts().MSVCCompat)
16083 DiagID = diag::ext_ms_forward_ref_enum;
16084 else if (getLangOpts().CPlusPlus)
16085 DiagID = diag::err_forward_ref_enum;
16086 Diag(Loc, DiagID);
16087 }
16088 }
16089
16090 if (EnumUnderlying) {
16091 EnumDecl *ED = cast<EnumDecl>(New);
16092 if (TypeSourceInfo *TI = EnumUnderlying.dyn_cast<TypeSourceInfo*>())
16093 ED->setIntegerTypeSourceInfo(TI);
16094 else
16095 ED->setIntegerType(QualType(EnumUnderlying.get<const Type*>(), 0));
16096 ED->setPromotionType(ED->getIntegerType());
16097 assert(ED->isComplete() && "enum with type should be complete");
16098 }
16099 } else {
16100 // struct/union/class
16101
16102 // FIXME: Tag decls should be chained to any simultaneous vardecls, e.g.:
16103 // struct X { int A; } D; D should chain to X.
16104 if (getLangOpts().CPlusPlus) {
16105 // FIXME: Look for a way to use RecordDecl for simple structs.
16106 New = CXXRecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name,
16107 cast_or_null<CXXRecordDecl>(PrevDecl));
16108
16109 if (isStdBadAlloc && (!StdBadAlloc || getStdBadAlloc()->isImplicit()))
16110 StdBadAlloc = cast<CXXRecordDecl>(New);
16111 } else
16112 New = RecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name,
16113 cast_or_null<RecordDecl>(PrevDecl));
16114 }
16115
16116 // C++11 [dcl.type]p3:
16117 // A type-specifier-seq shall not define a class or enumeration [...].
16118 if (getLangOpts().CPlusPlus && (IsTypeSpecifier || IsTemplateParamOrArg) &&
16119 TUK == TUK_Definition) {
16120 Diag(New->getLocation(), diag::err_type_defined_in_type_specifier)
16121 << Context.getTagDeclType(New);
16122 Invalid = true;
16123 }
16124
16125 if (!Invalid && getLangOpts().CPlusPlus && TUK == TUK_Definition &&
16126 DC->getDeclKind() == Decl::Enum) {
16127 Diag(New->getLocation(), diag::err_type_defined_in_enum)
16128 << Context.getTagDeclType(New);
16129 Invalid = true;
16130 }
16131
16132 // Maybe add qualifier info.
16133 if (SS.isNotEmpty()) {
16134 if (SS.isSet()) {
16135 // If this is either a declaration or a definition, check the
16136 // nested-name-specifier against the current context.
16137 if ((TUK == TUK_Definition || TUK == TUK_Declaration) &&
16138 diagnoseQualifiedDeclaration(SS, DC, OrigName, Loc,
16139 isMemberSpecialization))
16140 Invalid = true;
16141
16142 New->setQualifierInfo(SS.getWithLocInContext(Context));
16143 if (TemplateParameterLists.size() > 0) {
16144 New->setTemplateParameterListsInfo(Context, TemplateParameterLists);
16145 }
16146 }
16147 else
16148 Invalid = true;
16149 }
16150
16151 if (RecordDecl *RD = dyn_cast<RecordDecl>(New)) {
16152 // Add alignment attributes if necessary; these attributes are checked when
16153 // the ASTContext lays out the structure.
16154 //
16155 // It is important for implementing the correct semantics that this
16156 // happen here (in ActOnTag). The #pragma pack stack is
16157 // maintained as a result of parser callbacks which can occur at
16158 // many points during the parsing of a struct declaration (because
16159 // the #pragma tokens are effectively skipped over during the
16160 // parsing of the struct).
16161 if (TUK == TUK_Definition && (!SkipBody || !SkipBody->ShouldSkip)) {
16162 AddAlignmentAttributesForRecord(RD);
16163 AddMsStructLayoutForRecord(RD);
16164 }
16165 }
16166
16167 if (ModulePrivateLoc.isValid()) {
16168 if (isMemberSpecialization)
16169 Diag(New->getLocation(), diag::err_module_private_specialization)
16170 << 2
16171 << FixItHint::CreateRemoval(ModulePrivateLoc);
16172 // __module_private__ does not apply to local classes. However, we only
16173 // diagnose this as an error when the declaration specifiers are
16174 // freestanding. Here, we just ignore the __module_private__.
16175 else if (!SearchDC->isFunctionOrMethod())
16176 New->setModulePrivate();
16177 }
16178
16179 // If this is a specialization of a member class (of a class template),
16180 // check the specialization.
16181 if (isMemberSpecialization && CheckMemberSpecialization(New, Previous))
16182 Invalid = true;
16183
16184 // If we're declaring or defining a tag in function prototype scope in C,
16185 // note that this type can only be used within the function and add it to
16186 // the list of decls to inject into the function definition scope.
16187 if ((Name || Kind == TTK_Enum) &&
16188 getNonFieldDeclScope(S)->isFunctionPrototypeScope()) {
16189 if (getLangOpts().CPlusPlus) {
16190 // C++ [dcl.fct]p6:
16191 // Types shall not be defined in return or parameter types.
16192 if (TUK == TUK_Definition && !IsTypeSpecifier) {
16193 Diag(Loc, diag::err_type_defined_in_param_type)
16194 << Name;
16195 Invalid = true;
16196 }
16197 } else if (!PrevDecl) {
16198 Diag(Loc, diag::warn_decl_in_param_list) << Context.getTagDeclType(New);
16199 }
16200 }
16201
16202 if (Invalid)
16203 New->setInvalidDecl();
16204
16205 // Set the lexical context. If the tag has a C++ scope specifier, the
16206 // lexical context will be different from the semantic context.
16207 New->setLexicalDeclContext(CurContext);
16208
16209 // Mark this as a friend decl if applicable.
16210 // In Microsoft mode, a friend declaration also acts as a forward
16211 // declaration so we always pass true to setObjectOfFriendDecl to make
16212 // the tag name visible.
16213 if (TUK == TUK_Friend)
16214 New->setObjectOfFriendDecl(getLangOpts().MSVCCompat);
16215
16216 // Set the access specifier.
16217 if (!Invalid && SearchDC->isRecord())
16218 SetMemberAccessSpecifier(New, PrevDecl, AS);
16219
16220 if (PrevDecl)
16221 CheckRedeclarationModuleOwnership(New, PrevDecl);
16222
16223 if (TUK == TUK_Definition && (!SkipBody || !SkipBody->ShouldSkip))
16224 New->startDefinition();
16225
16226 ProcessDeclAttributeList(S, New, Attrs);
16227 AddPragmaAttributes(S, New);
16228
16229 // If this has an identifier, add it to the scope stack.
16230 if (TUK == TUK_Friend) {
16231 // We might be replacing an existing declaration in the lookup tables;
16232 // if so, borrow its access specifier.
16233 if (PrevDecl)
16234 New->setAccess(PrevDecl->getAccess());
16235
16236 DeclContext *DC = New->getDeclContext()->getRedeclContext();
16237 DC->makeDeclVisibleInContext(New);
16238 if (Name) // can be null along some error paths
16239 if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
16240 PushOnScopeChains(New, EnclosingScope, /* AddToContext = */ false);
16241 } else if (Name) {
16242 S = getNonFieldDeclScope(S);
16243 PushOnScopeChains(New, S, true);
16244 } else {
16245 CurContext->addDecl(New);
16246 }
16247
16248 // If this is the C FILE type, notify the AST context.
16249 if (IdentifierInfo *II = New->getIdentifier())
16250 if (!New->isInvalidDecl() &&
16251 New->getDeclContext()->getRedeclContext()->isTranslationUnit() &&
16252 II->isStr("FILE"))
16253 Context.setFILEDecl(New);
16254
16255 if (PrevDecl)
16256 mergeDeclAttributes(New, PrevDecl);
16257
16258 if (auto *CXXRD = dyn_cast<CXXRecordDecl>(New))
16259 inferGslOwnerPointerAttribute(CXXRD);
16260
16261 // If there's a #pragma GCC visibility in scope, set the visibility of this
16262 // record.
16263 AddPushedVisibilityAttribute(New);
16264
16265 if (isMemberSpecialization && !New->isInvalidDecl())
16266 CompleteMemberSpecialization(New, Previous);
16267
16268 OwnedDecl = true;
16269 // In C++, don't return an invalid declaration. We can't recover well from
16270 // the cases where we make the type anonymous.
16271 if (Invalid && getLangOpts().CPlusPlus) {
16272 if (New->isBeingDefined())
16273 if (auto RD = dyn_cast<RecordDecl>(New))
16274 RD->completeDefinition();
16275 return nullptr;
16276 } else if (SkipBody && SkipBody->ShouldSkip) {
16277 return SkipBody->Previous;
16278 } else {
16279 return New;
16280 }
16281 }
16282
ActOnTagStartDefinition(Scope * S,Decl * TagD)16283 void Sema::ActOnTagStartDefinition(Scope *S, Decl *TagD) {
16284 AdjustDeclIfTemplate(TagD);
16285 TagDecl *Tag = cast<TagDecl>(TagD);
16286
16287 // Enter the tag context.
16288 PushDeclContext(S, Tag);
16289
16290 ActOnDocumentableDecl(TagD);
16291
16292 // If there's a #pragma GCC visibility in scope, set the visibility of this
16293 // record.
16294 AddPushedVisibilityAttribute(Tag);
16295 }
16296
ActOnDuplicateDefinition(DeclSpec & DS,Decl * Prev,SkipBodyInfo & SkipBody)16297 bool Sema::ActOnDuplicateDefinition(DeclSpec &DS, Decl *Prev,
16298 SkipBodyInfo &SkipBody) {
16299 if (!hasStructuralCompatLayout(Prev, SkipBody.New))
16300 return false;
16301
16302 // Make the previous decl visible.
16303 makeMergedDefinitionVisible(SkipBody.Previous);
16304 return true;
16305 }
16306
ActOnObjCContainerStartDefinition(Decl * IDecl)16307 Decl *Sema::ActOnObjCContainerStartDefinition(Decl *IDecl) {
16308 assert(isa<ObjCContainerDecl>(IDecl) &&
16309 "ActOnObjCContainerStartDefinition - Not ObjCContainerDecl");
16310 DeclContext *OCD = cast<DeclContext>(IDecl);
16311 assert(OCD->getLexicalParent() == CurContext &&
16312 "The next DeclContext should be lexically contained in the current one.");
16313 CurContext = OCD;
16314 return IDecl;
16315 }
16316
ActOnStartCXXMemberDeclarations(Scope * S,Decl * TagD,SourceLocation FinalLoc,bool IsFinalSpelledSealed,SourceLocation LBraceLoc)16317 void Sema::ActOnStartCXXMemberDeclarations(Scope *S, Decl *TagD,
16318 SourceLocation FinalLoc,
16319 bool IsFinalSpelledSealed,
16320 SourceLocation LBraceLoc) {
16321 AdjustDeclIfTemplate(TagD);
16322 CXXRecordDecl *Record = cast<CXXRecordDecl>(TagD);
16323
16324 FieldCollector->StartClass();
16325
16326 if (!Record->getIdentifier())
16327 return;
16328
16329 if (FinalLoc.isValid())
16330 Record->addAttr(FinalAttr::Create(
16331 Context, FinalLoc, AttributeCommonInfo::AS_Keyword,
16332 static_cast<FinalAttr::Spelling>(IsFinalSpelledSealed)));
16333
16334 // C++ [class]p2:
16335 // [...] The class-name is also inserted into the scope of the
16336 // class itself; this is known as the injected-class-name. For
16337 // purposes of access checking, the injected-class-name is treated
16338 // as if it were a public member name.
16339 CXXRecordDecl *InjectedClassName = CXXRecordDecl::Create(
16340 Context, Record->getTagKind(), CurContext, Record->getBeginLoc(),
16341 Record->getLocation(), Record->getIdentifier(),
16342 /*PrevDecl=*/nullptr,
16343 /*DelayTypeCreation=*/true);
16344 Context.getTypeDeclType(InjectedClassName, Record);
16345 InjectedClassName->setImplicit();
16346 InjectedClassName->setAccess(AS_public);
16347 if (ClassTemplateDecl *Template = Record->getDescribedClassTemplate())
16348 InjectedClassName->setDescribedClassTemplate(Template);
16349 PushOnScopeChains(InjectedClassName, S);
16350 assert(InjectedClassName->isInjectedClassName() &&
16351 "Broken injected-class-name");
16352 }
16353
ActOnTagFinishDefinition(Scope * S,Decl * TagD,SourceRange BraceRange)16354 void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD,
16355 SourceRange BraceRange) {
16356 AdjustDeclIfTemplate(TagD);
16357 TagDecl *Tag = cast<TagDecl>(TagD);
16358 Tag->setBraceRange(BraceRange);
16359
16360 // Make sure we "complete" the definition even it is invalid.
16361 if (Tag->isBeingDefined()) {
16362 assert(Tag->isInvalidDecl() && "We should already have completed it");
16363 if (RecordDecl *RD = dyn_cast<RecordDecl>(Tag))
16364 RD->completeDefinition();
16365 }
16366
16367 if (isa<CXXRecordDecl>(Tag)) {
16368 FieldCollector->FinishClass();
16369 }
16370
16371 // Exit this scope of this tag's definition.
16372 PopDeclContext();
16373
16374 if (getCurLexicalContext()->isObjCContainer() &&
16375 Tag->getDeclContext()->isFileContext())
16376 Tag->setTopLevelDeclInObjCContainer();
16377
16378 // Notify the consumer that we've defined a tag.
16379 if (!Tag->isInvalidDecl())
16380 Consumer.HandleTagDeclDefinition(Tag);
16381 }
16382
ActOnObjCContainerFinishDefinition()16383 void Sema::ActOnObjCContainerFinishDefinition() {
16384 // Exit this scope of this interface definition.
16385 PopDeclContext();
16386 }
16387
ActOnObjCTemporaryExitContainerContext(DeclContext * DC)16388 void Sema::ActOnObjCTemporaryExitContainerContext(DeclContext *DC) {
16389 assert(DC == CurContext && "Mismatch of container contexts");
16390 OriginalLexicalContext = DC;
16391 ActOnObjCContainerFinishDefinition();
16392 }
16393
ActOnObjCReenterContainerContext(DeclContext * DC)16394 void Sema::ActOnObjCReenterContainerContext(DeclContext *DC) {
16395 ActOnObjCContainerStartDefinition(cast<Decl>(DC));
16396 OriginalLexicalContext = nullptr;
16397 }
16398
ActOnTagDefinitionError(Scope * S,Decl * TagD)16399 void Sema::ActOnTagDefinitionError(Scope *S, Decl *TagD) {
16400 AdjustDeclIfTemplate(TagD);
16401 TagDecl *Tag = cast<TagDecl>(TagD);
16402 Tag->setInvalidDecl();
16403
16404 // Make sure we "complete" the definition even it is invalid.
16405 if (Tag->isBeingDefined()) {
16406 if (RecordDecl *RD = dyn_cast<RecordDecl>(Tag))
16407 RD->completeDefinition();
16408 }
16409
16410 // We're undoing ActOnTagStartDefinition here, not
16411 // ActOnStartCXXMemberDeclarations, so we don't have to mess with
16412 // the FieldCollector.
16413
16414 PopDeclContext();
16415 }
16416
16417 // Note that FieldName may be null for anonymous bitfields.
VerifyBitField(SourceLocation FieldLoc,IdentifierInfo * FieldName,QualType FieldTy,bool IsMsStruct,Expr * BitWidth,bool * ZeroWidth)16418 ExprResult Sema::VerifyBitField(SourceLocation FieldLoc,
16419 IdentifierInfo *FieldName,
16420 QualType FieldTy, bool IsMsStruct,
16421 Expr *BitWidth, bool *ZeroWidth) {
16422 assert(BitWidth);
16423 if (BitWidth->containsErrors())
16424 return ExprError();
16425
16426 // Default to true; that shouldn't confuse checks for emptiness
16427 if (ZeroWidth)
16428 *ZeroWidth = true;
16429
16430 // C99 6.7.2.1p4 - verify the field type.
16431 // C++ 9.6p3: A bit-field shall have integral or enumeration type.
16432 if (!FieldTy->isDependentType() && !FieldTy->isIntegralOrEnumerationType()) {
16433 // Handle incomplete and sizeless types with a specific error.
16434 if (RequireCompleteSizedType(FieldLoc, FieldTy,
16435 diag::err_field_incomplete_or_sizeless))
16436 return ExprError();
16437 if (FieldName)
16438 return Diag(FieldLoc, diag::err_not_integral_type_bitfield)
16439 << FieldName << FieldTy << BitWidth->getSourceRange();
16440 return Diag(FieldLoc, diag::err_not_integral_type_anon_bitfield)
16441 << FieldTy << BitWidth->getSourceRange();
16442 } else if (DiagnoseUnexpandedParameterPack(const_cast<Expr *>(BitWidth),
16443 UPPC_BitFieldWidth))
16444 return ExprError();
16445
16446 // If the bit-width is type- or value-dependent, don't try to check
16447 // it now.
16448 if (BitWidth->isValueDependent() || BitWidth->isTypeDependent())
16449 return BitWidth;
16450
16451 llvm::APSInt Value;
16452 ExprResult ICE = VerifyIntegerConstantExpression(BitWidth, &Value, AllowFold);
16453 if (ICE.isInvalid())
16454 return ICE;
16455 BitWidth = ICE.get();
16456
16457 if (Value != 0 && ZeroWidth)
16458 *ZeroWidth = false;
16459
16460 // Zero-width bitfield is ok for anonymous field.
16461 if (Value == 0 && FieldName)
16462 return Diag(FieldLoc, diag::err_bitfield_has_zero_width) << FieldName;
16463
16464 if (Value.isSigned() && Value.isNegative()) {
16465 if (FieldName)
16466 return Diag(FieldLoc, diag::err_bitfield_has_negative_width)
16467 << FieldName << Value.toString(10);
16468 return Diag(FieldLoc, diag::err_anon_bitfield_has_negative_width)
16469 << Value.toString(10);
16470 }
16471
16472 // The size of the bit-field must not exceed our maximum permitted object
16473 // size.
16474 if (Value.getActiveBits() > ConstantArrayType::getMaxSizeBits(Context)) {
16475 return Diag(FieldLoc, diag::err_bitfield_too_wide)
16476 << !FieldName << FieldName << Value.toString(10);
16477 }
16478
16479 if (!FieldTy->isDependentType()) {
16480 uint64_t TypeStorageSize = Context.getTypeSize(FieldTy);
16481 uint64_t TypeWidth = Context.getIntWidth(FieldTy);
16482 bool BitfieldIsOverwide = Value.ugt(TypeWidth);
16483
16484 // Over-wide bitfields are an error in C or when using the MSVC bitfield
16485 // ABI.
16486 bool CStdConstraintViolation =
16487 BitfieldIsOverwide && !getLangOpts().CPlusPlus;
16488 bool MSBitfieldViolation =
16489 Value.ugt(TypeStorageSize) &&
16490 (IsMsStruct || Context.getTargetInfo().getCXXABI().isMicrosoft());
16491 if (CStdConstraintViolation || MSBitfieldViolation) {
16492 unsigned DiagWidth =
16493 CStdConstraintViolation ? TypeWidth : TypeStorageSize;
16494 if (FieldName)
16495 return Diag(FieldLoc, diag::err_bitfield_width_exceeds_type_width)
16496 << FieldName << Value.toString(10)
16497 << !CStdConstraintViolation << DiagWidth;
16498
16499 return Diag(FieldLoc, diag::err_anon_bitfield_width_exceeds_type_width)
16500 << Value.toString(10) << !CStdConstraintViolation
16501 << DiagWidth;
16502 }
16503
16504 // Warn on types where the user might conceivably expect to get all
16505 // specified bits as value bits: that's all integral types other than
16506 // 'bool'.
16507 if (BitfieldIsOverwide && !FieldTy->isBooleanType() && FieldName) {
16508 Diag(FieldLoc, diag::warn_bitfield_width_exceeds_type_width)
16509 << FieldName << Value.toString(10)
16510 << (unsigned)TypeWidth;
16511 }
16512 }
16513
16514 return BitWidth;
16515 }
16516
16517 /// ActOnField - Each field of a C struct/union is passed into this in order
16518 /// to create a FieldDecl object for it.
ActOnField(Scope * S,Decl * TagD,SourceLocation DeclStart,Declarator & D,Expr * BitfieldWidth)16519 Decl *Sema::ActOnField(Scope *S, Decl *TagD, SourceLocation DeclStart,
16520 Declarator &D, Expr *BitfieldWidth) {
16521 FieldDecl *Res = HandleField(S, cast_or_null<RecordDecl>(TagD),
16522 DeclStart, D, static_cast<Expr*>(BitfieldWidth),
16523 /*InitStyle=*/ICIS_NoInit, AS_public);
16524 return Res;
16525 }
16526
16527 /// HandleField - Analyze a field of a C struct or a C++ data member.
16528 ///
HandleField(Scope * S,RecordDecl * Record,SourceLocation DeclStart,Declarator & D,Expr * BitWidth,InClassInitStyle InitStyle,AccessSpecifier AS)16529 FieldDecl *Sema::HandleField(Scope *S, RecordDecl *Record,
16530 SourceLocation DeclStart,
16531 Declarator &D, Expr *BitWidth,
16532 InClassInitStyle InitStyle,
16533 AccessSpecifier AS) {
16534 if (D.isDecompositionDeclarator()) {
16535 const DecompositionDeclarator &Decomp = D.getDecompositionDeclarator();
16536 Diag(Decomp.getLSquareLoc(), diag::err_decomp_decl_context)
16537 << Decomp.getSourceRange();
16538 return nullptr;
16539 }
16540
16541 IdentifierInfo *II = D.getIdentifier();
16542 SourceLocation Loc = DeclStart;
16543 if (II) Loc = D.getIdentifierLoc();
16544
16545 TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
16546 QualType T = TInfo->getType();
16547 if (getLangOpts().CPlusPlus) {
16548 CheckExtraCXXDefaultArguments(D);
16549
16550 if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
16551 UPPC_DataMemberType)) {
16552 D.setInvalidType();
16553 T = Context.IntTy;
16554 TInfo = Context.getTrivialTypeSourceInfo(T, Loc);
16555 }
16556 }
16557
16558 DiagnoseFunctionSpecifiers(D.getDeclSpec());
16559
16560 if (D.getDeclSpec().isInlineSpecified())
16561 Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_non_function)
16562 << getLangOpts().CPlusPlus17;
16563 if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())
16564 Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(),
16565 diag::err_invalid_thread)
16566 << DeclSpec::getSpecifierName(TSCS);
16567
16568 // Check to see if this name was declared as a member previously
16569 NamedDecl *PrevDecl = nullptr;
16570 LookupResult Previous(*this, II, Loc, LookupMemberName,
16571 ForVisibleRedeclaration);
16572 LookupName(Previous, S);
16573 switch (Previous.getResultKind()) {
16574 case LookupResult::Found:
16575 case LookupResult::FoundUnresolvedValue:
16576 PrevDecl = Previous.getAsSingle<NamedDecl>();
16577 break;
16578
16579 case LookupResult::FoundOverloaded:
16580 PrevDecl = Previous.getRepresentativeDecl();
16581 break;
16582
16583 case LookupResult::NotFound:
16584 case LookupResult::NotFoundInCurrentInstantiation:
16585 case LookupResult::Ambiguous:
16586 break;
16587 }
16588 Previous.suppressDiagnostics();
16589
16590 if (PrevDecl && PrevDecl->isTemplateParameter()) {
16591 // Maybe we will complain about the shadowed template parameter.
16592 DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
16593 // Just pretend that we didn't see the previous declaration.
16594 PrevDecl = nullptr;
16595 }
16596
16597 if (PrevDecl && !isDeclInScope(PrevDecl, Record, S))
16598 PrevDecl = nullptr;
16599
16600 bool Mutable
16601 = (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_mutable);
16602 SourceLocation TSSL = D.getBeginLoc();
16603 FieldDecl *NewFD
16604 = CheckFieldDecl(II, T, TInfo, Record, Loc, Mutable, BitWidth, InitStyle,
16605 TSSL, AS, PrevDecl, &D);
16606
16607 if (NewFD->isInvalidDecl())
16608 Record->setInvalidDecl();
16609
16610 if (D.getDeclSpec().isModulePrivateSpecified())
16611 NewFD->setModulePrivate();
16612
16613 if (NewFD->isInvalidDecl() && PrevDecl) {
16614 // Don't introduce NewFD into scope; there's already something
16615 // with the same name in the same scope.
16616 } else if (II) {
16617 PushOnScopeChains(NewFD, S);
16618 } else
16619 Record->addDecl(NewFD);
16620
16621 return NewFD;
16622 }
16623
16624 /// Build a new FieldDecl and check its well-formedness.
16625 ///
16626 /// This routine builds a new FieldDecl given the fields name, type,
16627 /// record, etc. \p PrevDecl should refer to any previous declaration
16628 /// with the same name and in the same scope as the field to be
16629 /// created.
16630 ///
16631 /// \returns a new FieldDecl.
16632 ///
16633 /// \todo The Declarator argument is a hack. It will be removed once
CheckFieldDecl(DeclarationName Name,QualType T,TypeSourceInfo * TInfo,RecordDecl * Record,SourceLocation Loc,bool Mutable,Expr * BitWidth,InClassInitStyle InitStyle,SourceLocation TSSL,AccessSpecifier AS,NamedDecl * PrevDecl,Declarator * D)16634 FieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T,
16635 TypeSourceInfo *TInfo,
16636 RecordDecl *Record, SourceLocation Loc,
16637 bool Mutable, Expr *BitWidth,
16638 InClassInitStyle InitStyle,
16639 SourceLocation TSSL,
16640 AccessSpecifier AS, NamedDecl *PrevDecl,
16641 Declarator *D) {
16642 IdentifierInfo *II = Name.getAsIdentifierInfo();
16643 bool InvalidDecl = false;
16644 if (D) InvalidDecl = D->isInvalidType();
16645
16646 // If we receive a broken type, recover by assuming 'int' and
16647 // marking this declaration as invalid.
16648 if (T.isNull() || T->containsErrors()) {
16649 InvalidDecl = true;
16650 T = Context.IntTy;
16651 }
16652
16653 QualType EltTy = Context.getBaseElementType(T);
16654 if (!EltTy->isDependentType() && !EltTy->containsErrors()) {
16655 if (RequireCompleteSizedType(Loc, EltTy,
16656 diag::err_field_incomplete_or_sizeless)) {
16657 // Fields of incomplete type force their record to be invalid.
16658 Record->setInvalidDecl();
16659 InvalidDecl = true;
16660 } else {
16661 NamedDecl *Def;
16662 EltTy->isIncompleteType(&Def);
16663 if (Def && Def->isInvalidDecl()) {
16664 Record->setInvalidDecl();
16665 InvalidDecl = true;
16666 }
16667 }
16668 }
16669
16670 // TR 18037 does not allow fields to be declared with address space
16671 if (T.hasAddressSpace() || T->isDependentAddressSpaceType() ||
16672 T->getBaseElementTypeUnsafe()->isDependentAddressSpaceType()) {
16673 Diag(Loc, diag::err_field_with_address_space);
16674 Record->setInvalidDecl();
16675 InvalidDecl = true;
16676 }
16677
16678 if (LangOpts.OpenCL) {
16679 // OpenCL v1.2 s6.9b,r & OpenCL v2.0 s6.12.5 - The following types cannot be
16680 // used as structure or union field: image, sampler, event or block types.
16681 if (T->isEventT() || T->isImageType() || T->isSamplerT() ||
16682 T->isBlockPointerType()) {
16683 Diag(Loc, diag::err_opencl_type_struct_or_union_field) << T;
16684 Record->setInvalidDecl();
16685 InvalidDecl = true;
16686 }
16687 // OpenCL v1.2 s6.9.c: bitfields are not supported.
16688 if (BitWidth) {
16689 Diag(Loc, diag::err_opencl_bitfields);
16690 InvalidDecl = true;
16691 }
16692 }
16693
16694 // Anonymous bit-fields cannot be cv-qualified (CWG 2229).
16695 if (!InvalidDecl && getLangOpts().CPlusPlus && !II && BitWidth &&
16696 T.hasQualifiers()) {
16697 InvalidDecl = true;
16698 Diag(Loc, diag::err_anon_bitfield_qualifiers);
16699 }
16700
16701 // C99 6.7.2.1p8: A member of a structure or union may have any type other
16702 // than a variably modified type.
16703 if (!InvalidDecl && T->isVariablyModifiedType()) {
16704 if (!tryToFixVariablyModifiedVarType(
16705 *this, TInfo, T, Loc, diag::err_typecheck_field_variable_size))
16706 InvalidDecl = true;
16707 }
16708
16709 // Fields can not have abstract class types
16710 if (!InvalidDecl && RequireNonAbstractType(Loc, T,
16711 diag::err_abstract_type_in_decl,
16712 AbstractFieldType))
16713 InvalidDecl = true;
16714
16715 bool ZeroWidth = false;
16716 if (InvalidDecl)
16717 BitWidth = nullptr;
16718 // If this is declared as a bit-field, check the bit-field.
16719 if (BitWidth) {
16720 BitWidth = VerifyBitField(Loc, II, T, Record->isMsStruct(Context), BitWidth,
16721 &ZeroWidth).get();
16722 if (!BitWidth) {
16723 InvalidDecl = true;
16724 BitWidth = nullptr;
16725 ZeroWidth = false;
16726 }
16727 }
16728
16729 // Check that 'mutable' is consistent with the type of the declaration.
16730 if (!InvalidDecl && Mutable) {
16731 unsigned DiagID = 0;
16732 if (T->isReferenceType())
16733 DiagID = getLangOpts().MSVCCompat ? diag::ext_mutable_reference
16734 : diag::err_mutable_reference;
16735 else if (T.isConstQualified())
16736 DiagID = diag::err_mutable_const;
16737
16738 if (DiagID) {
16739 SourceLocation ErrLoc = Loc;
16740 if (D && D->getDeclSpec().getStorageClassSpecLoc().isValid())
16741 ErrLoc = D->getDeclSpec().getStorageClassSpecLoc();
16742 Diag(ErrLoc, DiagID);
16743 if (DiagID != diag::ext_mutable_reference) {
16744 Mutable = false;
16745 InvalidDecl = true;
16746 }
16747 }
16748 }
16749
16750 // C++11 [class.union]p8 (DR1460):
16751 // At most one variant member of a union may have a
16752 // brace-or-equal-initializer.
16753 if (InitStyle != ICIS_NoInit)
16754 checkDuplicateDefaultInit(*this, cast<CXXRecordDecl>(Record), Loc);
16755
16756 FieldDecl *NewFD = FieldDecl::Create(Context, Record, TSSL, Loc, II, T, TInfo,
16757 BitWidth, Mutable, InitStyle);
16758 if (InvalidDecl)
16759 NewFD->setInvalidDecl();
16760
16761 if (PrevDecl && !isa<TagDecl>(PrevDecl)) {
16762 Diag(Loc, diag::err_duplicate_member) << II;
16763 Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
16764 NewFD->setInvalidDecl();
16765 }
16766
16767 if (!InvalidDecl && getLangOpts().CPlusPlus) {
16768 if (Record->isUnion()) {
16769 if (const RecordType *RT = EltTy->getAs<RecordType>()) {
16770 CXXRecordDecl* RDecl = cast<CXXRecordDecl>(RT->getDecl());
16771 if (RDecl->getDefinition()) {
16772 // C++ [class.union]p1: An object of a class with a non-trivial
16773 // constructor, a non-trivial copy constructor, a non-trivial
16774 // destructor, or a non-trivial copy assignment operator
16775 // cannot be a member of a union, nor can an array of such
16776 // objects.
16777 if (CheckNontrivialField(NewFD))
16778 NewFD->setInvalidDecl();
16779 }
16780 }
16781
16782 // C++ [class.union]p1: If a union contains a member of reference type,
16783 // the program is ill-formed, except when compiling with MSVC extensions
16784 // enabled.
16785 if (EltTy->isReferenceType()) {
16786 Diag(NewFD->getLocation(), getLangOpts().MicrosoftExt ?
16787 diag::ext_union_member_of_reference_type :
16788 diag::err_union_member_of_reference_type)
16789 << NewFD->getDeclName() << EltTy;
16790 if (!getLangOpts().MicrosoftExt)
16791 NewFD->setInvalidDecl();
16792 }
16793 }
16794 }
16795
16796 // FIXME: We need to pass in the attributes given an AST
16797 // representation, not a parser representation.
16798 if (D) {
16799 // FIXME: The current scope is almost... but not entirely... correct here.
16800 ProcessDeclAttributes(getCurScope(), NewFD, *D);
16801
16802 if (NewFD->hasAttrs())
16803 CheckAlignasUnderalignment(NewFD);
16804 }
16805
16806 // In auto-retain/release, infer strong retension for fields of
16807 // retainable type.
16808 if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(NewFD))
16809 NewFD->setInvalidDecl();
16810
16811 if (T.isObjCGCWeak())
16812 Diag(Loc, diag::warn_attribute_weak_on_field);
16813
16814 // PPC MMA non-pointer types are not allowed as field types.
16815 if (Context.getTargetInfo().getTriple().isPPC64() &&
16816 CheckPPCMMAType(T, NewFD->getLocation()))
16817 NewFD->setInvalidDecl();
16818
16819 NewFD->setAccess(AS);
16820 return NewFD;
16821 }
16822
CheckNontrivialField(FieldDecl * FD)16823 bool Sema::CheckNontrivialField(FieldDecl *FD) {
16824 assert(FD);
16825 assert(getLangOpts().CPlusPlus && "valid check only for C++");
16826
16827 if (FD->isInvalidDecl() || FD->getType()->isDependentType())
16828 return false;
16829
16830 QualType EltTy = Context.getBaseElementType(FD->getType());
16831 if (const RecordType *RT = EltTy->getAs<RecordType>()) {
16832 CXXRecordDecl *RDecl = cast<CXXRecordDecl>(RT->getDecl());
16833 if (RDecl->getDefinition()) {
16834 // We check for copy constructors before constructors
16835 // because otherwise we'll never get complaints about
16836 // copy constructors.
16837
16838 CXXSpecialMember member = CXXInvalid;
16839 // We're required to check for any non-trivial constructors. Since the
16840 // implicit default constructor is suppressed if there are any
16841 // user-declared constructors, we just need to check that there is a
16842 // trivial default constructor and a trivial copy constructor. (We don't
16843 // worry about move constructors here, since this is a C++98 check.)
16844 if (RDecl->hasNonTrivialCopyConstructor())
16845 member = CXXCopyConstructor;
16846 else if (!RDecl->hasTrivialDefaultConstructor())
16847 member = CXXDefaultConstructor;
16848 else if (RDecl->hasNonTrivialCopyAssignment())
16849 member = CXXCopyAssignment;
16850 else if (RDecl->hasNonTrivialDestructor())
16851 member = CXXDestructor;
16852
16853 if (member != CXXInvalid) {
16854 if (!getLangOpts().CPlusPlus11 &&
16855 getLangOpts().ObjCAutoRefCount && RDecl->hasObjectMember()) {
16856 // Objective-C++ ARC: it is an error to have a non-trivial field of
16857 // a union. However, system headers in Objective-C programs
16858 // occasionally have Objective-C lifetime objects within unions,
16859 // and rather than cause the program to fail, we make those
16860 // members unavailable.
16861 SourceLocation Loc = FD->getLocation();
16862 if (getSourceManager().isInSystemHeader(Loc)) {
16863 if (!FD->hasAttr<UnavailableAttr>())
16864 FD->addAttr(UnavailableAttr::CreateImplicit(Context, "",
16865 UnavailableAttr::IR_ARCFieldWithOwnership, Loc));
16866 return false;
16867 }
16868 }
16869
16870 Diag(FD->getLocation(), getLangOpts().CPlusPlus11 ?
16871 diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member :
16872 diag::err_illegal_union_or_anon_struct_member)
16873 << FD->getParent()->isUnion() << FD->getDeclName() << member;
16874 DiagnoseNontrivial(RDecl, member);
16875 return !getLangOpts().CPlusPlus11;
16876 }
16877 }
16878 }
16879
16880 return false;
16881 }
16882
16883 /// TranslateIvarVisibility - Translate visibility from a token ID to an
16884 /// AST enum value.
16885 static ObjCIvarDecl::AccessControl
TranslateIvarVisibility(tok::ObjCKeywordKind ivarVisibility)16886 TranslateIvarVisibility(tok::ObjCKeywordKind ivarVisibility) {
16887 switch (ivarVisibility) {
16888 default: llvm_unreachable("Unknown visitibility kind");
16889 case tok::objc_private: return ObjCIvarDecl::Private;
16890 case tok::objc_public: return ObjCIvarDecl::Public;
16891 case tok::objc_protected: return ObjCIvarDecl::Protected;
16892 case tok::objc_package: return ObjCIvarDecl::Package;
16893 }
16894 }
16895
16896 /// ActOnIvar - Each ivar field of an objective-c class is passed into this
16897 /// in order to create an IvarDecl object for it.
ActOnIvar(Scope * S,SourceLocation DeclStart,Declarator & D,Expr * BitfieldWidth,tok::ObjCKeywordKind Visibility)16898 Decl *Sema::ActOnIvar(Scope *S,
16899 SourceLocation DeclStart,
16900 Declarator &D, Expr *BitfieldWidth,
16901 tok::ObjCKeywordKind Visibility) {
16902
16903 IdentifierInfo *II = D.getIdentifier();
16904 Expr *BitWidth = (Expr*)BitfieldWidth;
16905 SourceLocation Loc = DeclStart;
16906 if (II) Loc = D.getIdentifierLoc();
16907
16908 // FIXME: Unnamed fields can be handled in various different ways, for
16909 // example, unnamed unions inject all members into the struct namespace!
16910
16911 TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
16912 QualType T = TInfo->getType();
16913
16914 if (BitWidth) {
16915 // 6.7.2.1p3, 6.7.2.1p4
16916 BitWidth = VerifyBitField(Loc, II, T, /*IsMsStruct*/false, BitWidth).get();
16917 if (!BitWidth)
16918 D.setInvalidType();
16919 } else {
16920 // Not a bitfield.
16921
16922 // validate II.
16923
16924 }
16925 if (T->isReferenceType()) {
16926 Diag(Loc, diag::err_ivar_reference_type);
16927 D.setInvalidType();
16928 }
16929 // C99 6.7.2.1p8: A member of a structure or union may have any type other
16930 // than a variably modified type.
16931 else if (T->isVariablyModifiedType()) {
16932 if (!tryToFixVariablyModifiedVarType(
16933 *this, TInfo, T, Loc, diag::err_typecheck_ivar_variable_size))
16934 D.setInvalidType();
16935 }
16936
16937 // Get the visibility (access control) for this ivar.
16938 ObjCIvarDecl::AccessControl ac =
16939 Visibility != tok::objc_not_keyword ? TranslateIvarVisibility(Visibility)
16940 : ObjCIvarDecl::None;
16941 // Must set ivar's DeclContext to its enclosing interface.
16942 ObjCContainerDecl *EnclosingDecl = cast<ObjCContainerDecl>(CurContext);
16943 if (!EnclosingDecl || EnclosingDecl->isInvalidDecl())
16944 return nullptr;
16945 ObjCContainerDecl *EnclosingContext;
16946 if (ObjCImplementationDecl *IMPDecl =
16947 dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {
16948 if (LangOpts.ObjCRuntime.isFragile()) {
16949 // Case of ivar declared in an implementation. Context is that of its class.
16950 EnclosingContext = IMPDecl->getClassInterface();
16951 assert(EnclosingContext && "Implementation has no class interface!");
16952 }
16953 else
16954 EnclosingContext = EnclosingDecl;
16955 } else {
16956 if (ObjCCategoryDecl *CDecl =
16957 dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) {
16958 if (LangOpts.ObjCRuntime.isFragile() || !CDecl->IsClassExtension()) {
16959 Diag(Loc, diag::err_misplaced_ivar) << CDecl->IsClassExtension();
16960 return nullptr;
16961 }
16962 }
16963 EnclosingContext = EnclosingDecl;
16964 }
16965
16966 // Construct the decl.
16967 ObjCIvarDecl *NewID = ObjCIvarDecl::Create(Context, EnclosingContext,
16968 DeclStart, Loc, II, T,
16969 TInfo, ac, (Expr *)BitfieldWidth);
16970
16971 if (II) {
16972 NamedDecl *PrevDecl = LookupSingleName(S, II, Loc, LookupMemberName,
16973 ForVisibleRedeclaration);
16974 if (PrevDecl && isDeclInScope(PrevDecl, EnclosingContext, S)
16975 && !isa<TagDecl>(PrevDecl)) {
16976 Diag(Loc, diag::err_duplicate_member) << II;
16977 Diag(PrevDecl->getLocation(), diag::note_previous_declaration);
16978 NewID->setInvalidDecl();
16979 }
16980 }
16981
16982 // Process attributes attached to the ivar.
16983 ProcessDeclAttributes(S, NewID, D);
16984
16985 if (D.isInvalidType())
16986 NewID->setInvalidDecl();
16987
16988 // In ARC, infer 'retaining' for ivars of retainable type.
16989 if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(NewID))
16990 NewID->setInvalidDecl();
16991
16992 if (D.getDeclSpec().isModulePrivateSpecified())
16993 NewID->setModulePrivate();
16994
16995 if (II) {
16996 // FIXME: When interfaces are DeclContexts, we'll need to add
16997 // these to the interface.
16998 S->AddDecl(NewID);
16999 IdResolver.AddDecl(NewID);
17000 }
17001
17002 if (LangOpts.ObjCRuntime.isNonFragile() &&
17003 !NewID->isInvalidDecl() && isa<ObjCInterfaceDecl>(EnclosingDecl))
17004 Diag(Loc, diag::warn_ivars_in_interface);
17005
17006 return NewID;
17007 }
17008
17009 /// ActOnLastBitfield - This routine handles synthesized bitfields rules for
17010 /// class and class extensions. For every class \@interface and class
17011 /// extension \@interface, if the last ivar is a bitfield of any type,
17012 /// then add an implicit `char :0` ivar to the end of that interface.
ActOnLastBitfield(SourceLocation DeclLoc,SmallVectorImpl<Decl * > & AllIvarDecls)17013 void Sema::ActOnLastBitfield(SourceLocation DeclLoc,
17014 SmallVectorImpl<Decl *> &AllIvarDecls) {
17015 if (LangOpts.ObjCRuntime.isFragile() || AllIvarDecls.empty())
17016 return;
17017
17018 Decl *ivarDecl = AllIvarDecls[AllIvarDecls.size()-1];
17019 ObjCIvarDecl *Ivar = cast<ObjCIvarDecl>(ivarDecl);
17020
17021 if (!Ivar->isBitField() || Ivar->isZeroLengthBitField(Context))
17022 return;
17023 ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CurContext);
17024 if (!ID) {
17025 if (ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(CurContext)) {
17026 if (!CD->IsClassExtension())
17027 return;
17028 }
17029 // No need to add this to end of @implementation.
17030 else
17031 return;
17032 }
17033 // All conditions are met. Add a new bitfield to the tail end of ivars.
17034 llvm::APInt Zero(Context.getTypeSize(Context.IntTy), 0);
17035 Expr * BW = IntegerLiteral::Create(Context, Zero, Context.IntTy, DeclLoc);
17036
17037 Ivar = ObjCIvarDecl::Create(Context, cast<ObjCContainerDecl>(CurContext),
17038 DeclLoc, DeclLoc, nullptr,
17039 Context.CharTy,
17040 Context.getTrivialTypeSourceInfo(Context.CharTy,
17041 DeclLoc),
17042 ObjCIvarDecl::Private, BW,
17043 true);
17044 AllIvarDecls.push_back(Ivar);
17045 }
17046
ActOnFields(Scope * S,SourceLocation RecLoc,Decl * EnclosingDecl,ArrayRef<Decl * > Fields,SourceLocation LBrac,SourceLocation RBrac,const ParsedAttributesView & Attrs)17047 void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl,
17048 ArrayRef<Decl *> Fields, SourceLocation LBrac,
17049 SourceLocation RBrac,
17050 const ParsedAttributesView &Attrs) {
17051 assert(EnclosingDecl && "missing record or interface decl");
17052
17053 // If this is an Objective-C @implementation or category and we have
17054 // new fields here we should reset the layout of the interface since
17055 // it will now change.
17056 if (!Fields.empty() && isa<ObjCContainerDecl>(EnclosingDecl)) {
17057 ObjCContainerDecl *DC = cast<ObjCContainerDecl>(EnclosingDecl);
17058 switch (DC->getKind()) {
17059 default: break;
17060 case Decl::ObjCCategory:
17061 Context.ResetObjCLayout(cast<ObjCCategoryDecl>(DC)->getClassInterface());
17062 break;
17063 case Decl::ObjCImplementation:
17064 Context.
17065 ResetObjCLayout(cast<ObjCImplementationDecl>(DC)->getClassInterface());
17066 break;
17067 }
17068 }
17069
17070 RecordDecl *Record = dyn_cast<RecordDecl>(EnclosingDecl);
17071 CXXRecordDecl *CXXRecord = dyn_cast<CXXRecordDecl>(EnclosingDecl);
17072
17073 // Start counting up the number of named members; make sure to include
17074 // members of anonymous structs and unions in the total.
17075 unsigned NumNamedMembers = 0;
17076 if (Record) {
17077 for (const auto *I : Record->decls()) {
17078 if (const auto *IFD = dyn_cast<IndirectFieldDecl>(I))
17079 if (IFD->getDeclName())
17080 ++NumNamedMembers;
17081 }
17082 }
17083
17084 // Verify that all the fields are okay.
17085 SmallVector<FieldDecl*, 32> RecFields;
17086
17087 for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end();
17088 i != end; ++i) {
17089 FieldDecl *FD = cast<FieldDecl>(*i);
17090
17091 // Get the type for the field.
17092 const Type *FDTy = FD->getType().getTypePtr();
17093
17094 if (!FD->isAnonymousStructOrUnion()) {
17095 // Remember all fields written by the user.
17096 RecFields.push_back(FD);
17097 }
17098
17099 // If the field is already invalid for some reason, don't emit more
17100 // diagnostics about it.
17101 if (FD->isInvalidDecl()) {
17102 EnclosingDecl->setInvalidDecl();
17103 continue;
17104 }
17105
17106 // C99 6.7.2.1p2:
17107 // A structure or union shall not contain a member with
17108 // incomplete or function type (hence, a structure shall not
17109 // contain an instance of itself, but may contain a pointer to
17110 // an instance of itself), except that the last member of a
17111 // structure with more than one named member may have incomplete
17112 // array type; such a structure (and any union containing,
17113 // possibly recursively, a member that is such a structure)
17114 // shall not be a member of a structure or an element of an
17115 // array.
17116 bool IsLastField = (i + 1 == Fields.end());
17117 if (FDTy->isFunctionType()) {
17118 // Field declared as a function.
17119 Diag(FD->getLocation(), diag::err_field_declared_as_function)
17120 << FD->getDeclName();
17121 FD->setInvalidDecl();
17122 EnclosingDecl->setInvalidDecl();
17123 continue;
17124 } else if (FDTy->isIncompleteArrayType() &&
17125 (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {
17126 if (Record) {
17127 // Flexible array member.
17128 // Microsoft and g++ is more permissive regarding flexible array.
17129 // It will accept flexible array in union and also
17130 // as the sole element of a struct/class.
17131 unsigned DiagID = 0;
17132 if (!Record->isUnion() && !IsLastField) {
17133 Diag(FD->getLocation(), diag::err_flexible_array_not_at_end)
17134 << FD->getDeclName() << FD->getType() << Record->getTagKind();
17135 Diag((*(i + 1))->getLocation(), diag::note_next_field_declaration);
17136 FD->setInvalidDecl();
17137 EnclosingDecl->setInvalidDecl();
17138 continue;
17139 } else if (Record->isUnion())
17140 DiagID = getLangOpts().MicrosoftExt
17141 ? diag::ext_flexible_array_union_ms
17142 : getLangOpts().CPlusPlus
17143 ? diag::ext_flexible_array_union_gnu
17144 : diag::err_flexible_array_union;
17145 else if (NumNamedMembers < 1)
17146 DiagID = getLangOpts().MicrosoftExt
17147 ? diag::ext_flexible_array_empty_aggregate_ms
17148 : getLangOpts().CPlusPlus
17149 ? diag::ext_flexible_array_empty_aggregate_gnu
17150 : diag::err_flexible_array_empty_aggregate;
17151
17152 if (DiagID)
17153 Diag(FD->getLocation(), DiagID) << FD->getDeclName()
17154 << Record->getTagKind();
17155 // While the layout of types that contain virtual bases is not specified
17156 // by the C++ standard, both the Itanium and Microsoft C++ ABIs place
17157 // virtual bases after the derived members. This would make a flexible
17158 // array member declared at the end of an object not adjacent to the end
17159 // of the type.
17160 if (CXXRecord && CXXRecord->getNumVBases() != 0)
17161 Diag(FD->getLocation(), diag::err_flexible_array_virtual_base)
17162 << FD->getDeclName() << Record->getTagKind();
17163 if (!getLangOpts().C99)
17164 Diag(FD->getLocation(), diag::ext_c99_flexible_array_member)
17165 << FD->getDeclName() << Record->getTagKind();
17166
17167 // If the element type has a non-trivial destructor, we would not
17168 // implicitly destroy the elements, so disallow it for now.
17169 //
17170 // FIXME: GCC allows this. We should probably either implicitly delete
17171 // the destructor of the containing class, or just allow this.
17172 QualType BaseElem = Context.getBaseElementType(FD->getType());
17173 if (!BaseElem->isDependentType() && BaseElem.isDestructedType()) {
17174 Diag(FD->getLocation(), diag::err_flexible_array_has_nontrivial_dtor)
17175 << FD->getDeclName() << FD->getType();
17176 FD->setInvalidDecl();
17177 EnclosingDecl->setInvalidDecl();
17178 continue;
17179 }
17180 // Okay, we have a legal flexible array member at the end of the struct.
17181 Record->setHasFlexibleArrayMember(true);
17182 } else {
17183 // In ObjCContainerDecl ivars with incomplete array type are accepted,
17184 // unless they are followed by another ivar. That check is done
17185 // elsewhere, after synthesized ivars are known.
17186 }
17187 } else if (!FDTy->isDependentType() &&
17188 RequireCompleteSizedType(
17189 FD->getLocation(), FD->getType(),
17190 diag::err_field_incomplete_or_sizeless)) {
17191 // Incomplete type
17192 FD->setInvalidDecl();
17193 EnclosingDecl->setInvalidDecl();
17194 continue;
17195 } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {
17196 if (Record && FDTTy->getDecl()->hasFlexibleArrayMember()) {
17197 // A type which contains a flexible array member is considered to be a
17198 // flexible array member.
17199 Record->setHasFlexibleArrayMember(true);
17200 if (!Record->isUnion()) {
17201 // If this is a struct/class and this is not the last element, reject
17202 // it. Note that GCC supports variable sized arrays in the middle of
17203 // structures.
17204 if (!IsLastField)
17205 Diag(FD->getLocation(), diag::ext_variable_sized_type_in_struct)
17206 << FD->getDeclName() << FD->getType();
17207 else {
17208 // We support flexible arrays at the end of structs in
17209 // other structs as an extension.
17210 Diag(FD->getLocation(), diag::ext_flexible_array_in_struct)
17211 << FD->getDeclName();
17212 }
17213 }
17214 }
17215 if (isa<ObjCContainerDecl>(EnclosingDecl) &&
17216 RequireNonAbstractType(FD->getLocation(), FD->getType(),
17217 diag::err_abstract_type_in_decl,
17218 AbstractIvarType)) {
17219 // Ivars can not have abstract class types
17220 FD->setInvalidDecl();
17221 }
17222 if (Record && FDTTy->getDecl()->hasObjectMember())
17223 Record->setHasObjectMember(true);
17224 if (Record && FDTTy->getDecl()->hasVolatileMember())
17225 Record->setHasVolatileMember(true);
17226 } else if (FDTy->isObjCObjectType()) {
17227 /// A field cannot be an Objective-c object
17228 Diag(FD->getLocation(), diag::err_statically_allocated_object)
17229 << FixItHint::CreateInsertion(FD->getLocation(), "*");
17230 QualType T = Context.getObjCObjectPointerType(FD->getType());
17231 FD->setType(T);
17232 } else if (Record && Record->isUnion() &&
17233 FD->getType().hasNonTrivialObjCLifetime() &&
17234 getSourceManager().isInSystemHeader(FD->getLocation()) &&
17235 !getLangOpts().CPlusPlus && !FD->hasAttr<UnavailableAttr>() &&
17236 (FD->getType().getObjCLifetime() != Qualifiers::OCL_Strong ||
17237 !Context.hasDirectOwnershipQualifier(FD->getType()))) {
17238 // For backward compatibility, fields of C unions declared in system
17239 // headers that have non-trivial ObjC ownership qualifications are marked
17240 // as unavailable unless the qualifier is explicit and __strong. This can
17241 // break ABI compatibility between programs compiled with ARC and MRR, but
17242 // is a better option than rejecting programs using those unions under
17243 // ARC.
17244 FD->addAttr(UnavailableAttr::CreateImplicit(
17245 Context, "", UnavailableAttr::IR_ARCFieldWithOwnership,
17246 FD->getLocation()));
17247 } else if (getLangOpts().ObjC &&
17248 getLangOpts().getGC() != LangOptions::NonGC && Record &&
17249 !Record->hasObjectMember()) {
17250 if (FD->getType()->isObjCObjectPointerType() ||
17251 FD->getType().isObjCGCStrong())
17252 Record->setHasObjectMember(true);
17253 else if (Context.getAsArrayType(FD->getType())) {
17254 QualType BaseType = Context.getBaseElementType(FD->getType());
17255 if (BaseType->isRecordType() &&
17256 BaseType->castAs<RecordType>()->getDecl()->hasObjectMember())
17257 Record->setHasObjectMember(true);
17258 else if (BaseType->isObjCObjectPointerType() ||
17259 BaseType.isObjCGCStrong())
17260 Record->setHasObjectMember(true);
17261 }
17262 }
17263
17264 if (Record && !getLangOpts().CPlusPlus &&
17265 !shouldIgnoreForRecordTriviality(FD)) {
17266 QualType FT = FD->getType();
17267 if (FT.isNonTrivialToPrimitiveDefaultInitialize()) {
17268 Record->setNonTrivialToPrimitiveDefaultInitialize(true);
17269 if (FT.hasNonTrivialToPrimitiveDefaultInitializeCUnion() ||
17270 Record->isUnion())
17271 Record->setHasNonTrivialToPrimitiveDefaultInitializeCUnion(true);
17272 }
17273 QualType::PrimitiveCopyKind PCK = FT.isNonTrivialToPrimitiveCopy();
17274 if (PCK != QualType::PCK_Trivial && PCK != QualType::PCK_VolatileTrivial) {
17275 Record->setNonTrivialToPrimitiveCopy(true);
17276 if (FT.hasNonTrivialToPrimitiveCopyCUnion() || Record->isUnion())
17277 Record->setHasNonTrivialToPrimitiveCopyCUnion(true);
17278 }
17279 if (FT.isDestructedType()) {
17280 Record->setNonTrivialToPrimitiveDestroy(true);
17281 Record->setParamDestroyedInCallee(true);
17282 if (FT.hasNonTrivialToPrimitiveDestructCUnion() || Record->isUnion())
17283 Record->setHasNonTrivialToPrimitiveDestructCUnion(true);
17284 }
17285
17286 if (const auto *RT = FT->getAs<RecordType>()) {
17287 if (RT->getDecl()->getArgPassingRestrictions() ==
17288 RecordDecl::APK_CanNeverPassInRegs)
17289 Record->setArgPassingRestrictions(RecordDecl::APK_CanNeverPassInRegs);
17290 } else if (FT.getQualifiers().getObjCLifetime() == Qualifiers::OCL_Weak)
17291 Record->setArgPassingRestrictions(RecordDecl::APK_CanNeverPassInRegs);
17292 }
17293
17294 if (Record && FD->getType().isVolatileQualified())
17295 Record->setHasVolatileMember(true);
17296 // Keep track of the number of named members.
17297 if (FD->getIdentifier())
17298 ++NumNamedMembers;
17299 }
17300
17301 // Okay, we successfully defined 'Record'.
17302 if (Record) {
17303 bool Completed = false;
17304 if (CXXRecord) {
17305 if (!CXXRecord->isInvalidDecl()) {
17306 // Set access bits correctly on the directly-declared conversions.
17307 for (CXXRecordDecl::conversion_iterator
17308 I = CXXRecord->conversion_begin(),
17309 E = CXXRecord->conversion_end(); I != E; ++I)
17310 I.setAccess((*I)->getAccess());
17311 }
17312
17313 // Add any implicitly-declared members to this class.
17314 AddImplicitlyDeclaredMembersToClass(CXXRecord);
17315
17316 if (!CXXRecord->isDependentType()) {
17317 if (!CXXRecord->isInvalidDecl()) {
17318 // If we have virtual base classes, we may end up finding multiple
17319 // final overriders for a given virtual function. Check for this
17320 // problem now.
17321 if (CXXRecord->getNumVBases()) {
17322 CXXFinalOverriderMap FinalOverriders;
17323 CXXRecord->getFinalOverriders(FinalOverriders);
17324
17325 for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
17326 MEnd = FinalOverriders.end();
17327 M != MEnd; ++M) {
17328 for (OverridingMethods::iterator SO = M->second.begin(),
17329 SOEnd = M->second.end();
17330 SO != SOEnd; ++SO) {
17331 assert(SO->second.size() > 0 &&
17332 "Virtual function without overriding functions?");
17333 if (SO->second.size() == 1)
17334 continue;
17335
17336 // C++ [class.virtual]p2:
17337 // In a derived class, if a virtual member function of a base
17338 // class subobject has more than one final overrider the
17339 // program is ill-formed.
17340 Diag(Record->getLocation(), diag::err_multiple_final_overriders)
17341 << (const NamedDecl *)M->first << Record;
17342 Diag(M->first->getLocation(),
17343 diag::note_overridden_virtual_function);
17344 for (OverridingMethods::overriding_iterator
17345 OM = SO->second.begin(),
17346 OMEnd = SO->second.end();
17347 OM != OMEnd; ++OM)
17348 Diag(OM->Method->getLocation(), diag::note_final_overrider)
17349 << (const NamedDecl *)M->first << OM->Method->getParent();
17350
17351 Record->setInvalidDecl();
17352 }
17353 }
17354 CXXRecord->completeDefinition(&FinalOverriders);
17355 Completed = true;
17356 }
17357 }
17358 }
17359 }
17360
17361 if (!Completed)
17362 Record->completeDefinition();
17363
17364 // Handle attributes before checking the layout.
17365 ProcessDeclAttributeList(S, Record, Attrs);
17366
17367 // We may have deferred checking for a deleted destructor. Check now.
17368 if (CXXRecord) {
17369 auto *Dtor = CXXRecord->getDestructor();
17370 if (Dtor && Dtor->isImplicit() &&
17371 ShouldDeleteSpecialMember(Dtor, CXXDestructor)) {
17372 CXXRecord->setImplicitDestructorIsDeleted();
17373 SetDeclDeleted(Dtor, CXXRecord->getLocation());
17374 }
17375 }
17376
17377 if (Record->hasAttrs()) {
17378 CheckAlignasUnderalignment(Record);
17379
17380 if (const MSInheritanceAttr *IA = Record->getAttr<MSInheritanceAttr>())
17381 checkMSInheritanceAttrOnDefinition(cast<CXXRecordDecl>(Record),
17382 IA->getRange(), IA->getBestCase(),
17383 IA->getInheritanceModel());
17384 }
17385
17386 // Check if the structure/union declaration is a type that can have zero
17387 // size in C. For C this is a language extension, for C++ it may cause
17388 // compatibility problems.
17389 bool CheckForZeroSize;
17390 if (!getLangOpts().CPlusPlus) {
17391 CheckForZeroSize = true;
17392 } else {
17393 // For C++ filter out types that cannot be referenced in C code.
17394 CXXRecordDecl *CXXRecord = cast<CXXRecordDecl>(Record);
17395 CheckForZeroSize =
17396 CXXRecord->getLexicalDeclContext()->isExternCContext() &&
17397 !CXXRecord->isDependentType() && !inTemplateInstantiation() &&
17398 CXXRecord->isCLike();
17399 }
17400 if (CheckForZeroSize) {
17401 bool ZeroSize = true;
17402 bool IsEmpty = true;
17403 unsigned NonBitFields = 0;
17404 for (RecordDecl::field_iterator I = Record->field_begin(),
17405 E = Record->field_end();
17406 (NonBitFields == 0 || ZeroSize) && I != E; ++I) {
17407 IsEmpty = false;
17408 if (I->isUnnamedBitfield()) {
17409 if (!I->isZeroLengthBitField(Context))
17410 ZeroSize = false;
17411 } else {
17412 ++NonBitFields;
17413 QualType FieldType = I->getType();
17414 if (FieldType->isIncompleteType() ||
17415 !Context.getTypeSizeInChars(FieldType).isZero())
17416 ZeroSize = false;
17417 }
17418 }
17419
17420 // Empty structs are an extension in C (C99 6.7.2.1p7). They are
17421 // allowed in C++, but warn if its declaration is inside
17422 // extern "C" block.
17423 if (ZeroSize) {
17424 Diag(RecLoc, getLangOpts().CPlusPlus ?
17425 diag::warn_zero_size_struct_union_in_extern_c :
17426 diag::warn_zero_size_struct_union_compat)
17427 << IsEmpty << Record->isUnion() << (NonBitFields > 1);
17428 }
17429
17430 // Structs without named members are extension in C (C99 6.7.2.1p7),
17431 // but are accepted by GCC.
17432 if (NonBitFields == 0 && !getLangOpts().CPlusPlus) {
17433 Diag(RecLoc, IsEmpty ? diag::ext_empty_struct_union :
17434 diag::ext_no_named_members_in_struct_union)
17435 << Record->isUnion();
17436 }
17437 }
17438 } else {
17439 ObjCIvarDecl **ClsFields =
17440 reinterpret_cast<ObjCIvarDecl**>(RecFields.data());
17441 if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(EnclosingDecl)) {
17442 ID->setEndOfDefinitionLoc(RBrac);
17443 // Add ivar's to class's DeclContext.
17444 for (unsigned i = 0, e = RecFields.size(); i != e; ++i) {
17445 ClsFields[i]->setLexicalDeclContext(ID);
17446 ID->addDecl(ClsFields[i]);
17447 }
17448 // Must enforce the rule that ivars in the base classes may not be
17449 // duplicates.
17450 if (ID->getSuperClass())
17451 DiagnoseDuplicateIvars(ID, ID->getSuperClass());
17452 } else if (ObjCImplementationDecl *IMPDecl =
17453 dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {
17454 assert(IMPDecl && "ActOnFields - missing ObjCImplementationDecl");
17455 for (unsigned I = 0, N = RecFields.size(); I != N; ++I)
17456 // Ivar declared in @implementation never belongs to the implementation.
17457 // Only it is in implementation's lexical context.
17458 ClsFields[I]->setLexicalDeclContext(IMPDecl);
17459 CheckImplementationIvars(IMPDecl, ClsFields, RecFields.size(), RBrac);
17460 IMPDecl->setIvarLBraceLoc(LBrac);
17461 IMPDecl->setIvarRBraceLoc(RBrac);
17462 } else if (ObjCCategoryDecl *CDecl =
17463 dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) {
17464 // case of ivars in class extension; all other cases have been
17465 // reported as errors elsewhere.
17466 // FIXME. Class extension does not have a LocEnd field.
17467 // CDecl->setLocEnd(RBrac);
17468 // Add ivar's to class extension's DeclContext.
17469 // Diagnose redeclaration of private ivars.
17470 ObjCInterfaceDecl *IDecl = CDecl->getClassInterface();
17471 for (unsigned i = 0, e = RecFields.size(); i != e; ++i) {
17472 if (IDecl) {
17473 if (const ObjCIvarDecl *ClsIvar =
17474 IDecl->getIvarDecl(ClsFields[i]->getIdentifier())) {
17475 Diag(ClsFields[i]->getLocation(),
17476 diag::err_duplicate_ivar_declaration);
17477 Diag(ClsIvar->getLocation(), diag::note_previous_definition);
17478 continue;
17479 }
17480 for (const auto *Ext : IDecl->known_extensions()) {
17481 if (const ObjCIvarDecl *ClsExtIvar
17482 = Ext->getIvarDecl(ClsFields[i]->getIdentifier())) {
17483 Diag(ClsFields[i]->getLocation(),
17484 diag::err_duplicate_ivar_declaration);
17485 Diag(ClsExtIvar->getLocation(), diag::note_previous_definition);
17486 continue;
17487 }
17488 }
17489 }
17490 ClsFields[i]->setLexicalDeclContext(CDecl);
17491 CDecl->addDecl(ClsFields[i]);
17492 }
17493 CDecl->setIvarLBraceLoc(LBrac);
17494 CDecl->setIvarRBraceLoc(RBrac);
17495 }
17496 }
17497 }
17498
17499 /// Determine whether the given integral value is representable within
17500 /// the given type T.
isRepresentableIntegerValue(ASTContext & Context,llvm::APSInt & Value,QualType T)17501 static bool isRepresentableIntegerValue(ASTContext &Context,
17502 llvm::APSInt &Value,
17503 QualType T) {
17504 assert((T->isIntegralType(Context) || T->isEnumeralType()) &&
17505 "Integral type required!");
17506 unsigned BitWidth = Context.getIntWidth(T);
17507
17508 if (Value.isUnsigned() || Value.isNonNegative()) {
17509 if (T->isSignedIntegerOrEnumerationType())
17510 --BitWidth;
17511 return Value.getActiveBits() <= BitWidth;
17512 }
17513 return Value.getMinSignedBits() <= BitWidth;
17514 }
17515
17516 // Given an integral type, return the next larger integral type
17517 // (or a NULL type of no such type exists).
getNextLargerIntegralType(ASTContext & Context,QualType T)17518 static QualType getNextLargerIntegralType(ASTContext &Context, QualType T) {
17519 // FIXME: Int128/UInt128 support, which also needs to be introduced into
17520 // enum checking below.
17521 assert((T->isIntegralType(Context) ||
17522 T->isEnumeralType()) && "Integral type required!");
17523 const unsigned NumTypes = 4;
17524 QualType SignedIntegralTypes[NumTypes] = {
17525 Context.ShortTy, Context.IntTy, Context.LongTy, Context.LongLongTy
17526 };
17527 QualType UnsignedIntegralTypes[NumTypes] = {
17528 Context.UnsignedShortTy, Context.UnsignedIntTy, Context.UnsignedLongTy,
17529 Context.UnsignedLongLongTy
17530 };
17531
17532 unsigned BitWidth = Context.getTypeSize(T);
17533 QualType *Types = T->isSignedIntegerOrEnumerationType()? SignedIntegralTypes
17534 : UnsignedIntegralTypes;
17535 for (unsigned I = 0; I != NumTypes; ++I)
17536 if (Context.getTypeSize(Types[I]) > BitWidth)
17537 return Types[I];
17538
17539 return QualType();
17540 }
17541
CheckEnumConstant(EnumDecl * Enum,EnumConstantDecl * LastEnumConst,SourceLocation IdLoc,IdentifierInfo * Id,Expr * Val)17542 EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum,
17543 EnumConstantDecl *LastEnumConst,
17544 SourceLocation IdLoc,
17545 IdentifierInfo *Id,
17546 Expr *Val) {
17547 unsigned IntWidth = Context.getTargetInfo().getIntWidth();
17548 llvm::APSInt EnumVal(IntWidth);
17549 QualType EltTy;
17550
17551 if (Val && DiagnoseUnexpandedParameterPack(Val, UPPC_EnumeratorValue))
17552 Val = nullptr;
17553
17554 if (Val)
17555 Val = DefaultLvalueConversion(Val).get();
17556
17557 if (Val) {
17558 if (Enum->isDependentType() || Val->isTypeDependent())
17559 EltTy = Context.DependentTy;
17560 else {
17561 // FIXME: We don't allow folding in C++11 mode for an enum with a fixed
17562 // underlying type, but do allow it in all other contexts.
17563 if (getLangOpts().CPlusPlus11 && Enum->isFixed()) {
17564 // C++11 [dcl.enum]p5: If the underlying type is fixed, [...] the
17565 // constant-expression in the enumerator-definition shall be a converted
17566 // constant expression of the underlying type.
17567 EltTy = Enum->getIntegerType();
17568 ExprResult Converted =
17569 CheckConvertedConstantExpression(Val, EltTy, EnumVal,
17570 CCEK_Enumerator);
17571 if (Converted.isInvalid())
17572 Val = nullptr;
17573 else
17574 Val = Converted.get();
17575 } else if (!Val->isValueDependent() &&
17576 !(Val =
17577 VerifyIntegerConstantExpression(Val, &EnumVal, AllowFold)
17578 .get())) {
17579 // C99 6.7.2.2p2: Make sure we have an integer constant expression.
17580 } else {
17581 if (Enum->isComplete()) {
17582 EltTy = Enum->getIntegerType();
17583
17584 // In Obj-C and Microsoft mode, require the enumeration value to be
17585 // representable in the underlying type of the enumeration. In C++11,
17586 // we perform a non-narrowing conversion as part of converted constant
17587 // expression checking.
17588 if (!isRepresentableIntegerValue(Context, EnumVal, EltTy)) {
17589 if (Context.getTargetInfo()
17590 .getTriple()
17591 .isWindowsMSVCEnvironment()) {
17592 Diag(IdLoc, diag::ext_enumerator_too_large) << EltTy;
17593 } else {
17594 Diag(IdLoc, diag::err_enumerator_too_large) << EltTy;
17595 }
17596 }
17597
17598 // Cast to the underlying type.
17599 Val = ImpCastExprToType(Val, EltTy,
17600 EltTy->isBooleanType() ? CK_IntegralToBoolean
17601 : CK_IntegralCast)
17602 .get();
17603 } else if (getLangOpts().CPlusPlus) {
17604 // C++11 [dcl.enum]p5:
17605 // If the underlying type is not fixed, the type of each enumerator
17606 // is the type of its initializing value:
17607 // - If an initializer is specified for an enumerator, the
17608 // initializing value has the same type as the expression.
17609 EltTy = Val->getType();
17610 } else {
17611 // C99 6.7.2.2p2:
17612 // The expression that defines the value of an enumeration constant
17613 // shall be an integer constant expression that has a value
17614 // representable as an int.
17615
17616 // Complain if the value is not representable in an int.
17617 if (!isRepresentableIntegerValue(Context, EnumVal, Context.IntTy))
17618 Diag(IdLoc, diag::ext_enum_value_not_int)
17619 << EnumVal.toString(10) << Val->getSourceRange()
17620 << (EnumVal.isUnsigned() || EnumVal.isNonNegative());
17621 else if (!Context.hasSameType(Val->getType(), Context.IntTy)) {
17622 // Force the type of the expression to 'int'.
17623 Val = ImpCastExprToType(Val, Context.IntTy, CK_IntegralCast).get();
17624 }
17625 EltTy = Val->getType();
17626 }
17627 }
17628 }
17629 }
17630
17631 if (!Val) {
17632 if (Enum->isDependentType())
17633 EltTy = Context.DependentTy;
17634 else if (!LastEnumConst) {
17635 // C++0x [dcl.enum]p5:
17636 // If the underlying type is not fixed, the type of each enumerator
17637 // is the type of its initializing value:
17638 // - If no initializer is specified for the first enumerator, the
17639 // initializing value has an unspecified integral type.
17640 //
17641 // GCC uses 'int' for its unspecified integral type, as does
17642 // C99 6.7.2.2p3.
17643 if (Enum->isFixed()) {
17644 EltTy = Enum->getIntegerType();
17645 }
17646 else {
17647 EltTy = Context.IntTy;
17648 }
17649 } else {
17650 // Assign the last value + 1.
17651 EnumVal = LastEnumConst->getInitVal();
17652 ++EnumVal;
17653 EltTy = LastEnumConst->getType();
17654
17655 // Check for overflow on increment.
17656 if (EnumVal < LastEnumConst->getInitVal()) {
17657 // C++0x [dcl.enum]p5:
17658 // If the underlying type is not fixed, the type of each enumerator
17659 // is the type of its initializing value:
17660 //
17661 // - Otherwise the type of the initializing value is the same as
17662 // the type of the initializing value of the preceding enumerator
17663 // unless the incremented value is not representable in that type,
17664 // in which case the type is an unspecified integral type
17665 // sufficient to contain the incremented value. If no such type
17666 // exists, the program is ill-formed.
17667 QualType T = getNextLargerIntegralType(Context, EltTy);
17668 if (T.isNull() || Enum->isFixed()) {
17669 // There is no integral type larger enough to represent this
17670 // value. Complain, then allow the value to wrap around.
17671 EnumVal = LastEnumConst->getInitVal();
17672 EnumVal = EnumVal.zext(EnumVal.getBitWidth() * 2);
17673 ++EnumVal;
17674 if (Enum->isFixed())
17675 // When the underlying type is fixed, this is ill-formed.
17676 Diag(IdLoc, diag::err_enumerator_wrapped)
17677 << EnumVal.toString(10)
17678 << EltTy;
17679 else
17680 Diag(IdLoc, diag::ext_enumerator_increment_too_large)
17681 << EnumVal.toString(10);
17682 } else {
17683 EltTy = T;
17684 }
17685
17686 // Retrieve the last enumerator's value, extent that type to the
17687 // type that is supposed to be large enough to represent the incremented
17688 // value, then increment.
17689 EnumVal = LastEnumConst->getInitVal();
17690 EnumVal.setIsSigned(EltTy->isSignedIntegerOrEnumerationType());
17691 EnumVal = EnumVal.zextOrTrunc(Context.getIntWidth(EltTy));
17692 ++EnumVal;
17693
17694 // If we're not in C++, diagnose the overflow of enumerator values,
17695 // which in C99 means that the enumerator value is not representable in
17696 // an int (C99 6.7.2.2p2). However, we support GCC's extension that
17697 // permits enumerator values that are representable in some larger
17698 // integral type.
17699 if (!getLangOpts().CPlusPlus && !T.isNull())
17700 Diag(IdLoc, diag::warn_enum_value_overflow);
17701 } else if (!getLangOpts().CPlusPlus &&
17702 !isRepresentableIntegerValue(Context, EnumVal, EltTy)) {
17703 // Enforce C99 6.7.2.2p2 even when we compute the next value.
17704 Diag(IdLoc, diag::ext_enum_value_not_int)
17705 << EnumVal.toString(10) << 1;
17706 }
17707 }
17708 }
17709
17710 if (!EltTy->isDependentType()) {
17711 // Make the enumerator value match the signedness and size of the
17712 // enumerator's type.
17713 EnumVal = EnumVal.extOrTrunc(Context.getIntWidth(EltTy));
17714 EnumVal.setIsSigned(EltTy->isSignedIntegerOrEnumerationType());
17715 }
17716
17717 return EnumConstantDecl::Create(Context, Enum, IdLoc, Id, EltTy,
17718 Val, EnumVal);
17719 }
17720
shouldSkipAnonEnumBody(Scope * S,IdentifierInfo * II,SourceLocation IILoc)17721 Sema::SkipBodyInfo Sema::shouldSkipAnonEnumBody(Scope *S, IdentifierInfo *II,
17722 SourceLocation IILoc) {
17723 if (!(getLangOpts().Modules || getLangOpts().ModulesLocalVisibility) ||
17724 !getLangOpts().CPlusPlus)
17725 return SkipBodyInfo();
17726
17727 // We have an anonymous enum definition. Look up the first enumerator to
17728 // determine if we should merge the definition with an existing one and
17729 // skip the body.
17730 NamedDecl *PrevDecl = LookupSingleName(S, II, IILoc, LookupOrdinaryName,
17731 forRedeclarationInCurContext());
17732 auto *PrevECD = dyn_cast_or_null<EnumConstantDecl>(PrevDecl);
17733 if (!PrevECD)
17734 return SkipBodyInfo();
17735
17736 EnumDecl *PrevED = cast<EnumDecl>(PrevECD->getDeclContext());
17737 NamedDecl *Hidden;
17738 if (!PrevED->getDeclName() && !hasVisibleDefinition(PrevED, &Hidden)) {
17739 SkipBodyInfo Skip;
17740 Skip.Previous = Hidden;
17741 return Skip;
17742 }
17743
17744 return SkipBodyInfo();
17745 }
17746
ActOnEnumConstant(Scope * S,Decl * theEnumDecl,Decl * lastEnumConst,SourceLocation IdLoc,IdentifierInfo * Id,const ParsedAttributesView & Attrs,SourceLocation EqualLoc,Expr * Val)17747 Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst,
17748 SourceLocation IdLoc, IdentifierInfo *Id,
17749 const ParsedAttributesView &Attrs,
17750 SourceLocation EqualLoc, Expr *Val) {
17751 EnumDecl *TheEnumDecl = cast<EnumDecl>(theEnumDecl);
17752 EnumConstantDecl *LastEnumConst =
17753 cast_or_null<EnumConstantDecl>(lastEnumConst);
17754
17755 // The scope passed in may not be a decl scope. Zip up the scope tree until
17756 // we find one that is.
17757 S = getNonFieldDeclScope(S);
17758
17759 // Verify that there isn't already something declared with this name in this
17760 // scope.
17761 LookupResult R(*this, Id, IdLoc, LookupOrdinaryName, ForVisibleRedeclaration);
17762 LookupName(R, S);
17763 NamedDecl *PrevDecl = R.getAsSingle<NamedDecl>();
17764
17765 if (PrevDecl && PrevDecl->isTemplateParameter()) {
17766 // Maybe we will complain about the shadowed template parameter.
17767 DiagnoseTemplateParameterShadow(IdLoc, PrevDecl);
17768 // Just pretend that we didn't see the previous declaration.
17769 PrevDecl = nullptr;
17770 }
17771
17772 // C++ [class.mem]p15:
17773 // If T is the name of a class, then each of the following shall have a name
17774 // different from T:
17775 // - every enumerator of every member of class T that is an unscoped
17776 // enumerated type
17777 if (getLangOpts().CPlusPlus && !TheEnumDecl->isScoped())
17778 DiagnoseClassNameShadow(TheEnumDecl->getDeclContext(),
17779 DeclarationNameInfo(Id, IdLoc));
17780
17781 EnumConstantDecl *New =
17782 CheckEnumConstant(TheEnumDecl, LastEnumConst, IdLoc, Id, Val);
17783 if (!New)
17784 return nullptr;
17785
17786 if (PrevDecl) {
17787 if (!TheEnumDecl->isScoped() && isa<ValueDecl>(PrevDecl)) {
17788 // Check for other kinds of shadowing not already handled.
17789 CheckShadow(New, PrevDecl, R);
17790 }
17791
17792 // When in C++, we may get a TagDecl with the same name; in this case the
17793 // enum constant will 'hide' the tag.
17794 assert((getLangOpts().CPlusPlus || !isa<TagDecl>(PrevDecl)) &&
17795 "Received TagDecl when not in C++!");
17796 if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {
17797 if (isa<EnumConstantDecl>(PrevDecl))
17798 Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;
17799 else
17800 Diag(IdLoc, diag::err_redefinition) << Id;
17801 notePreviousDefinition(PrevDecl, IdLoc);
17802 return nullptr;
17803 }
17804 }
17805
17806 // Process attributes.
17807 ProcessDeclAttributeList(S, New, Attrs);
17808 AddPragmaAttributes(S, New);
17809
17810 // Register this decl in the current scope stack.
17811 New->setAccess(TheEnumDecl->getAccess());
17812 PushOnScopeChains(New, S);
17813
17814 ActOnDocumentableDecl(New);
17815
17816 return New;
17817 }
17818
17819 // Returns true when the enum initial expression does not trigger the
17820 // duplicate enum warning. A few common cases are exempted as follows:
17821 // Element2 = Element1
17822 // Element2 = Element1 + 1
17823 // Element2 = Element1 - 1
17824 // Where Element2 and Element1 are from the same enum.
ValidDuplicateEnum(EnumConstantDecl * ECD,EnumDecl * Enum)17825 static bool ValidDuplicateEnum(EnumConstantDecl *ECD, EnumDecl *Enum) {
17826 Expr *InitExpr = ECD->getInitExpr();
17827 if (!InitExpr)
17828 return true;
17829 InitExpr = InitExpr->IgnoreImpCasts();
17830
17831 if (BinaryOperator *BO = dyn_cast<BinaryOperator>(InitExpr)) {
17832 if (!BO->isAdditiveOp())
17833 return true;
17834 IntegerLiteral *IL = dyn_cast<IntegerLiteral>(BO->getRHS());
17835 if (!IL)
17836 return true;
17837 if (IL->getValue() != 1)
17838 return true;
17839
17840 InitExpr = BO->getLHS();
17841 }
17842
17843 // This checks if the elements are from the same enum.
17844 DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(InitExpr);
17845 if (!DRE)
17846 return true;
17847
17848 EnumConstantDecl *EnumConstant = dyn_cast<EnumConstantDecl>(DRE->getDecl());
17849 if (!EnumConstant)
17850 return true;
17851
17852 if (cast<EnumDecl>(TagDecl::castFromDeclContext(ECD->getDeclContext())) !=
17853 Enum)
17854 return true;
17855
17856 return false;
17857 }
17858
17859 // Emits a warning when an element is implicitly set a value that
17860 // a previous element has already been set to.
CheckForDuplicateEnumValues(Sema & S,ArrayRef<Decl * > Elements,EnumDecl * Enum,QualType EnumType)17861 static void CheckForDuplicateEnumValues(Sema &S, ArrayRef<Decl *> Elements,
17862 EnumDecl *Enum, QualType EnumType) {
17863 // Avoid anonymous enums
17864 if (!Enum->getIdentifier())
17865 return;
17866
17867 // Only check for small enums.
17868 if (Enum->getNumPositiveBits() > 63 || Enum->getNumNegativeBits() > 64)
17869 return;
17870
17871 if (S.Diags.isIgnored(diag::warn_duplicate_enum_values, Enum->getLocation()))
17872 return;
17873
17874 typedef SmallVector<EnumConstantDecl *, 3> ECDVector;
17875 typedef SmallVector<std::unique_ptr<ECDVector>, 3> DuplicatesVector;
17876
17877 typedef llvm::PointerUnion<EnumConstantDecl*, ECDVector*> DeclOrVector;
17878
17879 // DenseMaps cannot contain the all ones int64_t value, so use unordered_map.
17880 typedef std::unordered_map<int64_t, DeclOrVector> ValueToVectorMap;
17881
17882 // Use int64_t as a key to avoid needing special handling for map keys.
17883 auto EnumConstantToKey = [](const EnumConstantDecl *D) {
17884 llvm::APSInt Val = D->getInitVal();
17885 return Val.isSigned() ? Val.getSExtValue() : Val.getZExtValue();
17886 };
17887
17888 DuplicatesVector DupVector;
17889 ValueToVectorMap EnumMap;
17890
17891 // Populate the EnumMap with all values represented by enum constants without
17892 // an initializer.
17893 for (auto *Element : Elements) {
17894 EnumConstantDecl *ECD = cast_or_null<EnumConstantDecl>(Element);
17895
17896 // Null EnumConstantDecl means a previous diagnostic has been emitted for
17897 // this constant. Skip this enum since it may be ill-formed.
17898 if (!ECD) {
17899 return;
17900 }
17901
17902 // Constants with initalizers are handled in the next loop.
17903 if (ECD->getInitExpr())
17904 continue;
17905
17906 // Duplicate values are handled in the next loop.
17907 EnumMap.insert({EnumConstantToKey(ECD), ECD});
17908 }
17909
17910 if (EnumMap.size() == 0)
17911 return;
17912
17913 // Create vectors for any values that has duplicates.
17914 for (auto *Element : Elements) {
17915 // The last loop returned if any constant was null.
17916 EnumConstantDecl *ECD = cast<EnumConstantDecl>(Element);
17917 if (!ValidDuplicateEnum(ECD, Enum))
17918 continue;
17919
17920 auto Iter = EnumMap.find(EnumConstantToKey(ECD));
17921 if (Iter == EnumMap.end())
17922 continue;
17923
17924 DeclOrVector& Entry = Iter->second;
17925 if (EnumConstantDecl *D = Entry.dyn_cast<EnumConstantDecl*>()) {
17926 // Ensure constants are different.
17927 if (D == ECD)
17928 continue;
17929
17930 // Create new vector and push values onto it.
17931 auto Vec = std::make_unique<ECDVector>();
17932 Vec->push_back(D);
17933 Vec->push_back(ECD);
17934
17935 // Update entry to point to the duplicates vector.
17936 Entry = Vec.get();
17937
17938 // Store the vector somewhere we can consult later for quick emission of
17939 // diagnostics.
17940 DupVector.emplace_back(std::move(Vec));
17941 continue;
17942 }
17943
17944 ECDVector *Vec = Entry.get<ECDVector*>();
17945 // Make sure constants are not added more than once.
17946 if (*Vec->begin() == ECD)
17947 continue;
17948
17949 Vec->push_back(ECD);
17950 }
17951
17952 // Emit diagnostics.
17953 for (const auto &Vec : DupVector) {
17954 assert(Vec->size() > 1 && "ECDVector should have at least 2 elements.");
17955
17956 // Emit warning for one enum constant.
17957 auto *FirstECD = Vec->front();
17958 S.Diag(FirstECD->getLocation(), diag::warn_duplicate_enum_values)
17959 << FirstECD << FirstECD->getInitVal().toString(10)
17960 << FirstECD->getSourceRange();
17961
17962 // Emit one note for each of the remaining enum constants with
17963 // the same value.
17964 for (auto *ECD : llvm::make_range(Vec->begin() + 1, Vec->end()))
17965 S.Diag(ECD->getLocation(), diag::note_duplicate_element)
17966 << ECD << ECD->getInitVal().toString(10)
17967 << ECD->getSourceRange();
17968 }
17969 }
17970
IsValueInFlagEnum(const EnumDecl * ED,const llvm::APInt & Val,bool AllowMask) const17971 bool Sema::IsValueInFlagEnum(const EnumDecl *ED, const llvm::APInt &Val,
17972 bool AllowMask) const {
17973 assert(ED->isClosedFlag() && "looking for value in non-flag or open enum");
17974 assert(ED->isCompleteDefinition() && "expected enum definition");
17975
17976 auto R = FlagBitsCache.insert(std::make_pair(ED, llvm::APInt()));
17977 llvm::APInt &FlagBits = R.first->second;
17978
17979 if (R.second) {
17980 for (auto *E : ED->enumerators()) {
17981 const auto &EVal = E->getInitVal();
17982 // Only single-bit enumerators introduce new flag values.
17983 if (EVal.isPowerOf2())
17984 FlagBits = FlagBits.zextOrSelf(EVal.getBitWidth()) | EVal;
17985 }
17986 }
17987
17988 // A value is in a flag enum if either its bits are a subset of the enum's
17989 // flag bits (the first condition) or we are allowing masks and the same is
17990 // true of its complement (the second condition). When masks are allowed, we
17991 // allow the common idiom of ~(enum1 | enum2) to be a valid enum value.
17992 //
17993 // While it's true that any value could be used as a mask, the assumption is
17994 // that a mask will have all of the insignificant bits set. Anything else is
17995 // likely a logic error.
17996 llvm::APInt FlagMask = ~FlagBits.zextOrTrunc(Val.getBitWidth());
17997 return !(FlagMask & Val) || (AllowMask && !(FlagMask & ~Val));
17998 }
17999
ActOnEnumBody(SourceLocation EnumLoc,SourceRange BraceRange,Decl * EnumDeclX,ArrayRef<Decl * > Elements,Scope * S,const ParsedAttributesView & Attrs)18000 void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange,
18001 Decl *EnumDeclX, ArrayRef<Decl *> Elements, Scope *S,
18002 const ParsedAttributesView &Attrs) {
18003 EnumDecl *Enum = cast<EnumDecl>(EnumDeclX);
18004 QualType EnumType = Context.getTypeDeclType(Enum);
18005
18006 ProcessDeclAttributeList(S, Enum, Attrs);
18007
18008 if (Enum->isDependentType()) {
18009 for (unsigned i = 0, e = Elements.size(); i != e; ++i) {
18010 EnumConstantDecl *ECD =
18011 cast_or_null<EnumConstantDecl>(Elements[i]);
18012 if (!ECD) continue;
18013
18014 ECD->setType(EnumType);
18015 }
18016
18017 Enum->completeDefinition(Context.DependentTy, Context.DependentTy, 0, 0);
18018 return;
18019 }
18020
18021 // TODO: If the result value doesn't fit in an int, it must be a long or long
18022 // long value. ISO C does not support this, but GCC does as an extension,
18023 // emit a warning.
18024 unsigned IntWidth = Context.getTargetInfo().getIntWidth();
18025 unsigned CharWidth = Context.getTargetInfo().getCharWidth();
18026 unsigned ShortWidth = Context.getTargetInfo().getShortWidth();
18027
18028 // Verify that all the values are okay, compute the size of the values, and
18029 // reverse the list.
18030 unsigned NumNegativeBits = 0;
18031 unsigned NumPositiveBits = 0;
18032
18033 // Keep track of whether all elements have type int.
18034 bool AllElementsInt = true;
18035
18036 for (unsigned i = 0, e = Elements.size(); i != e; ++i) {
18037 EnumConstantDecl *ECD =
18038 cast_or_null<EnumConstantDecl>(Elements[i]);
18039 if (!ECD) continue; // Already issued a diagnostic.
18040
18041 const llvm::APSInt &InitVal = ECD->getInitVal();
18042
18043 // Keep track of the size of positive and negative values.
18044 if (InitVal.isUnsigned() || InitVal.isNonNegative())
18045 NumPositiveBits = std::max(NumPositiveBits,
18046 (unsigned)InitVal.getActiveBits());
18047 else
18048 NumNegativeBits = std::max(NumNegativeBits,
18049 (unsigned)InitVal.getMinSignedBits());
18050
18051 // Keep track of whether every enum element has type int (very common).
18052 if (AllElementsInt)
18053 AllElementsInt = ECD->getType() == Context.IntTy;
18054 }
18055
18056 // Figure out the type that should be used for this enum.
18057 QualType BestType;
18058 unsigned BestWidth;
18059
18060 // C++0x N3000 [conv.prom]p3:
18061 // An rvalue of an unscoped enumeration type whose underlying
18062 // type is not fixed can be converted to an rvalue of the first
18063 // of the following types that can represent all the values of
18064 // the enumeration: int, unsigned int, long int, unsigned long
18065 // int, long long int, or unsigned long long int.
18066 // C99 6.4.4.3p2:
18067 // An identifier declared as an enumeration constant has type int.
18068 // The C99 rule is modified by a gcc extension
18069 QualType BestPromotionType;
18070
18071 bool Packed = Enum->hasAttr<PackedAttr>();
18072 // -fshort-enums is the equivalent to specifying the packed attribute on all
18073 // enum definitions.
18074 if (LangOpts.ShortEnums)
18075 Packed = true;
18076
18077 // If the enum already has a type because it is fixed or dictated by the
18078 // target, promote that type instead of analyzing the enumerators.
18079 if (Enum->isComplete()) {
18080 BestType = Enum->getIntegerType();
18081 if (BestType->isPromotableIntegerType())
18082 BestPromotionType = Context.getPromotedIntegerType(BestType);
18083 else
18084 BestPromotionType = BestType;
18085
18086 BestWidth = Context.getIntWidth(BestType);
18087 }
18088 else if (NumNegativeBits) {
18089 // If there is a negative value, figure out the smallest integer type (of
18090 // int/long/longlong) that fits.
18091 // If it's packed, check also if it fits a char or a short.
18092 if (Packed && NumNegativeBits <= CharWidth && NumPositiveBits < CharWidth) {
18093 BestType = Context.SignedCharTy;
18094 BestWidth = CharWidth;
18095 } else if (Packed && NumNegativeBits <= ShortWidth &&
18096 NumPositiveBits < ShortWidth) {
18097 BestType = Context.ShortTy;
18098 BestWidth = ShortWidth;
18099 } else if (NumNegativeBits <= IntWidth && NumPositiveBits < IntWidth) {
18100 BestType = Context.IntTy;
18101 BestWidth = IntWidth;
18102 } else {
18103 BestWidth = Context.getTargetInfo().getLongWidth();
18104
18105 if (NumNegativeBits <= BestWidth && NumPositiveBits < BestWidth) {
18106 BestType = Context.LongTy;
18107 } else {
18108 BestWidth = Context.getTargetInfo().getLongLongWidth();
18109
18110 if (NumNegativeBits > BestWidth || NumPositiveBits >= BestWidth)
18111 Diag(Enum->getLocation(), diag::ext_enum_too_large);
18112 BestType = Context.LongLongTy;
18113 }
18114 }
18115 BestPromotionType = (BestWidth <= IntWidth ? Context.IntTy : BestType);
18116 } else {
18117 // If there is no negative value, figure out the smallest type that fits
18118 // all of the enumerator values.
18119 // If it's packed, check also if it fits a char or a short.
18120 if (Packed && NumPositiveBits <= CharWidth) {
18121 BestType = Context.UnsignedCharTy;
18122 BestPromotionType = Context.IntTy;
18123 BestWidth = CharWidth;
18124 } else if (Packed && NumPositiveBits <= ShortWidth) {
18125 BestType = Context.UnsignedShortTy;
18126 BestPromotionType = Context.IntTy;
18127 BestWidth = ShortWidth;
18128 } else if (NumPositiveBits <= IntWidth) {
18129 BestType = Context.UnsignedIntTy;
18130 BestWidth = IntWidth;
18131 BestPromotionType
18132 = (NumPositiveBits == BestWidth || !getLangOpts().CPlusPlus)
18133 ? Context.UnsignedIntTy : Context.IntTy;
18134 } else if (NumPositiveBits <=
18135 (BestWidth = Context.getTargetInfo().getLongWidth())) {
18136 BestType = Context.UnsignedLongTy;
18137 BestPromotionType
18138 = (NumPositiveBits == BestWidth || !getLangOpts().CPlusPlus)
18139 ? Context.UnsignedLongTy : Context.LongTy;
18140 } else {
18141 BestWidth = Context.getTargetInfo().getLongLongWidth();
18142 assert(NumPositiveBits <= BestWidth &&
18143 "How could an initializer get larger than ULL?");
18144 BestType = Context.UnsignedLongLongTy;
18145 BestPromotionType
18146 = (NumPositiveBits == BestWidth || !getLangOpts().CPlusPlus)
18147 ? Context.UnsignedLongLongTy : Context.LongLongTy;
18148 }
18149 }
18150
18151 // Loop over all of the enumerator constants, changing their types to match
18152 // the type of the enum if needed.
18153 for (auto *D : Elements) {
18154 auto *ECD = cast_or_null<EnumConstantDecl>(D);
18155 if (!ECD) continue; // Already issued a diagnostic.
18156
18157 // Standard C says the enumerators have int type, but we allow, as an
18158 // extension, the enumerators to be larger than int size. If each
18159 // enumerator value fits in an int, type it as an int, otherwise type it the
18160 // same as the enumerator decl itself. This means that in "enum { X = 1U }"
18161 // that X has type 'int', not 'unsigned'.
18162
18163 // Determine whether the value fits into an int.
18164 llvm::APSInt InitVal = ECD->getInitVal();
18165
18166 // If it fits into an integer type, force it. Otherwise force it to match
18167 // the enum decl type.
18168 QualType NewTy;
18169 unsigned NewWidth;
18170 bool NewSign;
18171 if (!getLangOpts().CPlusPlus &&
18172 !Enum->isFixed() &&
18173 isRepresentableIntegerValue(Context, InitVal, Context.IntTy)) {
18174 NewTy = Context.IntTy;
18175 NewWidth = IntWidth;
18176 NewSign = true;
18177 } else if (ECD->getType() == BestType) {
18178 // Already the right type!
18179 if (getLangOpts().CPlusPlus)
18180 // C++ [dcl.enum]p4: Following the closing brace of an
18181 // enum-specifier, each enumerator has the type of its
18182 // enumeration.
18183 ECD->setType(EnumType);
18184 continue;
18185 } else {
18186 NewTy = BestType;
18187 NewWidth = BestWidth;
18188 NewSign = BestType->isSignedIntegerOrEnumerationType();
18189 }
18190
18191 // Adjust the APSInt value.
18192 InitVal = InitVal.extOrTrunc(NewWidth);
18193 InitVal.setIsSigned(NewSign);
18194 ECD->setInitVal(InitVal);
18195
18196 // Adjust the Expr initializer and type.
18197 if (ECD->getInitExpr() &&
18198 !Context.hasSameType(NewTy, ECD->getInitExpr()->getType()))
18199 ECD->setInitExpr(ImplicitCastExpr::Create(
18200 Context, NewTy, CK_IntegralCast, ECD->getInitExpr(),
18201 /*base paths*/ nullptr, VK_RValue, FPOptionsOverride()));
18202 if (getLangOpts().CPlusPlus)
18203 // C++ [dcl.enum]p4: Following the closing brace of an
18204 // enum-specifier, each enumerator has the type of its
18205 // enumeration.
18206 ECD->setType(EnumType);
18207 else
18208 ECD->setType(NewTy);
18209 }
18210
18211 Enum->completeDefinition(BestType, BestPromotionType,
18212 NumPositiveBits, NumNegativeBits);
18213
18214 CheckForDuplicateEnumValues(*this, Elements, Enum, EnumType);
18215
18216 if (Enum->isClosedFlag()) {
18217 for (Decl *D : Elements) {
18218 EnumConstantDecl *ECD = cast_or_null<EnumConstantDecl>(D);
18219 if (!ECD) continue; // Already issued a diagnostic.
18220
18221 llvm::APSInt InitVal = ECD->getInitVal();
18222 if (InitVal != 0 && !InitVal.isPowerOf2() &&
18223 !IsValueInFlagEnum(Enum, InitVal, true))
18224 Diag(ECD->getLocation(), diag::warn_flag_enum_constant_out_of_range)
18225 << ECD << Enum;
18226 }
18227 }
18228
18229 // Now that the enum type is defined, ensure it's not been underaligned.
18230 if (Enum->hasAttrs())
18231 CheckAlignasUnderalignment(Enum);
18232 }
18233
ActOnFileScopeAsmDecl(Expr * expr,SourceLocation StartLoc,SourceLocation EndLoc)18234 Decl *Sema::ActOnFileScopeAsmDecl(Expr *expr,
18235 SourceLocation StartLoc,
18236 SourceLocation EndLoc) {
18237 StringLiteral *AsmString = cast<StringLiteral>(expr);
18238
18239 FileScopeAsmDecl *New = FileScopeAsmDecl::Create(Context, CurContext,
18240 AsmString, StartLoc,
18241 EndLoc);
18242 CurContext->addDecl(New);
18243 return New;
18244 }
18245
ActOnPragmaRedefineExtname(IdentifierInfo * Name,IdentifierInfo * AliasName,SourceLocation PragmaLoc,SourceLocation NameLoc,SourceLocation AliasNameLoc)18246 void Sema::ActOnPragmaRedefineExtname(IdentifierInfo* Name,
18247 IdentifierInfo* AliasName,
18248 SourceLocation PragmaLoc,
18249 SourceLocation NameLoc,
18250 SourceLocation AliasNameLoc) {
18251 NamedDecl *PrevDecl = LookupSingleName(TUScope, Name, NameLoc,
18252 LookupOrdinaryName);
18253 AttributeCommonInfo Info(AliasName, SourceRange(AliasNameLoc),
18254 AttributeCommonInfo::AS_Pragma);
18255 AsmLabelAttr *Attr = AsmLabelAttr::CreateImplicit(
18256 Context, AliasName->getName(), /*LiteralLabel=*/true, Info);
18257
18258 // If a declaration that:
18259 // 1) declares a function or a variable
18260 // 2) has external linkage
18261 // already exists, add a label attribute to it.
18262 if (PrevDecl && (isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl))) {
18263 if (isDeclExternC(PrevDecl))
18264 PrevDecl->addAttr(Attr);
18265 else
18266 Diag(PrevDecl->getLocation(), diag::warn_redefine_extname_not_applied)
18267 << /*Variable*/(isa<FunctionDecl>(PrevDecl) ? 0 : 1) << PrevDecl;
18268 // Otherwise, add a label atttibute to ExtnameUndeclaredIdentifiers.
18269 } else
18270 (void)ExtnameUndeclaredIdentifiers.insert(std::make_pair(Name, Attr));
18271 }
18272
ActOnPragmaWeakID(IdentifierInfo * Name,SourceLocation PragmaLoc,SourceLocation NameLoc)18273 void Sema::ActOnPragmaWeakID(IdentifierInfo* Name,
18274 SourceLocation PragmaLoc,
18275 SourceLocation NameLoc) {
18276 Decl *PrevDecl = LookupSingleName(TUScope, Name, NameLoc, LookupOrdinaryName);
18277
18278 if (PrevDecl) {
18279 PrevDecl->addAttr(WeakAttr::CreateImplicit(Context, PragmaLoc, AttributeCommonInfo::AS_Pragma));
18280 } else {
18281 (void)WeakUndeclaredIdentifiers.insert(
18282 std::pair<IdentifierInfo*,WeakInfo>
18283 (Name, WeakInfo((IdentifierInfo*)nullptr, NameLoc)));
18284 }
18285 }
18286
ActOnPragmaWeakAlias(IdentifierInfo * Name,IdentifierInfo * AliasName,SourceLocation PragmaLoc,SourceLocation NameLoc,SourceLocation AliasNameLoc)18287 void Sema::ActOnPragmaWeakAlias(IdentifierInfo* Name,
18288 IdentifierInfo* AliasName,
18289 SourceLocation PragmaLoc,
18290 SourceLocation NameLoc,
18291 SourceLocation AliasNameLoc) {
18292 Decl *PrevDecl = LookupSingleName(TUScope, AliasName, AliasNameLoc,
18293 LookupOrdinaryName);
18294 WeakInfo W = WeakInfo(Name, NameLoc);
18295
18296 if (PrevDecl && (isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl))) {
18297 if (!PrevDecl->hasAttr<AliasAttr>())
18298 if (NamedDecl *ND = dyn_cast<NamedDecl>(PrevDecl))
18299 DeclApplyPragmaWeak(TUScope, ND, W);
18300 } else {
18301 (void)WeakUndeclaredIdentifiers.insert(
18302 std::pair<IdentifierInfo*,WeakInfo>(AliasName, W));
18303 }
18304 }
18305
getObjCDeclContext() const18306 Decl *Sema::getObjCDeclContext() const {
18307 return (dyn_cast_or_null<ObjCContainerDecl>(CurContext));
18308 }
18309
getEmissionStatus(FunctionDecl * FD,bool Final)18310 Sema::FunctionEmissionStatus Sema::getEmissionStatus(FunctionDecl *FD,
18311 bool Final) {
18312 // SYCL functions can be template, so we check if they have appropriate
18313 // attribute prior to checking if it is a template.
18314 if (LangOpts.SYCLIsDevice && FD->hasAttr<SYCLKernelAttr>())
18315 return FunctionEmissionStatus::Emitted;
18316
18317 // Templates are emitted when they're instantiated.
18318 if (FD->isDependentContext())
18319 return FunctionEmissionStatus::TemplateDiscarded;
18320
18321 FunctionEmissionStatus OMPES = FunctionEmissionStatus::Unknown;
18322 if (LangOpts.OpenMPIsDevice) {
18323 Optional<OMPDeclareTargetDeclAttr::DevTypeTy> DevTy =
18324 OMPDeclareTargetDeclAttr::getDeviceType(FD->getCanonicalDecl());
18325 if (DevTy.hasValue()) {
18326 if (*DevTy == OMPDeclareTargetDeclAttr::DT_Host)
18327 OMPES = FunctionEmissionStatus::OMPDiscarded;
18328 else if (*DevTy == OMPDeclareTargetDeclAttr::DT_NoHost ||
18329 *DevTy == OMPDeclareTargetDeclAttr::DT_Any) {
18330 OMPES = FunctionEmissionStatus::Emitted;
18331 }
18332 }
18333 } else if (LangOpts.OpenMP) {
18334 // In OpenMP 4.5 all the functions are host functions.
18335 if (LangOpts.OpenMP <= 45) {
18336 OMPES = FunctionEmissionStatus::Emitted;
18337 } else {
18338 Optional<OMPDeclareTargetDeclAttr::DevTypeTy> DevTy =
18339 OMPDeclareTargetDeclAttr::getDeviceType(FD->getCanonicalDecl());
18340 // In OpenMP 5.0 or above, DevTy may be changed later by
18341 // #pragma omp declare target to(*) device_type(*). Therefore DevTy
18342 // having no value does not imply host. The emission status will be
18343 // checked again at the end of compilation unit.
18344 if (DevTy.hasValue()) {
18345 if (*DevTy == OMPDeclareTargetDeclAttr::DT_NoHost) {
18346 OMPES = FunctionEmissionStatus::OMPDiscarded;
18347 } else if (*DevTy == OMPDeclareTargetDeclAttr::DT_Host ||
18348 *DevTy == OMPDeclareTargetDeclAttr::DT_Any)
18349 OMPES = FunctionEmissionStatus::Emitted;
18350 } else if (Final)
18351 OMPES = FunctionEmissionStatus::Emitted;
18352 }
18353 }
18354 if (OMPES == FunctionEmissionStatus::OMPDiscarded ||
18355 (OMPES == FunctionEmissionStatus::Emitted && !LangOpts.CUDA))
18356 return OMPES;
18357
18358 if (LangOpts.CUDA) {
18359 // When compiling for device, host functions are never emitted. Similarly,
18360 // when compiling for host, device and global functions are never emitted.
18361 // (Technically, we do emit a host-side stub for global functions, but this
18362 // doesn't count for our purposes here.)
18363 Sema::CUDAFunctionTarget T = IdentifyCUDATarget(FD);
18364 if (LangOpts.CUDAIsDevice && T == Sema::CFT_Host)
18365 return FunctionEmissionStatus::CUDADiscarded;
18366 if (!LangOpts.CUDAIsDevice &&
18367 (T == Sema::CFT_Device || T == Sema::CFT_Global))
18368 return FunctionEmissionStatus::CUDADiscarded;
18369
18370 // Check whether this function is externally visible -- if so, it's
18371 // known-emitted.
18372 //
18373 // We have to check the GVA linkage of the function's *definition* -- if we
18374 // only have a declaration, we don't know whether or not the function will
18375 // be emitted, because (say) the definition could include "inline".
18376 FunctionDecl *Def = FD->getDefinition();
18377
18378 if (Def &&
18379 !isDiscardableGVALinkage(getASTContext().GetGVALinkageForFunction(Def))
18380 && (!LangOpts.OpenMP || OMPES == FunctionEmissionStatus::Emitted))
18381 return FunctionEmissionStatus::Emitted;
18382 }
18383
18384 // Otherwise, the function is known-emitted if it's in our set of
18385 // known-emitted functions.
18386 return FunctionEmissionStatus::Unknown;
18387 }
18388
shouldIgnoreInHostDeviceCheck(FunctionDecl * Callee)18389 bool Sema::shouldIgnoreInHostDeviceCheck(FunctionDecl *Callee) {
18390 // Host-side references to a __global__ function refer to the stub, so the
18391 // function itself is never emitted and therefore should not be marked.
18392 // If we have host fn calls kernel fn calls host+device, the HD function
18393 // does not get instantiated on the host. We model this by omitting at the
18394 // call to the kernel from the callgraph. This ensures that, when compiling
18395 // for host, only HD functions actually called from the host get marked as
18396 // known-emitted.
18397 return LangOpts.CUDA && !LangOpts.CUDAIsDevice &&
18398 IdentifyCUDATarget(Callee) == CFT_Global;
18399 }
18400