diff options
| author | Fariborz Jahanian <fjahanian@apple.com> | 2009-06-30 23:26:25 +0000 | 
|---|---|---|
| committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-06-30 23:26:25 +0000 | 
| commit | 302bb6661f9b74dc2e29cbd4746b8348cf255339 (patch) | |
| tree | 53fa63bf31c8385f53fc50edfe668c2bda3b66d6 /clang/lib/Sema | |
| parent | cfcdf5c1ac81180a0f6777cb695090bbe99e7e31 (diff) | |
| download | bcm5719-llvm-302bb6661f9b74dc2e29cbd4746b8348cf255339.tar.gz bcm5719-llvm-302bb6661f9b74dc2e29cbd4746b8348cf255339.zip | |
Patch to support optional nested-name-specifier in in ctor-initializer
list.
llvm-svn: 74571
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/Sema.h | 1 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 32 | 
2 files changed, 18 insertions, 15 deletions
| diff --git a/clang/lib/Sema/Sema.h b/clang/lib/Sema/Sema.h index 65b5f250295..2379a179640 100644 --- a/clang/lib/Sema/Sema.h +++ b/clang/lib/Sema/Sema.h @@ -1891,6 +1891,7 @@ public:    virtual MemInitResult ActOnMemInitializer(DeclPtrTy ConstructorD,                                              Scope *S, +                                            const CXXScopeSpec &SS,                                              IdentifierInfo *MemberOrBase,                                              SourceLocation IdLoc,                                              SourceLocation LParenLoc, diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 8c3a0bf1584..a0bc94808bb 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -646,6 +646,7 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,  Sema::MemInitResult   Sema::ActOnMemInitializer(DeclPtrTy ConstructorD,                            Scope *S, +                          const CXXScopeSpec &SS,                            IdentifierInfo *MemberOrBase,                            SourceLocation IdLoc,                            SourceLocation LParenLoc, @@ -677,23 +678,24 @@ Sema::ActOnMemInitializer(DeclPtrTy ConstructorD,    //   composed of a single identifier refers to the class member. A    //   mem-initializer-id for the hidden base class may be specified    //   using a qualified name. ] -  // Look for a member, first. -  FieldDecl *Member = 0; -  DeclContext::lookup_result Result  -    = ClassDecl->lookup(MemberOrBase); -  if (Result.first != Result.second) -    Member = dyn_cast<FieldDecl>(*Result.first); - -  // FIXME: Handle members of an anonymous union. - -  if (Member) { -    // FIXME: Perform direct initialization of the member. -    return new CXXBaseOrMemberInitializer(Member, (Expr **)Args, NumArgs,  -                                          IdLoc); +  if (!SS.getScopeRep()) { +    // Look for a member, first. +    FieldDecl *Member = 0; +    DeclContext::lookup_result Result  +      = ClassDecl->lookup(MemberOrBase); +    if (Result.first != Result.second) +      Member = dyn_cast<FieldDecl>(*Result.first); + +    // FIXME: Handle members of an anonymous union. + +    if (Member) { +      // FIXME: Perform direct initialization of the member. +      return new CXXBaseOrMemberInitializer(Member, (Expr **)Args, NumArgs,  +                                            IdLoc); +    }    } -    // It didn't name a member, so see if it names a class. -  TypeTy *BaseTy = getTypeName(*MemberOrBase, IdLoc, S, 0/*SS*/); +  TypeTy *BaseTy = getTypeName(*MemberOrBase, IdLoc, S, &SS);    if (!BaseTy)      return Diag(IdLoc, diag::err_mem_init_not_member_or_class)        << MemberOrBase << SourceRange(IdLoc, RParenLoc); | 

