From: Jason Merrill Date: Wed, 11 May 2011 21:29:49 +0000 (-0400) Subject: pt.c (build_non_dependent_expr): Don't check null_ptr_cst_p, do call maybe_constant_v... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f5ad54d7786c2cfa42d9e3afe1fdff209aea023d;p=gcc.git pt.c (build_non_dependent_expr): Don't check null_ptr_cst_p, do call maybe_constant_value in C++0x mode. * 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fe1ccb57e48..746b69de1d6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2011-05-11 Jason Merrill + * 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. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 74d4cbf1edd..4b32ce9ab1b 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -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; diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 0ba0370833b..bfe233e5209 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -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;