aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/match.pd3
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/conversion/pr66211.C11
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/forwprop-18.c8
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" } } */