[Bug c/38527] New: Gcc optimizes code to an endless loop
gray at gnu dot org dot ua
gcc-bugzilla@gcc.gnu.org
Sun Dec 14 20:13:00 GMT 2008
When compiling the following program with -O2, gcc optimizes the var_unwind_all
function to an endless loop. Without -O, the program is compiled and runs
correctly. The same error is present with gcc 4.3.0.
The program is (no includes):
struct rlist {
struct rlist *prev;
};
void
_list_remove(struct rlist **last, struct rlist *obj)
{
*last = obj->prev;
}
struct var {
struct var *prev;
};
struct var *var_last;
void
var_unwind_all()
{
while (var_last)
_list_remove((struct rlist**)&var_last,
(struct rlist*)var_last);
;
}
/* Implementation */
struct var bucket[2];
int
main()
{
int i;
struct var *cur;
/* Create the list */
for (i = 0; i < sizeof(bucket)/sizeof(bucket[0]); i++) {
cur = bucket + i;
cur->prev = var_last;
var_last = cur;
}
/* Deallocate it */
var_unwind_all();
return 0;
}
The generated .s file contains:
.L10:
--
Summary: Gcc optimizes code to an endless loop
Product: gcc
Version: 4.3.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: gray at gnu dot org dot ua
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38527
More information about the Gcc-bugs
mailing list