From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by sourceware.org (Postfix) with ESMTPS id 8252D3858C3A; Thu, 2 Feb 2023 20:24:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8252D3858C3A Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1675369454; bh=YhNXxkXP2zuMgkBUltWXecOGtK1QaE1UIGorpEgG6J4=; h=X-UI-Sender-Class:Date:Subject:To:Cc:References:From:In-Reply-To; b=VEBPHYTT9mBYHAqCfH7d8sioWFaWhIhnHUODXOU7YMOsZL6lwdrC1n2y/I5XPCCoK wRqaCVdlp8HtIoOY+bF2DyZj1SpUcbIWpdaassgGzxLsoK0GVfZxN2rxruUxQ+9bYV DlgwvJwhDcxB5CKxD/2te3XmiozRJ11lRtAInCcULTxHhfPCYsMTaZdg3HYqtcJJ7q mDlLzsh2QE3lU4r9Vrq0Ebk5nH7oA9dty83wJ295JaQH/Q5GYP6K3PWtV74fvSWde2 ED6yGOMICvYgAkUdLZQO6NWYywFH21hMcRVVzNgIYKlNCR5FHSB7UiQnd7arPO1DuL BLlYbk9wCK+/g== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.178.29] ([93.207.86.114]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MeU4s-1onWQc1rue-00aXlA; Thu, 02 Feb 2023 21:24:14 +0100 Message-ID: <4f75f80f-234f-4167-13b9-bc065fcf6f0d@gmx.de> Date: Thu, 2 Feb 2023 21:24:12 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH v5 0/5] P1689R5 support To: Ben Boeckel , gcc-patches@gcc.gnu.org Cc: jason@redhat.com, nathan@acm.org, fortran@gcc.gnu.org, gcc@gcc.gnu.org, brad.king@kitware.com Newsgroups: gmane.comp.gcc.patches,gmane.comp.gcc.fortran,gmane.comp.gcc.devel References: <20230125210636.2960049-1-ben.boeckel@kitware.com> Content-Language: en-US From: Harald Anlauf In-Reply-To: <20230125210636.2960049-1-ben.boeckel@kitware.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:8E2qIryFkspz9LNw97wwtC7dhoa5EGp1m1/Dmzd69YBPfpl1aZL mTcHFJndlZpIYiPYZKrMxZKkSsGjg6sJJNGi/jOe7BYGSg1aQOYRhgzm5uurYczKRRJ/gvM mmjOi705XZazgRq7vF+SpY4XVMCfm6Cx8kavjjSvPcRg9uzCumyIXsJdHm6s1aWUx4sRQ5t brQL4Ur0Ai+virpB/QEEg== UI-OutboundReport: notjunk:1;M01:P0:NyxsIfUfl+s=;23mux/vSgASR21Uckqdpt+hqsLt xAwnYHtn48W87Q0uMO5uXqHVl5U3edQTUYt//Ss1X0gDyWeGtvR44y3tPp0TQSGW4FUmwweaN l76ZkMAZdHzUmFmBAmcy4B0x51M9hWPQF9+Q1HZkdjLhZa6JNkX5f6xBcqSW4vB3Doo/xJ3Ne g0tW9nY0IMAREOxgsCAIFED7/ar1CFooACru9MTEEjSkgKhbgYkTH81yFArDBn6/khzNEG6fa 44uAXKrFNaH4vrVqC878YiiZfaMfXiOV0OMwAYQWOSzIV5HEeZV8oBaLfMGajgZ/QDO9g8mBG mfXXpHxsFZatFJmkHV6WjNsVbuAAdXad8zIZLYPLJVrIPOM/Y7J5o0jdR45H++HsKL4KpZ7p3 3Wa3esEY98qrUb0VdX03U30B59ya/venZS1g3RmGe9iA962Oyv7npsY1bLnFJTh4uVxG7uXZo e1LmPuYga66ydiVgiur2Rx6OoJ3q6VHs0vO1gV1uIpHTIwLQ2e/qlv5aJ72FuQmXbMGX32DyS iruKvbTfwB8ucBa6F5JVS93TtuE41Cw0UnlTOthkIRm3z0oGUZsD2mzB5N4DgcB/Z4n9YwhId BNusX2LKEZgbFNtaDpthjBASOxYOJe8CxDeQJW9TxE+1SbFJaTDkFWJdO31sIZB+XxLHj5L7W aCZUNPnVxlLPIdoFD+qVnVnuQXhu8ZkX1Eb7xphVTBNOp65jWKAA42vpD8hcHsAdfP7OSsrMI GzAAU+UBMPY2AcT7mHE7ux8UFbEfS6EMkW67t5qCslwlP43Hu0tazz0a0x7EzU2vWgbMblH27 B8+M7RTf8Ph7+wRstHFEzsPIGHYvnaLYFasHGW30v48P2oODhnkb85+urjf0BevPmbNzUYnzx E7uR7CTfnFQr9j1iFoeS46uR3xkbWLVxVhrFrIGO6FXOoEqr1/7w3uD0kN4kov44BLiU+73Wt dyCuHe/GTG73wWtqvn50CAy5oQY= X-Spam-Status: No, score=-5.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,NICE_REPLY_A,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi Ben, Am 25.01.23 um 22:06 schrieb Ben Boeckel via Gcc-patches: > Hi, > > This patch series adds initial support for ISO C++'s [P1689R5][], a > format for describing C++ module requirements and provisions based on > the source code. This is required because compiling C++ with modules is > not embarrassingly parallel and need to be ordered to ensure that > `import some_module;` can be satisfied in time by making sure that any > TU with `export import some_module;` is compiled first. > > [P1689R5]: https://isocpp.org/files/papers/P1689R5.html while that paper mentions Fortran, the patch in its present version does not seem to implement anything related to Fortran and does not touch the gfortran frontend. Or am I missing anything? Otherwise, could you give an example how it would be used with Fortran? Thus I'd say that it is OK from the gfortran side. Thanks, Harald > I've also added patches to include imported module CMI files and the > module mapper file as dependencies of the compilation. I briefly looked > into adding dependencies on response files as well, but that appeared to > need some code contortions to have a `class mkdeps` available before > parsing the command line or to keep the information around until one was > made. > > I'd like feedback on the approach taken here with respect to the > user-visible flags. I'll also note that header units are not supported > at this time because the current `-E` behavior with respect to `import > ;` is to search for an appropriate `.gcm` file which is not > something such a "scan" can support. A new mode will likely need to be > created (e.g., replacing `-E` with `-fc++-module-scanning` or something) > where headers are looked up "normally" and processed only as much as > scanning requires. > > FWIW, Clang as taken an alternate approach with its `clang-scan-deps` > tool rather than using the compiler directly. > > Thanks, > > --Ben > > --- > v4 -> v5: > > - add dependency tracking for imported modules to `-MF` > - add dependency tracking for static module mapper files given to > `-fmodule-mapper=3D` > > v3 -> v4: > > - add missing spaces between function names and arguments > > v2 -> v3: > > - changelog entries moved to commit messages > - documentation updated/added in the UTF-8 routine editing > > v1 -> v2: > > - removal of the `deps_write(extra)` parameter to option-checking where > ndeeded > - default parameter of `cpp_finish(fdeps_stream =3D NULL)` > - unification of libcpp UTF-8 validity functions from v1 > - test cases for flag parsing states (depflags-*) and p1689 output > (p1689-*) > > Ben Boeckel (5): > libcpp: reject codepoints above 0x10FFFF > libcpp: add a function to determine UTF-8 validity of a C string > p1689r5: initial support > c++modules: report imported CMI files as dependencies > c++modules: report module mapper files as a dependency > > gcc/c-family/c-opts.cc | 40 +++- > gcc/c-family/c.opt | 12 + > gcc/cp/mapper-client.cc | 4 + > gcc/cp/mapper-client.h | 1 + > gcc/cp/module.cc | 23 +- > gcc/doc/invoke.texi | 15 ++ > gcc/testsuite/g++.dg/modules/depflags-f-MD.C | 2 + > gcc/testsuite/g++.dg/modules/depflags-f.C | 1 + > gcc/testsuite/g++.dg/modules/depflags-fi.C | 3 + > gcc/testsuite/g++.dg/modules/depflags-fj-MD.C | 3 + > gcc/testsuite/g++.dg/modules/depflags-fj.C | 4 + > .../g++.dg/modules/depflags-fjo-MD.C | 4 + > gcc/testsuite/g++.dg/modules/depflags-fjo.C | 5 + > gcc/testsuite/g++.dg/modules/depflags-fo-MD.C | 3 + > gcc/testsuite/g++.dg/modules/depflags-fo.C | 4 + > gcc/testsuite/g++.dg/modules/depflags-j-MD.C | 2 + > gcc/testsuite/g++.dg/modules/depflags-j.C | 3 + > gcc/testsuite/g++.dg/modules/depflags-jo-MD.C | 3 + > gcc/testsuite/g++.dg/modules/depflags-jo.C | 4 + > gcc/testsuite/g++.dg/modules/depflags-o-MD.C | 2 + > gcc/testsuite/g++.dg/modules/depflags-o.C | 3 + > gcc/testsuite/g++.dg/modules/modules.exp | 1 + > gcc/testsuite/g++.dg/modules/p1689-1.C | 18 ++ > gcc/testsuite/g++.dg/modules/p1689-1.exp.json | 27 +++ > gcc/testsuite/g++.dg/modules/p1689-2.C | 16 ++ > gcc/testsuite/g++.dg/modules/p1689-2.exp.json | 16 ++ > gcc/testsuite/g++.dg/modules/p1689-3.C | 14 ++ > gcc/testsuite/g++.dg/modules/p1689-3.exp.json | 16 ++ > gcc/testsuite/g++.dg/modules/p1689-4.C | 14 ++ > gcc/testsuite/g++.dg/modules/p1689-4.exp.json | 14 ++ > gcc/testsuite/g++.dg/modules/p1689-5.C | 14 ++ > gcc/testsuite/g++.dg/modules/p1689-5.exp.json | 14 ++ > gcc/testsuite/g++.dg/modules/test-p1689.py | 222 ++++++++++++++++++ > gcc/testsuite/lib/modules.exp | 71 ++++++ > libcpp/charset.cc | 28 ++- > libcpp/include/cpplib.h | 12 +- > libcpp/include/mkdeps.h | 17 +- > libcpp/init.cc | 13 +- > libcpp/internal.h | 2 + > libcpp/mkdeps.cc | 149 +++++++++++- > 40 files changed, 789 insertions(+), 30 deletions(-) > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-f-MD.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-f.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-fi.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-fj-MD.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-fj.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-fjo-MD.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-fjo.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-fo-MD.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-fo.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-j-MD.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-j.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-jo-MD.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-jo.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-o-MD.C > create mode 100644 gcc/testsuite/g++.dg/modules/depflags-o.C > create mode 100644 gcc/testsuite/g++.dg/modules/p1689-1.C > create mode 100644 gcc/testsuite/g++.dg/modules/p1689-1.exp.json > create mode 100644 gcc/testsuite/g++.dg/modules/p1689-2.C > create mode 100644 gcc/testsuite/g++.dg/modules/p1689-2.exp.json > create mode 100644 gcc/testsuite/g++.dg/modules/p1689-3.C > create mode 100644 gcc/testsuite/g++.dg/modules/p1689-3.exp.json > create mode 100644 gcc/testsuite/g++.dg/modules/p1689-4.C > create mode 100644 gcc/testsuite/g++.dg/modules/p1689-4.exp.json > create mode 100644 gcc/testsuite/g++.dg/modules/p1689-5.C > create mode 100644 gcc/testsuite/g++.dg/modules/p1689-5.exp.json > create mode 100644 gcc/testsuite/g++.dg/modules/test-p1689.py > create mode 100644 gcc/testsuite/lib/modules.exp > > > base-commit: 9d4c00cdaccc3decd07740e817387ce844ef3ac9