40 lines
1.0 KiB
Plaintext
40 lines
1.0 KiB
Plaintext
|
// RUN: %clang_cc1 -fobjc-runtime=gcc -frecovery-ast -verify %s
|
||
|
|
||
|
@interface Ivar
|
||
|
{
|
||
|
int Foo : foo(); // expected-error {{use of undeclared identifier}}
|
||
|
};
|
||
|
@end
|
||
|
|
||
|
struct X { int Y: foo(); }; // expected-error {{use of undeclared identifier}}
|
||
|
|
||
|
constexpr int s = sizeof(Ivar);
|
||
|
constexpr int ss = sizeof(X);
|
||
|
|
||
|
auto func() {
|
||
|
return undef(); // expected-error {{use of undeclared identifier}}
|
||
|
}
|
||
|
struct Y {
|
||
|
int X : func();
|
||
|
};
|
||
|
constexpr int sss = sizeof(Y);
|
||
|
|
||
|
bool Foo(int *); // expected-note {{candidate function not viable}}
|
||
|
template <typename T>
|
||
|
struct Base {};
|
||
|
template <typename T>
|
||
|
auto func() {
|
||
|
// error-bit should be propagated from TemplateArgument to NestNameSpecifier.
|
||
|
class Base<decltype(Foo(T()))>::type C; // expected-error {{no matching function for call to 'Foo'}}
|
||
|
return C;
|
||
|
}
|
||
|
struct Z {
|
||
|
int X : func<int>(); // expected-note {{in instantiation of function template}}
|
||
|
};
|
||
|
constexpr int ssss = sizeof(Z);
|
||
|
|
||
|
struct Z2 {
|
||
|
int X : sizeof(_ExtInt(invalid())); // expected-error {{use of undeclared identifier}}
|
||
|
};
|
||
|
constexpr int sssss = sizeof(Z2);
|