blob: 257d44c60069cce0b69355569f9bfd3acbb7074c [file] [log] [blame]
Benjamin Kramer28bdbf02013-08-21 11:45:27 +00001// RUN: %clang_cc1 -std=c++1y -fblocks -fsyntax-only -verify %s
2// PR16946
3// expected-no-diagnostics
4
5auto 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
12auto 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
Wei Pan33129332013-09-16 13:57:27 +000019// Within templates.
20template <typename T>
21int 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 // FIXME: This is obviously wrong.
37 static_assert(sizeof(__func__) == 1, "__baz_block_invoke");
38 static_assert(sizeof(__FUNCTION__) == 1, "__baz_block_invoke");
39 static_assert(sizeof(__PRETTY_FUNCTION__) == 1, "__baz_block_invoke");
40 }
41 ();
42
43 #pragma clang __debug captured
44 {
45 static_assert(sizeof(__func__) == 4, "baz");
46 static_assert(sizeof(__FUNCTION__) == 4, "baz");
47 static_assert(sizeof(__PRETTY_FUNCTION__) == 20, "int baz() [T = int]");
48 }
49
50 return 0;
51}
52
Benjamin Kramer28bdbf02013-08-21 11:45:27 +000053int main() {
54 static_assert(sizeof(__func__) == 5, "main");
55 static_assert(sizeof(__FUNCTION__) == 5, "main");
56 static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "int main()");
57
58 []() {
59 static_assert(sizeof(__func__) == 11, "operator()");
60 static_assert(sizeof(__FUNCTION__) == 11, "operator()");
61 static_assert(sizeof(__PRETTY_FUNCTION__) == 51,
62 "auto main()::<anonymous class>::operator()() const");
63 return 0;
64 }
65 ();
66
67 ^{
68 // FIXME: This is obviously wrong.
69 static_assert(sizeof(__func__) == 1, "__main_block_invoke");
70 static_assert(sizeof(__FUNCTION__) == 1, "__main_block_invoke");
71 static_assert(sizeof(__PRETTY_FUNCTION__) == 1, "__main_block_invoke");
72 }
73 ();
Wei Pan15b26742013-08-26 14:27:34 +000074
75 #pragma clang __debug captured
76 {
77 static_assert(sizeof(__func__) == 5, "main");
78 static_assert(sizeof(__FUNCTION__) == 5, "main");
79 static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "int main()");
80
81 #pragma clang __debug captured
82 {
83 static_assert(sizeof(__func__) == 5, "main");
84 static_assert(sizeof(__FUNCTION__) == 5, "main");
85 static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "int main()");
86 }
87 }
88
89 []() {
90 #pragma clang __debug captured
91 {
92 static_assert(sizeof(__func__) == 11, "operator()");
93 static_assert(sizeof(__FUNCTION__) == 11, "operator()");
94 static_assert(sizeof(__PRETTY_FUNCTION__) == 51,
95 "auto main()::<anonymous class>::operator()() const");
96 }
97 }
98 ();
Wei Pan33129332013-09-16 13:57:27 +000099
100 baz<int>();
101
102 return 0;
Benjamin Kramer28bdbf02013-08-21 11:45:27 +0000103}