diff options
-rw-r--r-- | gcc/cp/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 26 |
2 files changed, 10 insertions, 18 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d95650f..a6df4fb 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,7 @@ 2011-07-11 Jason Merrill <jason@redhat.com> + * decl2.c (decl_constant_var_p): Use decl_maybe_constant_var_p. + PR c++/44609 * cp-tree.h (struct tinst_level): Add errors field. * pt.c (neglectable_inst_p, limit_bad_template_recurson): New. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index d90d4b5..e1f9562 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -3574,26 +3574,16 @@ decl_defined_p (tree decl) bool decl_constant_var_p (tree decl) { - bool ret; - tree type = TREE_TYPE (decl); - if (TREE_CODE (decl) != VAR_DECL) + if (!decl_maybe_constant_var_p (decl)) return false; - if (DECL_DECLARED_CONSTEXPR_P (decl) - || (CP_TYPE_CONST_NON_VOLATILE_P (type) - && INTEGRAL_OR_ENUMERATION_TYPE_P (type))) - { - /* We don't know if a template static data member is initialized with - a constant expression until we instantiate its initializer. Even - in the case of a constexpr variable, we can't treat it as a - constant until its initializer is complete in case it's used in - its own initializer. */ - mark_used (decl); - ret = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl); - } - else - ret = false; - return ret; + /* We don't know if a template static data member is initialized with + a constant expression until we instantiate its initializer. Even + in the case of a constexpr variable, we can't treat it as a + constant until its initializer is complete in case it's used in + its own initializer. */ + mark_used (decl); + return DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl); } /* Returns true if DECL could be a symbolic constant variable, depending on |