aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/pt.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-03-08 00:28:13 -0500
committerJason Merrill <jason@gcc.gnu.org>2011-03-08 00:28:13 -0500
commit93dd46fb792863cd5d7893867d93e7f0ea69322c (patch)
treeeed58ea0402d2c32facb43dbede2512affbfe906 /gcc/cp/pt.c
parent8152661be6564d7369d88e32dded29641183b248 (diff)
downloadgcc-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.c16
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