diff options
author | Jason Merrill <jason@redhat.com> | 2011-03-08 00:28:13 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-03-08 00:28:13 -0500 |
commit | 93dd46fb792863cd5d7893867d93e7f0ea69322c (patch) | |
tree | eed58ea0402d2c32facb43dbede2512affbfe906 /gcc/cp/pt.c | |
parent | 8152661be6564d7369d88e32dded29641183b248 (diff) | |
download | gcc-93dd46fb792863cd5d7893867d93e7f0ea69322c.zip gcc-93dd46fb792863cd5d7893867d93e7f0ea69322c.tar.gz gcc-93dd46fb792863cd5d7893867d93e7f0ea69322c.tar.bz2 |
re PR c++/48003 (Regression in Template Constants from 4.5.2)
PR c++/48003
* pt.c (convert_nontype_argument): Fix -fpermissive allowing
integer overflow.
* semantics.c (potential_constant_expression_1): Check TREE_OVERFLOW.
From-SVN: r170771
Diffstat (limited to 'gcc/cp/pt.c')
-rw-r--r-- | gcc/cp/pt.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index dfc9728..076224c 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -5402,11 +5402,19 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain) { if (complain & tf_error) { - error ("%qE is not a valid template argument for type %qT " - "because it is a non-constant expression", expr, type); - cxx_constant_value (expr); + int errs = errorcount, warns = warningcount; + expr = cxx_constant_value (expr); + if (errorcount > errs || warningcount > warns) + inform (EXPR_LOC_OR_HERE (expr), + "in template argument for type %qT ", type); + if (expr == error_mark_node) + return NULL_TREE; + /* else cxx_constant_value complained but gave us + a real constant, so go ahead. */ + gcc_assert (TREE_CODE (expr) == INTEGER_CST); } - return NULL_TREE; + else + return NULL_TREE; } } /* [temp.arg.nontype]/5, bullet 2 |