Bug#484053: g++-4.3: [PR36415] [4.1/4.2 regression, armel] ICE in extract_insn, at recog.c:1990
Package: g++-4.3
Version: 4.3.0-5
Severity: important
g++-4.3 fails to build texlive-bin on armel (but not on arm), with the
following error:
g++ -D_REENTRANT -I../../../../libs/icu-xetex/i18n -I../common -I../../../../libs/icu-xetex/common -D_REENTRANT -DU_I18N_IMPLEMENTATION -g -O2 -c -o rematch.ao ../../../../libs/icu-xetex/i18n/rematch.cpp
../../../../libs/icu-xetex/i18n/rematch.cpp: In member function 'void icu_3_4::RegexMatcher::MatchAt(int32_t, UErrorCode&)':
../../../../libs/icu-xetex/i18n/rematch.cpp:2293: error: unrecognizable insn:
(insn 4198 1384 1386 184 ../../../../libs/icu-xetex/i18n/rematch.cpp:1465 (set (reg:SI 12 ip)
(plus:SI (reg:SI 3 r3 [953])
(mult:SI (reg/v:SI 14 lr [orig:234 opValue.2048 ] [234])
(const_int 32 [0x20])))) -1 (nil))
../../../../libs/icu-xetex/i18n/rematch.cpp:2293: internal compiler error: in extract_insn, at recog.c:1990
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.3/README.Bugs> for instructions.
Reduced testcase attached.
-- System Information:
Debian Release: lenny/sid
APT prefers testing
APT policy: (500, 'unstable')
Architecture: armel (armv5tejl)
Kernel: Linux 2.6.25-1-versatile
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to fr_FR.UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages g++-4.3 depends on:
ii gcc-4.3 4.3.0-5 The GNU C compiler
ii gcc-4.3-base 4.3.0-5 The GNU Compiler Collection (base
ii libc6 2.7-10 GNU C Library: Shared libraries
ii libgcc1 1:4.3.0-5 GCC support library
ii libgmp3c2 2:4.2.2+dfsg-3 Multiprecision arithmetic library
ii libmpfr1ldbl 2.3.1.dfsg.1-2 multiple precision floating-point
ii libstdc++6-4.3-dev 4.3.0-5 The GNU Standard C++ Library v3 (d
g++-4.3 recommends no packages.
-- no debconf information
extern "C"
{
typedef int int8_t __attribute__ ((__mode__ (__QI__)));
typedef int int32_t __attribute__ ((__mode__ (__SI__)));
}
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef int8_t UBool;
typedef uint16_t UChar;
typedef int32_t UChar32;
typedef void *UClassID;
typedef enum UErrorCode
{
} UErrorCode;
namespace icu_3_4
{
class UMemory
{
};
class UObject:public UMemory
{
};
class Replaceable:public UObject
{
};
class UnicodeString:public Replaceable
{
public:
inline const UChar *getBuffer () const;
};
class UVector;
class UVector32;
struct REStackFrame;
struct Regex8BitSet;
class RegexPattern:public UObject
{
public:
UVector32 * fCompiledPat;
UVector *fSets;
Regex8BitSet *fSets8;
};
class RegexMatcher:public UObject
{
virtual UBool find ();
static UClassID getStaticClassID ();
REStackFrame *resetStack ();
const RegexPattern *fPattern;
const UnicodeString *fInput;
};
class UnicodeFunctor:public UObject
{
};
class UnicodeMatcher
{
};
class UnicodeFilter:public UnicodeFunctor, public UnicodeMatcher
{
};
}
namespace icu_3_4
{
class UnicodeSet:public UnicodeFilter
{
};
class UVector:public UObject
{
public:
void *elementAt (int32_t index) const;
};
class UVector32:public UObject
{
public:
int32_t * getBuffer () const;
int32_t *reserveBlock (int32_t size, UErrorCode & status);
};
inline int32_t *UVector32::reserveBlock (int32_t size, UErrorCode & status)
{
}
enum
{
URX_BACKTRACK = 1,
};
struct REStackFrame
{
int32_t fInputIdx;
int32_t fPatIdx;
};
struct Regex8BitSet:public UMemory
{
inline Regex8BitSet ();
inline UBool contains (UChar32 c);
int8_t d[32];
};
inline Regex8BitSet::Regex8BitSet ()
{
}
inline UBool Regex8BitSet::contains (UChar32 c)
{
return ((d[c >> 3] & 1 << (c & 7)) != 0);
}
UBool RegexMatcher::find ()
{
int32_t op;
int32_t opType;
int32_t opValue;
int32_t *pat = fPattern->fCompiledPat->getBuffer ();
UVector *sets = fPattern->fSets;
const UChar *inputBuf = fInput->getBuffer ();
REStackFrame *fp = resetStack ();
{
op = pat[fp->fPatIdx];
opType = ((uint32_t) (op) >> 24);
opValue = ((op) & 0xffffff);
switch (opType)
{
case URX_BACKTRACK:
{
UChar32 c;
{
(c) = (inputBuf)[(fp->fInputIdx)++];
Regex8BitSet *s8 = &fPattern->fSets8[opValue];
if (s8->contains (c))
UnicodeSet *s = (UnicodeSet *) sets->elementAt (opValue);
}
}
}
}
}
UClassID RegexMatcher::getStaticClassID ()
{
}
}
Reply to: