From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23918 invoked by alias); 4 Jan 2003 11:26:03 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 23904 invoked by uid 71); 4 Jan 2003 11:26:01 -0000 Date: Sat, 04 Jan 2003 11:26:00 -0000 Message-ID: <20030104112601.23903.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: "Joseph S. Myers" Subject: Re: c/9166: [2003-01-03] C front end's type scoping not right Reply-To: "Joseph S. Myers" X-SW-Source: 2003-01/txt/msg00277.txt.bz2 List-Id: The following reply was made to PR c/9166; it has been noted by GNATS. From: "Joseph S. Myers" To: Cc: , Subject: Re: c/9166: [2003-01-03] C front end's type scoping not right Date: Sat, 4 Jan 2003 11:24:42 +0000 (GMT) On 4 Jan 2003 neil@gcc.gnu.org wrote: > /* Compile the code snippet below with -pedantic. The code is illegal > because the function f is redeclared with an incompatible prototype, > but GCC doesn't winge. */ > > struct bar {int x, y;}; > > void foo () > { > extern void f( struct bar {double x, y;} ); > } > > void f (struct bar ); What makes you think the former prototype is visible at the latter? The former declaration has block scope; as the Rationale discusses, there is a delibrate compromise in the standard here, where a former block scope external declaration can be considered, but need not be. Incompatible declarations need only be diagnosed in the same scope (by 6.7#4). Declarations refering to the same object or function that are not in the same scope merely yield undefined behavior if of incompatible types (6.2.7#2). That said, a mandatory pedwarn for a latter declaration incompatible with a former invisible declaration would make sense, but there is no bug here and the former declaration shouldn't be considered visible for most ordinary purposes (seeing whether the function is declared when it is used, converting arguments, etc.) - just to complain about the incompatibility with another declaration. -- Joseph S. Myers jsm28@cam.ac.uk