forked from OSchip/llvm-project
c language: diagnose use of "[*]" on any array dimension
in the parameter of a function definition. Currently, it crashes in irgen if it is on other than the 1st dimension. // rdar://13705391 llvm-svn: 180732
This commit is contained in:
parent
474df6d3ed
commit
4289a5a429
|
@ -5703,12 +5703,14 @@ bool Sema::CheckParmsForFunctionDef(ParmVarDecl **P, ParmVarDecl **PEnd,
|
|||
// notation in their sequences of declarator specifiers to specify
|
||||
// variable length array types.
|
||||
QualType PType = Param->getOriginalType();
|
||||
if (const ArrayType *AT = Context.getAsArrayType(PType)) {
|
||||
while (const ArrayType *AT = Context.getAsArrayType(PType)) {
|
||||
if (AT->getSizeModifier() == ArrayType::Star) {
|
||||
// FIXME: This diagnostic should point the '[*]' if source-location
|
||||
// information is added for it.
|
||||
Diag(Param->getLocation(), diag::err_array_star_in_function_definition);
|
||||
break;
|
||||
}
|
||||
PType= AT->getElementType();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,3 +15,10 @@ int main()
|
|||
p[i][i] = i;
|
||||
}
|
||||
}
|
||||
|
||||
// rdar://13705391
|
||||
void foo(int a[*][2]) {(void)a[0][1]; } // expected-error {{variable length array must be bound in function definition}}
|
||||
void foo1(int a[2][*]) {(void)a[0][1]; } // expected-error {{variable length array must be bound in function definition}}
|
||||
void foo2(int a[*][*]) {(void)a[0][1]; } // expected-error {{variable length array must be bound in function definition}}
|
||||
void foo3(int a[2][*][2]) {(void)a[0][1][1]; } // expected-error {{variable length array must be bound in function definition}}
|
||||
void foo4(int a[2][*][*]) {(void)a[0][1][1]; } // expected-error {{variable length array must be bound in function definition}}
|
||||
|
|
Loading…
Reference in New Issue