Description
The Swift compiler testsuite generates a header for C++ interoperability and checks it using the NDK clang++ for Android, but it has been broken since NDK 29, though hidden behind the earlier #2230 issue till now.
Reducing it, I get the following simple header and command:
> cat free.h
#include <cstring>
#include <cstdint>
#include <stdlib.h>
void opaqueFree(void *_Nonnull p) noexcept {
free(p);
}
# works fine with NDK 28
> /home/finagolfin/android-ndk-r28c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -target aarch64-unknown-linux-android23 -isystem /home/finagolfin/android-ndk-r28c/toolchains/llvm/prebuilt/linux-x86_64/sysroot -x c++-header -c free.h -fmodules -fcxx-modules
# breaks with NDK 30 beta 2
> /home/finagolfin/android-ndk-r30-beta2/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -target aarch64-unknown-linux-android23 -isystem /home/finagolfin/android-ndk-r30-beta2/toolchains/llvm/prebuilt/linux-x86_64/sysroot -x c++-header -c free.h -fmodules -fcxx-modules
free.h:5:5: error: missing '#include <malloc.h>'; 'free' must be declared before it is used
5 | free(p);
| ^
/home/finagolfin/android-ndk-r30-beta2/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/include/malloc.h:108:6: note: declaration here is not visible
108 | void free(void* _Nullable __ptr);
| ^
1 error generated.
I applied the fix for #2230 to NDK 29 and see the same error with that NDK too. Removing the -fmodules flag or the first <cstring> include gets it to not error again.
Since this isn't reproducible with other libc++ platforms, it is most likely a C++ modularity problem caused by some incompatibility between libc++ changes after NDK 28 and the Bionic headers in the NDK.
I am using a supported NDK
Affected versions
r29, r30
Description
The Swift compiler testsuite generates a header for C++ interoperability and checks it using the NDK clang++ for Android, but it has been broken since NDK 29, though hidden behind the earlier #2230 issue till now.
Reducing it, I get the following simple header and command:
I applied the fix for #2230 to NDK 29 and see the same error with that NDK too. Removing the
-fmodulesflag or the first<cstring>include gets it to not error again.Since this isn't reproducible with other libc++ platforms, it is most likely a C++ modularity problem caused by some incompatibility between libc++ changes after NDK 28 and the Bionic headers in the NDK.
I am using a supported NDK
Affected versions
r29, r30