aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2019-09-22 12:35:00 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2019-09-22 12:35:00 +0000
commit0968003dd08a9e9f83bee955bbdc259a781f044f (patch)
tree77adb1c8c15a739d0082bba67a78d40d0a7cd44c /gcc
parentdcb786e59eb7ec2ad32357673f138bd5d9242ea9 (diff)
downloadgcc-0968003dd08a9e9f83bee955bbdc259a781f044f.zip
gcc-0968003dd08a9e9f83bee955bbdc259a781f044f.tar.gz
gcc-0968003dd08a9e9f83bee955bbdc259a781f044f.tar.bz2
PR c++/91819 - ICE with operator++ and enum.
* call.c (build_new_op_1): Set arg2_type. * g++.dg/other/operator4.C: New test. From-SVN: r276027
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/call.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/other/operator4.C22
4 files changed, 36 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3015d68..4420d8f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2019-09-22 Marek Polacek <polacek@redhat.com>
+
+ PR c++/91819 - ICE with operator++ and enum.
+ * call.c (build_new_op_1): Set arg2_type.
+
2019-09-17 Jason Merrill <jason@redhat.com>
* parser.c (cp_parser_statement): Handle [[likely]] on
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index e613d8a..2dad699 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -5878,7 +5878,10 @@ build_new_op_1 (const op_location_t &loc, enum tree_code code, int flags,
goto builtin;
if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
- arg2 = integer_zero_node;
+ {
+ arg2 = integer_zero_node;
+ arg2_type = integer_type_node;
+ }
vec_alloc (arglist, 3);
arglist->quick_push (arg1);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 412616d..cbf0eff 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-09-22 Marek Polacek <polacek@redhat.com>
+
+ PR c++/91819 - ICE with operator++ and enum.
+ * g++.dg/other/operator4.C: New test.
+
2019-09-21 Martin Sebor <msebor@redhat.com>
PR middle-end/91830
diff --git a/gcc/testsuite/g++.dg/other/operator4.C b/gcc/testsuite/g++.dg/other/operator4.C
new file mode 100644
index 0000000..e7a41c0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/operator4.C
@@ -0,0 +1,22 @@
+// PR c++/91819 - ICE with operator++ and enum.
+// { dg-do compile }
+
+enum Foo
+{
+ a,
+ b
+};
+
+inline Foo operator++(Foo &f, int)
+{
+ return f = (Foo)(f + 1);
+}
+
+int main()
+{
+ int count = 0;
+ for (Foo f = a; f <= b; f++) {
+ count++;
+ }
+ return count;
+}