[Bug c++/33887] Reference to bitfield gets wrong value when optimizing
ian at airs dot com
gcc-bugzilla@gcc.gnu.org
Thu Oct 25 05:07:00 GMT 2007
------- Comment #2 from ian at airs dot com 2007-10-25 05:07 -------
Nothing is taking the address of a bitfield. It's a const reference, which
should get initialized with the value. If the reference is not const, then the
compiler gives an error.
In any case, this code fails the same way, and clearly does not take the
address of a bitfield.
extern "C" void abort() __attribute__ ((noreturn));
template<typename t1, typename t2>
void fn(const t1, const t2) __attribute__ ((noinline));
template<typename t1, typename t2>
void fn(const t1 v1, const t2 v2)
{
if (v1 != v2)
abort();
}
struct s
{
unsigned long long f1 : 40;
unsigned int f2 : 24;
};
s sv;
int main()
{
sv.f1 = 0;
sv.f2 = (1 << 24) - 1;
int f2 = sv.f2;
fn(f2, (1 << 24) - 1);
++sv.f2;
f2 = sv.f2;
fn(f2, 0);
return 0;
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33887
More information about the Gcc-bugs
mailing list