[llvm-bugs] [Bug 51307] New: Compiler-provided inttypes.h is not recognized as belonging to any module

via llvm-bugs llvm-bugs at lists.llvm.org
Mon Aug 2 10:36:42 PDT 2021


https://bugs.llvm.org/show_bug.cgi?id=51307

            Bug ID: 51307
           Summary: Compiler-provided inttypes.h is not recognized as
                    belonging to any module
           Product: clang
           Version: trunk
          Hardware: Macintosh
                OS: MacOS X
            Status: NEW
          Severity: normal
          Priority: P
         Component: Modules
          Assignee: unassignedclangbugs at nondot.org
          Reporter: mark+llvm.org at bdash.net.nz
                CC: dgregor at apple.com, llvm-bugs at lists.llvm.org,
                    richard-llvm at metafoo.co.uk

Attempting to compile a module containing a header that imports `inttypes.h`
with `-fmodules-strict-decluse` enabled results in an error despite providing
Clang with the Darwin module that provides `inttypes.h`:

```
While building module 'test':
In file included from <module-includes>:1:
./test.h:1:10: error: module test does not depend on a module exporting
'inttypes.h'
#include <inttypes.h>
         ^
1 error generated.
```

Clang finds `inttypes.h` within the compiler-provided headers, but does not
consider the header to be built-in. The header is not present in the module map
alongside the compiler-provided headers so there is no other module to depend
on to access the header when using `-fmodules-strict-decluse`.

Most other compiler-provided headers are present in either the module map[1] or
as built-in headers that are treated as belonging to the module that provides
the header they're wrapping[2]. `inttypes.h` and a few other headers are absent
from both. `inttypes.h` appears like it should be treated as a built-in header.
It's not clear how the other headers should be handled.

Platform-agnostic headers that appear to be missing from both the module map
and built-in header list:

inttypes.h
builtins.h
stdnoreturn.h
varargs.h
vadefs.h


There are a number of platform-specific headers that are also absent from the
module map.

[1]:
https://github.com/llvm/llvm-project/blob/main/clang/lib/Headers/module.modulemap
[2]:
https://github.com/llvm/llvm-project/blob/07548b83247e5c266e209ac4cdc2ab7a3231155d/clang/lib/Lex/ModuleMap.cpp#L372-L389


Steps to reproduce:

Requires macOS with Xcode 12.x installed. Tested with both Clang from Xcode
12.5.1 (Apple clang version 12.0.5 (clang-1205.0.22.11)) and from main
(bdf4c7b738ee3dfbcd468ec347beec58b6e43a5a).

# Precompile _Builtin_stddef_max_align_t
clang -cc1 -fsyntax-only -std=gnu11 \
    -resource-dir $(xcode-select
-p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/* \
    -isysroot $(xcrun --show-sdk-path) \
    -internal-isystem $(xcode-select
-p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/*/include \
    -internal-externc-isystem $(xcrun --show-sdk-path)/usr/include \
    -fgnuc-version=4.2.1 -fmodules \
    -emit-module \
    -fmodule-name=_Builtin_stddef_max_align_t \
    $(xcode-select
-p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/*/include/module.modulemap
\
    -o _Builtin_stddef_max_align_t.pcm                                          

# Precompile Darwin
clang -cc1 -fsyntax-only -std=gnu11 \
    -resource-dir $(xcode-select
-p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/* \
    -isysroot $(xcrun --show-sdk-path) \
    -internal-isystem $(xcode-select
-p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/*/include \
    -internal-externc-isystem $(xcrun --show-sdk-path)/usr/include \
    -fgnuc-version=4.2.1 -fmodules \
     -emit-module \
    -fmodule-map-file=$(echo $(xcode-select
-p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/*/include/module.modulemap)
\
    -fmodule-file=_Builtin_stddef_max_align_t=_Builtin_stddef_max_align_t.pcm \
    -fmodule-name=Darwin \
    $(xcrun --show-sdk-path)/usr/include/module.modulemap \
    -o Darwin.pcm

# Attempt to precompile the module whose header imports inttypes.h
echo "#include <inttypes.h>" > test.h
echo -e "module test {\n use Darwin\n header \"test.h\"\n export *\n}" >
test.modulemap

clang -cc1 -fsyntax-only -std=gnu11 \
    -resource-dir $(xcode-select
-p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/* \
    -isysroot $(xcrun --show-sdk-path) \
    -internal-isystem $(xcode-select
-p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/*/include \
    -internal-externc-isystem $(xcrun --show-sdk-path)/usr/include \
    -fgnuc-version=4.2.1 -fmodules \
    -emit-module \
    -fmodules-strict-decluse \
    -fmodule-map-file=$(echo $(xcode-select
-p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/*/include/module.modulemap)
\
    -fmodule-file=_Builtin_stddef_max_align_t=_Builtin_stddef_max_align_t.pcm \
    -fmodule-map-file=$(xcrun --show-sdk-path)/usr/include/module.modulemap \
    -fmodule-file=Darwin=Darwin.pcm \
    -fmodule-name=test \
    test.modulemap -o test.pcm

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20210802/1c313afe/attachment-0001.html>


More information about the llvm-bugs mailing list