http://llvm.org/bugs/show_bug.cgi?id=15364
Bug ID: 15364
Summary: LTO miscompiles some code?
Product: new-bugs
Version: 3.2
Hardware: All
OS: All
Status: NEW
Severity: enhancement
Priority: P
Component: new bugs
Assignee: [email protected]
Reporter: [email protected]
CC: [email protected]
Classification: Unclassified
Created attachment 10081
--> http://llvm.org/bugs/attachment.cgi?id=10081&action=edit
Demonstration of error
I'm working on emscripten and am updating the version of libcxx that is used in
emscripten to the current version. I thought it would be a good idea to run
the libcxx test cases against emscripten and found what appears to be a bug in
LLVM.
I've attached a fairly minimal test case for the bug and it goes into an
infinite loop when compiled with emscripten.
According to Alon Zakai (lead on emscripten):
Looks like LLVM LTO is breaking this. It works with -O1 --llvm-lto 0 and
fails with -O1 --llvm-lto 1.
Diffing those, it does look like LTO messes stuff up. With
https://gist.github.com/kripken/5039740
applies to the LTO's one, it works ok. Basically, LTO copies the first
into local vars - but never uses them. It also doesn't make a stack copy
of the last vars. Manually changing those in the diff make it work
properly.
The 'first' and 'last' variables that he is referring to are from the
definition of std::includes:
template <class _Compare, class _InputIterator1, class _InputIterator2>
bool
__includes(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_Compare __comp)
{
for (; __first2 != __last2; ++__first1)
{
if (__first1 == __last1 || __comp(*__first2, *__first1))
return false;
if (!__comp(*__first1, *__first2))
++__first2;
}
return true;
}
The bug against emscripten can be seen at
https://github.com/kripken/emscripten/issues/873.
I am using clang / llvm 3.2.
--
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