1*67e74705SXin Li // RUN: %clang_cc1 %s -emit-llvm -triple i686-pc-linux -o - -chain-include %s -chain-include %s | FileCheck %s 2*67e74705SXin Li // CHECK: define linkonce_odr %{{[^ ]+}} @_ZN1AI1BE3getEv 3*67e74705SXin Li #if !defined(PASS1) 4*67e74705SXin Li #define PASS1 5*67e74705SXin Li 6*67e74705SXin Li template <typename Derived> 7*67e74705SXin Li struct A { getA8*67e74705SXin Li Derived* get() { return 0; } 9*67e74705SXin Li }; 10*67e74705SXin Li 11*67e74705SXin Li struct B : A<B> { 12*67e74705SXin Li }; 13*67e74705SXin Li 14*67e74705SXin Li #elif !defined(PASS2) 15*67e74705SXin Li #define PASS2 16*67e74705SXin Li 17*67e74705SXin Li struct C : B { 18*67e74705SXin Li }; 19*67e74705SXin Li 20*67e74705SXin Li struct D : C { runD21*67e74705SXin Li void run() { 22*67e74705SXin Li (void)get(); 23*67e74705SXin Li } 24*67e74705SXin Li }; 25*67e74705SXin Li 26*67e74705SXin Li #else 27*67e74705SXin Li main()28*67e74705SXin Liint main() { 29*67e74705SXin Li D d; 30*67e74705SXin Li d.run(); 31*67e74705SXin Li } 32*67e74705SXin Li 33*67e74705SXin Li #endif 34