1*67e74705SXin Li // RUN: %clang_cc1 -x c++ -std=c++1y -fblocks -fsyntax-only -triple %itanium_abi_triple -verify %s
2*67e74705SXin Li // PR16946
3*67e74705SXin Li // expected-no-diagnostics
4*67e74705SXin Li
foo()5*67e74705SXin Li auto foo() {
6*67e74705SXin Li static_assert(sizeof(__func__) == 4, "foo");
7*67e74705SXin Li static_assert(sizeof(__FUNCTION__) == 4, "foo");
8*67e74705SXin Li static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "auto foo()");
9*67e74705SXin Li return 0;
10*67e74705SXin Li }
11*67e74705SXin Li
bar()12*67e74705SXin Li auto bar() -> decltype(42) {
13*67e74705SXin Li static_assert(sizeof(__func__) == 4, "bar");
14*67e74705SXin Li static_assert(sizeof(__FUNCTION__) == 4, "bar");
15*67e74705SXin Li static_assert(sizeof(__PRETTY_FUNCTION__) == 10, "int bar()");
16*67e74705SXin Li return 0;
17*67e74705SXin Li }
18*67e74705SXin Li
19*67e74705SXin Li // Within templates.
20*67e74705SXin Li template <typename T>
baz()21*67e74705SXin Li int baz() {
22*67e74705SXin Li static_assert(sizeof(__func__) == 4, "baz");
23*67e74705SXin Li static_assert(sizeof(__FUNCTION__) == 4, "baz");
24*67e74705SXin Li static_assert(sizeof(__PRETTY_FUNCTION__) == 20, "int baz() [T = int]");
25*67e74705SXin Li
26*67e74705SXin Li []() {
27*67e74705SXin Li static_assert(sizeof(__func__) == 11, "operator()");
28*67e74705SXin Li static_assert(sizeof(__FUNCTION__) == 11, "operator()");
29*67e74705SXin Li static_assert(sizeof(__PRETTY_FUNCTION__) == 50,
30*67e74705SXin Li "auto baz()::<anonymous class>::operator()() const");
31*67e74705SXin Li return 0;
32*67e74705SXin Li }
33*67e74705SXin Li ();
34*67e74705SXin Li
35*67e74705SXin Li ^{
36*67e74705SXin Li static_assert(sizeof(__func__) == 27, "___Z3bazIiEiv_block_invoke");
37*67e74705SXin Li static_assert(sizeof(__FUNCTION__) == 27, "___Z3bazIiEiv_block_invoke");
38*67e74705SXin Li static_assert(sizeof(__PRETTY_FUNCTION__) == 27, "___Z3bazIiEiv_block_invoke");
39*67e74705SXin Li }
40*67e74705SXin Li ();
41*67e74705SXin Li
42*67e74705SXin Li #pragma clang __debug captured
43*67e74705SXin Li {
44*67e74705SXin Li static_assert(sizeof(__func__) == 4, "baz");
45*67e74705SXin Li static_assert(sizeof(__FUNCTION__) == 4, "baz");
46*67e74705SXin Li static_assert(sizeof(__PRETTY_FUNCTION__) == 20, "int baz() [T = int]");
47*67e74705SXin Li }
48*67e74705SXin Li
49*67e74705SXin Li return 0;
50*67e74705SXin Li }
51*67e74705SXin Li
main()52*67e74705SXin Li int main() {
53*67e74705SXin Li static_assert(sizeof(__func__) == 5, "main");
54*67e74705SXin Li static_assert(sizeof(__FUNCTION__) == 5, "main");
55*67e74705SXin Li static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "int main()");
56*67e74705SXin Li
57*67e74705SXin Li []() {
58*67e74705SXin Li static_assert(sizeof(__func__) == 11, "operator()");
59*67e74705SXin Li static_assert(sizeof(__FUNCTION__) == 11, "operator()");
60*67e74705SXin Li static_assert(sizeof(__PRETTY_FUNCTION__) == 51,
61*67e74705SXin Li "auto main()::<anonymous class>::operator()() const");
62*67e74705SXin Li return 0;
63*67e74705SXin Li }
64*67e74705SXin Li ();
65*67e74705SXin Li
66*67e74705SXin Li ^{
67*67e74705SXin Li static_assert(sizeof(__func__) == 20, "__main_block_invoke");
68*67e74705SXin Li static_assert(sizeof(__FUNCTION__) == 20, "__main_block_invoke");
69*67e74705SXin Li static_assert(sizeof(__PRETTY_FUNCTION__) == 20, "__main_block_invoke");
70*67e74705SXin Li }
71*67e74705SXin Li ();
72*67e74705SXin Li
73*67e74705SXin Li #pragma clang __debug captured
74*67e74705SXin Li {
75*67e74705SXin Li static_assert(sizeof(__func__) == 5, "main");
76*67e74705SXin Li static_assert(sizeof(__FUNCTION__) == 5, "main");
77*67e74705SXin Li static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "int main()");
78*67e74705SXin Li
79*67e74705SXin Li #pragma clang __debug captured
80*67e74705SXin Li {
81*67e74705SXin Li static_assert(sizeof(__func__) == 5, "main");
82*67e74705SXin Li static_assert(sizeof(__FUNCTION__) == 5, "main");
83*67e74705SXin Li static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "int main()");
84*67e74705SXin Li }
85*67e74705SXin Li }
86*67e74705SXin Li
87*67e74705SXin Li []() {
88*67e74705SXin Li #pragma clang __debug captured
89*67e74705SXin Li {
90*67e74705SXin Li static_assert(sizeof(__func__) == 11, "operator()");
91*67e74705SXin Li static_assert(sizeof(__FUNCTION__) == 11, "operator()");
92*67e74705SXin Li static_assert(sizeof(__PRETTY_FUNCTION__) == 51,
93*67e74705SXin Li "auto main()::<anonymous class>::operator()() const");
94*67e74705SXin Li }
95*67e74705SXin Li }
96*67e74705SXin Li ();
97*67e74705SXin Li
98*67e74705SXin Li baz<int>();
99*67e74705SXin Li
100*67e74705SXin Li return 0;
101*67e74705SXin Li }
102