[Bug target/67211] New: [5 Regression] ICE (insn does not satisfy its constraints) on powerpc64le-linux-gnu
doko at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Aug 14 07:12:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67211
Bug ID: 67211
Summary: [5 Regression] ICE (insn does not satisfy its
constraints) on powerpc64le-linux-gnu
Product: gcc
Version: 5.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: doko at gcc dot gnu.org
Target Milestone: ---
seen with r226731 from the gcc-5-branch, fails with -O3, succeeds with -O2. on
powerpc64le-linux-gnu. not seen with r226068 on the trunk.
$ g++ -c -g -O3 structure.ii
structure.ii:38:3: warning: anonymous type with no linkage used to declare
variable '<anonymous struct> a' with linkage
} a;
^
structure.ii: In function 'void Linked()':
structure.ii:42:1: error: insn does not satisfy its constraints:
}
^
(insn 305 170 306 8 (set (reg:DI 9 9)
(reg/f:DI 63 31 [orig:184 p3$_M_node ] [184])) structure.ii:20 554
{*movdi_internal64}
(nil))
structure.ii:42:1: internal compiler error: in extract_constrain_insn, at
recog.c:2246
0x107528d3 _fatal_insn(char const*, rtx_def const*, char const*, int, char
const*)
../../src/gcc/rtl-error.c:110
0x1075292b _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
../../src/gcc/rtl-error.c:121
0x1071b7e7 extract_constrain_insn(rtx_insn*)
../../src/gcc/recog.c:2246
0x106f8527 reload_cse_simplify_operands
../../src/gcc/postreload.c:430
0x106f9983 reload_cse_simplify
../../src/gcc/postreload.c:207
0x106f9983 reload_cse_regs_1
../../src/gcc/postreload.c:246
0x106fb697 reload_cse_regs
../../src/gcc/postreload.c:94
0x106fb697 execute
../../src/gcc/postreload.c:2387
Please submit a full bug report,
with preprocessed source if appropriate.
$ cat structure.ii
template <typename _InputIterator, typename _ForwardIterator>
void find_first_of(_InputIterator, _InputIterator, _ForwardIterator p3,
_ForwardIterator p4) {
for (; p3 != p4; ++p3)
;
}
template <typename, typename, typename> struct A {
int _S_buffer_size;
int *_M_cur;
int *_M_first;
int *_M_last;
int **_M_node;
void operator++() {
if (_M_cur == _M_last)
m_fn1(_M_node + 1);
}
void m_fn1(int **p1) {
_M_node = p1;
_M_first = *p1;
_M_last = _M_first + _S_buffer_size;
}
};
template <typename _Tp, typename _Ref, typename _Ptr>
bool operator==(A<_Tp, _Ref, _Ptr>, A<_Tp, _Ref, _Ptr>);
template <typename _Tp, typename _Ref, typename _Ptr>
bool operator!=(A<_Tp, _Ref, _Ptr> p1, A<_Tp, _Ref, _Ptr> p2) {
return p1 == p2;
}
class B {
public:
A<int, int, int> m_fn2();
};
struct {
B j;
} a;
void Linked() {
A<int, int, int> b, c, d;
find_first_of(d, c, b, a.j.m_fn2());
}
More information about the Gcc-bugs
mailing list