https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82899
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |msebor at gcc dot gnu.org
See Also| |https://gcc.gnu.org/bugzill
| |a/show_bug.cgi?id=81009
--- Comment #7 from Martin Sebor <msebor at gcc dot gnu.org> ---
See also bug 81009 for a related optimization opportunity (this one having to
do with const objects/members).
A ctor declaration cannot be qualified but G++ does seem top allow the
__restrict qualifier on a ctor definition outside the class with the expected
effect.
Explicitly annotating the argument of the copy ctor with __restrict keyword is
valid and has the expected effect:
$ cat t.C && gcc -O2 -S -fdump-tree-optimized=/dev/stdout t.C
struct test {
char data[2] = {1, 2};
test(const test& v);
~test(){} // non trivial destructor!
};
test::test(const test& __restrict v) /* __restrict here works too */
: data{ v.data[0], v.data[0] }
{}
;; Function test::test (_ZN4testC2ERKS_, funcdef_no=4, decl_uid=2331,
cgraph_uid=4, symbol_order=4)
test::test (struct test * const restrict this, const struct test & v)
{
char _1;
<bb 2> [local count: 10000]:
_1 = *v_5(D).data[0];
*this_3(D).data[0] = _1;
*this_3(D).data[1] = _1;
return;
}