On Mon, 21 Oct 2024 at 17:51, Jason Merrill <ja...@redhat.com> wrote: > > On 10/18/24 11:21 AM, Patrick Palka wrote: > > On Fri, 18 Oct 2024, Jason Merrill wrote: > >> > >> Is it useful for std.cc to live in a subdirectory of c++23 as in this > >> patch, or > >> should it be in c++23 itself? Or elsewhere? > > > > IIUC the src/ subdirectory is for stuff that gets compiled into the .so > > which isn't the case here. > > Sure, though I thought that might change once we consider it ABI-stable. > > > And if we want to support the std module in > > C++20 mode as an extension, a c++23 subdirectory might not be ideal either. > > My impression has been that the subdirectories are just for organization?
Yes, and to group all the files which are built with -std=gnu++NN together so that the option is set once by the directory's Makefile (although we have a couple of cases where we override the directory's -std for specific files). > > > Maybe libstdc++-v3/modules/ then? > > Let's see what Jonathan thinks. I'm not sure we need a new directory (with Makefile.{in,am} etc.) for just two files. If there's a suggestion to install them to $(gxx_include_dir)/module then maybe libstdc++-v3/include/module/ makes sense? And install them via rules in libstdc++-v3/include/Makefile.am? > > On 10/18/24 12:04 PM, Maciej Cencora wrote: > > On Fri, 18 Oct 2024, Jason Merrill wrote: > >> stdc++.h also doesn't include the eternally deprecated <strstream>. There > >> are some other deprecated facilities that I notice are included: <codecvt> > >> and float_denorm_style, at least. It would be nice for L{E,}WG to clarify > >> whether module std is intended to include interfaces that were deprecated > >> in > >> C++23, since ancient code isn't going to be relying on module std. > > > > Per P2465r3 Standard Library Modules std and std.compat: > >> Are deprecated features provided by the Standard Library modules? > >> Yes. This is implied by the normative wording. > > Ah, thanks. > > > While doing some light testing, one thing that immediately popped up is > > that we need to export __normal_iterator related operators from __gnu_cxx > > namespace. > > Otherwise it is impossible to even use std::vector in range-based for loops. > > Ah, good catch. > > > But I think a better solution (than exporting such impl details) is to make > > these operators hidden friends. > > That sounds right to me, and mechanically duplicating the declarations > as friends seems to work (as attached). I think I'll just move them into the body to be hidden friends. The operators for __normal_iterator aren't declared explicitly in the standard, so we aren't required to declare them at namespace scope. Making them hidden friends should be fine. > > > Another thing - P2465r3 mentions only lerp, byte and related ops as special > > w.r.t skipping export from global namespace in std.compat, but for some > > reason Microsoft's impl treats 3-arg hypot as special as well. > > Curious. By not declaring it at all when building the module? I don't > want to mess with that if the standard doesn't require it. That's https://cplusplus.github.io/LWG/issue3799 The 3-arg std::hypot did not come from C, so is in exactly the same situation as lerp. > > On 10/18/24 12:35 PM, Iain Sandoe wrote: > >> Currently this installs the sources under $(pkgdata), i.e. > >> /usr/share/libstdc++/modules. It could also make sense to install them > >> under $(gxx_include_dir), i.e. /usr/include/c++/15/modules. And/or the > >> subdirectory could be "miu" (module interface unit) instead of "modules". > > > I’d think that $(gxx_include_dir)/modules would be a good place, since that > > allows us to tie it to the GCC version in side-by-side installs. > > Presumably that > > might also simplify finding the relevant sources? > > With side-by-side installs presumably $(prefix) would be different > between them as well or the libraries would also clash? > > But I'm certainly not opposed to putting them under the include dir, > that had been my inclination for a while, and with my > -fsearch-include-path patch would make a simple compile easier without > needing to teach the driver to parse the json. > > > I guess it could be just “module”, but my vote would be for an obvious name > > like that or “std-module” > > Indeed singular "module" would be more consistent with "include" and "lib". As long as we're confident there will never be a <module> header that needs to live at $(gxx_include_dir)/module, but I think that's a safe bet. > On 10/19/24 8:08 AM, Florian Weimer wrote: > >> The build system can find this file with > >> gcc -print-file-name=libstdc++.modules.json > > > > Is it possible to use specs file to redirect this to a different file > > based on C++ compiler flags, should that become necessary? > > Well, the compiler looks up a -print-file-name argument on its library > search path, which can be added to with -B. But this is really an > initial interface pending something more stable. > > Jason