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