forked from OSchip/llvm-project
Change Expr::isLvalue() to properly deal with ImplicitCastExpr's.
This fixes the following bug... t.c:1:31: error: expression is not assignable short x; void foo(char c) { x += c; } This case, among others are now captured in implicit-casts.c. llvm-svn: 41402
This commit is contained in:
parent
aac9415bfb
commit
e2562ff99d
|
@ -302,6 +302,8 @@ Expr::isLvalueResult Expr::isLvalue() const {
|
|||
if (cast<OCUVectorElementExpr>(this)->containsDuplicateElements())
|
||||
return LV_DuplicateVectorComponents;
|
||||
return LV_Valid;
|
||||
case ImplicitCastExprClass: // A side-effect of our implementation.
|
||||
return cast<ImplicitCastExpr>(this)->getSubExpr()->isLvalue();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
// RUN: clang -parse-ast-check %s
|
||||
_Complex double X;
|
||||
void test1(int c) {
|
||||
X = 5;
|
||||
}
|
||||
void test2() {
|
||||
int i;
|
||||
double d = i;
|
||||
double _Complex a = 5;
|
||||
|
||||
test1(a);
|
||||
a = 5;
|
||||
d = i;
|
||||
}
|
||||
int test3() {
|
||||
int a[2];
|
||||
a[0] = test3; // expected-warning{{incompatible types assigning 'int (void)' to 'int'}}
|
||||
}
|
||||
short x; void test4(char c) { x += c; }
|
||||
int y; void test5(char c) { y += c; }
|
Loading…
Reference in New Issue