blob: 8050557075fd7ccb38421ed60a417ef4fb374299 [file] [log] [blame]
Chris Lattnerac7b83a2008-04-08 05:04:30 +00001//===------ SemaDeclCXX.cpp - Semantic Analysis for C++ Declarations ------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file implements semantic analysis for C++ declarations.
11//
12//===----------------------------------------------------------------------===//
13
14#include "Sema.h"
15#include "clang/Basic/LangOptions.h"
Douglas Gregorec93f442008-04-13 21:30:24 +000016#include "clang/AST/ASTContext.h"
Argiris Kirtzidis38f16712008-07-01 10:37:29 +000017#include "clang/AST/DeclCXX.h"
Chris Lattnerac7b83a2008-04-08 05:04:30 +000018#include "clang/AST/Expr.h"
Steve Naroff9ed3e772008-05-29 21:12:08 +000019#include "clang/AST/ExprObjC.h"
Chris Lattner97316c02008-04-10 02:22:51 +000020#include "clang/AST/StmtVisitor.h"
Chris Lattnerac7b83a2008-04-08 05:04:30 +000021#include "clang/AST/Type.h"
Argiris Kirtzidis03e6aaf2008-04-27 13:50:30 +000022#include "clang/Parse/Scope.h"
Chris Lattnerac7b83a2008-04-08 05:04:30 +000023#include "llvm/ADT/OwningPtr.h"
Chris Lattner97316c02008-04-10 02:22:51 +000024#include "llvm/Support/Compiler.h"
Chris Lattnerac7b83a2008-04-08 05:04:30 +000025
26using namespace clang;
27
Chris Lattner97316c02008-04-10 02:22:51 +000028//===----------------------------------------------------------------------===//
29// CheckDefaultArgumentVisitor
30//===----------------------------------------------------------------------===//
31
Chris Lattnerb1856db2008-04-12 23:52:44 +000032namespace {
33 /// CheckDefaultArgumentVisitor - C++ [dcl.fct.default] Traverses
34 /// the default argument of a parameter to determine whether it
35 /// contains any ill-formed subexpressions. For example, this will
36 /// diagnose the use of local variables or parameters within the
37 /// default argument expression.
38 class VISIBILITY_HIDDEN CheckDefaultArgumentVisitor
39 : public StmtVisitor<CheckDefaultArgumentVisitor, bool>
40 {
41 Expr *DefaultArg;
42 Sema *S;
Chris Lattner97316c02008-04-10 02:22:51 +000043
Chris Lattnerb1856db2008-04-12 23:52:44 +000044 public:
45 CheckDefaultArgumentVisitor(Expr *defarg, Sema *s)
46 : DefaultArg(defarg), S(s) {}
Chris Lattner97316c02008-04-10 02:22:51 +000047
Chris Lattnerb1856db2008-04-12 23:52:44 +000048 bool VisitExpr(Expr *Node);
49 bool VisitDeclRefExpr(DeclRefExpr *DRE);
50 };
Chris Lattner97316c02008-04-10 02:22:51 +000051
Chris Lattnerb1856db2008-04-12 23:52:44 +000052 /// VisitExpr - Visit all of the children of this expression.
53 bool CheckDefaultArgumentVisitor::VisitExpr(Expr *Node) {
54 bool IsInvalid = false;
55 for (Stmt::child_iterator first = Node->child_begin(),
56 last = Node->child_end();
57 first != last; ++first)
58 IsInvalid |= Visit(*first);
Chris Lattner97316c02008-04-10 02:22:51 +000059
Chris Lattnerb1856db2008-04-12 23:52:44 +000060 return IsInvalid;
Chris Lattner97316c02008-04-10 02:22:51 +000061 }
62
Chris Lattnerb1856db2008-04-12 23:52:44 +000063 /// VisitDeclRefExpr - Visit a reference to a declaration, to
64 /// determine whether this declaration can be used in the default
65 /// argument expression.
66 bool CheckDefaultArgumentVisitor::VisitDeclRefExpr(DeclRefExpr *DRE) {
67 ValueDecl *Decl = DRE->getDecl();
68 if (ParmVarDecl *Param = dyn_cast<ParmVarDecl>(Decl)) {
69 // C++ [dcl.fct.default]p9
70 // Default arguments are evaluated each time the function is
71 // called. The order of evaluation of function arguments is
72 // unspecified. Consequently, parameters of a function shall not
73 // be used in default argument expressions, even if they are not
74 // evaluated. Parameters of a function declared before a default
75 // argument expression are in scope and can hide namespace and
76 // class member names.
77 return S->Diag(DRE->getSourceRange().getBegin(),
78 diag::err_param_default_argument_references_param,
79 Param->getName(), DefaultArg->getSourceRange());
Steve Naroff72a6ebc2008-04-15 22:42:06 +000080 } else if (VarDecl *VDecl = dyn_cast<VarDecl>(Decl)) {
Chris Lattnerb1856db2008-04-12 23:52:44 +000081 // C++ [dcl.fct.default]p7
82 // Local variables shall not be used in default argument
83 // expressions.
Steve Naroff72a6ebc2008-04-15 22:42:06 +000084 if (VDecl->isBlockVarDecl())
85 return S->Diag(DRE->getSourceRange().getBegin(),
86 diag::err_param_default_argument_references_local,
87 VDecl->getName(), DefaultArg->getSourceRange());
Chris Lattnerb1856db2008-04-12 23:52:44 +000088 }
Chris Lattner97316c02008-04-10 02:22:51 +000089
Chris Lattnerb1856db2008-04-12 23:52:44 +000090 // FIXME: when Clang has support for member functions, "this"
91 // will also need to be diagnosed.
92
93 return false;
94 }
Chris Lattner97316c02008-04-10 02:22:51 +000095}
96
97/// ActOnParamDefaultArgument - Check whether the default argument
98/// provided for a function parameter is well-formed. If so, attach it
99/// to the parameter declaration.
Chris Lattnerac7b83a2008-04-08 05:04:30 +0000100void
101Sema::ActOnParamDefaultArgument(DeclTy *param, SourceLocation EqualLoc,
102 ExprTy *defarg) {
103 ParmVarDecl *Param = (ParmVarDecl *)param;
104 llvm::OwningPtr<Expr> DefaultArg((Expr *)defarg);
105 QualType ParamType = Param->getType();
106
107 // Default arguments are only permitted in C++
108 if (!getLangOptions().CPlusPlus) {
109 Diag(EqualLoc, diag::err_param_default_argument,
110 DefaultArg->getSourceRange());
111 return;
112 }
113
114 // C++ [dcl.fct.default]p5
115 // A default argument expression is implicitly converted (clause
116 // 4) to the parameter type. The default argument expression has
117 // the same semantic constraints as the initializer expression in
118 // a declaration of a variable of the parameter type, using the
119 // copy-initialization semantics (8.5).
120 //
121 // FIXME: CheckSingleAssignmentConstraints has the wrong semantics
122 // for C++ (since we want copy-initialization, not copy-assignment),
123 // but we don't have the right semantics implemented yet. Because of
124 // this, our error message is also very poor.
125 QualType DefaultArgType = DefaultArg->getType();
126 Expr *DefaultArgPtr = DefaultArg.get();
127 AssignConvertType ConvTy = CheckSingleAssignmentConstraints(ParamType,
128 DefaultArgPtr);
129 if (DefaultArgPtr != DefaultArg.get()) {
130 DefaultArg.take();
131 DefaultArg.reset(DefaultArgPtr);
132 }
133 if (DiagnoseAssignmentResult(ConvTy, DefaultArg->getLocStart(),
134 ParamType, DefaultArgType, DefaultArg.get(),
135 "in default argument")) {
136 return;
137 }
138
Chris Lattner97316c02008-04-10 02:22:51 +0000139 // Check that the default argument is well-formed
Chris Lattnerb1856db2008-04-12 23:52:44 +0000140 CheckDefaultArgumentVisitor DefaultArgChecker(DefaultArg.get(), this);
Chris Lattner97316c02008-04-10 02:22:51 +0000141 if (DefaultArgChecker.Visit(DefaultArg.get()))
142 return;
143
Chris Lattnerac7b83a2008-04-08 05:04:30 +0000144 // Okay: add the default argument to the parameter
145 Param->setDefaultArg(DefaultArg.take());
146}
147
Douglas Gregor2b9422f2008-05-07 04:49:29 +0000148/// CheckExtraCXXDefaultArguments - Check for any extra default
149/// arguments in the declarator, which is not a function declaration
150/// or definition and therefore is not permitted to have default
151/// arguments. This routine should be invoked for every declarator
152/// that is not a function declaration or definition.
153void Sema::CheckExtraCXXDefaultArguments(Declarator &D) {
154 // C++ [dcl.fct.default]p3
155 // A default argument expression shall be specified only in the
156 // parameter-declaration-clause of a function declaration or in a
157 // template-parameter (14.1). It shall not be specified for a
158 // parameter pack. If it is specified in a
159 // parameter-declaration-clause, it shall not occur within a
160 // declarator or abstract-declarator of a parameter-declaration.
161 for (unsigned i = 0; i < D.getNumTypeObjects(); ++i) {
162 DeclaratorChunk &chunk = D.getTypeObject(i);
163 if (chunk.Kind == DeclaratorChunk::Function) {
164 for (unsigned argIdx = 0; argIdx < chunk.Fun.NumArgs; ++argIdx) {
165 ParmVarDecl *Param = (ParmVarDecl *)chunk.Fun.ArgInfo[argIdx].Param;
166 if (Param->getDefaultArg()) {
167 Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc,
168 Param->getDefaultArg()->getSourceRange());
169 Param->setDefaultArg(0);
170 }
171 }
172 }
173 }
174}
175
Chris Lattnerac7b83a2008-04-08 05:04:30 +0000176// MergeCXXFunctionDecl - Merge two declarations of the same C++
177// function, once we already know that they have the same
178// type. Subroutine of MergeFunctionDecl.
179FunctionDecl *
180Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old) {
181 // C++ [dcl.fct.default]p4:
182 //
183 // For non-template functions, default arguments can be added in
184 // later declarations of a function in the same
185 // scope. Declarations in different scopes have completely
186 // distinct sets of default arguments. That is, declarations in
187 // inner scopes do not acquire default arguments from
188 // declarations in outer scopes, and vice versa. In a given
189 // function declaration, all parameters subsequent to a
190 // parameter with a default argument shall have default
191 // arguments supplied in this or previous declarations. A
192 // default argument shall not be redefined by a later
193 // declaration (not even to the same value).
194 for (unsigned p = 0, NumParams = Old->getNumParams(); p < NumParams; ++p) {
195 ParmVarDecl *OldParam = Old->getParamDecl(p);
196 ParmVarDecl *NewParam = New->getParamDecl(p);
197
198 if(OldParam->getDefaultArg() && NewParam->getDefaultArg()) {
199 Diag(NewParam->getLocation(),
200 diag::err_param_default_argument_redefinition,
201 NewParam->getDefaultArg()->getSourceRange());
202 Diag(OldParam->getLocation(), diag::err_previous_definition);
203 } else if (OldParam->getDefaultArg()) {
204 // Merge the old default argument into the new parameter
205 NewParam->setDefaultArg(OldParam->getDefaultArg());
206 }
207 }
208
209 return New;
210}
211
212/// CheckCXXDefaultArguments - Verify that the default arguments for a
213/// function declaration are well-formed according to C++
214/// [dcl.fct.default].
215void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {
216 unsigned NumParams = FD->getNumParams();
217 unsigned p;
218
219 // Find first parameter with a default argument
220 for (p = 0; p < NumParams; ++p) {
221 ParmVarDecl *Param = FD->getParamDecl(p);
222 if (Param->getDefaultArg())
223 break;
224 }
225
226 // C++ [dcl.fct.default]p4:
227 // In a given function declaration, all parameters
228 // subsequent to a parameter with a default argument shall
229 // have default arguments supplied in this or previous
230 // declarations. A default argument shall not be redefined
231 // by a later declaration (not even to the same value).
232 unsigned LastMissingDefaultArg = 0;
233 for(; p < NumParams; ++p) {
234 ParmVarDecl *Param = FD->getParamDecl(p);
235 if (!Param->getDefaultArg()) {
236 if (Param->getIdentifier())
237 Diag(Param->getLocation(),
238 diag::err_param_default_argument_missing_name,
239 Param->getIdentifier()->getName());
240 else
241 Diag(Param->getLocation(),
242 diag::err_param_default_argument_missing);
243
244 LastMissingDefaultArg = p;
245 }
246 }
247
248 if (LastMissingDefaultArg > 0) {
249 // Some default arguments were missing. Clear out all of the
250 // default arguments up to (and including) the last missing
251 // default argument, so that we leave the function parameters
252 // in a semantically valid state.
253 for (p = 0; p <= LastMissingDefaultArg; ++p) {
254 ParmVarDecl *Param = FD->getParamDecl(p);
255 if (Param->getDefaultArg()) {
256 delete Param->getDefaultArg();
257 Param->setDefaultArg(0);
258 }
259 }
260 }
261}
Douglas Gregorec93f442008-04-13 21:30:24 +0000262
263/// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
264/// one entry in the base class list of a class specifier, for
265/// example:
266/// class foo : public bar, virtual private baz {
267/// 'public bar' and 'virtual private baz' are each base-specifiers.
268void Sema::ActOnBaseSpecifier(DeclTy *classdecl, SourceRange SpecifierRange,
269 bool Virtual, AccessSpecifier Access,
270 DeclTy *basetype, SourceLocation BaseLoc) {
271 RecordDecl *Decl = (RecordDecl*)classdecl;
272 QualType BaseType = Context.getTypeDeclType((TypeDecl*)basetype);
273
274 // Base specifiers must be record types.
275 if (!BaseType->isRecordType()) {
276 Diag(BaseLoc, diag::err_base_must_be_class, SpecifierRange);
277 return;
278 }
279
280 // C++ [class.union]p1:
281 // A union shall not be used as a base class.
282 if (BaseType->isUnionType()) {
283 Diag(BaseLoc, diag::err_union_as_base_class, SpecifierRange);
284 return;
285 }
286
287 // C++ [class.union]p1:
288 // A union shall not have base classes.
Argiris Kirtzidisc6cc7d52008-06-09 23:19:58 +0000289 if (Decl->isUnion()) {
Douglas Gregorec93f442008-04-13 21:30:24 +0000290 Diag(Decl->getLocation(), diag::err_base_clause_on_union,
291 SpecifierRange);
292 Decl->setInvalidDecl();
293 return;
294 }
295
296 // C++ [class.derived]p2:
297 // The class-name in a base-specifier shall not be an incompletely
298 // defined class.
299 if (BaseType->isIncompleteType()) {
300 Diag(BaseLoc, diag::err_incomplete_base_class, SpecifierRange);
301 return;
302 }
303
304 // FIXME: C++ [class.mi]p3:
305 // A class shall not be specified as a direct base class of a
306 // derived class more than once.
307
308 // FIXME: Attach base class to the record.
309}
Argiris Kirtzidis03e6aaf2008-04-27 13:50:30 +0000310
Argiris Kirtzidis38f16712008-07-01 10:37:29 +0000311//===----------------------------------------------------------------------===//
312// C++ class member Handling
313//===----------------------------------------------------------------------===//
314
315/// ActOnStartCXXClassDef - This is called at the start of a class/struct/union
316/// definition, when on C++.
317void Sema::ActOnStartCXXClassDef(Scope *S, DeclTy *D, SourceLocation LBrace) {
318 Decl *Dcl = static_cast<Decl *>(D);
319 PushDeclContext(cast<CXXRecordDecl>(Dcl));
320 FieldCollector->StartClass();
321}
322
323/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
324/// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
325/// bitfield width if there is one and 'InitExpr' specifies the initializer if
326/// any. 'LastInGroup' is non-null for cases where one declspec has multiple
327/// declarators on it.
328///
329/// NOTE: Because of CXXFieldDecl's inability to be chained like ScopedDecls, if
330/// an instance field is declared, a new CXXFieldDecl is created but the method
331/// does *not* return it; it returns LastInGroup instead. The other C++ members
332/// (which are all ScopedDecls) are returned after appending them to
333/// LastInGroup.
334Sema::DeclTy *
335Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
336 ExprTy *BW, ExprTy *InitExpr,
337 DeclTy *LastInGroup) {
338 const DeclSpec &DS = D.getDeclSpec();
339 IdentifierInfo *II = D.getIdentifier();
340 Expr *BitWidth = static_cast<Expr*>(BW);
341 Expr *Init = static_cast<Expr*>(InitExpr);
342 SourceLocation Loc = D.getIdentifierLoc();
343
344 // C++ 9.2p6: A member shall not be declared to have automatic storage
345 // duration (auto, register) or with the extern storage-class-specifier.
346 switch (DS.getStorageClassSpec()) {
347 case DeclSpec::SCS_unspecified:
348 case DeclSpec::SCS_typedef:
349 case DeclSpec::SCS_static:
350 // FALL THROUGH.
351 break;
352 default:
353 if (DS.getStorageClassSpecLoc().isValid())
354 Diag(DS.getStorageClassSpecLoc(),
355 diag::err_storageclass_invalid_for_member);
356 else
357 Diag(DS.getThreadSpecLoc(), diag::err_storageclass_invalid_for_member);
358 D.getMutableDeclSpec().ClearStorageClassSpecs();
359 }
360
361 QualType T = GetTypeForDeclarator(D, S);
362
363 // T->isFunctionType() is used instead of D.isFunctionDeclarator() to cover
364 // this case:
365 //
366 // typedef int f();
367 // f a;
368 bool isInstField = (DS.getStorageClassSpec() == DeclSpec::SCS_unspecified &&
369 !T->isFunctionType());
370
371 Decl *Member;
372 bool InvalidDecl = false;
373
374 if (isInstField)
375 Member = static_cast<Decl*>(ActOnField(S, Loc, D, BitWidth));
376 else
377 Member = static_cast<Decl*>(ActOnDeclarator(S, D, LastInGroup));
378
379 if (!Member) return LastInGroup;
380
381 assert(II || isInstField && "No identifier for non-field ?");
382
383 // set/getAccess is not part of Decl's interface to avoid bloating it with C++
384 // specific methods. Use a wrapper class that can be used with all C++ class
385 // member decls.
386 CXXClassMemberWrapper(Member).setAccess(AS);
387
388 if (BitWidth) {
389 // C++ 9.6p2: Only when declaring an unnamed bit-field may the
390 // constant-expression be a value equal to zero.
391 // FIXME: Check this.
392
393 if (D.isFunctionDeclarator()) {
394 // FIXME: Emit diagnostic about only constructors taking base initializers
395 // or something similar, when constructor support is in place.
396 Diag(Loc, diag::err_not_bitfield_type,
397 II->getName(), BitWidth->getSourceRange());
398 InvalidDecl = true;
399
400 } else if (isInstField || isa<FunctionDecl>(Member)) {
401 // An instance field or a function typedef ("typedef int f(); f a;").
402 // C++ 9.6p3: A bit-field shall have integral or enumeration type.
403 if (!T->isIntegralType()) {
404 Diag(Loc, diag::err_not_integral_type_bitfield,
405 II->getName(), BitWidth->getSourceRange());
406 InvalidDecl = true;
407 }
408
409 } else if (isa<TypedefDecl>(Member)) {
410 // "cannot declare 'A' to be a bit-field type"
411 Diag(Loc, diag::err_not_bitfield_type, II->getName(),
412 BitWidth->getSourceRange());
413 InvalidDecl = true;
414
415 } else {
416 assert(isa<CXXClassVarDecl>(Member) &&
417 "Didn't we cover all member kinds?");
418 // C++ 9.6p3: A bit-field shall not be a static member.
419 // "static member 'A' cannot be a bit-field"
420 Diag(Loc, diag::err_static_not_bitfield, II->getName(),
421 BitWidth->getSourceRange());
422 InvalidDecl = true;
423 }
424 }
425
426 if (Init) {
427 // C++ 9.2p4: A member-declarator can contain a constant-initializer only
428 // if it declares a static member of const integral or const enumeration
429 // type.
430 if (CXXClassVarDecl *CVD =
431 dyn_cast<CXXClassVarDecl>(Member)) { // ...static member of...
432 CVD->setInit(Init);
433 QualType MemberTy = CVD->getType().getCanonicalType();
434 // ...const integral or const enumeration type.
435 if (MemberTy.isConstQualified() && MemberTy->isIntegralType()) {
436 if (CheckForConstantInitializer(Init, MemberTy)) // constant-initializer
437 InvalidDecl = true;
438
439 } else {
440 // not const integral.
441 Diag(Loc, diag::err_member_initialization,
442 II->getName(), Init->getSourceRange());
443 InvalidDecl = true;
444 }
445
446 } else {
447 // not static member.
448 Diag(Loc, diag::err_member_initialization,
449 II->getName(), Init->getSourceRange());
450 InvalidDecl = true;
451 }
452 }
453
454 if (InvalidDecl)
455 Member->setInvalidDecl();
456
457 if (isInstField) {
458 FieldCollector->Add(cast<CXXFieldDecl>(Member));
459 return LastInGroup;
460 }
461 return Member;
462}
463
464void Sema::ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
465 DeclTy *TagDecl,
466 SourceLocation LBrac,
467 SourceLocation RBrac) {
468 ActOnFields(S, RLoc, TagDecl,
469 (DeclTy**)FieldCollector->getCurFields(),
470 FieldCollector->getCurNumFields(), LBrac, RBrac);
471}
472
473void Sema::ActOnFinishCXXClassDef(DeclTy *D,SourceLocation RBrace) {
474 Decl *Dcl = static_cast<Decl *>(D);
475 assert(isa<CXXRecordDecl>(Dcl) &&
476 "Invalid parameter, expected CXXRecordDecl");
477 FieldCollector->FinishClass();
478 PopDeclContext();
479}
Argiris Kirtzidis03e6aaf2008-04-27 13:50:30 +0000480
481//===----------------------------------------------------------------------===//
482// Namespace Handling
483//===----------------------------------------------------------------------===//
484
485/// ActOnStartNamespaceDef - This is called at the start of a namespace
486/// definition.
487Sema::DeclTy *Sema::ActOnStartNamespaceDef(Scope *NamespcScope,
488 SourceLocation IdentLoc,
489 IdentifierInfo *II,
490 SourceLocation LBrace) {
491 NamespaceDecl *Namespc =
492 NamespaceDecl::Create(Context, CurContext, IdentLoc, II);
493 Namespc->setLBracLoc(LBrace);
494
495 Scope *DeclRegionScope = NamespcScope->getParent();
496
497 if (II) {
498 // C++ [namespace.def]p2:
499 // The identifier in an original-namespace-definition shall not have been
500 // previously defined in the declarative region in which the
501 // original-namespace-definition appears. The identifier in an
502 // original-namespace-definition is the name of the namespace. Subsequently
503 // in that declarative region, it is treated as an original-namespace-name.
504
505 Decl *PrevDecl =
506 LookupDecl(II, Decl::IDNS_Tag | Decl::IDNS_Ordinary, DeclRegionScope,
507 /*enableLazyBuiltinCreation=*/false);
508
Argiris Kirtzidis59a9afb2008-05-09 23:39:43 +0000509 if (PrevDecl &&
510 IdResolver.isDeclInScope(PrevDecl, CurContext, DeclRegionScope)) {
Argiris Kirtzidis03e6aaf2008-04-27 13:50:30 +0000511 if (NamespaceDecl *OrigNS = dyn_cast<NamespaceDecl>(PrevDecl)) {
512 // This is an extended namespace definition.
513 // Attach this namespace decl to the chain of extended namespace
514 // definitions.
515 NamespaceDecl *NextNS = OrigNS;
516 while (NextNS->getNextNamespace())
517 NextNS = NextNS->getNextNamespace();
518
519 NextNS->setNextNamespace(Namespc);
520 Namespc->setOriginalNamespace(OrigNS);
521
522 // We won't add this decl to the current scope. We want the namespace
523 // name to return the original namespace decl during a name lookup.
524 } else {
525 // This is an invalid name redefinition.
526 Diag(Namespc->getLocation(), diag::err_redefinition_different_kind,
527 Namespc->getName());
528 Diag(PrevDecl->getLocation(), diag::err_previous_definition);
529 Namespc->setInvalidDecl();
530 // Continue on to push Namespc as current DeclContext and return it.
531 }
532 } else {
533 // This namespace name is declared for the first time.
534 PushOnScopeChains(Namespc, DeclRegionScope);
535 }
536 }
537 else {
538 // FIXME: Handle anonymous namespaces
539 }
540
541 // Although we could have an invalid decl (i.e. the namespace name is a
542 // redefinition), push it as current DeclContext and try to continue parsing.
543 PushDeclContext(Namespc->getOriginalNamespace());
544 return Namespc;
545}
546
547/// ActOnFinishNamespaceDef - This callback is called after a namespace is
548/// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
549void Sema::ActOnFinishNamespaceDef(DeclTy *D, SourceLocation RBrace) {
550 Decl *Dcl = static_cast<Decl *>(D);
551 NamespaceDecl *Namespc = dyn_cast_or_null<NamespaceDecl>(Dcl);
552 assert(Namespc && "Invalid parameter, expected NamespaceDecl");
553 Namespc->setRBracLoc(RBrace);
554 PopDeclContext();
555}