[PR 90939] Remove outdated assert in ipcp_bits_lattice::meet_with
authorMartin Jambor <mjambor@suse.cz>
Tue, 25 Jun 2019 11:05:19 +0000 (13:05 +0200)
committerMartin Jambor <jamborm@gcc.gnu.org>
Tue, 25 Jun 2019 11:05:19 +0000 (13:05 +0200)
2019-06-25  Martin Jambor  <mjambor@suse.cz>

PR ipa/90939
* ipa-cp.c (ipcp_bits_lattice::meet_with): Remove assert.

testsuite/
* g++.dg/lto/pr90939_[01].C: New test.

From-SVN: r272646

gcc/ChangeLog
gcc/ipa-cp.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/lto/pr90939_0.C [new file with mode: 0644]
gcc/testsuite/g++.dg/lto/pr90939_1.C [new file with mode: 0644]

index 9814b5b85f8fb1e3650644d5a44978b82856c79a..fee1f55c7ae82f38cde292363937c4b7c39ce9f0 100644 (file)
@@ -1,3 +1,8 @@
+2019-06-25  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/90939
+       * ipa-cp.c (ipcp_bits_lattice::meet_with): Remove assert.
+
 2019-06-25  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/90930
index d3a88756a911af2a28d739ac9c434b4296ac149d..69c00a9c5a58e59f1d6534603d1c0f8f7e70ec9e 100644 (file)
@@ -1085,7 +1085,6 @@ ipcp_bits_lattice::meet_with (ipcp_bits_lattice& other, unsigned precision,
   if (TREE_CODE_CLASS (code) == tcc_binary)
     {
       tree type = TREE_TYPE (operand);
-      gcc_assert (INTEGRAL_TYPE_P (type));
       widest_int o_value, o_mask;
       get_value_and_mask (operand, &o_value, &o_mask);
 
index b147b6766eef4cc265927c199a1d140f5d695fbf..ca27bc3bffd2cc5f0ba1d3c99a8f4855a3f494a5 100644 (file)
@@ -1,3 +1,8 @@
+2019-06-25  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/90939
+       * g++.dg/lto/pr90939_[01].C: New test.
+
 2019-06-25  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/90930
diff --git a/gcc/testsuite/g++.dg/lto/pr90939_0.C b/gcc/testsuite/g++.dg/lto/pr90939_0.C
new file mode 100644 (file)
index 0000000..8987c34
--- /dev/null
@@ -0,0 +1,64 @@
+// PR ipa/90939
+// { dg-lto-do link }
+// { dg-lto-options { { -flto -O3 } } }
+
+
+typedef char uint8_t;
+template <class T> class A {
+public:
+  A(T *);
+};
+template <typename Derived, typename Base> const Derived &To(Base &p1) {
+  return static_cast<const Derived &>(p1);
+}
+class H;
+template <typename, typename Base> const H *To(Base *p1) {
+  return p1 ? &To<H>(*p1) : nullptr;
+}
+enum TextDirection : uint8_t;
+enum WritingMode : unsigned;
+class B {
+public:
+  WritingMode m_fn1();
+};
+class C {
+public:
+  int &m_fn2();
+};
+class D { double d;};
+class H : public D {};
+class F {
+public:
+  F(C, A<const int>, B *, WritingMode, TextDirection);
+};
+
+class G {
+public:
+  C NGLayoutAlgorithm_node;
+  B NGLayoutAlgorithm_space;
+  TextDirection NGLayoutAlgorithm_direction;
+  H NGLayoutAlgorithm_break_token;
+  G(A<const int> p1) __attribute__((noinline))
+    : break_token_(&NGLayoutAlgorithm_break_token),
+        container_builder_(NGLayoutAlgorithm_node, p1, &NGLayoutAlgorithm_space,
+                           NGLayoutAlgorithm_space.m_fn1(),
+                           NGLayoutAlgorithm_direction) {}
+  G(C p1, const H *) : G(&p1.m_fn2()) {}
+  A<H> break_token_;
+  F container_builder_;
+};
+
+class I : G {
+public:
+  I(const D *) __attribute__((noinline));
+};
+C a;
+I::I(const D *p1) : G(a, To<H>(p1)) {}
+
+D gd[10];
+
+int main (int argc, char *argv[])
+{
+  I i(&(gd[argc%2]));
+  return 0;
+}
diff --git a/gcc/testsuite/g++.dg/lto/pr90939_1.C b/gcc/testsuite/g++.dg/lto/pr90939_1.C
new file mode 100644 (file)
index 0000000..9add894
--- /dev/null
@@ -0,0 +1,45 @@
+typedef char uint8_t;
+template <class T> class A {
+public:
+  A(T *);
+};
+
+enum TextDirection : uint8_t;
+enum WritingMode : unsigned;
+class B {
+public:
+  WritingMode m_fn1();
+};
+class C {
+public:
+  int &m_fn2();
+};
+
+class F {
+public:
+  F(C, A<const int>, B *, WritingMode, TextDirection);
+};
+class D { double d;};
+class H : public D {};
+
+
+
+template <class T> A<T>::A(T*) {}
+
+template class A<H>;
+template class A<int const>;
+
+WritingMode __attribute__((noipa))
+B::m_fn1()
+{
+  return (WritingMode) 0;
+}
+
+int gi;
+int & __attribute__((noipa))
+C::m_fn2 ()
+{
+  return gi;
+}
+
+__attribute__((noipa)) F::F(C, A<const int>, B *, WritingMode, TextDirection) {}