From: Mark Mitchell Date: Mon, 24 Aug 1998 12:04:39 +0000 (+0000) Subject: cp-tree.h (CLASS_TYPE_P): New macro. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c92366fb3f2247423f12d29e9f52b5335cbda6f2;p=gcc.git cp-tree.h (CLASS_TYPE_P): New macro. * cp-tree.h (CLASS_TYPE_P): New macro. * decl.c (grokdeclarator): Use it instead of IS_AGGR_TYPE. From-SVN: r21945 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a89d657a9ba..6af7e8a285d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +1998-08-24 Mark Mitchell + + * cp-tree.h (CLASS_TYPE_P): New macro. + * decl.c (grokdeclarator): Use it instead of IS_AGGR_TYPE. + 1998-08-24 Benjamin Kosnik * cp-tree.h: Declare. diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index b73fb535484..993628a4296 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -498,7 +498,16 @@ enum languages { lang_c, lang_cplusplus, lang_java }; /* The _DECL for this _TYPE. */ #define TYPE_MAIN_DECL(NODE) (TYPE_STUB_DECL (TYPE_MAIN_VARIANT (NODE))) +/* Nonzero if T is a class (or struct or union) type. Also nonzero + for template type parameters. Despite its name, this macro has + nothing to do with the definition of aggregate given in the + standard. Think of this macro as MAYBE_CLASS_TYPE_P. */ #define IS_AGGR_TYPE(t) (TYPE_LANG_FLAG_5 (t)) + +/* Nonzero if T is a class type. Zero for template type parameters. */ +#define CLASS_TYPE_P(t) \ + (IS_AGGR_TYPE (t) && TREE_CODE (t) != TEMPLATE_TYPE_PARM) + #define IS_AGGR_TYPE_CODE(t) (t == RECORD_TYPE || t == UNION_TYPE) #define IS_AGGR_TYPE_2(TYPE1,TYPE2) \ (TREE_CODE (TYPE1) == TREE_CODE (TYPE2) \ diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index f232fdd4d73..087df2fa934 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -10444,7 +10444,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) but not both. If it appears in the class, the member is a member constant. The file-scope definition is always required. */ - if (IS_AGGR_TYPE (type) + if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE) { cp_error ("in-class initialization of static data member of non-integral type `%T'",