A template optimization bug

H.J. Lu hjl@lucon.org
Sat Oct 17 11:47:00 GMT 1998


This filed failed to compile with egcs 1.0.3/1.1/snapshot
using -O.

# gcc -S -O -v bar.ii
Reading specs from /usr/lib/gcc-lib/i586-pc-linux/egcs-2.91.57/specs
gcc version egcs-2.91.57 19980901 (egcs-1.1 release)
 /usr/lib/gcc-lib/i586-pc-linux/egcs-2.91.57/cc1plus bar.ii -quiet -O -version -o bar.s
GNU C++ version egcs-2.91.57 19980901 (egcs-1.1 release) (i586-pc-linux) compiled by GNU C version
egcs-2.91.57 19980901 (egcs-1.1 release).
bar.ii: In function `void * foobar(class bar &, class foo *)':
bar.ii:27: internal error--unrecognizable insn:
(insn 55 150 57 (set (mem:SI (pre_dec:SI (reg:SI 7 %esp)))
        (mem:SI (reg:SI 31))) -1 (insn_list 150 (nil))
    (expr_list:REG_DEAD (reg:SI 31)
        (nil)))
/home/work/misc/gnu/src/egcs-1.1/gcc/toplev.c:1360: Internal compiler error in function fatal_insn

-- 
H.J. Lu (hjl@gnu.org)
----
template<class T>
class FixSeq
{
public:
    void append(const T&);
};
class foo
{
public:  
    void setupIR();
};
typedef FixSeq<foo *> bar;
extern void dummy (foo *);
void *
foobar (bar &x, foo *p)
{
    try
    {
        p -> setupIR();
    }
    catch(...)
    {
        dummy (p);
    }
    x.append(p);
    return p;
}



More information about the Gcc-bugs mailing list