* decl.c (grokdeclarator): Only set DECL_DECLARED_CONSTEXPR_P once.
authorJason Merrill <jason@redhat.com>
Wed, 11 May 2011 21:29:56 +0000 (17:29 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 11 May 2011 21:29:56 +0000 (17:29 -0400)
From-SVN: r173680

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

index 746b69de1d659855918555520a96e8ecd8c6f76e..d6241cd4a2c5f8c53be59ed0d60eb036de576e28 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 eff23608b6afba8ebb9f4b3bcedd0b1dc30f3a02..ad816f169775255c66dd10c39f9e666414bc7a6f 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