c-decl.c (start_function): Form composite type of function types rather than copying type from previous...
* c-decl.c (start_function): Form composite type of function types rather than copying type from previous prototype declaration. testsuite: * gcc.dg/comp-return-1.c: New test From-SVN: r85093
This commit is contained in:
parent
f67376e4ba
commit
7eb01bd829
@ -1,3 +1,8 @@
|
||||
2004-07-23 Joseph S. Myers <jsm@polyomino.org.uk>
|
||||
|
||||
* c-decl.c (start_function): Form composite type of function types
|
||||
rather than copying type from previous prototype declaration.
|
||||
|
||||
2004-07-23 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
* config/rs6000/altivec.h (vec_lvewx, vec_lvehx, vec_lvwbx): Remove
|
||||
|
@ -5712,7 +5712,8 @@ start_function (tree declspecs, tree declarator, tree attributes)
|
||||
TREE_TYPE (TREE_TYPE (old_decl)))
|
||||
&& TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
|
||||
{
|
||||
TREE_TYPE (decl1) = TREE_TYPE (old_decl);
|
||||
TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
|
||||
TREE_TYPE (decl1));
|
||||
current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
2004-07-23 Joseph S. Myers <jsm@polyomino.org.uk>
|
||||
|
||||
* gcc.dg/comp-return-1.c: New test
|
||||
|
||||
2004-07-23 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
* gcc.dg/vmx/8-02a.c: Fix typo.
|
||||
|
31
gcc/testsuite/gcc.dg/comp-return-1.c
Normal file
31
gcc/testsuite/gcc.dg/comp-return-1.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* When merging a nonprototype definition of a function with a prior
|
||||
prototype declaration, the composite type of the return types must
|
||||
be formed rather than just copying the function type. */
|
||||
/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
|
||||
/* { dg-do compile } */
|
||||
|
||||
typedef int a[];
|
||||
typedef int a5[5];
|
||||
typedef int a10[10];
|
||||
|
||||
a *f1 ();
|
||||
a5 *f1 () { return 0; }
|
||||
|
||||
a *f2 (void);
|
||||
a5 *f2 () { return 0; }
|
||||
|
||||
a *f3 ();
|
||||
a5 *f3 (void) { return 0; }
|
||||
|
||||
a *f4 (void);
|
||||
a5 *f4 (void) { return 0; }
|
||||
|
||||
void
|
||||
g (void)
|
||||
{
|
||||
a10 *x;
|
||||
x = f1 (); /* { dg-error "incompatible" "f1" } */
|
||||
x = f2 (); /* { dg-error "incompatible" "f2" } */
|
||||
x = f3 (); /* { dg-error "incompatible" "f3" } */
|
||||
x = f4 (); /* { dg-error "incompatible" "f4" } */
|
||||
}
|
Loading…
Reference in New Issue
Block a user