pt.c (build_non_dependent_expr): Don't check null_ptr_cst_p, do call maybe_constant_v...
authorJason Merrill <jason@redhat.com>
Wed, 11 May 2011 21:29:49 +0000 (17:29 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 11 May 2011 21:29:49 +0000 (17:29 -0400)
* 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.

From-SVN: r173679

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/cp/semantics.c

index fe1ccb5..746b69d 100644 (file)
@@ -1,5 +1,9 @@
 2011-05-11  Jason Merrill  <jason@redhat.com>
 
+       * 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.
+
        PR c++/48745
        * pt.c (value_dependent_expr_p): Handle CONSTRUCTOR.
 
index 74d4cbf..4b32ce9 100644 (file)
@@ -18871,10 +18871,13 @@ build_non_dependent_expr (tree expr)
 {
   tree inner_expr;
 
-  /* Preserve null pointer constants so that the type of things like
-     "p == 0" where "p" is a pointer can be determined.  */
-  if (null_ptr_cst_p (expr))
-    return expr;
+#ifdef ENABLE_CHECKING
+  /* Try to get a constant value for all non-type-dependent expressions in
+      order to expose bugs in *_dependent_expression_p and constexpr.  */
+  if (cxx_dialect >= cxx0x)
+    maybe_constant_value (fold_non_dependent_expr (expr));
+#endif
+
   /* Preserve OVERLOADs; the functions must be available to resolve
      types.  */
   inner_expr = expr;
index 0ba0370..bfe233e 100644 (file)
@@ -6911,6 +6911,7 @@ cxx_eval_constant_expression (const constexpr_call *call, tree t,
       break;
 
     case FUNCTION_DECL:
+    case TEMPLATE_DECL:
     case LABEL_DECL:
       return t;