[Bug c++/70178] Loop-invariant memory loads from std::string innards are not hoisted
rguenther at suse dot de
gcc-bugzilla@gcc.gnu.org
Fri Mar 11 12:30:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70178
--- Comment #3 from rguenther at suse dot de <rguenther at suse dot de> ---
On Fri, 11 Mar 2016, zackw at panix dot com wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70178
>
> --- Comment #2 from Zack Weinberg <zackw at panix dot com> --- That was
> my working hypothesis as well. Isn't there some way we can annotate
> s->data to reassure the compiler that *this* char* doesn't alias? I
> don't know enough about the guts of std::string to know whether
> 'restrict' is accurate, but it certainly shouldn't be pointing to
> anything but string contents.
We can use 'restrict', yes, but it will only have an effect if used
on an object a function parameter points to.
We do use it on valarray for example. Not sure if it is valid for
std::string.
Note that using restrict on data members is poorly specified (if at all)
and I can't find it specified for C++ at all (just for C). I only
find in 17.2 (C++14) that for C standard library functions
"any use of the restrict qualifier shall be omitted" ...
We do use the restrict feature for fortran arrray descriptors and
it works there (as function parameter).
More information about the Gcc-bugs
mailing list