[v2,2/2] libstdc++: Use using instead of typedef in opts-common.h
Checks
Commit Message
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
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
>
>
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.
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!
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.
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.
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!
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!
@@ -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;