diff options
Diffstat (limited to 'clang/test/InterfaceStubs/function-template-specialization.cpp')
-rw-r--r-- | clang/test/InterfaceStubs/function-template-specialization.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/clang/test/InterfaceStubs/function-template-specialization.cpp b/clang/test/InterfaceStubs/function-template-specialization.cpp new file mode 100644 index 00000000000..b6cf64c6027 --- /dev/null +++ b/clang/test/InterfaceStubs/function-template-specialization.cpp @@ -0,0 +1,41 @@ +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-tapi-elf-v1 %s | FileCheck %s + +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-tapi-elf-v1 \ +// RUN: -DUSE_TEMPLATE_FUNCTION=1 %s | \ +// RUN: FileCheck -check-prefix=CHECK-USES-TEMPLATE-FUNCTION %s + +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-tapi-elf-v1 \ +// RUN: -DSPECIALIZE_TEMPLATE_FUNCTION=1 %s | \ +// RUN: FileCheck -check-prefix=CHECK-SPECIALIZES-TEMPLATE-FUNCTION %s + +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -c \ +// RUN: %s | llvm-nm - 2>&1 | FileCheck %s + +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -c \ +// RUN: -DUSE_TEMPLATE_FUNCTION=1 %s | llvm-nm - 2>&1 | \ +// RUN: FileCheck -check-prefix=CHECK-USES-TEMPLATE-FUNCTION %s + +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -c \ +// RUN: -DSPECIALIZE_TEMPLATE_FUNCTION=1 %s | llvm-nm - 2>&1 | \ +// RUN: FileCheck -check-prefix=CHECK-SPECIALIZES-TEMPLATE-FUNCTION %s + +// CHECK-NOT: _Z16templateFunctionIiET_S0_ +// CHECK-USES-TEMPLATE-FUNCTION-DAG: _Z16templateFunctionIiET_S0_ +// CHECK-SPECIALIZES-TEMPLATE-FUNCTION-DAG: _Z16templateFunctionIiET_S0_ +template <typename T> +T templateFunction(T t) { return t; } + +#ifdef USE_TEMPLATE_FUNCTION +int FortyTwo = templateFunction<int>(42); +#endif + +#ifdef SPECIALIZE_TEMPLATE_FUNCTION +template <> +int templateFunction<int>(int t); +// TODO: Make it so that -emit-interface-stubs does not emit +// _Z16templateFunctionIiET_S0_ if there is no user of the specialization. +int foo() { return templateFunction(42); } +#endif |