From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x62b.google.com (mail-pl1-x62b.google.com [IPv6:2607:f8b0:4864:20::62b]) by sourceware.org (Postfix) with ESMTPS id D6A363858C5E; Fri, 3 Feb 2023 04:07:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D6A363858C5E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-x62b.google.com with SMTP id m2so4076031plg.4; Thu, 02 Feb 2023 20:07:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=JIzr7erSxO0n4pUMx5rOfzkABxmCnslQCQYBfwS9C9Q=; b=hostMFMG9SdNuctqv+Db/gG4Kc0S3a9pTfOLNA8SR9KOcinJlBpfewIWJQjQHFD21Y io3g2AWzk8UBnfFRupkk5FFpKyFIwo108vr5ZBuf0Ma3lRekcSJ9TZWym2/IELfXCc08 c+CpEqLtiyGIFTiSicRVDvMTHSMxxFSoPRAJChF9PSOef+x0gAEl231wwa9hlDtGOyMB Ice9ufBzcrboQf2MZ0cw72Rluw3pRP0t9I2sMYEMwTh/DWHLSJo2dUgbeeVXBL2gcZbu sPBJwDYjfASbMRLKBeDqtUOIbMgxa1+Yu62ICU6gyIOS4P3USCMcwiEx+BFH5iNNUDyu TtRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=JIzr7erSxO0n4pUMx5rOfzkABxmCnslQCQYBfwS9C9Q=; b=Wbvx9VZcrwvFXBmfN6gcaEa6eBLFzmWQMxVbV1zeEOkK1zeBsWozbo39Z7eC+FOByv LU5OrqZvoSusia3xkCfh5CUiPrcoU6JPwgTIQ2EznPj0UxsSddcjEX/Bkj4St1476cDz 56stm9a1CwiaYBFtHjZunZARRSuD07O30JL0Fnr/a+a441JXKTgb7OxIxzuATIxO3imZ VIWa0tRr3eU3x9eajIKtiS1G1QV9h+M3cfBEM8xBQRIENtNeKKF8dSgkoEM6zTbIRa93 ksWUmOv5czKBIAVtloq33sO7Gv6D6W0P2+gqdy7IliQpvqgDea9L4y0OXA3VGvxENlOP 0PUg== X-Gm-Message-State: AO0yUKVbwvPyjhSy3MfD8+74YHeRpAA9Gk4r6Nb099lOoqLSsXUxnz0R xQRN6zF9j7dXnCV1afmieK/SCle2EVyB55XQ5NM= X-Google-Smtp-Source: AK7set+uAcA1EXj5I7Vgr7krSWGebMDkiH5MBYbYvEbtFUZ3O5VZ7P4PQB4nLhJ2dZSndy39c4lZzKpoIrm8AQii0ho= X-Received: by 2002:a17:90a:4ca7:b0:230:7b6c:6e64 with SMTP id k36-20020a17090a4ca700b002307b6c6e64mr48052pjh.135.1675397275944; Thu, 02 Feb 2023 20:07:55 -0800 (PST) MIME-Version: 1.0 References: <20230125210636.2960049-1-ben.boeckel@kitware.com> In-Reply-To: <20230125210636.2960049-1-ben.boeckel@kitware.com> From: Andrew Pinski Date: Thu, 2 Feb 2023 20:07:43 -0800 Message-ID: Subject: Re: [PATCH v5 0/5] P1689R5 support To: Ben Boeckel Cc: gcc-patches@gcc.gnu.org, jason@redhat.com, nathan@acm.org, fortran@gcc.gnu.org, gcc@gcc.gnu.org, brad.king@kitware.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,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: On Wed, Jan 25, 2023 at 1:07 PM Ben Boeckel via Fortran wrote: > > 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. I like how folks are complaining that GCC outputs POSIX makefile syntax from GCC's dependency files which are supposed to be in POSIX Makefile syntax. It seems like rather the build tools are people like to use are not understanding POSIX makefile syntax any more rather. Also I am not a fan of json, it is too verbose for no use. Maybe it is time to go back to standardizing a new POSIX makefile syntax rather than changing C++ here. Thanks, Andrew Pinski > > [P1689R5]: https://isocpp.org/files/papers/P1689R5.html > > 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=` > > 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 = 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 > -- > 2.39.0 >