]> granicus.if.org Git - clang/commitdiff
Eliminate CXXClassVarDecl. It doesn't add anything
authorDouglas Gregor <dgregor@apple.com>
Wed, 11 Mar 2009 20:22:50 +0000 (20:22 +0000)
committerDouglas Gregor <dgregor@apple.com>
Wed, 11 Mar 2009 20:22:50 +0000 (20:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66696 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/ASTConsumers.cpp
include/clang/AST/DeclBase.h
include/clang/AST/DeclCXX.h
include/clang/AST/DeclNodes.def
lib/AST/DeclCXX.cpp
lib/AST/Expr.cpp
lib/Sema/SemaDecl.cpp
lib/Sema/SemaDeclCXX.cpp
lib/Sema/SemaExpr.cpp

index f04f9a3a3903265e09180e66a28e96c778e39add..9eba137918ef70ec1021fa921771be4faee878cb 100644 (file)
@@ -904,11 +904,6 @@ void DeclContextPrinter::PrintDeclContext(const DeclContext* DC,
       Out << "<implicit parameter> " << IPD->getNameAsString() << "\n";
       break;
     }
-    case Decl::CXXClassVar: {
-      CXXClassVarDecl* CVD = cast<CXXClassVarDecl>(*I);
-      Out << "<static member var> " << CVD->getNameAsString() << "\n";
-      break;
-    }
     case Decl::ParmVar: {
       ParmVarDecl* PVD = cast<ParmVarDecl>(*I);
       Out << "<parameter> " << PVD->getNameAsString() << "\n";
index da9054f8d6ad6bfceb0e1b63ecfe36ef8f4fb2fd..183acb341bd8df6a439d785d80de21f588efc62f 100644 (file)
@@ -212,7 +212,6 @@ public:
     case Typedef:
     case EnumConstant:
     case Var:
-    case CXXClassVar:
     case ImplicitParam:
     case ParmVar:
     case OriginalParmVar:
index 875010bd2f1164d7bf2f39db32b09b428bba695f..52ed01d04bd325fa5fa727384d9a300db0334c17 100644 (file)
@@ -759,34 +759,6 @@ public:
   static CXXConversionDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C);
 };
 
-/// CXXClassVarDecl - Represents a static data member of a struct/union/class.
-class CXXClassVarDecl : public VarDecl {
-
-  CXXClassVarDecl(CXXRecordDecl *RD, SourceLocation L,
-              IdentifierInfo *Id, QualType T)
-    : VarDecl(CXXClassVar, RD, L, Id, T, None) {}
-public:
-  static CXXClassVarDecl *Create(ASTContext &C, CXXRecordDecl *RD,
-                             SourceLocation L,IdentifierInfo *Id,
-                             QualType T);
-  
-  // Implement isa/cast/dyncast/etc.
-  static bool classof(const Decl *D) { return D->getKind() == CXXClassVar; }
-  static bool classof(const CXXClassVarDecl *D) { return true; }
-  
-protected:
-  /// EmitImpl - Serialize this CXXClassVarDecl. Called by Decl::Emit.
-  // FIXME: Implement this.
-  //virtual void EmitImpl(llvm::Serializer& S) const;
-  
-  /// CreateImpl - Deserialize a CXXClassVarDecl.  Called by Decl::Create.
-  // FIXME: Implement this.
-  static CXXClassVarDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C);
-
-  friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C);
-};
-
-
 /// CXXClassMemberWrapper - A wrapper class for C++ class member decls.
 /// Common functions like set/getAccess are included here to avoid bloating
 /// the interface of non-C++ specific decl classes, like NamedDecl.
index ec0461c63859fb9386dbab37a50f9a8c28bb31fc..43bf7f1023cb257b7c3027f49eba111fe1d79ea5 100644 (file)
@@ -98,7 +98,6 @@ ABSTRACT_DECL(Named,  Decl)
       DECL(ObjCAtDefsField, FieldDecl)
     DECL(Var, ValueDecl)
       DECL(ImplicitParam, VarDecl)
-      DECL(CXXClassVar, VarDecl)
       DECL(ParmVar, VarDecl)
         DECL(OriginalParmVar, ParmVarDecl)
       DECL(NonTypeTemplateParm, VarDecl)
index 45a3372ada682ae5a9e32d0633a81d3cf08a7046..4776ce587782da2fff7e6dde5da929aaf7a80848 100644 (file)
@@ -316,12 +316,6 @@ CXXConversionDecl::Create(ASTContext &C, CXXRecordDecl *RD,
   return new (C) CXXConversionDecl(RD, L, N, T, isInline, isExplicit);
 }
 
-CXXClassVarDecl *CXXClassVarDecl::Create(ASTContext &C, CXXRecordDecl *RD,
-                                   SourceLocation L, IdentifierInfo *Id,
-                                   QualType T) {
-  return new (C) CXXClassVarDecl(RD, L, Id, T);
-}
-
 OverloadedFunctionDecl *
 OverloadedFunctionDecl::Create(ASTContext &C, DeclContext *DC,
                                DeclarationName N) {
index 38bcc9bf3153564fdb9083d9f00740a026bd74dc..3d2132a43fa7a43e39ea4f26a9cc4ae25d4045fe 100644 (file)
@@ -511,7 +511,7 @@ Expr::isLvalueResult Expr::isLvalue(ASTContext &Ctx) const {
           return LV_Valid;
 
       //   -- If E2 is a static data member [...] then E1.E2 is an lvalue.
-      if (isa<CXXClassVarDecl>(Member))
+      if (isa<VarDecl>(Member) && Member->getDeclContext()->isRecord())
         return LV_Valid;
 
       //   -- If E2 is a non-static data member [...]. If E1 is an
index 8c82c5cad33e3cf928d62f022fdc779622972728..f77d1d8845f8684c5ed87d70904d6d5f550e0837 100644 (file)
@@ -1580,27 +1580,20 @@ Sema::ActOnVariableDeclarator(Scope* S, Declarator& D, DeclContext* DC,
     return 0;
   }
 
-  if (DC->isRecord()) {
-    // This is a static data member for a C++ class.
-    NewVD = CXXClassVarDecl::Create(Context, cast<CXXRecordDecl>(DC),
-                                    D.getIdentifierLoc(), II,
-                                    R);
-  } else {
-    bool ThreadSpecified = D.getDeclSpec().isThreadSpecified();
-    if (S->getFnParent() == 0) {
-      // C99 6.9p2: The storage-class specifiers auto and register shall not
-      // appear in the declaration specifiers in an external declaration.
-      if (SC == VarDecl::Auto || SC == VarDecl::Register) {
-        Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);
-        InvalidDecl = true;
-      }
+  bool ThreadSpecified = D.getDeclSpec().isThreadSpecified();
+  if (!DC->isRecord() && S->getFnParent() == 0) {
+    // C99 6.9p2: The storage-class specifiers auto and register shall not
+    // appear in the declaration specifiers in an external declaration.
+    if (SC == VarDecl::Auto || SC == VarDecl::Register) {
+      Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);
+      InvalidDecl = true;
     }
-    NewVD = VarDecl::Create(Context, DC, D.getIdentifierLoc(), 
-                            II, R, SC, 
-                            // FIXME: Move to DeclGroup...
-                            D.getDeclSpec().getSourceRange().getBegin());
-    NewVD->setThreadSpecified(ThreadSpecified);
   }
+  NewVD = VarDecl::Create(Context, DC, D.getIdentifierLoc(), 
+                          II, R, SC, 
+                          // FIXME: Move to DeclGroup...
+                          D.getDeclSpec().getSourceRange().getBegin());
+  NewVD->setThreadSpecified(ThreadSpecified);
   NewVD->setNextDeclarator(LastDeclarator);
 
   // Handle attributes prior to checking for duplicates in MergeVarDecl
index 6df1600c695c4fbb69af7234093e43e077407bd1..fa6fcc8c35a516d0ae5920d588ccca12ec66e983 100644 (file)
@@ -560,7 +560,7 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
     if (BitWidth) {
       if (Member->isInvalidDecl()) {
         // don't emit another diagnostic.
-      } else if (isa<CXXClassVarDecl>(Member)) {
+      } else if (isa<VarDecl>(Member)) {
         // C++ 9.6p3: A bit-field shall not be a static member.
         // "static member 'A' cannot be a bit-field"
         Diag(Loc, diag::err_static_not_bitfield)
@@ -621,7 +621,7 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
     // C++ 9.2p4: A member-declarator can contain a constant-initializer only
     // if it declares a static member of const integral or const enumeration
     // type.
-    if (CXXClassVarDecl *CVD = dyn_cast<CXXClassVarDecl>(Member)) {
+    if (VarDecl *CVD = dyn_cast<VarDecl>(Member)) {
       // ...static member of...
       CVD->setInit(Init);
       // ...const integral or const enumeration type.
index e5a917474fd793ae0c63555021675adaa696733d..58cd3909c20661d60cfcf5ab40829d3c6fae934a 100644 (file)
@@ -1744,7 +1744,7 @@ Sema::ActOnMemberReferenceExpr(Scope *S, ExprArg Base, SourceLocation OpLoc,
 
       return Owned(new (Context) MemberExpr(BaseExpr, OpKind == tok::arrow, FD,
                                             MemberLoc, MemberType));
-    } else if (CXXClassVarDecl *Var = dyn_cast<CXXClassVarDecl>(MemberDecl))
+    } else if (VarDecl *Var = dyn_cast<VarDecl>(MemberDecl))
       return Owned(new (Context) MemberExpr(BaseExpr, OpKind == tok::arrow,
                                   Var, MemberLoc,
                                   Var->getType().getNonReferenceType()));