xref: /minix3/external/bsd/llvm/dist/clang/test/SemaCXX/predefined-expr.cpp (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
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