aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-ch.c
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-08-07 17:13:56 +0100
committerGiuliano Belinassi <giuliano.belinassi@usp.br>2020-08-17 15:08:17 -0300
commitfcbca3c166d91dac355ff6e917a9c39c7c62bb56 (patch)
tree2cfae7de90bf56016f87b074b14b9b5fee8c3d82 /gcc/tree-ssa-loop-ch.c
parent5cd12fbfd32ac7b40a901942471d52d22de81c36 (diff)
downloadgcc-fcbca3c166d91dac355ff6e917a9c39c7c62bb56.zip
gcc-fcbca3c166d91dac355ff6e917a9c39c7c62bb56.tar.gz
gcc-fcbca3c166d91dac355ff6e917a9c39c7c62bb56.tar.bz2
libstdc++: Remove inheritance from elements in std::tuple
This fixes a number of std::tuple bugs by no longer making use of the empty base-class optimization. By using the C++20 [[no_unique_address]] attribute we can always store the element as a data member, while still compressing the layout of tuples containing empty types. Since we no longer use inheritance we could also apply the compression optimization for final types and for tuples of tuples, but doing so would be an ABI break. Using [[no_unique_address]] more liberally for the unstable std::__8 configuration is left for a later date. There may be reasons not to apply the attribute unconditionally, e.g. see the discussion about guaranteed elision in PR 94062. libstdc++-v3/ChangeLog: PR libstdc++/55713 PR libstdc++/71096 PR libstdc++/93147 * include/std/tuple [__has_cpp_attribute(no_unique_address)] (_Head_base<Idx, Head, true>): New definition of the partial specialization, using [[no_unique_address]] instead of inheritance. * testsuite/libstdc++-prettyprinters/48362.cc: Adjust expected output. * testsuite/20_util/tuple/comparison_operators/93147.cc: New test. * testsuite/20_util/tuple/creation_functions/55713.cc: New test. * testsuite/20_util/tuple/element_access/71096.cc: New test.
Diffstat (limited to 'gcc/tree-ssa-loop-ch.c')
0 files changed, 0 insertions, 0 deletions