https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90941
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |alias
CC| |msebor at gcc dot gnu.org
--- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> ---
I think at least in theory, the restrict keyword should make it possible to
express this constraint. Here's somewhat convoluted code showing how:
static int priv_offset;
struct offset_t { const int* const restrict p; };
static inline offset_t
read_offset (void)
{
static struct offset_t x { &priv_offset };
return x;
}
#define pub_offset (*read_offset ())
These declarations make it possible to modify priv_offset only until the first
time pub_offset has been used to call read_offset(). After that, modifying
priv_offset is undefined because a const qualified restricted pointer to it
exists.
The code doesn't do anything useful in GCC. It optimizes calls to
read_offset() into multiple reads of priv_offset, defeating the guarantee.