summaryrefslogtreecommitdiffstats
path: root/clang/test/InterfaceStubs/function-template-specialization.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/InterfaceStubs/function-template-specialization.cpp')
-rw-r--r--clang/test/InterfaceStubs/function-template-specialization.cpp41
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
OpenPOWER on IntegriCloud