forked from OSchip/llvm-project
Fix for PR5185. C99 [*] VLA notation should be disallowed in function definitions.
llvm-svn: 94972
This commit is contained in:
parent
760af170ff
commit
deb55d5123
|
@ -85,6 +85,8 @@ def warn_unused_variable : Warning<"unused variable %0">,
|
|||
InGroup<UnusedVariable>, DefaultIgnore;
|
||||
def warn_decl_in_param_list : Warning<
|
||||
"declaration of %0 will not be visible outside of this function">;
|
||||
def err_array_star_in_function_definition : Error<
|
||||
"variable length array must be bound in function definition">;
|
||||
|
||||
def warn_implicit_function_decl : Warning<
|
||||
"implicit declaration of function %0">,
|
||||
|
|
|
@ -2616,6 +2616,20 @@ bool Sema::CheckParmsForFunctionDef(FunctionDecl *FD) {
|
|||
!Param->isImplicit() &&
|
||||
!getLangOptions().CPlusPlus)
|
||||
Diag(Param->getLocation(), diag::err_parameter_name_omitted);
|
||||
|
||||
// C99 6.7.5.3p12:
|
||||
// If the function declarator is not part of a definition of that
|
||||
// function, parameters may have incomplete type and may use the [*]
|
||||
// notation in their sequences of declarator specifiers to specify
|
||||
// variable length array types.
|
||||
QualType PType = Param->getOriginalType();
|
||||
if (const ArrayType *AT = Context.getAsArrayType(PType)) {
|
||||
if (AT->getSizeModifier() == ArrayType::Star) {
|
||||
// FIXME: This diagnosic should point the the '[*]' if source-location
|
||||
// information is added for it.
|
||||
Diag(Param->getLocation(), diag::err_array_star_in_function_definition);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return HasInvalidParm;
|
||||
|
|
|
@ -54,3 +54,9 @@ int (*pr2044c(void))[pr2044b]; // expected-error {{variably modified type}}
|
|||
|
||||
const int f5_ci = 1;
|
||||
void f5() { char a[][f5_ci] = {""}; } // expected-error {{variable-sized object may not be initialized}}
|
||||
|
||||
// PR5185
|
||||
void pr5185(int a[*]);
|
||||
void pr5185(int a[*]) // expected-error {{variable length array must be bound in function definition}}
|
||||
{
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue