ret i32 %b
}
//===---------------------------------------------------------------------===//
-We should fold this code into "ret i1 false" since neither %zero nor %one can
-ever be null pointers.
-define i1 @foo(i1 %cond) {
- %zero = alloca i32
- %one = alloca i32
+clang -O3 fails to devirtualize this virtual inheritance case: (GCC PR45875)
- %ptr = select i1 %cond, i32* %zero, i32* %one
- %isnull = icmp eq i32* %ptr, null
- ret i1 %isnull
+struct c1 {};
+struct c10 : c1{
+ virtual void foo ();
+};
+struct c11 : c10, c1{
+ virtual void f6 ();
+};
+struct c28 : virtual c11{
+ void f6 ();
+};
+void check_c28 () {
+ c28 obj;
+ c11 *ptr = &obj;
+ ptr->f6 ();
}
+
//===---------------------------------------------------------------------===//