[v2,2/2] libstdc++: Use using instead of typedef in opts-common.h

Message ID 20240111094038.876653-2-kmatsui@gcc.gnu.org
State Superseded
Headers
Series [v2,1/2] libstdc++: Fix error handling in filesystem::equivalent [PR113250] |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_gcc_check--master-aarch64 fail Patch failed to apply
linaro-tcwg-bot/tcwg_gcc_build--master-arm fail Patch failed to apply

Commit Message

Ken Matsui Jan. 11, 2024, 9:40 a.m. UTC
  libstdc++-v3/ChangeLog:

	* src/filesystem/ops-common.h (stat_type): Use using.

Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org>
---
 libstdc++-v3/src/filesystem/ops-common.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Comments

Jonathan Wakely Jan. 11, 2024, 9:55 a.m. UTC | #1
On Thu, 11 Jan 2024, 09:43 Ken Matsui, <kmatsui@gcc.gnu.org> wrote:

> libstdc++-v3/ChangeLog:
>
>         * src/filesystem/ops-common.h (stat_type): Use using.
>
> Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org>
> ---
>  libstdc++-v3/src/filesystem/ops-common.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/libstdc++-v3/src/filesystem/ops-common.h
> b/libstdc++-v3/src/filesystem/ops-common.h
> index d78a54754c2..e302d8caae6 100644
> --- a/libstdc++-v3/src/filesystem/ops-common.h
> +++ b/libstdc++-v3/src/filesystem/ops-common.h
> @@ -118,7 +118,7 @@ namespace __gnu_posix
>    inline int close(int fd)
>    { return ::_close(fd); }
>
> -  typedef struct ::__stat64 stat_type;
> +  using stat_type = struct ::_stat64;
>

You've removed an underscore, is that intentional? Has this been compiled +
tested with mingw?


>    inline int stat(const wchar_t* path, stat_type* buffer)
>    { return ::_wstat64(path, buffer); }
> @@ -184,7 +184,7 @@ namespace __gnu_posix
>    using ::open;
>    using ::close;
>  # ifdef _GLIBCXX_HAVE_SYS_STAT_H
> -  typedef struct ::stat stat_type;
> +  using stat_type = struct ::stat;
>    using ::stat;
>  #  ifdef _GLIBCXX_USE_LSTAT
>    using ::lstat;
> --
> 2.43.0
>
>
  
Ken Matsui Jan. 11, 2024, 10:10 a.m. UTC | #2
On Thu, 11 Jan 2024 at 09:55, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
>    On Thu, 11 Jan 2024, 09:43 Ken Matsui, <[1]kmatsui@gcc.gnu.org> wrote:       
>                                                                                 
>    > libstdc++-v3/ChangeLog:                                                    
>                                                                                 
>    >         * src/filesystem/ops-common.h (stat_type): Use using.              
>                                                                                 
>    > Signed-off-by: Ken Matsui <[2]kmatsui@gcc.gnu.org>                         
>    > ---                                                                        
>    >  libstdc++-v3/src/filesystem/ops-common.h | 4 ++--                         
>    >  1 file changed, 2 insertions(+), 2 deletions(-)                           
>                                                                                 
>    > diff --git a/libstdc++-v3/src/filesystem/ops-common.h                      
>    > b/libstdc++-v3/src/filesystem/ops-common.h                                 
>    > index d78a54754c2..e302d8caae6 100644                                      
>    > --- a/libstdc++-v3/src/filesystem/ops-common.h                             
>    > +++ b/libstdc++-v3/src/filesystem/ops-common.h                             
>    > @@ -118,7 +118,7 @@ namespace __gnu_posix                                  
>    >    inline int close(int fd)                                                
>    >    { return ::_close(fd); }                                                
>                                                                                 
>    > -  typedef struct ::__stat64 stat_type;                                    
>    > +  using stat_type = struct ::_stat64;                                     
>                                                                                 
>    You've removed an underscore, is that intentional? Has this been compiled    
>    + tested with mingw?                                                         
This is totally unintentional.  I'll fix it.  I've tested it with Linux
and do not have a mingw environment to test it with.  Would you have any
suggestions on how to test it?

>                                                                                 
>    >    inline int stat(const wchar_t* path, stat_type* buffer)                 
>    >    { return ::_wstat64(path, buffer); }                                    
>    > @@ -184,7 +184,7 @@ namespace __gnu_posix                                  
>    >    using ::open;                                                           
>    >    using ::close;                                                          
>    >  # ifdef _GLIBCXX_HAVE_SYS_STAT_H                                          
>    > -  typedef struct ::stat stat_type;                                        
>    > +  using stat_type = struct ::stat;                                        
>    >    using ::stat;                                                           
>    >  #  ifdef _GLIBCXX_USE_LSTAT                                               
>    >    using ::lstat;                                                          
>    > --                                                                         
>    > 2.43.0                                                                     
> 
> References
> 
>    Visible links
>    1. mailto:kmatsui@gcc.gnu.org
>    2. mailto:kmatsui@gcc.gnu.org
  
Jonathan Wakely Jan. 11, 2024, 10:50 a.m. UTC | #3
On Thu, 11 Jan 2024 at 10:12, Ken Matsui <kmatsui@cs.washington.edu> wrote:
>
> On Thu, 11 Jan 2024 at 09:55, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
> >    On Thu, 11 Jan 2024, 09:43 Ken Matsui, <[1]kmatsui@gcc.gnu.org> wrote:
> >
> >    > libstdc++-v3/ChangeLog:
> >
> >    >         * src/filesystem/ops-common.h (stat_type): Use using.
> >
> >    > Signed-off-by: Ken Matsui <[2]kmatsui@gcc.gnu.org>
> >    > ---
> >    >  libstdc++-v3/src/filesystem/ops-common.h | 4 ++--
> >    >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> >    > diff --git a/libstdc++-v3/src/filesystem/ops-common.h
> >    > b/libstdc++-v3/src/filesystem/ops-common.h
> >    > index d78a54754c2..e302d8caae6 100644
> >    > --- a/libstdc++-v3/src/filesystem/ops-common.h
> >    > +++ b/libstdc++-v3/src/filesystem/ops-common.h
> >    > @@ -118,7 +118,7 @@ namespace __gnu_posix
> >    >    inline int close(int fd)
> >    >    { return ::_close(fd); }
> >
> >    > -  typedef struct ::__stat64 stat_type;
> >    > +  using stat_type = struct ::_stat64;
> >
> >    You've removed an underscore, is that intentional? Has this been compiled
> >    + tested with mingw?
> This is totally unintentional.  I'll fix it.  I've tested it with Linux
> and do not have a mingw environment to test it with.  Would you have any
> suggestions on how to test it?

If your linux distro has prebuilt packages for mingw-w64-g++ then it's
pretty easy to build a new compiler from trunk. I can give you a
simple recipe for doing it on Fedora.

In the meanwhile, I can test your updated patch for you.
  
Ken Matsui Jan. 11, 2024, 11:28 a.m. UTC | #4
On Thu, 11 Jan 2024 at 10:50, Jonathan Wakely <jwakely@redhat.com> wrote:
> On Thu, 11 Jan 2024 at 10:12, Ken Matsui <kmatsui@cs.washington.edu> wrote:
> >
> > On Thu, 11 Jan 2024 at 09:55, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
> > >    On Thu, 11 Jan 2024, 09:43 Ken Matsui, <[1]kmatsui@gcc.gnu.org> wrote:
> > >
> > >    > libstdc++-v3/ChangeLog:
> > >
> > >    >         * src/filesystem/ops-common.h (stat_type): Use using.
> > >
> > >    > Signed-off-by: Ken Matsui <[2]kmatsui@gcc.gnu.org>
> > >    > ---
> > >    >  libstdc++-v3/src/filesystem/ops-common.h | 4 ++--
> > >    >  1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> > >    > diff --git a/libstdc++-v3/src/filesystem/ops-common.h
> > >    > b/libstdc++-v3/src/filesystem/ops-common.h
> > >    > index d78a54754c2..e302d8caae6 100644
> > >    > --- a/libstdc++-v3/src/filesystem/ops-common.h
> > >    > +++ b/libstdc++-v3/src/filesystem/ops-common.h
> > >    > @@ -118,7 +118,7 @@ namespace __gnu_posix
> > >    >    inline int close(int fd)
> > >    >    { return ::_close(fd); }
> > >
> > >    > -  typedef struct ::__stat64 stat_type;
> > >    > +  using stat_type = struct ::_stat64;
> > >
> > >    You've removed an underscore, is that intentional? Has this been compiled
> > >    + tested with mingw?
> > This is totally unintentional.  I'll fix it.  I've tested it with Linux
> > and do not have a mingw environment to test it with.  Would you have any
> > suggestions on how to test it?
> 
> If your linux distro has prebuilt packages for mingw-w64-g++ then it's
> pretty easy to build a new compiler from trunk. I can give you a
> simple recipe for doing it on Fedora.
> 
> In the meanwhile, I can test your updated patch for you.
> 

I am using Ubuntu and was able to install mingw-w64-g++ with apt.  I
tried the following command to test the patch:

make check-target-libstdc++-v3 ALT_CXX_UNDER_TEST="$(which x86_64-w64-mingw32-g++)" RUNTESTFLAGS='conformance.exp=filesystem/*'

But it looks like the test is not using the mingw compiler.  Also,
when we want to test to build GCC with a different compiler, do we
need to rebuild the whole GCC again (i.e., make clean && export CXX=...
&& make)?

I really appreciate your recipe if it also works for Ubuntu.  Thank you!
  
Jonathan Wakely Jan. 11, 2024, 12:01 p.m. UTC | #5
On Thu, 11 Jan 2024 at 11:28, Ken Matsui <kmatsui@gcc.gnu.org> wrote:
>
> On Thu, 11 Jan 2024 at 10:50, Jonathan Wakely <jwakely@redhat.com> wrote:
> > On Thu, 11 Jan 2024 at 10:12, Ken Matsui <kmatsui@cs.washington.edu> wrote:
> > >
> > > On Thu, 11 Jan 2024 at 09:55, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
> > > >    On Thu, 11 Jan 2024, 09:43 Ken Matsui, <[1]kmatsui@gcc.gnu.org> wrote:
> > > >
> > > >    > libstdc++-v3/ChangeLog:
> > > >
> > > >    >         * src/filesystem/ops-common.h (stat_type): Use using.
> > > >
> > > >    > Signed-off-by: Ken Matsui <[2]kmatsui@gcc.gnu.org>
> > > >    > ---
> > > >    >  libstdc++-v3/src/filesystem/ops-common.h | 4 ++--
> > > >    >  1 file changed, 2 insertions(+), 2 deletions(-)
> > > >
> > > >    > diff --git a/libstdc++-v3/src/filesystem/ops-common.h
> > > >    > b/libstdc++-v3/src/filesystem/ops-common.h
> > > >    > index d78a54754c2..e302d8caae6 100644
> > > >    > --- a/libstdc++-v3/src/filesystem/ops-common.h
> > > >    > +++ b/libstdc++-v3/src/filesystem/ops-common.h
> > > >    > @@ -118,7 +118,7 @@ namespace __gnu_posix
> > > >    >    inline int close(int fd)
> > > >    >    { return ::_close(fd); }
> > > >
> > > >    > -  typedef struct ::__stat64 stat_type;
> > > >    > +  using stat_type = struct ::_stat64;
> > > >
> > > >    You've removed an underscore, is that intentional? Has this been compiled
> > > >    + tested with mingw?
> > > This is totally unintentional.  I'll fix it.  I've tested it with Linux
> > > and do not have a mingw environment to test it with.  Would you have any
> > > suggestions on how to test it?
> >
> > If your linux distro has prebuilt packages for mingw-w64-g++ then it's
> > pretty easy to build a new compiler from trunk. I can give you a
> > simple recipe for doing it on Fedora.
> >
> > In the meanwhile, I can test your updated patch for you.
> >
>
> I am using Ubuntu and was able to install mingw-w64-g++ with apt.  I
> tried the following command to test the patch:
>
> make check-target-libstdc++-v3 ALT_CXX_UNDER_TEST="$(which x86_64-w64-mingw32-g++)" RUNTESTFLAGS='conformance.exp=filesystem/*'
>
> But it looks like the test is not using the mingw compiler.  Also,
> when we want to test to build GCC with a different compiler, do we
> need to rebuild the whole GCC again (i.e., make clean && export CXX=...
> && make)?

Don't use 'make clean' with GCC, it doesn't work well. Just remove the
build directory.

Rebuilding with CXX set to your mingw compiler will not work. That
would try to compile gcc using the mingw compiler, producing a
compiler that would *run* on Windows. That's not what you want. You
need to configure gcc with --target=x86_64-w64-mingw32 to build a
compiler that *runs* on linux, but targets Windows.

Do this in a separate build directory, don't try to reuse the same
build directory that you already have for a native linux compiler.

>
> I really appreciate your recipe if it also works for Ubuntu.  Thank you!

Here's what I do on Fedora:
https://gist.github.com/jwakely/5579a4be12a86495d47cb5519f671b12#file-mingw-build-sh

To figure that command out I checked the output of x86_64-w64-mingw32-g++ -v
That will show you the sysroot used by the Ubuntu mingw compiler, and
the other options it was built with. Copy the relevant ones and add
those to your configure command for your mingw cross-compiler. On my
systems, the configure command is:

../gcc/configure --prefix=/home/jwakely/gcc/mingw --with-gnu-as
--with-as=/usr/bin/x86_64-w64-mingw32-as --with-gnu-ld
--with-ld=/usr/bin/x86_64-w64-mingw32-ld --without-newlib
--disable-multilib --disable-plugin --disable-libstdcxx-pch
--with-system-zlib --disable-nls --without-included-gettext
--disable-win32-registry --enable-threads=posix --enable-libgomp
--target=x86_64-w64-mingw32
--with-sysroot=/usr/x86_64-w64-mingw32/sys-root
target_alias=x86_64-w64-mingw32 --enable-libstdcxx-debug
--disable-libgomp --enable-libstdcxx-backtrace
--enable-languages=c,c++

The relevant parts that I copied from the output of the system
'x86_64-w64-mingw32-gcc -v' are:

--with-as=/usr/bin/x86_64-w64-mingw32-as
--with-ld=/usr/bin/x86_64-w64-mingw32-ld --without-newlib
--disable-multilib --disable-plugin
--disable-win32-registry
--enable-threads=posix
--target=x86_64-w64-mingw32
--with-sysroot=/usr/x86_64-w64-mingw32/sys-root

You might want the same options, but the paths to the mingw32-as,
mingw32-ld and the sys-root will probably be different on Ubuntu.

Looking at the -v output on Ubuntu, you probably want the
--with-headers option and --enable-fully-dynamic-string (to be
compatible with the system's mingw compiler) and
--enable-threads=win32 as well as the --with-as and --with-ld options.
You'll want to add a --prefix too so that you install somewhere under
your home directory, not under /usr

You might need to experiment with configure options until you get
something to build that works.

Once I have a mingw compiler that runs on my linux box, I use this
script to test it:
https://gist.github.com/jwakely/5579a4be12a86495d47cb5519f671b12#file-mingw_tests-sh

Like so:
find ~/src/gcc/gcc/libstdc++-v3/testsuite/27_io/filesystem -type f
-name '*.cc' | ~/src/gcc/scripts/mingw_tests.sh

That compiles all the 27_io filesystem tests using my mingw compiler
and then runs them using Wine.
  
Jonathan Wakely Jan. 11, 2024, 12:01 p.m. UTC | #6
On Thu, 11 Jan 2024 at 10:50, Jonathan Wakely <jwakely@redhat.com> wrote:
>
> On Thu, 11 Jan 2024 at 10:12, Ken Matsui <kmatsui@cs.washington.edu> wrote:
> >
> > On Thu, 11 Jan 2024 at 09:55, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
> > >    On Thu, 11 Jan 2024, 09:43 Ken Matsui, <[1]kmatsui@gcc.gnu.org> wrote:
> > >
> > >    > libstdc++-v3/ChangeLog:
> > >
> > >    >         * src/filesystem/ops-common.h (stat_type): Use using.
> > >
> > >    > Signed-off-by: Ken Matsui <[2]kmatsui@gcc.gnu.org>
> > >    > ---
> > >    >  libstdc++-v3/src/filesystem/ops-common.h | 4 ++--
> > >    >  1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> > >    > diff --git a/libstdc++-v3/src/filesystem/ops-common.h
> > >    > b/libstdc++-v3/src/filesystem/ops-common.h
> > >    > index d78a54754c2..e302d8caae6 100644
> > >    > --- a/libstdc++-v3/src/filesystem/ops-common.h
> > >    > +++ b/libstdc++-v3/src/filesystem/ops-common.h
> > >    > @@ -118,7 +118,7 @@ namespace __gnu_posix
> > >    >    inline int close(int fd)
> > >    >    { return ::_close(fd); }
> > >
> > >    > -  typedef struct ::__stat64 stat_type;
> > >    > +  using stat_type = struct ::_stat64;
> > >
> > >    You've removed an underscore, is that intentional? Has this been compiled
> > >    + tested with mingw?
> > This is totally unintentional.  I'll fix it.  I've tested it with Linux
> > and do not have a mingw environment to test it with.  Would you have any
> > suggestions on how to test it?
>
> If your linux distro has prebuilt packages for mingw-w64-g++ then it's
> pretty easy to build a new compiler from trunk. I can give you a
> simple recipe for doing it on Fedora.
>
> In the meanwhile, I can test your updated patch for you.

The patch works on both Windows (well, Wine) and Linux. OK for trunk, thanks.
  
Ken Matsui Jan. 11, 2024, 12:18 p.m. UTC | #7
On Thu, Jan 11, 2024 at 4:01 AM Jonathan Wakely <jwakely@redhat.com> wrote:
>
> On Thu, 11 Jan 2024 at 11:28, Ken Matsui <kmatsui@gcc.gnu.org> wrote:
> >
> > On Thu, 11 Jan 2024 at 10:50, Jonathan Wakely <jwakely@redhat.com> wrote:
> > > On Thu, 11 Jan 2024 at 10:12, Ken Matsui <kmatsui@cs.washington.edu> wrote:
> > > >
> > > > On Thu, 11 Jan 2024 at 09:55, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
> > > > >    On Thu, 11 Jan 2024, 09:43 Ken Matsui, <[1]kmatsui@gcc.gnu.org> wrote:
> > > > >
> > > > >    > libstdc++-v3/ChangeLog:
> > > > >
> > > > >    >         * src/filesystem/ops-common.h (stat_type): Use using.
> > > > >
> > > > >    > Signed-off-by: Ken Matsui <[2]kmatsui@gcc.gnu.org>
> > > > >    > ---
> > > > >    >  libstdc++-v3/src/filesystem/ops-common.h | 4 ++--
> > > > >    >  1 file changed, 2 insertions(+), 2 deletions(-)
> > > > >
> > > > >    > diff --git a/libstdc++-v3/src/filesystem/ops-common.h
> > > > >    > b/libstdc++-v3/src/filesystem/ops-common.h
> > > > >    > index d78a54754c2..e302d8caae6 100644
> > > > >    > --- a/libstdc++-v3/src/filesystem/ops-common.h
> > > > >    > +++ b/libstdc++-v3/src/filesystem/ops-common.h
> > > > >    > @@ -118,7 +118,7 @@ namespace __gnu_posix
> > > > >    >    inline int close(int fd)
> > > > >    >    { return ::_close(fd); }
> > > > >
> > > > >    > -  typedef struct ::__stat64 stat_type;
> > > > >    > +  using stat_type = struct ::_stat64;
> > > > >
> > > > >    You've removed an underscore, is that intentional? Has this been compiled
> > > > >    + tested with mingw?
> > > > This is totally unintentional.  I'll fix it.  I've tested it with Linux
> > > > and do not have a mingw environment to test it with.  Would you have any
> > > > suggestions on how to test it?
> > >
> > > If your linux distro has prebuilt packages for mingw-w64-g++ then it's
> > > pretty easy to build a new compiler from trunk. I can give you a
> > > simple recipe for doing it on Fedora.
> > >
> > > In the meanwhile, I can test your updated patch for you.
> > >
> >
> > I am using Ubuntu and was able to install mingw-w64-g++ with apt.  I
> > tried the following command to test the patch:
> >
> > make check-target-libstdc++-v3 ALT_CXX_UNDER_TEST="$(which x86_64-w64-mingw32-g++)" RUNTESTFLAGS='conformance.exp=filesystem/*'
> >
> > But it looks like the test is not using the mingw compiler.  Also,
> > when we want to test to build GCC with a different compiler, do we
> > need to rebuild the whole GCC again (i.e., make clean && export CXX=...
> > && make)?
>
> Don't use 'make clean' with GCC, it doesn't work well. Just remove the
> build directory.
>
> Rebuilding with CXX set to your mingw compiler will not work. That
> would try to compile gcc using the mingw compiler, producing a
> compiler that would *run* on Windows. That's not what you want. You
> need to configure gcc with --target=x86_64-w64-mingw32 to build a
> compiler that *runs* on linux, but targets Windows.
>
> Do this in a separate build directory, don't try to reuse the same
> build directory that you already have for a native linux compiler.
>
> >
> > I really appreciate your recipe if it also works for Ubuntu.  Thank you!
>
> Here's what I do on Fedora:
> https://gist.github.com/jwakely/5579a4be12a86495d47cb5519f671b12#file-mingw-build-sh
>
> To figure that command out I checked the output of x86_64-w64-mingw32-g++ -v
> That will show you the sysroot used by the Ubuntu mingw compiler, and
> the other options it was built with. Copy the relevant ones and add
> those to your configure command for your mingw cross-compiler. On my
> systems, the configure command is:
>
> ../gcc/configure --prefix=/home/jwakely/gcc/mingw --with-gnu-as
> --with-as=/usr/bin/x86_64-w64-mingw32-as --with-gnu-ld
> --with-ld=/usr/bin/x86_64-w64-mingw32-ld --without-newlib
> --disable-multilib --disable-plugin --disable-libstdcxx-pch
> --with-system-zlib --disable-nls --without-included-gettext
> --disable-win32-registry --enable-threads=posix --enable-libgomp
> --target=x86_64-w64-mingw32
> --with-sysroot=/usr/x86_64-w64-mingw32/sys-root
> target_alias=x86_64-w64-mingw32 --enable-libstdcxx-debug
> --disable-libgomp --enable-libstdcxx-backtrace
> --enable-languages=c,c++
>
> The relevant parts that I copied from the output of the system
> 'x86_64-w64-mingw32-gcc -v' are:
>
> --with-as=/usr/bin/x86_64-w64-mingw32-as
> --with-ld=/usr/bin/x86_64-w64-mingw32-ld --without-newlib
> --disable-multilib --disable-plugin
> --disable-win32-registry
> --enable-threads=posix
> --target=x86_64-w64-mingw32
> --with-sysroot=/usr/x86_64-w64-mingw32/sys-root
>
> You might want the same options, but the paths to the mingw32-as,
> mingw32-ld and the sys-root will probably be different on Ubuntu.
>
> Looking at the -v output on Ubuntu, you probably want the
> --with-headers option and --enable-fully-dynamic-string (to be
> compatible with the system's mingw compiler) and
> --enable-threads=win32 as well as the --with-as and --with-ld options.
> You'll want to add a --prefix too so that you install somewhere under
> your home directory, not under /usr
>
> You might need to experiment with configure options until you get
> something to build that works.
>
> Once I have a mingw compiler that runs on my linux box, I use this
> script to test it:
> https://gist.github.com/jwakely/5579a4be12a86495d47cb5519f671b12#file-mingw_tests-sh
>
> Like so:
> find ~/src/gcc/gcc/libstdc++-v3/testsuite/27_io/filesystem -type f
> -name '*.cc' | ~/src/gcc/scripts/mingw_tests.sh
>
> That compiles all the 27_io filesystem tests using my mingw compiler
> and then runs them using Wine.
>

Thank you so much!  I will try it!
  
Ken Matsui Jan. 11, 2024, 12:19 p.m. UTC | #8
On Thu, Jan 11, 2024 at 4:02 AM Jonathan Wakely <jwakely@redhat.com> wrote:
>
> On Thu, 11 Jan 2024 at 10:50, Jonathan Wakely <jwakely@redhat.com> wrote:
> >
> > On Thu, 11 Jan 2024 at 10:12, Ken Matsui <kmatsui@cs.washington.edu> wrote:
> > >
> > > On Thu, 11 Jan 2024 at 09:55, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
> > > >    On Thu, 11 Jan 2024, 09:43 Ken Matsui, <[1]kmatsui@gcc.gnu.org> wrote:
> > > >
> > > >    > libstdc++-v3/ChangeLog:
> > > >
> > > >    >         * src/filesystem/ops-common.h (stat_type): Use using.
> > > >
> > > >    > Signed-off-by: Ken Matsui <[2]kmatsui@gcc.gnu.org>
> > > >    > ---
> > > >    >  libstdc++-v3/src/filesystem/ops-common.h | 4 ++--
> > > >    >  1 file changed, 2 insertions(+), 2 deletions(-)
> > > >
> > > >    > diff --git a/libstdc++-v3/src/filesystem/ops-common.h
> > > >    > b/libstdc++-v3/src/filesystem/ops-common.h
> > > >    > index d78a54754c2..e302d8caae6 100644
> > > >    > --- a/libstdc++-v3/src/filesystem/ops-common.h
> > > >    > +++ b/libstdc++-v3/src/filesystem/ops-common.h
> > > >    > @@ -118,7 +118,7 @@ namespace __gnu_posix
> > > >    >    inline int close(int fd)
> > > >    >    { return ::_close(fd); }
> > > >
> > > >    > -  typedef struct ::__stat64 stat_type;
> > > >    > +  using stat_type = struct ::_stat64;
> > > >
> > > >    You've removed an underscore, is that intentional? Has this been compiled
> > > >    + tested with mingw?
> > > This is totally unintentional.  I'll fix it.  I've tested it with Linux
> > > and do not have a mingw environment to test it with.  Would you have any
> > > suggestions on how to test it?
> >
> > If your linux distro has prebuilt packages for mingw-w64-g++ then it's
> > pretty easy to build a new compiler from trunk. I can give you a
> > simple recipe for doing it on Fedora.
> >
> > In the meanwhile, I can test your updated patch for you.
>
> The patch works on both Windows (well, Wine) and Linux. OK for trunk, thanks.
>
Thank you!
  

Patch

diff --git a/libstdc++-v3/src/filesystem/ops-common.h b/libstdc++-v3/src/filesystem/ops-common.h
index d78a54754c2..e302d8caae6 100644
--- a/libstdc++-v3/src/filesystem/ops-common.h
+++ b/libstdc++-v3/src/filesystem/ops-common.h
@@ -118,7 +118,7 @@  namespace __gnu_posix
   inline int close(int fd)
   { return ::_close(fd); }
 
-  typedef struct ::__stat64 stat_type;
+  using stat_type = struct ::_stat64;
 
   inline int stat(const wchar_t* path, stat_type* buffer)
   { return ::_wstat64(path, buffer); }
@@ -184,7 +184,7 @@  namespace __gnu_posix
   using ::open;
   using ::close;
 # ifdef _GLIBCXX_HAVE_SYS_STAT_H
-  typedef struct ::stat stat_type;
+  using stat_type = struct ::stat;
   using ::stat;
 #  ifdef _GLIBCXX_USE_LSTAT
   using ::lstat;