libstdc++ testsuite: Correct S0 in std/time/hh_mm_ss/1.cc

Message ID 20230201143831.BDA3A20423@pchp3.se.axis.com
State Accepted
Headers
Series libstdc++ testsuite: Correct S0 in std/time/hh_mm_ss/1.cc |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Hans-Peter Nilsson Feb. 1, 2023, 2:38 p.m. UTC
  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

Jonathan Wakely Feb. 1, 2023, 4:01 p.m. UTC | #1
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.
  
Jonathan Wakely Feb. 1, 2023, 5:19 p.m. UTC | #2
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.
  
Hans-Peter Nilsson Feb. 1, 2023, 10:37 p.m. UTC | #3
> 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
  

Patch

diff --git a/libstdc++-v3/testsuite/std/time/hh_mm_ss/1.cc b/libstdc++-v3/testsuite/std/time/hh_mm_ss/1.cc
index d97a9057f472..26a4555576c8 100644
--- a/libstdc++-v3/testsuite/std/time/hh_mm_ss/1.cc
+++ b/libstdc++-v3/testsuite/std/time/hh_mm_ss/1.cc
@@ -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));