45 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
// REQUIRES: x86-registered-target
 | 
						|
 | 
						|
// TODO: Fix the case in llvm-ifs where it crashes on an empty Symbols list.
 | 
						|
// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs -c \
 | 
						|
// RUN: -interface-stub-version=experimental-ifs-v1 %s | FileCheck %s
 | 
						|
 | 
						|
// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs -emit-merged-ifs \
 | 
						|
// RUN: -interface-stub-version=experimental-ifs-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 -emit-merged-ifs \
 | 
						|
// RUN: -interface-stub-version=experimental-ifs-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
 |