// Test this without pch. // RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -DBODY %s -o - | FileCheck %s // Test with pch. // RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-pch -o %t %s // RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -include-pch %t -DBODY %s -o - | FileCheck %s // RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-pch -fpch-instantiate-templates -o %t %s // RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -include-pch %t -DBODY %s -o - | FileCheck %s // expected-no-diagnostics #ifndef HEADER_H #define HEADER_H struct A { void foo() { bar<0>(); } // This will trigger implicit instantiation of bar<0>() in the PCH. template void bar(); }; #endif #ifdef BODY // But the definition is only in the source, so the instantiation must be delayed until the TU. template void A::bar() {} void test(A *a) { a->foo(); } #endif // CHECK: define linkonce_odr void @_ZN1A3barILi0EEEvv