From f5ad54d7786c2cfa42d9e3afe1fdff209aea023d Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 11 May 2011 17:29:49 -0400 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/pt.c | 11 +++++++---- gcc/cp/semantics.c | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fe1ccb5..746b69d 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 74d4cbf..4b32ce9 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 0ba0370..bfe233e 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; -- 2.7.4