Be careful about comdat boundary in ICF (PR ipa/82352).
[official-gcc.git] / gcc / testsuite / g++.dg / ubsan / pr65610.C
blobced59a87430e573b5074e64024116fe568a19a35
1 // PR ipa/65610
2 // { dg-do compile }
3 // { dg-options "-std=c++11 -fsanitize=undefined -fno-sanitize=vptr -fcompare-debug" }
5 class A;
6 class B {};
7 enum C { D };
8 class E;
9 class F;
10 class G;
11 class H
13   F m1 (const A &t) const;
14   G m2 () const;
16 class G {};
17 template <class S, class T>
18 class I;
19 template <class S, class T>
20 class J
22   friend class I <S,T>;
23   J <S,T> *j;
25 template <class S, class T>
26 struct I
28   virtual ~I ();
29   virtual void m3 (void *p) {}
30   J <S,T> *i;
31   void m4 (J <S,T>*& t);
33 template <class S, class T>
34 void I <S,T>::m4 (J <S,T> * &t)
36   m4 (t->j);
37   m3 (t);
39 template <class S, class T>
40 I <S,T>::~I ()
42   m4 (i);
44 struct F
46   explicit inline F (C v);
47   inline ~F ();
48   I <B, E> f;
50 inline F::F (C v) {}
51 inline F::~F () {}
52 F H::m1 (const A &t) const
54   F q (D);
55   G r = m2 ();
56   return q;