https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68966
Pon <pponnuvel at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |pponnuvel at gmail dot com
--- Comment #7 from Pon <pponnuvel at gmail dot com> ---
Clarification needed about this change.
C standard says:
> None of these operations is applicable to atomic_bool.
I understand the "not applicable" as "because it's already an atomic type". But
does it also applicable to "plain" bool (_Bool) type too? GCC 6.1.1 with
-std=gnu99, GCC fails to compile and reports:
> error: operand type β_Bool *β is incompatible with argument 1 of
> β__sync_fetch_and_orβ
for code that used to work with GCC 5.3.1.
Comments from the testsuite:
> This is necessary because GCC expects that all initialized _Bool
> objects have a specific representation and allowing
> atomic operations to change it would break the invariant.
and code:
> Those are not valid to call with a pointer to _Bool (or C++ bool)
> and so must be rejected.
suggest the change is deliberate for "plain" bool type (_Bool) too.
Does it mean the existing code that uses of these atomic intrinsics
on plain bool type is buggy?
Obviously I can fix it by using an int/unsigned int instead
of _Bool or use atomic_bool in new code.
But my question is about GCC 6.1.1 breaking older code compiled
using gnu99. I would appreciate a clarification on this.
Thanks.