public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jonathan Wakely <jwakely@redhat.com>
To: Christophe Lyon <christophe.lyon@linaro.org>
Cc: libstdc++@gcc.gnu.org, gcc Patches <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH 2/2] PR libstdc++/86756 Move rest of std::filesystem to libstdc++.so
Date: Wed, 09 Jan 2019 17:02:00 -0000	[thread overview]
Message-ID: <20190109170214.GA15627@redhat.com> (raw)
In-Reply-To: <CAKdteObTL7zroG1g8HhxwUUVyWzJjPUf9YpjVvKeN0qu37HkXA@mail.gmail.com>

On 09/01/19 13:53 +0100, Christophe Lyon wrote:
>On Wed, 9 Jan 2019 at 11:11, Jonathan Wakely <jwakely@redhat.com> wrote:
>>
>> On 09/01/19 10:09 +0000, Jonathan Wakely wrote:
>> >On 08/01/19 11:13 +0100, Christophe Lyon wrote:
>> >>On Mon, 7 Jan 2019 at 15:14, Christophe Lyon <christophe.lyon@linaro.org> wrote:
>> >>>
>> >>>On Mon, 7 Jan 2019 at 13:39, Jonathan Wakely <jwakely@redhat.com> wrote:
>> >>>>
>> >>>> On 07/01/19 09:48 +0000, Jonathan Wakely wrote:
>> >>>> >On 07/01/19 10:24 +0100, Christophe Lyon wrote:
>> >>>> >>Hi Jonathan
>> >>>> >>
>> >>>> >>On Sun, 6 Jan 2019 at 23:37, Jonathan Wakely <jwakely@redhat.com> wrote:
>> >>>> >>>
>> >>>> >>>Move std::filesystem directory iterators and operations from
>> >>>> >>>libstdc++fs.a to main libstdc++ library. These components have many
>> >>>> >>>dependencies on OS support, which is not available on all targets. Some
>> >>>> >>>additional autoconf checks and conditional compilation is needed to
>> >>>> >>>ensure the files will build for all targets. Previously this code was
>> >>>> >>>not compiled without --enable-libstdcxx-filesystem-ts but the C++17
>> >>>> >>>components should be available for all hosted builds.
>> >>>> >>>
>> >>>> >>>The tests for these components no longer need to link to libstdc++fs.a,
>> >>>> >>>but are not expected to pass on all targets. To avoid numerous failures
>> >>>> >>>on targets which are not expected to pass the tests (due to missing OS
>> >>>> >>>functionality) leave the dg-require-filesystem-ts directives in place
>> >>>> >>>for now. This will ensure the tests only run for builds where the
>> >>>> >>>filesystem-ts library is built, which presumably means some level of OS
>> >>>> >>>support is present.
>> >>>> >>>
>> >>>> >>>
>> >>>> >>>Tested x86_64-linux (old/new string ABIs, 32/64 bit), x86_64-w64-mingw32.
>> >>>> >>>
>> >>>> >>>Committed to trunk.
>> >>>> >>>
>> >>>> >>
>> >>>> >>After this commit (r267616), I've noticed build failures for my
>> >>>> >>newlib-based toolchains:
>> >>>> >>aarch64-elf, arm-eabi:
>> >>>> >>
>> >>>> >>In file included from
>> >>>> >>/tmp/5241593_7.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libstdc++-v3/src/c++17/fs_ops.cc:57:
>> >>>> >>/tmp/5241593_7.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libstdc++-v3/src/c++17/../filesystem/ops-common.h:142:11:
>> >>>> >>error: '::truncate' has not been declared
>> >>>> >> 142 |   using ::truncate;
>> >>>> >>     |           ^~~~~~~~
>> >>>> >>/tmp/5241593_7.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libstdc++-v3/src/c++17/fs_ops.cc:
>> >>>> >>In function 'void std::filesystem::resize_file(const
>> >>>> >>std::filesystem::__cxx11::path&, uintmax_t, std::error_code&)':
>> >>>> >>/tmp/5241593_7.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/libstdc++-v3/src/c++17/fs_ops.cc:1274:19:
>> >>>> >>error: 'truncate' is not a member of 'posix'
>> >>>> >>1274 |   else if (posix::truncate(p.c_str(), size))
>> >>>> >>     |                   ^~~~~~~~
>> >>>> >>make[5]: *** [fs_ops.lo] Error 1
>> >>>> >>
>> >>>> >>I'm not sure if there's an obvious fix? Note that I'm using a rather
>> >>>> >>old newlib version, if that matters.
>> >>>> >
>> >>>> >That's probably the reason, as I didn't see this in my tests with
>> >>>> >newlib builds.
>> >>>> >
>> >>>> >The fix is to add yet another autoconf check and guard the uses of
>> >>>> >truncate with a _GLIBCXX_USE_TRUNCATE macro. I'll do that now ...
>> >>>>
>> >>>>
>> >>>> Should be fixed with this patch, committed to trunk as r267647.
>> >>>>
>> >>>
>> >>>Yes, it works. Thanks!
>> >>>
>> >>
>> >>Hi Jonathan,
>> >>
>> >>So... this was a confirmation that the GCC build succeeded, not that
>> >>the tests pass :)
>> >>
>> >>And there are actually a couple new errors with my newlib-based toolchains:
>> >>FAIL: 27_io/filesystem/operations/all.cc (test for excess errors)
>> >>FAIL: 27_io/filesystem/operations/resize_file.cc (test for excess errors)
>> >>FAIL: 27_io/filesystem/path/generation/normal2.cc (test for excess errors)
>> >>which are also UNRESOLVED, because of link-time undefined reference to `chdir',
>> >>chmod, mkdir, pathconf and getcwd.
>> >
>> >Ah, I was assuming if <unistd.h> is present, then those basic
>> >functions will be present. More autoconf checks needed, I guess.
>> >That isn't hard to do, just tedious.
>> >
>> >>On aarch64, I'm seeing an addtional:
>> >>FAIL: 27_io/filesystem/path/compare/strings.cc execution test
>> >>because:
>> >>/libstdc++-v3/testsuite/27_io/filesystem/path/compare/strings.cc:39:
>> >>void test01(): Assertion 'p.compare(p0) == p.compare(s0)' failed.
>> >
>> >Odd, I don't know why that would be target-specific. It's probably
>> >just latent on other targets. I'll try to reproduce it on my aarch64
>> >system, but it will take a while to build current trunk.
>> >
>> >If you have time, could you please apply this patch, re-run that test
>>
>> *This* patch:
>>
>> --- a/libstdc++-v3/testsuite/27_io/filesystem/path/compare/strings.cc
>> +++ b/libstdc++-v3/testsuite/27_io/filesystem/path/compare/strings.cc
>> @@ -36,6 +36,7 @@ test01()
>>      path p(s);
>>      VERIFY( p.compare(s) == 0 );
>>      VERIFY( p.compare(s.c_str()) == 0 );
>> +    __builtin_printf("Comparing %s as path:%d as string:%d\n", s.c_str(), p.compare(p0), p.compare(s0));
>>      VERIFY( p.compare(p0) == p.compare(s0) );
>>      VERIFY( p.compare(p0) == p.compare(s0.c_str()) );
>>    }
>>
>>
>>
>>
>> >(cd $target/libstdc++-v3 && make check
>> >RUNTESTFLAGS=conformance.exp=*/path/compare/strings/cc) and send me
>> >the output from the $target/libstdc++-v3/testsuite/libstdc++.log file?
>> >
>> >On x86_64 I get:
>> >
>> >Comparing  as path:-1 as string:-1
>> >Comparing / as path:-1 as string:-1
>> >Comparing // as path:-1 as string:-1
>> >Comparing /. as path:-51 as string:-51
>> >Comparing /./ as path:-51 as string:-51
>> >Comparing /a as path:-2 as string:-2
>> >Comparing /a/ as path:-1 as string:-1
>> >Comparing /a// as path:-1 as string:-1
>> >Comparing /a/b/c/d as path:1 as string:1
>> >Comparing /a//b as path:1 as string:1
>> >Comparing a as path:-1 as string:-1
>> >Comparing a/b as path:-1 as string:-1
>> >Comparing a/b/ as path:-1 as string:-1
>> >Comparing a/b/c as path:-1 as string:-1
>> >Comparing a/b/c.d as path:-1 as string:-1
>> >Comparing a/b/.. as path:-1 as string:-1
>> >Comparing a/b/c. as path:-1 as string:-1
>> >Comparing a/b/.c as path:-1 as string:-1
>> >PASS: 27_io/filesystem/path/compare/strings.cc execution test
>> >
>
>Here is what I have on aarch64-none-elf:
>Comparing  as path:-1 as string:-1^M
>Comparing / as path:-1 as string:-1^M
>Comparing // as path:-1 as string:-1^M
>Comparing /. as path:-102 as string:-51^M

Ah, that should help me fix it - thanks.


>/libstdc++-v3/testsuite/27_io/filesystem/path/compare/strings.cc:40:
>void test01(): Assertion 'p.compare(p0) == p.compare(s0)' failed.^M
>^M
>*** EXIT code 4242^M
>emu: host signal 6^M
>FAIL: 27_io/filesystem/path/compare/strings.cc execution test

  reply	other threads:[~2019-01-09 17:02 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-06 22:35 [PATCH 1/2] PR libstdc++/86756 add std::filesystem::path " Jonathan Wakely
2019-01-06 22:36 ` [PATCH 2/2] PR libstdc++/86756 Move rest of std::filesystem " Jonathan Wakely
2019-01-07  9:25   ` Christophe Lyon
2019-01-07  9:48     ` Jonathan Wakely
2019-01-07 12:39       ` Jonathan Wakely
2019-01-07 14:14         ` Christophe Lyon
2019-01-08 10:14           ` Christophe Lyon
2019-01-09 10:09             ` Jonathan Wakely
2019-01-09 10:11               ` Jonathan Wakely
2019-01-09 12:54                 ` Christophe Lyon
2019-01-09 17:02                   ` Jonathan Wakely [this message]
2019-01-23 16:01                   ` Jonathan Wakely
2019-01-23 16:05                     ` Christophe Lyon
2019-01-24 13:32                       ` Jonathan Wakely
2019-01-07 12:46 ` [PATCH 3/2] Update documentation for C++17 filesystem library Jonathan Wakely

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190109170214.GA15627@redhat.com \
    --to=jwakely@redhat.com \
    --cc=christophe.lyon@linaro.org \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=libstdc++@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).