http://llvm.org/bugs/show_bug.cgi?id=2806
Summary: assertion failure in DCE.cpp when executed in debug mode
on win32
Product: libraries
Version: trunk
Platform: PC
OS/Version: Windows NT
Status: NEW
Severity: minor
Priority: P2
Component: Scalar Optimizations
AssignedTo: [EMAIL PROTECTED]
ReportedBy: [EMAIL PROTECTED]
CC: [email protected]
Hi,
The following code in DCE.cpp(line 113 to 118) causes an assertion failure in
'std::vector' operator--().
for (std::vector<Instruction*>::iterator WI = WorkList.begin();
WI != WorkList.end(); ++WI)
if (*WI == I) {
WI = WorkList.erase(WI);
--WI;
}
When 'WorkList' becomes empty after WorkList.erase, 'WI' will point to the
beginning of the internal buffer of the std::vector. Thus, '--WI' will make
'WI' point to an invalid address. I believe that this will function correctly
since 'WI' will be then incremented by '++WI' of the for loop, however, the
'std::vector' implementation of the visual studio detects that 'WI' will points
to an invalid address after '--' operation, and raises an assertion failure.
I'd suggest to change this code into
for (std::vector<Instruction*>::iterator WI = WorkList.begin();
WI != WorkList.end(); )
if (*WI == I) {
WI = WorkList.erase(WI);
}
else {
++WI;
}
Please let me know if you don't think this need to be fixed.
Thanks.
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs