public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
From: Peter Skvarenina <peter@frix.fri.utc.sk>
To: nobody@gcc.gnu.org
Cc: gcc-prs@gcc.gnu.org,
Subject: Re: c++/3545: ICE passing a class object to inline assembly
Date: Sat, 06 Apr 2002 08:06:00 -0000	[thread overview]
Message-ID: <20020406160601.23515.qmail@sources.redhat.com> (raw)

The following reply was made to PR c++/3545; it has been noted by GNATS.

From: Peter Skvarenina <peter@frix.fri.utc.sk>
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


             reply	other threads:[~2002-04-06 16:06 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-04-06  8:06 Peter Skvarenina [this message]
  -- strict thread matches above, loose matches on Subject: below --
2002-04-12 19:32 rodrigc
2002-04-04  4:07 rth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20020406160601.23515.qmail@sources.redhat.com \
    --to=peter@frix.fri.utc.sk \
    --cc=gcc-prs@gcc.gnu.org \
    --cc=nobody@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).