OSDN Git Service

* decl.c (grokdeclarator): Only set DECL_DECLARED_CONSTEXPR_P once.
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 11 May 2011 21:29:56 +0000 (21:29 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 11 May 2011 21:29:56 +0000 (21:29 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@173680 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/decl.c

index 746b69d..d6241cd 100644 (file)
@@ -1,5 +1,7 @@
 2011-05-11  Jason Merrill  <jason@redhat.com>
 
+       * decl.c (grokdeclarator): Only set DECL_DECLARED_CONSTEXPR_P once.
+
        * pt.c (build_non_dependent_expr): Don't check null_ptr_cst_p,
        do call maybe_constant_value in C++0x mode.
        * semantics.c (cxx_eval_constant_expression): Handle TEMPLATE_DECL.
index eff2360..ad816f1 100644 (file)
@@ -9933,7 +9933,6 @@ grokdeclarator (const cp_declarator *declarator,
                      return error_mark_node;
                  }
 
-                DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
                decl = do_friend (ctype, unqualified_id, decl,
                                  *attrlist, flags,
                                  funcdef_flag);
@@ -10183,8 +10182,11 @@ grokdeclarator (const cp_declarator *declarator,
              }
          }
        else if (constexpr_p && DECL_EXTERNAL (decl))
-         error ("declaration of constexpr variable %qD is not a definition",
-                decl);
+         {
+           error ("declaration of constexpr variable %qD is not a definition",
+                  decl);
+           constexpr_p = false;
+         }
       }
 
     if (storage_class == sc_extern && initialized && !funcdef_flag)
@@ -10213,8 +10215,8 @@ grokdeclarator (const cp_declarator *declarator,
     else if (storage_class == sc_static)
       DECL_THIS_STATIC (decl) = 1;
 
-    /* Don't forget constexprness.  */
-    if (constexpr_p)
+    /* Set constexpr flag on vars (functions got it in grokfndecl).  */
+    if (constexpr_p && TREE_CODE (decl) == VAR_DECL)
       DECL_DECLARED_CONSTEXPR_P (decl) = true;
 
     /* Record constancy and volatility on the DECL itself .  There's