From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11314 invoked by alias); 19 May 2003 22:06:04 -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 11097 invoked by uid 71); 19 May 2003 22:06:00 -0000 Resent-Date: 19 May 2003 22:06:00 -0000 Resent-Message-ID: <20030519220600.11096.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, jmortensen@cfl.rr.com Received: (qmail 3947 invoked by uid 48); 19 May 2003 22:02:53 -0000 Message-Id: <20030519220253.3946.qmail@sources.redhat.com> Date: Mon, 19 May 2003 22:06:00 -0000 From: jmortensen@cfl.rr.com Reply-To: jmortensen@cfl.rr.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: middle-end/10875: There is no multiple symbol definition error or warning for global symbols X-SW-Source: 2003-05/txt/msg02119.txt.bz2 List-Id: >Number: 10875 >Category: middle-end >Synopsis: There is no multiple symbol definition error or warning for global symbols >Confidential: no >Severity: non-critical >Priority: medium >Responsible: unassigned >State: open >Class: change-request >Submitter-Id: net >Arrival-Date: Mon May 19 22:06:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Jose Mortensen >Release: gcc 3.2.1 >Organization: >Environment: debian linux 2.4.19, HPUX B.10.20 (gcc 2.95.2) >Description: Two globals with the same name but different types declared in different files are resolved by the linker as one variable without an error or warning message. 1. Conflicting types should give an error. I don’t know if this is actually allowed in ansi-C 2. Looks like Ansi-C takes this kind of code as declaration if it has already been defined, but would be handy if it could at least give a warning. A simplified example is given below: // file1.c #include int* var; void other_function(){ var = NULL; } // file2.c #include void other_function(); int var; int main(int argc, char** argv) { var = 1; other_function(); printf("%d\n", var); } >How-To-Repeat: just cut and paste the code given above and run gcc > gcc file1.c file2.c >Fix: coding carefully >Release-Note: >Audit-Trail: >Unformatted: