libstdc++ testsuite: Correct S0 in std/time/hh_mm_ss/1.cc
Commit Message
Tested cris-elf and native x86_64-pc-linux-gnu.
Ok to commit?
-----8< ------
For targets where the ABI mandates structure layout that has
no padding, like cris-elf, this test started failing when
introduced as an add-on to the existing 1.cc, thereby
effectively causing a regression in testsuite results.
Adding an empty structure to S0, corresponds better to the
layout of hh_mm_ss<seconds>.
PR testsuite/108632
* testsuite/std/time/hh_mm_ss/1.cc (size): Add empty
struct at end of S0.
---
libstdc++-v3/testsuite/std/time/hh_mm_ss/1.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Comments
On Wed, 1 Feb 2023 at 14:38, Hans-Peter Nilsson via Libstdc++
<libstdc++@gcc.gnu.org> wrote:
>
> Tested cris-elf and native x86_64-pc-linux-gnu.
> Ok to commit?
OK, thanks.
On Wed, 1 Feb 2023 at 16:01, Jonathan Wakely wrote:
>
> On Wed, 1 Feb 2023 at 14:38, Hans-Peter Nilsson via Libstdc++
> <libstdc++@gcc.gnu.org> wrote:
> >
> > Tested cris-elf and native x86_64-pc-linux-gnu.
> > Ok to commit?
>
> OK, thanks.
We could add the [[no_unique_address]] attribute to the _M_ss member,
so that it takes no space when it's an empty struct.
That would save a byte in hh_mm_ss for cris-elf and targets like that,
but as this type isn't meant to be used for storage, I don't think we
should bother. People shouldn't be using this as a data member, just
creating it on the stack and then discarding it.
> From: Jonathan Wakely <jwakely@redhat.com>
> Date: Wed, 1 Feb 2023 18:19:09 +0100
> On Wed, 1 Feb 2023 at 16:01, Jonathan Wakely wrote:
> >
> > On Wed, 1 Feb 2023 at 14:38, Hans-Peter Nilsson via Libstdc++
> > <libstdc++@gcc.gnu.org> wrote:
> > >
> > > Tested cris-elf and native x86_64-pc-linux-gnu.
> > > Ok to commit?
> >
> > OK, thanks.
>
> We could add the [[no_unique_address]] attribute to the _M_ss member,
> so that it takes no space when it's an empty struct.
>
> That would save a byte in hh_mm_ss for cris-elf and targets like that,
> but as this type isn't meant to be used for storage, I don't think we
> should bother. People shouldn't be using this as a data member, just
> creating it on the stack and then discarding it.
>
Agreed; no worries. Thanks for the review.
brgds, H-P
@@ -103,7 +103,7 @@ size()
{
using namespace std::chrono;
- struct S0 { long long h; char m; char s; bool neg; };
+ struct S0 { long long h; char m; char s; bool neg; struct { } empty; };
static_assert(sizeof(hh_mm_ss<seconds>) == sizeof(S0));
struct S1 { long long h; char m; char s; bool neg; char ss; };
static_assert(sizeof(hh_mm_ss<duration<int, std::centi>>) == sizeof(S1));