1f757ecbfSHaojian Wu// RUN: %clang_cc1 -fobjc-runtime=gcc -frecovery-ast -verify %s 2f757ecbfSHaojian Wu 3f757ecbfSHaojian Wu@interface Ivar 4f757ecbfSHaojian Wu{ 5f757ecbfSHaojian Wu int Foo : foo(); // expected-error {{use of undeclared identifier}} 6f757ecbfSHaojian Wu}; 7f757ecbfSHaojian Wu@end 8f757ecbfSHaojian Wu 9f757ecbfSHaojian Wustruct X { int Y: foo(); }; // expected-error {{use of undeclared identifier}} 10f757ecbfSHaojian Wu 11f757ecbfSHaojian Wuconstexpr int s = sizeof(Ivar); 12f757ecbfSHaojian Wuconstexpr int ss = sizeof(X); 1382bb57c1SHaojian Wu 1482bb57c1SHaojian Wuauto func() { 1582bb57c1SHaojian Wu return undef(); // expected-error {{use of undeclared identifier}} 1682bb57c1SHaojian Wu} 1782bb57c1SHaojian Wustruct Y { 1882bb57c1SHaojian Wu int X : func(); 1982bb57c1SHaojian Wu}; 2082bb57c1SHaojian Wuconstexpr int sss = sizeof(Y); 21d28267f9SHaojian Wu 22d28267f9SHaojian Wubool Foo(int *); // expected-note {{candidate function not viable}} 23d28267f9SHaojian Wutemplate <typename T> 24d28267f9SHaojian Wustruct Base {}; 25d28267f9SHaojian Wutemplate <typename T> 26d28267f9SHaojian Wuauto func() { 27d28267f9SHaojian Wu // error-bit should be propagated from TemplateArgument to NestNameSpecifier. 28d28267f9SHaojian Wu class Base<decltype(Foo(T()))>::type C; // expected-error {{no matching function for call to 'Foo'}} 29d28267f9SHaojian Wu return C; 30d28267f9SHaojian Wu} 31d28267f9SHaojian Wustruct Z { 32d28267f9SHaojian Wu int X : func<int>(); // expected-note {{in instantiation of function template}} 33d28267f9SHaojian Wu}; 34d28267f9SHaojian Wuconstexpr int ssss = sizeof(Z); 35cd9a241fSHaojian Wu 36cd9a241fSHaojian Wustruct Z2 { 37*6c75ab5fSAaron Ballman int X : sizeof(_BitInt(invalid())); // expected-error {{use of undeclared identifier}} 38cd9a241fSHaojian Wu}; 39cd9a241fSHaojian Wuconstexpr int sssss = sizeof(Z2); 40