104 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// RUN: %clang_cc1 -std=c++1y -fblocks -fsyntax-only -verify %s
 | 
						|
// PR16946
 | 
						|
// expected-no-diagnostics
 | 
						|
 | 
						|
auto foo() {
 | 
						|
  static_assert(sizeof(__func__) == 4, "foo");
 | 
						|
  static_assert(sizeof(__FUNCTION__) == 4, "foo");
 | 
						|
  static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "auto foo()");
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
auto bar() -> decltype(42) {
 | 
						|
  static_assert(sizeof(__func__) == 4, "bar");
 | 
						|
  static_assert(sizeof(__FUNCTION__) == 4, "bar");
 | 
						|
  static_assert(sizeof(__PRETTY_FUNCTION__) == 10, "int bar()");
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
// Within templates.
 | 
						|
template <typename T>
 | 
						|
int baz() {
 | 
						|
  static_assert(sizeof(__func__) == 4, "baz");
 | 
						|
  static_assert(sizeof(__FUNCTION__) == 4, "baz");
 | 
						|
  static_assert(sizeof(__PRETTY_FUNCTION__) == 20, "int baz() [T = int]");
 | 
						|
 | 
						|
  []() {
 | 
						|
    static_assert(sizeof(__func__) == 11, "operator()");
 | 
						|
    static_assert(sizeof(__FUNCTION__) == 11, "operator()");
 | 
						|
    static_assert(sizeof(__PRETTY_FUNCTION__) == 50,
 | 
						|
                  "auto baz()::<anonymous class>::operator()() const");
 | 
						|
    return 0;
 | 
						|
  }
 | 
						|
  ();
 | 
						|
 | 
						|
  ^{
 | 
						|
    // FIXME: This is obviously wrong.
 | 
						|
    static_assert(sizeof(__func__) == 1, "__baz_block_invoke");
 | 
						|
    static_assert(sizeof(__FUNCTION__) == 1, "__baz_block_invoke");
 | 
						|
    static_assert(sizeof(__PRETTY_FUNCTION__) == 1, "__baz_block_invoke");
 | 
						|
  }
 | 
						|
  ();
 | 
						|
 | 
						|
  #pragma clang __debug captured
 | 
						|
  {
 | 
						|
    static_assert(sizeof(__func__) == 4, "baz");
 | 
						|
    static_assert(sizeof(__FUNCTION__) == 4, "baz");
 | 
						|
    static_assert(sizeof(__PRETTY_FUNCTION__) == 20, "int baz() [T = int]");
 | 
						|
  }
 | 
						|
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
int main() {
 | 
						|
  static_assert(sizeof(__func__) == 5, "main");
 | 
						|
  static_assert(sizeof(__FUNCTION__) == 5, "main");
 | 
						|
  static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "int main()");
 | 
						|
 | 
						|
  []() {
 | 
						|
    static_assert(sizeof(__func__) == 11, "operator()");
 | 
						|
    static_assert(sizeof(__FUNCTION__) == 11, "operator()");
 | 
						|
    static_assert(sizeof(__PRETTY_FUNCTION__) == 51,
 | 
						|
                  "auto main()::<anonymous class>::operator()() const");
 | 
						|
    return 0;
 | 
						|
  }
 | 
						|
  ();
 | 
						|
 | 
						|
  ^{
 | 
						|
    // FIXME: This is obviously wrong.
 | 
						|
    static_assert(sizeof(__func__) == 1, "__main_block_invoke");
 | 
						|
    static_assert(sizeof(__FUNCTION__) == 1, "__main_block_invoke");
 | 
						|
    static_assert(sizeof(__PRETTY_FUNCTION__) == 1, "__main_block_invoke");
 | 
						|
  }
 | 
						|
  ();
 | 
						|
 | 
						|
  #pragma clang __debug captured
 | 
						|
  {
 | 
						|
    static_assert(sizeof(__func__) == 5, "main");
 | 
						|
    static_assert(sizeof(__FUNCTION__) == 5, "main");
 | 
						|
    static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "int main()");
 | 
						|
 | 
						|
    #pragma clang __debug captured
 | 
						|
    {
 | 
						|
      static_assert(sizeof(__func__) == 5, "main");
 | 
						|
      static_assert(sizeof(__FUNCTION__) == 5, "main");
 | 
						|
      static_assert(sizeof(__PRETTY_FUNCTION__) == 11, "int main()");
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  []() {
 | 
						|
    #pragma clang __debug captured
 | 
						|
    {
 | 
						|
      static_assert(sizeof(__func__) == 11, "operator()");
 | 
						|
      static_assert(sizeof(__FUNCTION__) == 11, "operator()");
 | 
						|
      static_assert(sizeof(__PRETTY_FUNCTION__) == 51,
 | 
						|
                    "auto main()::<anonymous class>::operator()() const");
 | 
						|
    }
 | 
						|
  }
 | 
						|
  ();
 | 
						|
 | 
						|
  baz<int>();
 | 
						|
 | 
						|
  return 0;
 | 
						|
}
 |