зеркало из https://github.com/microsoft/clang-1.git
When Sema::ClassifyName() finds an invalid ivar reference, return an
invalid expression rather than the far-more-generic "error". Fixes a mild regression in error recovery uncovered by the GCC testsuite. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130128 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
81542fd91b
Коммит
ec385cf3c7
|
@ -148,7 +148,6 @@ Retry:
|
|||
break;
|
||||
|
||||
case Sema::NC_Type:
|
||||
// We have a type.
|
||||
// We have a type. In C, this means that we have a declaration.
|
||||
if (!getLang().CPlusPlus) {
|
||||
ParsedType Type = Classification.getType();
|
||||
|
|
|
@ -411,11 +411,7 @@ Sema::NameClassification Sema::ClassifyName(Scope *S,
|
|||
// unqualified lookup mechanism.
|
||||
if (!SS.isSet() && CurMethod && !isResultTypeOrTemplate(Result, NextToken)) {
|
||||
ExprResult E = LookupInObjCMethod(Result, S, Name, true);
|
||||
|
||||
if (E.isInvalid())
|
||||
return NameClassification::Error();
|
||||
|
||||
if (E.get())
|
||||
if (E.get() || E.isInvalid())
|
||||
return E;
|
||||
|
||||
// Synthesize ivars lazily.
|
||||
|
@ -430,12 +426,8 @@ Sema::NameClassification Sema::ClassifyName(Scope *S,
|
|||
|
||||
// FIXME: This is strange. Shouldn't we just take the ivar returned
|
||||
// from SynthesizeProvisionalIvar and continue with that?
|
||||
E = LookupInObjCMethod(Result, S, Name, true);
|
||||
|
||||
if (E.isInvalid())
|
||||
return NameClassification::Error();
|
||||
|
||||
if (E.get())
|
||||
E = LookupInObjCMethod(Result, S, Name, true);
|
||||
if (E.get() || E.isInvalid())
|
||||
return E;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,3 +35,15 @@ extern struct foo x;
|
|||
}
|
||||
@end
|
||||
|
||||
@interface TwoIvars {
|
||||
int a;
|
||||
int b;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation TwoIvars
|
||||
+ (int)classMethod {
|
||||
return a + b; // expected-error{{instance variable 'a' accessed in class method}} \
|
||||
// expected-error{{instance variable 'b' accessed in class method}}
|
||||
}
|
||||
@end
|
||||
|
|
Загрузка…
Ссылка в новой задаче