#9172 closed Bugs (invalid)
Crash when not preserving FPU
| Reported by: | Owned by: | olli | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | coroutine |
| Version: | Boost 1.54.0 | Severity: | Problem |
| Keywords: | Cc: |
Description
I get a SIGBUS when executing the following code:
#include <iostream>
#include <boost/coroutine/coroutine.hpp>
typedef boost::coroutines::coroutine<int()> generator;
void foo(generator::caller_type& yield)
{
for (std::size_t i = 0; i < 10; ++i)
yield(i);
}
int main()
{
boost::coroutines::attributes attr(false /*don't preserve FPU registers*/);
generator gen(foo, attr);
while (gen)
{
std::cout << gen.get() << std::endl;
gen();
}
return 0;
};
I tried with gcc 4.8 and clang 3.3 on Mac OS X 10.8 and with gcc 4.8 on Linux (CentOS 6). I also tried with the latest Boost trunk (r85977) on Mac OS X 10.8.
Change History (3)
comment:1 by , 9 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
follow-up: 3 comment:2 by , 9 years ago
OK, thanks. In this case, this is a bug in the documentation. It is stated that the parameter type is a bool (http://www.boost.org/doc/libs/1_54_0/libs/coroutine/doc/html/coroutine/attributes.html), not a enumeration.
comment:3 by , 9 years ago
Replying to Alexandre Hamez <alexandre.hamez@…>:
OK, thanks. In this case, this is a bug in the documentation. It is stated that the parameter type is a bool (http://www.boost.org/doc/libs/1_54_0/libs/coroutine/doc/html/coroutine/attributes.html), not a enumeration.
OK - I've fixed it in the docu, thx.

parameter type for disabling FPU is not a bool - it is a enumeration. correct code: boost::coroutines::attributes attr(boost::coroutines::fpu_not_preserved /*don't preserve FPU registers*/);