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

rth@gcc.gnu.org rth@gcc.gnu.org
Thu Apr 4 04:10: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



More information about the Gcc-bugs mailing list