aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2018-06-20 15:46:02 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2018-06-20 15:46:02 +0000
commite28fadbc0639d60fdf8e3f32fad7020b58bb5d69 (patch)
tree6452ad18dcdfa0fcc5516221c57102586cd7a1af /gcc
parent125fe9abf3f205bbc2c36fbcb981b81b522466ca (diff)
downloadgcc-e28fadbc0639d60fdf8e3f32fad7020b58bb5d69.zip
gcc-e28fadbc0639d60fdf8e3f32fad7020b58bb5d69.tar.gz
gcc-e28fadbc0639d60fdf8e3f32fad7020b58bb5d69.tar.bz2
re PR c++/86240 (ice: unexpected expression absu_expr)
PR c++/86240 * constexpr.c (cxx_eval_constant_expression): Handle ABSU_EXPR. (fold_simple_1): Likewise. * error.c (dump_expr): Likewise. * g++.dg/pr86240.C: New test. From-SVN: r261809
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/constexpr.c2
-rw-r--r--gcc/cp/error.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/pr86240.C12
5 files changed, 27 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 822a18a..72cd388 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2018-06-20 Marek Polacek <polacek@redhat.com>
+
+ PR c++/86240
+ * constexpr.c (cxx_eval_constant_expression): Handle ABSU_EXPR.
+ (fold_simple_1): Likewise.
+ * error.c (dump_expr): Likewise.
+
2018-06-20 Nathan Sidwell <nathan@acm.org>
PR c++/85634
diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c
index 216eecd..44f3093 100644
--- a/gcc/cp/constexpr.c
+++ b/gcc/cp/constexpr.c
@@ -4412,6 +4412,7 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
case FLOAT_EXPR:
case NEGATE_EXPR:
case ABS_EXPR:
+ case ABSU_EXPR:
case BIT_NOT_EXPR:
case TRUTH_NOT_EXPR:
case FIXED_CONVERT_EXPR:
@@ -5056,6 +5057,7 @@ fold_simple_1 (tree t)
return fold_sizeof_expr (t);
case ABS_EXPR:
+ case ABSU_EXPR:
case CONJ_EXPR:
case REALPART_EXPR:
case IMAGPART_EXPR:
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index 6a26113..b0d8e32 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -2764,6 +2764,7 @@ dump_expr (cxx_pretty_printer *pp, tree t, int flags)
case VEC_DELETE_EXPR:
case MODOP_EXPR:
case ABS_EXPR:
+ case ABSU_EXPR:
case CONJ_EXPR:
case VECTOR_CST:
case FIXED_CST:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ce89b33..36305cb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-06-20 Marek Polacek <polacek@redhat.com>
+
+ PR c++/86240
+ * g++.dg/pr86240.C: New test.
+
2018-06-20 Jakub Jelinek <jakub@redhat.com>
PR debug/86194
diff --git a/gcc/testsuite/g++.dg/pr86240.C b/gcc/testsuite/g++.dg/pr86240.C
new file mode 100644
index 0000000..16ae89c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr86240.C
@@ -0,0 +1,12 @@
+// { dg-do compile }
+
+extern "C" int abs (int);
+struct a {
+ short b;
+} e;
+short c;
+bool
+foo ()
+{
+ return abs(c) >= e.b;
+}