128bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer// RUN: %clang_cc1 -std=c++1y -fblocks -fsyntax-only -verify %s 228bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer// PR16946 328bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer// expected-no-diagnostics 428bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer 528bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramerauto foo() { 628bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__func__) == 4, "foo"); 728bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__FUNCTION__) == 4, "foo"); 828bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "auto foo()"); 928bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer return 0; 1028bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer} 1128bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer 1228bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramerauto bar() -> decltype(42) { 1328bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__func__) == 4, "bar"); 1428bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__FUNCTION__) == 4, "bar"); 1528bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__PRETTY_FUNCTION__) == 10, "int bar()"); 1628bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer return 0; 1728bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer} 1828bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer 193312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan// Within templates. 203312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pantemplate <typename T> 213312933e244d820c1c6fec83c4c0c0f67f42d25bWei Panint baz() { 223312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan static_assert(sizeof(__func__) == 4, "baz"); 233312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan static_assert(sizeof(__FUNCTION__) == 4, "baz"); 243312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan static_assert(sizeof(__PRETTY_FUNCTION__) == 20, "int baz() [T = int]"); 253312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan 263312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan []() { 273312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan static_assert(sizeof(__func__) == 11, "operator()"); 283312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan static_assert(sizeof(__FUNCTION__) == 11, "operator()"); 293312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan static_assert(sizeof(__PRETTY_FUNCTION__) == 50, 303312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan "auto baz()::<anonymous class>::operator()() const"); 313312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan return 0; 323312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan } 333312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan (); 343312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan 353312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan ^{ 363312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan // FIXME: This is obviously wrong. 373312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan static_assert(sizeof(__func__) == 1, "__baz_block_invoke"); 383312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan static_assert(sizeof(__FUNCTION__) == 1, "__baz_block_invoke"); 393312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan static_assert(sizeof(__PRETTY_FUNCTION__) == 1, "__baz_block_invoke"); 403312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan } 413312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan (); 423312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan 433312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan #pragma clang __debug captured 443312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan { 453312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan static_assert(sizeof(__func__) == 4, "baz"); 463312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan static_assert(sizeof(__FUNCTION__) == 4, "baz"); 473312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan static_assert(sizeof(__PRETTY_FUNCTION__) == 20, "int baz() [T = int]"); 483312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan } 493312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan 503312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan return 0; 513312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan} 523312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan 5328bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramerint main() { 5428bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__func__) == 5, "main"); 5528bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__FUNCTION__) == 5, "main"); 5628bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "int main()"); 5728bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer 5828bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer []() { 5928bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__func__) == 11, "operator()"); 6028bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__FUNCTION__) == 11, "operator()"); 6128bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__PRETTY_FUNCTION__) == 51, 6228bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer "auto main()::<anonymous class>::operator()() const"); 6328bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer return 0; 6428bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer } 6528bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer (); 6628bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer 6728bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer ^{ 6828bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer // FIXME: This is obviously wrong. 6928bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__func__) == 1, "__main_block_invoke"); 7028bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__FUNCTION__) == 1, "__main_block_invoke"); 7128bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer static_assert(sizeof(__PRETTY_FUNCTION__) == 1, "__main_block_invoke"); 7228bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer } 7328bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer (); 7415b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan 7515b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan #pragma clang __debug captured 7615b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan { 7715b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan static_assert(sizeof(__func__) == 5, "main"); 7815b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan static_assert(sizeof(__FUNCTION__) == 5, "main"); 7915b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "int main()"); 8015b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan 8115b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan #pragma clang __debug captured 8215b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan { 8315b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan static_assert(sizeof(__func__) == 5, "main"); 8415b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan static_assert(sizeof(__FUNCTION__) == 5, "main"); 8515b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "int main()"); 8615b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan } 8715b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan } 8815b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan 8915b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan []() { 9015b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan #pragma clang __debug captured 9115b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan { 9215b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan static_assert(sizeof(__func__) == 11, "operator()"); 9315b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan static_assert(sizeof(__FUNCTION__) == 11, "operator()"); 9415b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan static_assert(sizeof(__PRETTY_FUNCTION__) == 51, 9515b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan "auto main()::<anonymous class>::operator()() const"); 9615b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan } 9715b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan } 9815b2674896371ac2a0fe707b538a1a29dec9d8e4Wei Pan (); 993312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan 1003312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan baz<int>(); 1013312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan 1023312933e244d820c1c6fec83c4c0c0f67f42d25bWei Pan return 0; 10328bdbf0861fefb33474fddbda1d3c66ee29be2afBenjamin Kramer} 104