android / ndk

The Android Native Development Kit
1.97k stars 255 forks source link

[BUG] Crash in compiler after enabling some diagnostic options #1620

Closed vishniakou closed 2 years ago

vishniakou commented 2 years ago

Hi! I made some modifications to my Android tree, and I'm hitting the following error:

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/InputDispatcher-893887.cpp
clang++: note: diagnostic msg: /tmp/InputDispatcher-893887.sh
clang++: note: diagnostic msg: 

********************
fatal error: error in backend: unsupported architecture
PLEASE submit a bug report to https://github.com/android-ndk/ndk/issues and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.  Program arguments: prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real -c -mthumb -Os -fomit-frame-pointer -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith -Wunreachable-code-loop-incr
ement -no-canonical-prefixes -DNDEBUG -UDEBUG -fno-exceptions -Wno-multichar -O2 -g -fdebug-info-for-profiling -fno-strict-aliasing -Werror=date-time -Werror=pragma-pack -Werror=pragma-pack-suspicious-include -Werror=string-plus-in
t -Werror=unreachable-code-loop-increment -D__compiler_offsetof=__builtin_offsetof -faddrsig -fcommon -Werror=int-conversion -fexperimental-new-pass-manager -Wno-reserved-id-macro -fcolor-diagnostics -Wno-sign-compare -Wno-defaulte
d-function-deleted -Wno-inconsistent-missing-override -Wno-c99-designator -Wno-gnu-folding-constant -Wunguarded-availability -D__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__ -fdebug-prefix-map=/proc/self/cwd= -ftrivial-auto-var-init=zero
 -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang -ffunction-sections -fdata-sections -fno-short-enums -funwind-tables -fstack-protector-strong -Wa,--noexecstack -D_FORTIFY_SOURCE=2 -Wstrict-aliasing=2 -Werr
or=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Werror=format-security -nostdlibinc -msoft-float -march=armv8-a -mfloat-abi=softfp -mfpu=neon-fp-armv8 -target armv7a-linux-androideabi10000 -Bprebuilt
s/gcc/linux-x86/arm/arm-linux-androideabi-4.9/arm-linux-androideabi/bin -DANDROID_STRICT -fPIC -Wsign-promo -Wimplicit-fallthrough -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -Wno-gnu-include-next -fvisibility-inlines-hidden -Iframe
works/native/services/inputflinger/dispatcher -D__LIBSTATSSOCKET_API__=10000 -D__LIBSTATSPULL_API__=10000 -D__LIBC_API__=10000 -D__LIBM_API__=10000 -D__LIBDL_API__=10000 -Iframeworks/native/services/inputflinger/dispatcher/include 
-Iexternal/libcxx/include -Iexternal/libcxxabi/include -Isystem/libbase/include -Iexternal/fmtlib/include -Iexternal/boringssl/src/include -Isystem/core/libcutils/include -Isystem/core/libprocessgroup/include -Ilibnativehelper/incl
ude_jni -Iframeworks/native/libs/binder/include -Iframeworks/native/libs/binder/ndk/include_cpp -Isystem/core/libutils/include -Isystem/unwinding/libbacktrace/include -Isystem/logging/liblog/include -Isystem/core/libsystem/include 
-Iout/soong/.intermediates/frameworks/native/libs/binder/libbinder/android_arm_armv8-a_shared/gen/aidl -Iout/soong/.intermediates/frameworks/native/libs/gui/libgui_window_info_static/android_arm_armv8-a_static/gen/aidl -Iframeworks
/native/libs/ui/include -Iframeworks/native/libs/ui/include_mock -Iframeworks/native/libs/ui/include_private -Iframeworks/native/libs/ui/include_types -Iframeworks/native/libs/arect/include -Iframeworks/native/libs/math/include -Io
ut/soong/.intermediates/frameworks/native/libs/input/libinput/android_arm_armv8-a_static/gen/aidl -Iout/soong/.intermediates/frameworks/native/libs/input/libinput/android_arm_armv8-a_shared/gen/aidl -Ipackages/modules/StatsD/lib/li
bkll/include -Iexternal/protobuf/src -Iout/soong/.intermediates/packages/modules/StatsD/lib/libkll/proto/libkll-protos/android_arm_armv8-a_static/gen/proto -Ipackages/modules/StatsD/lib/libstatssocket/include -Ipackages/modules/Sta
tsD/lib/libstatspull/include -Iout/soong/.intermediates/frameworks/proto_logging/stats/stats_log_api_gen/statslog.h/gen -Iframeworks/native/libs/nativebase/include -Iframeworks/native/libs/nativewindow/include -Ihardware/libhardwar
e/include -Isystem/media/audio/include -Ipackages/modules/Bluetooth/system/types -Iframeworks/native/libs/binder/ndk/include_ndk -Iframeworks/native/libs/binder/ndk/include_platform -Iout/soong/.intermediates/hardware/interfaces/co
mmon/aidl/android.hardware.common-V2-ndk-source/gen/include -Iout/soong/.intermediates/hardware/interfaces/graphics/common/aidl/android.hardware.graphics.common-V3-ndk-source/gen/include -Isystem/libhidl/base/include -Isystem/libhi
dl/transport/include -Isystem/libfmq/base -Isystem/libhwbinder/include -Iout/soong/.intermediates/system/libhidl/transport/manager/1.0/android.hidl.manager@1.0_genc++_headers/gen -Iout/soong/.intermediates/system/libhidl/transport/
manager/1.1/android.hidl.manager@1.1_genc++_headers/gen -Iout/soong/.intermediates/system/libhidl/transport/manager/1.2/android.hidl.manager@1.2_genc++_headers/gen -Iout/soong/.intermediates/system/libhidl/transport/base/1.0/androi
d.hidl.base@1.0_genc++_headers/gen -Iout/soong/.intermediates/hardware/interfaces/graphics/common/1.0/android.hardware.graphics.common@1.0_genc++_headers/gen -Iout/soong/.intermediates/hardware/interfaces/graphics/common/1.1/androi
d.hardware.graphics.common@1.1_genc++_headers/gen -Iout/soong/.intermediates/hardware/interfaces/graphics/common/1.2/android.hardware.graphics.common@1.2_genc++_headers/gen -Iout/soong/.intermediates/hardware/interfaces/graphics/ma
pper/4.0/android.hardware.graphics.mapper@4.0_genc++_headers/gen -Iframeworks/native/libs/gralloc/types/include -Iframeworks/native/libs/gui/include -Isystem/libhidl/transport/token/1.0/utils/include -Iout/soong/.intermediates/hard
ware/interfaces/media/1.0/android.hardware.media@1.0_genc++_headers/gen -Iout/soong/.intermediates/hardware/interfaces/graphics/bufferqueue/1.0/android.hardware.graphics.bufferqueue@1.0_genc++_headers/gen -Iout/soong/.intermediates
/hardware/interfaces/graphics/bufferqueue/2.0/android.hardware.graphics.bufferqueue@2.0_genc++_headers/gen -Iout/soong/.intermediates/frameworks/native/libs/gui/libgui_aidl_static/android_arm_armv8-a_static/gen/aidl -Iout/soong/.in
termediates/frameworks/native/libs/gui/sysprop/libLibGuiProperties/android_arm_armv8-a_static_lto-thin/gen/sysprop/include -Iout/soong/.intermediates/frameworks/native/libs/gui/libgui_aidl_static/android_arm_armv8-a_static_lto-thin
/gen/aidl -Iout/soong/.intermediates/frameworks/native/libs/gui/libgui_window_info_static/android_arm_armv8-a_static_lto-thin/gen/aidl -Iframeworks/native/opengl/libs/EGL/include -Iframeworks/native/opengl/include -Iframeworks/nati
ve/libs/nativewindow/include-private -Iout/soong/.intermediates/frameworks/native/libs/gui/libgui/android_arm_armv8-a_shared/gen/aidl -Iframeworks/base/native/android/aidl -Iout/soong/.intermediates/frameworks/base/native/android/l
ib-platform-compat-native-api/android_arm_armv8-a_shared/gen/aidl -Isystem/server_configurable_flags/libflags/include -Iframeworks/native/services/inputflinger/reporter -Iframeworks/native/services/inputflinger/include -Ibionic/lib
c/async_safe/include -Ibionic/libc/system_properties/include -Isystem/core/property_service/libpropertyinfoparser/include -isystem bionic/libc/include -isystem bionic/libc/kernel/uapi/asm-arm -isystem bionic/libc/kernel/uapi -isyst
em bionic/libc/kernel/android/scsi -isystem bionic/libc/kernel/android/uapi -Wall -Wextra -Werror -Wno-unused-parameter -Wthread-safety -Wshadow -Wshadow-field-in-constructor-modified -Wshadow-uncaptured-local -fsanitize=memory -fs
anitize=undefined -fsanitize-trap=all -ftrap-function=abort -fno-sanitize-trap=undefined -std=gnu++17 -fno-rtti -Isystem/core/include -Isystem/logging/liblog/include -Isystem/media/audio/include -Ihardware/libhardware/include -Ihar
dware/libhardware_legacy/include -Ihardware/ril/include -Iframeworks/native/include -Iframeworks/native/opengl/include -Iframeworks/av/include -Werror=bool-operation -Werror=implicit-int-float-conversion -Werror=int-in-bool-context
 -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast -Werror=string-compare -Werror=xor-used-as-pow -Wno-void-pointer-to-enum-cast -Wno-void-pointer-to-int-cast -Wno-pointer-to-int-cast -Werror=fortify-source -Werror=address-of
-temporary -Werror=return-type -Wno-tautological-constant-compare -Wno-tautological-type-limit-compare -Wno-reorder-init-list -Wno-implicit-int-float-conversion -Wno-int-in-bool-context -Wno-sizeof-array-div -Wno-tautological-overl
ap-compare -Wno-deprecated-copy -Wno-range-loop-construct -Wno-misleading-indentation -Wno-zero-as-null-pointer-constant -Wno-deprecated-anon-enum-enum-conversion -Wno-deprecated-enum-enum-conversion -Wno-string-compare -Wno-enum-e
num-conversion -Wno-enum-float-conversion -Wno-pessimizing-move -Wno-non-c-typedef-for-linkage -Wno-string-concatenation -Wno-align-mismatch -Wno-error=unused-but-set-variable -Wno-error=unused-but-set-parameter -MD -MF out/soong/.
intermediates/frameworks/native/services/inputflinger/dispatcher/libinputdispatcher/android_arm_armv8-a_static/obj/frameworks/native/services/inputflinger/dispatcher/InputDispatcher.o.d -o out/soong/.intermediates/frameworks/native
/services/inputflinger/dispatcher/libinputdispatcher/android_arm_armv8-a_static/obj/frameworks/native/services/inputflinger/dispatcher/InputDispatcher.o frameworks/native/services/inputflinger/dispatcher/InputDispatcher.cpp
1.  <eof> parser at end of file
2.  Optimizer
 #0 0x000000000456e838 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x456e838)
 #1 0x000000000456e6c0 llvm::sys::RunSignalHandlers() (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x456e6c0)
 #2 0x000000000453e343 (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x453e343)
 #3 0x000000000453e2fb (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x453e2fb)
 #4 0x0000000003e8e797 llvm::sys::Process::Exit(int, bool) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x3e8e797)
 #5 0x0000000003e8e740 (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x3e8e740)
 #6 0x0000000002c24542 llvm::report_fatal_error(llvm::Twine const&, bool) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x2c24542)
 #7 0x0000000002ff5b25 (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x2ff5b25)
 #8 0x00000000043fd0ea (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x43fd0ea)
 #9 0x00000000043fcd14 llvm::MemorySanitizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x43fcd14)
#10 0x0000000004788f6d (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x4788f6d)
#11 0x000000000331713c llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x331713c
)
#12 0x0000000003316dcd (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x3316dcd)
#13 0x0000000002ff6663 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x2ff6663)
#14 0x0000000002ff648d (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x2ff648d)
#15 0x0000000003b47111 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x3b47111)
#16 0x0000000003b4419a (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x3b4419a)
#17 0x0000000003b42811 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, cla
ng::BackendAction, std::__1::unique_ptr<llvm::raw_pwrite_stream, std::__1::default_delete<llvm::raw_pwrite_stream> >) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x3b42811)
#18 0x0000000003b41ff0 (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x3b41ff0)
#19 0x000000000389dd76 clang::ParseAST(clang::Sema&, bool, bool) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x389dd76)
#20 0x00000000039388d1 clang::FrontendAction::Execute() (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x39388d1)
#21 0x00000000039384cb clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x39384cb)
#22 0x00000000039380c1 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x39380c1)
#23 0x00000000039370ff cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x39370ff)
#24 0x0000000003e8c977 (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x3e8c977)
#25 0x0000000005912642 clang::driver::CC1Command::setEnvironment(llvm::ArrayRef<char const*>) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x5912642)
#26 0x0000000003c36317 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x3c36317)
#27 0x0000000003c360fd clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, bool*) const (prebuilts/clang/host/
linux-x86/clang-r437112/bin/clang++.real+0x3c360fd)
#28 0x0000000003accbd4 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x3accbd4)
#29 0x000000000383dc73 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::__1::pair<int, clang::driver::Command const*> >&) (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.re
al+0x383dc73)
#30 0x000000000383a1f7 main (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x383a1f7)
#31 0x00007f090ea10e4a __libc_start_main ./csu/../csu/libc-start.c:314:16
#32 0x0000000005830a79 _start (prebuilts/clang/host/linux-x86/clang-r437112/bin/clang++.real+0x5830a79)
clang++: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Android (7917927, based on r437112) clang version 14.0.0 (https://android.googlesource.com/toolchain/llvm-project 8671348b81b95fc603505dfc881b45103bee1731)
Target: armv7a-unknown-linux-android10000
Thread model: posix
InstalledDir: prebuilts/clang/host/linux-x86/clang-r437112/bin
clang++: note: diagnostic msg: 
********************

This should be reproducible by the following diff:

--- a/services/inputflinger/Android.bp
+++ b/services/inputflinger/Android.bp
@@ -33,9 +33,15 @@ cc_defaults {
         "-Wshadow",
         "-Wshadow-field-in-constructor-modified",
         "-Wshadow-uncaptured-local",
+        "-fsanitize=memory",
     ],
     sanitize: {
-        misc_undefined: ["bounds"],
+        misc_undefined: ["bounds", "integer"],
+        undefined: true,
+        all_undefined: true,
+        diag: {
+            undefined: true,
+        },
     },
 }
DanAlbert commented 2 years ago

I don't think msan is supported on Android, but the crash shouldn't happen either way...

pirama-arumuga-nainar commented 2 years ago

fatal error: error in backend: unsupported architecture

The crash is from the report_fatal_error that msan is unsupported for armv7. We could get the frontend to report it, like it does for hwasan:

clang-14: error: unsupported option '-fsanitize=hwaddress' for target 'armv7a-unknown-linux-android'

@vishniakou msan is not a diagnositc but rather a runtime sanitizer similar to hwasan/asan/tsan. We haven't tested it for Android and don't have the necessary runtimes in the Android toolchain either.

pirama-arumuga-nainar commented 2 years ago

On second thought, I think it may be possible to use msan on armv7 by explicitly passing msan-origin-base or msan-shadow-base according to this line. In which case it'd be wrong to error in the frontend.