c++/3545: ICE passing a class object to inline assembly

Peter Skvarenina peter@frix.fri.utc.sk
Sat Apr 6 10:46:00 GMT 2002


> 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



More information about the Gcc-bugs mailing list