From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8111 invoked by alias); 12 Jul 2004 13:19:38 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 8097 invoked by uid 48); 12 Jul 2004 13:19:37 -0000 Date: Mon, 12 Jul 2004 13:19:00 -0000 From: "matz at suse dot de" To: gcc-bugs@gcc.gnu.org Message-ID: <20040712131934.16496.matz@suse.de> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug c/16496] New: IMA changes break linux kernel compile (register vars) X-Bugzilla-Reason: CC X-SW-Source: 2004-07/txt/msg01293.txt.bz2 List-Id: Using current HEAD when compiling this: ---------------------------------- register int *current asm ("r2"); int f() { return *current; } ---------------------------------- we get this error: % ./gcc/cc1 -O2 -quiet r2-test.i r2-test.i: In function `f': r2-test.i:1: error: register name not specified for 'current' This was working before. A CVS hunt identifies this timeframe: cvs diff -D "2004-07-08 2000" -D "2004-07-08 2200" ChangeLog, which are Zacks patches: +2004-07-08 Zack Weinberg + + * c-decl.c (static_ctors, static_dtors): Make static. + (pop_file_scope): Call c_common_write_pch and .... +2004-07-08 Zack Weinberg + + * c-decl.c (pop_scope): Do not set DECL_CONTEXT on file-scope + decls when there is only one input translation unit. What happens is, that the DECL for 'current' is created twice. First when parsing the declaration with the correct asmspec "r2". And a second time when called again from DECL_RTL macro, because ->decl.rtl was reset in the meantime. This reset happens in check_global_declarations, because of if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl) && ! TREE_ASM_WRITTEN (decl)) SET_DECL_RTL (decl, NULL_RTX); This is called _before_ cgraph_optimize() after Zacks patches. But this compiles the function (and thereby tests the asmspec of the above decl, which meanwhile got reset) and therefore emits the error. -- Summary: IMA changes break linux kernel compile (register vars) Product: gcc Version: 3.5.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c AssignedTo: zack at codesourcery dot com ReportedBy: matz at suse dot de CC: gcc-bugs at gcc dot gnu dot org,olh at suse dot de GCC host triplet: powerpc-linux GCC target triplet: powerpc-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16496