mirror of https://github.com/microsoft/clang.git
When a parameter list in a C function has an error, recover by forming a K&R function,
instead of a non-function type. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175868 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
28965bfa83
commit
d5668a2447
|
@ -2580,6 +2580,8 @@ static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state,
|
|||
// definition.
|
||||
S.Diag(FTI.ArgInfo[0].IdentLoc, diag::err_ident_list_in_fn_declaration);
|
||||
D.setInvalidType(true);
|
||||
// Recover by creating a K&R-style function type.
|
||||
T = Context.getFunctionNoProtoType(T);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,5 +23,5 @@ void* fn9(unsigned) __attribute__((alloc_size(12345678901234567890123))); // exp
|
|||
|
||||
void* fn10(size_t, size_t) __attribute__((alloc_size(1,2))); // expected-error{{redefinition of parameter}} \
|
||||
// expected-error{{a parameter list without types is only allowed in a function definition}} \
|
||||
// expected-warning{{alloc_size attribute only applies to functions and methods}}
|
||||
// expected-error{{attribute parameter 1 is out of bounds}}
|
||||
void* fn11() __attribute__((alloc_size(1))); // expected-error{{attribute parameter 1 is out of bounds}}
|
||||
|
|
|
@ -38,3 +38,7 @@ static void bar(hid_t p, char); // expected-error {{unknown type name 'hid_t'}}
|
|||
void foo() {
|
||||
(void)bar;
|
||||
}
|
||||
|
||||
void test2();
|
||||
void test2(undef); // expected-error {{a parameter list without types is only allowed in a function definition}}
|
||||
void test2() { }
|
||||
|
|
Loading…
Reference in New Issue