This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: c++/7944: gcc 3.2: Internal compiler error in


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

From: =?iso-8859-1?Q?Pop_S=E9bastian?= <pop@gauvain.u-strasbg.fr>
To: Reichelt <reichelt@igpm.rwth-aachen.de>
Cc: gcc-gnats@gcc.gnu.org, ulrich@synopsys.com, gcc-bugs@gcc.gnu.org,
	nobody@gcc.gnu.org
Subject: Re: c++/7944: gcc 3.2: Internal compiler error in
Date: Mon, 30 Sep 2002 22:29:17 +0200

 On Mon, Sep 30, 2002 at 12:45:57PM +0200, Reichelt wrote:
 > Hi again,
 > 
 > I just forgot to mention that the bug is probably target-specific:
 > I can reproduce it with i686-pc-linux-gnu, but not with
 > mips-sgi-irix6.5.
 > 
 Yep, this depends on the number of available registers.
 Here is the backtrace:
 
 (gdb) bt
 #0  spill_failure (insn=0x4024b0dc, class=GENERAL_REGS) at ../../gcc/gcc/reload1.c:1909
 #1  0x082b0e7a in find_reload_regs (chain=0x8545dc8) at ../../gcc/gcc/reload1.c:1846
 #2  0x082b0f09 in select_reload_regs () at ../../gcc/gcc/reload1.c:1866
 #3  0x082af249 in reload (first=0x401afef4, global=1) at ../../gcc/gcc/reload1.c:1038
 #4  0x0834b67e in global_alloc (file=0x0) at ../../gcc/gcc/global.c:578
 #5  0x082dc09c in rest_of_compilation (decl=0x40235e00) at ../../gcc/gcc/toplev.c:3284
 #6  0x080fe88d in genrtl_finish_function (fn=0x40235e00) at ../../gcc/gcc/cp/semantics.c:2642
 #7  0x080fe371 in expand_body (fn=0x40235e00) at ../../gcc/gcc/cp/semantics.c:2465
 #8  0x080c8e7b in yyparse () at parse.y:816
 #9  0x081264bd in c_common_parse_file (set_yydebug=0) at ../../gcc/gcc/c-lex.c:159
 #10 0x082da206 in compile_file () at ../../gcc/gcc/toplev.c:2126
 #11 0x082df066 in do_compile () at ../../gcc/gcc/toplev.c:5331
 #12 0x082df0bf in toplev_main (argc=3, argv=0xbffffb04) at ../../gcc/gcc/toplev.c:5361
 #13 0x0813c3e4 in main (argc=3, argv=0xbffffb04) at ../../gcc/gcc/main.c:35
 (gdb)
 
 
 It fails in the following code :
 
 
       /* Ignore reloads that got marked inoperative.  */
       if ((rld[r].out != 0 || rld[r].in != 0 || rld[r].secondary_p)
           && ! rld[r].optional
           && rld[r].regno == -1)
         if (! find_reg (chain, i))
           {
 =>          spill_failure (chain->insn, rld[r].class);
             failure = 1;
             return;
           }
     }
 
 
 and down:
 
 
 /* Handle the failure to find a register to spill.
    INSN should be one of the insns which needed this particular spill reg.  */
 
 static void
 spill_failure (insn, class)
      rtx insn;
      enum reg_class class;
 {
   static const char *const reg_class_names[] = REG_CLASS_NAMES;
   if (asm_noperands (PATTERN (insn)) >= 0)
     error_for_asm (insn, "can't find a register in class `%s' while reloading `asm'",
                    reg_class_names[class]);
   else
     {
 =>    error ("unable to find a register to spill in class `%s'",
              reg_class_names[class]);
       fatal_insn ("this is the insn:", insn);
     }
 }
 
 
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]