// This file is distributed under the University of Illinois Open Source License. | |
// See LICENSE.TXT for details. | |
// RUN: cxx_compiler -c %s -o %t.o | |
// RUN: bindump %t.o | FileCheck prefixes %s | |
// Test for types as parameters | |
// CHECK-DAG: _Z2f1w | |
void f1(wchar_t) {} | |
// CHECK-DAG: _Z2f2b | |
void f2(bool) {} | |
// CHECK-DAG: _Z2f3c | |
void f3(char) {} | |
// CHECK-DAG: _Z2f4a | |
void f4(signed char) {} | |
// CHECK-DAG: _Z2f5h | |
void f5(unsigned char) {} | |
// CHECK-DAG: _Z2f6s | |
void f6(short) {} | |
// CHECK-DAG: _Z2f7t | |
void f7(unsigned short) {} | |
// CHECK-DAG: _Z2f8i | |
void f8(int) {} | |
// CHECK-DAG: _Z2f9j | |
void f9(unsigned int) {} | |
// CHECK-DAG: _Z3f10l | |
void f10(long) {} | |
// CHECK-DAG: _Z3f11m | |
void f11(unsigned long) {} | |
// CHECK-DAG: _Z3f12x | |
void f12(long long) {} | |
// CHECK-DAG: _Z3f13y | |
void f13(unsigned long long) {} | |
// CHECK-DAG: _Z3f16f | |
void f16(float) {} | |
// CHECK-DAG: _Z3f17d | |
void f17(double) {} | |
// CHECK-DAG: _Z3f18e | |
void f18(long double) {} | |
// CHICK: _Z3f19g | |
//void f19(__float128) {} | |
// CHECK-DAG: _Z3f20z | |
void f20(...) {} | |
// decimal floating point types unsupported | |
// CHECK-DAG: _Z3fooILi2EEvRAplT_Li1E_i | |
template<int I> void foo (int (&)[I + 1]) { } | |
template <> void foo<2> (int (&)[3]) {} | |
// Template parameters | |
// CHECK-DAG: _Z1fIiEvT_ | |
template<class T> void f(T) {} | |
template <> void f(int) {}; | |
// "template parameter reference is a substitution candidate, distinct from the type (or other subsstitutible entity) that is the actual parameter." | |
// CHECK-DAG: _Z3fooI3barET_S1_S0_S1_S0_ | |
class bar {}; | |
template <typename T> T foo(T, bar, T, bar); | |
template <> bar foo<bar>(bar, bar, bar, bar) { bar b; return b; } | |
// compression | |
// CHECK-DAG: _Z1fPFvvEM1SFvvE | |
typedef void T(); | |
struct S {}; | |
void f(T*, T (S::*)) {} | |
// CHECK-DAG: _ZN1N1TIiiE2mfENS0_IddEE | |
namespace N { | |
template <typename A, typename B> struct T { | |
void mf(N::T<double, double>); | |
}; | |
}; | |
template <> void N::T<int, int>::mf(N::T<double, double>) {} |