From 0968003dd08a9e9f83bee955bbdc259a781f044f Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Sun, 22 Sep 2019 12:35:00 +0000 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/call.c | 5 ++++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/other/operator4.C | 22 ++++++++++++++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/other/operator4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3015d6806d0..4420d8ffab7 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2019-09-22 Marek Polacek + + PR c++/91819 - ICE with operator++ and enum. + * call.c (build_new_op_1): Set arg2_type. + 2019-09-17 Jason Merrill * parser.c (cp_parser_statement): Handle [[likely]] on diff --git a/gcc/cp/call.c b/gcc/cp/call.c index e613d8a0066..2dad699622e 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 412616d8f33..cbf0eff988c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-09-22 Marek Polacek + + PR c++/91819 - ICE with operator++ and enum. + * g++.dg/other/operator4.C: New test. + 2019-09-21 Martin Sebor 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 00000000000..e7a41c01a58 --- /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; +} -- 2.30.2