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);
--- /dev/null
+// 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;
+}
--- /dev/null
+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) {}