From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23530 invoked by alias); 6 Apr 2002 16:06:01 -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 23516 invoked by uid 71); 6 Apr 2002 16:06:01 -0000 Date: Sat, 06 Apr 2002 08:06:00 -0000 Message-ID: <20020406160601.23515.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Peter Skvarenina Subject: Re: c++/3545: ICE passing a class object to inline assembly Reply-To: Peter Skvarenina X-SW-Source: 2002-04/txt/msg00409.txt.bz2 List-Id: The following reply was made to PR c++/3545; it has been noted by GNATS. From: Peter Skvarenina To: rth@gcc.gnu.org, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org, peter@frix.fri.utc.sk, gcc-gnats@gcc.gnu.org Cc: Subject: Re: c++/3545: ICE passing a class object to inline assembly Date: Sat, 6 Apr 2002 17:58:13 +0200 (CEST) > Old Synopsis: ICE in emit_move_insn, at expr.c:2724 > New Synopsis: ICE passing a class object to inline assembly > > State-Changed-From-To: open->analyzed > State-Changed-By: rth > State-Changed-When: Thu Apr 4 04:07:54 2002 > State-Changed-Why: > ICE still happens with gcc 3.1 prelease. > A reduced test case is > > class cCislo > { > public: > long Cislo; > > cCislo () { Cislo = 0; } > cCislo (const cCislo &P) { Cislo = P.Cislo; } > cCislo (int A) { Cislo = A; } > }; > > void foo(cCislo A, cCislo B) > { > cCislo Sucet; > asm volatile ("AddL %2, %1" > : "=g" (Sucet) > : "0" (A), "q" (B) > : "cc"); > } > > The problem here is that the compiler Really does not want > to pass a class to an asm. The fix for this will involve > issuing an error for this mistake. > > What you wanted is to pass "A.Cislo" to the asm, not "A". > Similarly for the other asm arguments. > > http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=3545 > After I posted this message, I realised my mistake and replaced all affected statements to access 'Cislo' member. But it has still remainded (ICE) up to version 3.0.1 of the GCC. But after GCC 3.0.3, it is now working ;') (I haven't tested it for GCC 3.0.2) This applies to original, non-reduced case with access to 'Cislo' instead of class instance. It was important, that there were inline operators +, -, etc. When I moved code from these operators to another inline functions and called them from those operators, ICE haven't been issued. (Both foo and op were inline). But it leads to *very* ineffective code with gcc 3.0.0 ;( Thank you for all, these inline optimizations can greatly save time. Peter