forked from OSchip/llvm-project
Don't allow taking the address of an element in an ext_vector
llvm-svn: 64614
This commit is contained in:
parent
4576b2eebd
commit
a6b47a4142
|
@ -3485,10 +3485,10 @@ QualType Sema::CheckAddressOfOperand(Expr *op, SourceLocation OpLoc) {
|
|||
}
|
||||
}
|
||||
// Check for Apple extension for accessing vector components.
|
||||
} else if (isa<ArraySubscriptExpr>(op) &&
|
||||
cast<ArraySubscriptExpr>(op)->getBase()->getType()->isVectorType()) {
|
||||
} else if (isa<ExtVectorElementExpr>(op) || (isa<ArraySubscriptExpr>(op) &&
|
||||
cast<ArraySubscriptExpr>(op)->getBase()->getType()->isVectorType())){
|
||||
Diag(OpLoc, diag::err_typecheck_address_of)
|
||||
<< "vector" << op->getSourceRange();
|
||||
<< "vector element" << op->getSourceRange();
|
||||
return QualType();
|
||||
} else if (dcl) { // C99 6.5.3.2p1
|
||||
// We have an lvalue with a decl. Make sure the decl is not declared
|
||||
|
|
|
@ -28,9 +28,14 @@ void foo() {
|
|||
void testVectorComponentAccess() {
|
||||
typedef float v4sf __attribute__ ((vector_size (16)));
|
||||
static v4sf q;
|
||||
float* r = &q[0]; // expected-error {{address of vector requested}}
|
||||
float* r = &q[0]; // expected-error {{address of vector element requested}}
|
||||
}
|
||||
|
||||
typedef __attribute__(( ext_vector_type(4) )) float float4;
|
||||
|
||||
float *testExtVectorComponentAccess(float4 x) {
|
||||
return &x.w; // expected-error {{address of vector element requested}}
|
||||
}
|
||||
|
||||
void f0() {
|
||||
register int *x0;
|
||||
|
|
Loading…
Reference in New Issue