https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89329
Bug ID: 89329
Summary: "-O2" optimization causes a infinite loop
Product: gcc
Version: 7.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: jungmin.song at nuance dot com
Target Milestone: ---
Created attachment 45688
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=45688&action=edit
Sample code generating this issue
With O2 optimization, an infinite loop is generated from the attached code.
for (i = 0; i < pStruct->count1; ++i) {
unsigned short pWord = pStruct->array2[i];
CheckArray1_ext(pWord);
}
for (; i < ARR_MAX; ++i) {
pStruct->array1[i] = i;
}
The generated code with "arm-none-eabi-gcc.exe -S -O2 compileOptimizationErr.c
-o compileOptimizationErr.c.O2.s" checks only if it is equal with ARR_MAX for
the second loop. If the value of 'i' is over ARR_MAX before the second loop,
there is no condition to exit the loop.