[Bug c++/61292] auto keyword to vector reference generates wrong alignment move (causing runtime segfault)
jimreesma at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Nov 10 02:56:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61292
Jim Rees <jimreesma at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jimreesma at gmail dot com
--- Comment #3 from Jim Rees <jimreesma at gmail dot com> ---
Reproduced this recently on x86/64-Linux, and did some research:
- yes auto seems to strip gcc-style alignment from types.
- So does template argument deduction (because the two use the same rules).
- Yes, decltype(auto) does not strip the alignment away.
- All this appears to be intentional:
see gcc source repo, ./gcc/cp/pt.c, line 7926:
/* Since type attributes aren't mangled, we need to strip them from
template type arguments. */
- The workaround for auto is to avoid using it where your gcc extension
attributes matter. Use decltype(auto) if that's useful to you.
- The workaround for template argument deduction -- don't pass vector types
(with extension attributes) to template parameters. I found that wrapping the
vector type in a union or struct works nicely as the mangled name only needs
the name of the struct/union so the member type is left intact.
If there were to be an actual fix, it might require the mangling format to
incorporate gcc extension type attributes, so the stripping of attributes
wouldn't be necessary.
The template-argument-deduction case is actually something c++ programmers use
a lot -- it would be nice if this limitation were better documented. On
occasion, one gets the compiler warning about attributes being ignored, but
there's no explanation for 1) which attributes, and 2) why that is.
More information about the Gcc-bugs
mailing list