aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2019-06-25 13:05:19 +0200
committerMartin Jambor <jamborm@gcc.gnu.org>2019-06-25 13:05:19 +0200
commit4c3d876014207c013566132a93cb9d29f0c96a7b (patch)
treeaf305bd0e842e15cbf4c0a463fe00bfc06609585 /gcc
parent332d6c4189218b06a22260beae02fa40d1ec3286 (diff)
downloadgcc-4c3d876014207c013566132a93cb9d29f0c96a7b.zip
gcc-4c3d876014207c013566132a93cb9d29f0c96a7b.tar.gz
gcc-4c3d876014207c013566132a93cb9d29f0c96a7b.tar.bz2
[PR 90939] Remove outdated assert in ipcp_bits_lattice::meet_with
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/ipa-cp.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/lto/pr90939_0.C64
-rw-r--r--gcc/testsuite/g++.dg/lto/pr90939_1.C45
5 files changed, 119 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9814b5b..fee1f55 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index d3a8875..69c00a9 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -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);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b147b67..ca27bc3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..8987c34
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/pr90939_0.C
@@ -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
index 0000000..9add894
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/pr90939_1.C
@@ -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) {}