diff options
author | Richard Biener <rguenther@suse.de> | 2015-05-21 13:23:41 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-05-21 13:23:41 +0000 |
commit | 5ba3ae6db5a599b3b8d3eaf500c47f447b36babf (patch) | |
tree | a38c2b2cacc71e52c0cc086b402691fb13a837b1 | |
parent | 1ca46a7753d416f7f5610f82cca7f89683bf4da0 (diff) | |
download | gcc-5ba3ae6db5a599b3b8d3eaf500c47f447b36babf.zip gcc-5ba3ae6db5a599b3b8d3eaf500c47f447b36babf.tar.gz gcc-5ba3ae6db5a599b3b8d3eaf500c47f447b36babf.tar.bz2 |
re PR c++/66211 (Rvalue conversion in ternary operator causes internal compiler error)
2015-05-21 Richard Biener <rguenther@suse.de>
PR c++/66211
* match.pd: Guard pattern optimzing (int)(float)int
conversions to apply only on GIMPLE.
* g++.dg/conversion/pr66211.C: New testcase.
* gcc.dg/tree-ssa/forwprop-18.c: Adjust.
From-SVN: r223483
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/match.pd | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/conversion/pr66211.C | 11 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/forwprop-18.c | 8 |
5 files changed, 29 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f4012b7..af2225b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-05-21 Richard Biener <rguenther@suse.de> + + PR c++/66211 + * match.pd: Guard pattern optimzing (int)(float)int + conversions to apply only on GIMPLE. + 2015-05-21 Jeff Law <law@redhat.com> * combine.c (find_split_point): Handle ASHIFT like MULT to encourage diff --git a/gcc/match.pd b/gcc/match.pd index 54500d9..ce62853 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -791,7 +791,8 @@ along with GCC; see the file COPYING3. If not see /* If we are converting an integer to a floating-point that can represent it exactly and back to an integer, we can skip the floating-point conversion. */ - (if (inside_int && inter_float && final_int && + (if (GIMPLE /* PR66211 */ + && inside_int && inter_float && final_int && (unsigned) significand_size (TYPE_MODE (inter_type)) >= inside_prec - !inside_unsignedp) (convert @0)))))) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 283644c..e681453 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2015-05-21 Richard Biener <rguenther@suse.de> + + PR c++/66211 + * g++.dg/conversion/pr66211.C: New testcase. + * gcc.dg/tree-ssa/forwprop-18.c: Adjust. + 2015-05-21 Jeff Law <law@redhat.com> * gcc.target/hppa/shadd-2.c: New test. diff --git a/gcc/testsuite/g++.dg/conversion/pr66211.C b/gcc/testsuite/g++.dg/conversion/pr66211.C new file mode 100644 index 0000000..49d2478 --- /dev/null +++ b/gcc/testsuite/g++.dg/conversion/pr66211.C @@ -0,0 +1,11 @@ +// PR c++/66211 +// { dg-do compile } + +void f(int&){} + +int main() +{ + int x = 0; + double y = 1; + f(1 > 0 ? x : y); // { dg-error "from an rvalue" } +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-18.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-18.c index 2c4d120..b0445fd 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-18.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-18.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-forwprop1" } */ +/* { dg-options "-O -fdump-tree-cddce1" } */ signed char f1(signed char n) { @@ -19,6 +19,6 @@ signed char g2(unsigned long long n) return (float)n; } -/* { dg-final { scan-tree-dump-times "\\\(float\\\)" 2 "forwprop1" } } */ -/* { dg-final { scan-tree-dump-not "\\\(long double\\\)" "forwprop1" } } */ -/* { dg-final { cleanup-tree-dump "forwprop1" } } */ +/* { dg-final { scan-tree-dump-times "\\\(float\\\)" 2 "cddce1" } } */ +/* { dg-final { scan-tree-dump-not "\\\(long double\\\)" "cddce1" } } */ +/* { dg-final { cleanup-tree-dump "cddce1" } } */ |