-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Compiler-provided inttypes.h is not recognized as belonging to any module #50649
Comments
https://reviews.llvm.org/D107296 addresses the inttypes.h case. I'm less sure what to do about the other compiler-provided headers that are also absent from the module map and not treated as built-in headers. |
Possible fix with a test case |
The test case looks fine to me, though, as you note, the supporting files do cause failures in other test cases. |
Possible fix for resource directory injection
The error is
and I have experimented with fixing it (patch attached) but don't have a test case yet and due to
The most helpful path forward for me is if you help to create a test case for the resource directory injection. And then we can knock down the entire domino chain of fixes. But if you are not interested in this task, that is totally OK and understandable. [1] llvm-project/clang/lib/Lex/ModuleMap.cpp Lines 308 to 311 in 77b435a
[2] llvm-project/clang/lib/Lex/ModuleMap.cpp Lines 1158 to 1164 in 77b435a
|
I'm sorry, but due to other obligations I'm not able to spend time on the related issue your test uncovered. |
Extended Description
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 providesinttypes.h
: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 map1 or as built-in headers that are treated as belonging to the module that provides the header they're wrapping2.
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.
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 (bdf4c7b).
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
The text was updated successfully, but these errors were encountered: