aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
-rw-r--r--parse.c10
-rw-r--r--validation/asm-bad0.c2
-rw-r--r--validation/bad-type-twice0.c3
-rw-r--r--validation/badtype2.c1
-rw-r--r--validation/badtype3.c1
-rw-r--r--validation/implicit-KR-arg-type1.c11
6 files changed, 22 insertions, 6 deletions
diff --git a/parse.c b/parse.c
index 31ecef0f..a24d6bdc 100644
--- a/parse.c
+++ b/parse.c
@@ -2713,6 +2713,14 @@ static void declare_argument(struct symbol *sym, struct symbol *fn)
sparse_error(sym->pos, "no identifier for function argument");
return;
}
+ if (sym->ctype.base_type == &incomplete_ctype) {
+ sym->ctype.base_type = &int_ctype;
+
+ if (Wimplicit_int) {
+ sparse_error(sym->pos, "missing type declaration for parameter '%s'",
+ show_ident(sym->ident));
+ }
+ }
bind_symbol(sym, sym->ident, NS_SYMBOL);
}
@@ -2804,7 +2812,7 @@ static void apply_k_r_types(struct symbol_list *argtypes, struct symbol *fn)
goto match;
} END_FOR_EACH_PTR(type);
if (Wimplicit_int) {
- sparse_error(arg->pos, "missing type declaration for parameter '%s'",
+ warning(arg->pos, "missing type declaration for parameter '%s'",
show_ident(arg->ident));
}
type = alloc_symbol(arg->pos, SYM_NODE);
diff --git a/validation/asm-bad0.c b/validation/asm-bad0.c
index aa9bf28d..4ba78575 100644
--- a/validation/asm-bad0.c
+++ b/validation/asm-bad0.c
@@ -16,7 +16,7 @@ static void icons(void)
asm("template" : [out] "=r" (var): [in] string (0));
}
-static void oexpr(oid)
+static void oexpr(void)
{
asm("template" : [out] "=" (var[) : [in] "r" (0));
}
diff --git a/validation/bad-type-twice0.c b/validation/bad-type-twice0.c
index 9e834d47..e7ec7b75 100644
--- a/validation/bad-type-twice0.c
+++ b/validation/bad-type-twice0.c
@@ -7,7 +7,6 @@ static int foo(a)
* check-name: bad-type-twice0
*
* check-error-start
-bad-type-twice0.c:3:16: error: non-scalar type in conditional:
-bad-type-twice0.c:3:16: incomplete type a
+bad-type-twice0.c:1:16: error: missing type declaration for parameter 'a'
* check-error-end
*/
diff --git a/validation/badtype2.c b/validation/badtype2.c
index 49fec87c..173dbfda 100644
--- a/validation/badtype2.c
+++ b/validation/badtype2.c
@@ -18,6 +18,7 @@ badtype2.c:2:14: error: got bar
badtype2.c:3:14: error: Expected ; at end of declaration
badtype2.c:3:14: error: got foo
badtype2.c:6:3: error: Trying to use reserved word 'switch' as identifier
+badtype2.c:6:11: error: missing type declaration for parameter 'p'
badtype2.c:7:3: error: not in switch scope
badtype2.c:10:1: error: Expected ; at the end of type declaration
badtype2.c:10:1: error: got }
diff --git a/validation/badtype3.c b/validation/badtype3.c
index 20f346c5..c111d94e 100644
--- a/validation/badtype3.c
+++ b/validation/badtype3.c
@@ -16,6 +16,7 @@ badtype3.c:2:18: warning: identifier list not in definition
badtype3.c:2:24: error: Expected ) in function declarator
badtype3.c:2:24: error: got ,
badtype3.c:5:3: error: Trying to use reserved word 'while' as identifier
+badtype3.c:5:10: error: missing type declaration for parameter 'cur'
badtype3.c:7:7: error: break/continue not in iterator scope
badtype3.c:9:3: error: Trying to use reserved word 'return' as identifier
badtype3.c:9:10: error: Expected ; at end of declaration
diff --git a/validation/implicit-KR-arg-type1.c b/validation/implicit-KR-arg-type1.c
index fe199ef5..c7eb39ae 100644
--- a/validation/implicit-KR-arg-type1.c
+++ b/validation/implicit-KR-arg-type1.c
@@ -1,16 +1,23 @@
-int foo(a, b)
+static int foo(a, b)
int a;
{
if (b)
return a;
}
+static int bar(a)
+{
+ if (a)
+ return a;
+}
+
/*
* check-name: implicit-KR-arg-type1
* check-command: sparse -Wold-style-definition -Wimplicit-int $file
*
* check-error-start
implicit-KR-arg-type1.c:2:9: warning: non-ANSI definition of function 'foo'
-implicit-KR-arg-type1.c:1:12: error: missing type declaration for parameter 'b'
+implicit-KR-arg-type1.c:1:19: warning: missing type declaration for parameter 'b'
+implicit-KR-arg-type1.c:8:16: error: missing type declaration for parameter 'a'
* check-error-end
*/