re PR c/5503 (GCC ignores prototype)
PR c/5503: * c-decl.c (duplicate_decls): If builtin type has TYPE_ARG_TYPES NULL, use arguments from newtype. * gcc.dg/noncompile/20020213-1.c: New test. From-SVN: r49763
This commit is contained in:
parent
2a5e0aeacd
commit
d76e68001b
|
@ -1,3 +1,9 @@
|
||||||
|
2002-02-14 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR c/5503:
|
||||||
|
* c-decl.c (duplicate_decls): If builtin type has TYPE_ARG_TYPES NULL,
|
||||||
|
use arguments from newtype.
|
||||||
|
|
||||||
2002-02-13 Eric Christopher <echristo@redhat.com>
|
2002-02-13 Eric Christopher <echristo@redhat.com>
|
||||||
|
|
||||||
* config/mips/mips.c (override_options): Add check for march/mipsX
|
* config/mips/mips.c (override_options): Add check for march/mipsX
|
||||||
|
@ -21,7 +27,7 @@
|
||||||
* config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Do
|
* config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Do
|
||||||
not push_reload for altivec modes.
|
not push_reload for altivec modes.
|
||||||
|
|
||||||
2002-02-13 Joel Sherrill <joel@OARcorp.com>
|
2002-02-13 Joel Sherrill <joel@OARcorp.com>
|
||||||
|
|
||||||
* config.gcc (a29k-*-rtems), config/a29k/rtems.h: General cleanup across
|
* config.gcc (a29k-*-rtems), config/a29k/rtems.h: General cleanup across
|
||||||
all RTEMS targets including removal of #includes from config/*/rtems*.h
|
all RTEMS targets including removal of #includes from config/*/rtems*.h
|
||||||
|
|
16
gcc/c-decl.c
16
gcc/c-decl.c
|
@ -1548,6 +1548,22 @@ duplicate_decls (newdecl, olddecl, different_binding_level)
|
||||||
if (! different_binding_level)
|
if (! different_binding_level)
|
||||||
TREE_TYPE (olddecl) = oldtype;
|
TREE_TYPE (olddecl) = oldtype;
|
||||||
}
|
}
|
||||||
|
else if (TYPE_ARG_TYPES (oldtype) == NULL
|
||||||
|
&& TYPE_ARG_TYPES (newtype) != NULL)
|
||||||
|
{
|
||||||
|
/* For bcmp, bzero, fputs the builtin type has arguments not
|
||||||
|
specified. Use the ones from the prototype so that type checking
|
||||||
|
is done for them. */
|
||||||
|
tree trytype
|
||||||
|
= build_function_type (TREE_TYPE (oldtype),
|
||||||
|
TYPE_ARG_TYPES (newtype));
|
||||||
|
trytype = build_type_attribute_variant (trytype,
|
||||||
|
TYPE_ATTRIBUTES (oldtype));
|
||||||
|
|
||||||
|
oldtype = trytype;
|
||||||
|
if (! different_binding_level)
|
||||||
|
TREE_TYPE (olddecl) = oldtype;
|
||||||
|
}
|
||||||
if (!types_match)
|
if (!types_match)
|
||||||
{
|
{
|
||||||
/* If types don't match for a built-in, throw away the built-in. */
|
/* If types don't match for a built-in, throw away the built-in. */
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2002-02-14 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* gcc.dg/noncompile/20020213-1.c: New test.
|
||||||
|
|
||||||
2002-02-13 Jakub Jelinek <jakub@redhat.com>
|
2002-02-13 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* g++.dg/other/debug3.C: New test.
|
* g++.dg/other/debug3.C: New test.
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
/* PR c/5503
|
||||||
|
Test whether argument checking is done for fputs, bzero and bcmp. */
|
||||||
|
typedef struct { int i; } FILE;
|
||||||
|
typedef __SIZE_TYPE__ size_t;
|
||||||
|
int fputs (const char *, FILE *);
|
||||||
|
void bzero (void *, size_t);
|
||||||
|
int bcmp (const void *, const void *, size_t);
|
||||||
|
|
||||||
|
char buf[32];
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
fputs ("foo"); /* { dg-error "too few" } */
|
||||||
|
fputs ("foo", "bar", "baz"); /* { dg-error "too many" } */
|
||||||
|
fputs (21, 43);
|
||||||
|
bzero (buf); /* { dg-error "too few" } */
|
||||||
|
bzero (21); /* { dg-error "too few" } */
|
||||||
|
bcmp (buf, buf + 16); /* { dg-error "too few" } */
|
||||||
|
bcmp (21); /* { dg-error "too few" } */
|
||||||
|
fputs ("foo", f);
|
||||||
|
bzero (buf, 32);
|
||||||
|
bcmp (buf, buf + 16, 16);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* { dg-warning "passing arg 2 of" "2nd incompatible" { target *-*-* } 15 } */
|
||||||
|
/* { dg-warning "passing arg 1 of" "1st incompatible" { target *-*-* } 16 } */
|
||||||
|
/* { dg-warning "passing arg 2 of" "2nd incompatible" { target *-*-* } 16 } */
|
||||||
|
/* { dg-warning "passing arg 1 of" "1st incompatible" { target *-*-* } 18 } */
|
||||||
|
/* { dg-warning "passing arg 1 of" "1st incompatible" { target *-*-* } 20 } */
|
Loading…
Reference in New Issue