On 10/2/20 1:15 PM, Martin Liška wrote:
On 10/2/20 12:05 PM, Martin Liška wrote:
There are 2 more I've just tested.

Martin

and one more.

Martin

Adding one more.

Martin
>From afcdd7b8ff51a7df885dc3fdf38be566a4c1fdbf Mon Sep 17 00:00:00 2001
From: Martin Liska <mli...@suse.cz>
Date: Thu, 15 Oct 2020 14:57:31 +0200
Subject: [PATCH] IPA: compare VRP types.

gcc/ChangeLog:

	PR ipa/97404
	* ipa-prop.c (struct ipa_vr_ggc_hash_traits):
	Compare types of VRP as we can merge ranges of different types.

gcc/testsuite/ChangeLog:

	PR ipa/97404
	* gcc.c-torture/execute/pr97404.c: New test.

(cherry picked from commit a86623902767122c71c7229150a8b8a79cbb3673)
---
 gcc/ipa-prop.c                                |  3 +-
 gcc/testsuite/gcc.c-torture/execute/pr97404.c | 28 +++++++++++++++++++
 2 files changed, 30 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr97404.c

diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index 40edee7951c..7c8aee20a88 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -122,7 +122,8 @@ struct ipa_vr_ggc_hash_traits : public ggc_cache_remove <value_range_base *>
   static bool
   equal (const value_range_base *a, const value_range_base *b)
     {
-      return a->equal_p (*b);
+      return (a->equal_p (*b)
+	      && types_compatible_p (a->type (), b->type ()));
     }
   static void
   mark_empty (value_range_base *&p)
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr97404.c b/gcc/testsuite/gcc.c-torture/execute/pr97404.c
new file mode 100644
index 00000000000..7e5ce231725
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr97404.c
@@ -0,0 +1,28 @@
+/* PR ipa/97404 */
+/* { dg-additional-options "-fno-inline" } */
+
+char a, b;
+long c;
+short d, e;
+long *f = &c;
+int g;
+char h(signed char i) { return 0; }
+static short j(short i, int k) { return i < 0 ? 0 : i >> k; }
+void l(void);
+void m(void)
+{
+  e = j(d | 9766, 11);
+    *f = e;
+}
+void l(void)
+{
+  a = 5 | g;
+    b = h(a);
+}
+int main()
+{
+  m();
+  if (c != 4)
+    __builtin_abort();
+  return 0;
+}
-- 
2.28.0

Reply via email to