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