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