Skip to content
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

[Bug]: Clang crashes with NDK 25c when optimizing for size (-Os) in Release build #1867

Closed
tvballhaus opened this issue Apr 14, 2023 · 4 comments
Assignees
Labels

Comments

@tvballhaus
Copy link

Description

Prerequisite:

  • NDK 25.2.9519653
  • CMAKE_BUILD_TYPE Release
  • CMAKE_CXX_FLAGS -Os

Action:

Compile the following code for arm64-v8a:

struct Foo
{
	size_t mLength;
	void Update(const short* arg0, double* arg1);
};

void Foo::Update(const short* arg0, double* arg1)
{
	std::transform(arg0, arg0 + mLength, arg1, [](auto p){ return static_cast<double>(p); });
}

Output:

Clang crashes: clang++: error: clang frontend command failed due to signal (use -v to see invocation)
See the full output in the attachment: ANC824.zip

Workarounds:

  • Using NDK 25.1.8937393
  • Using -O3 instead of -Os
  • Adding attribute [[clang::optnone]] to the problematic methods.

Upstream bug

No response

Commit to cherry-pick

No response

Affected versions

r25

Canary version

No response

Host OS

Windows

Host OS version

Windows 10

Affected ABIs

arm64-v8a

@DanAlbert
Copy link
Member

Possible duplicate of #1862 (I haven't looked closely so leaving both open, but the circumstances are similar).

Thanks for the minimized repro case 👍 Also interesting that this crashes in r25c but not in r25b... There weren't many changes in r25c so that makes the list of culprits quite small.

@DanAlbert
Copy link
Member

@appujee probably a dup of #1862?

@appujee
Copy link
Collaborator

appujee commented Apr 20, 2023

yes it is the same bug

0.	Program arguments: /usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real -Os -g -fPIC /usr/local//g/bugs/r25c-vector/transform.cpp -std=c++14 --target=aarch64-linux-android31 -c --sysroot /usr/local//llvm-toolchain/toolchain/prebuilts/ndk/r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot -fvectorize -I /usr/local//llvm-toolchain/toolchain/prebuilts/ndk/r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1

1.	<eof> parser at end of file
2.	Optimizer
 #0 0x00000000047d91d8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x47d91d8)
 #1 0x00000000047d8340 llvm::sys::RunSignalHandlers() (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x47d8340)
 #2 0x00000000047a3dc3 (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x47a3dc3)
 #3 0x00000000047a3fa1 (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x47a3fa1)
 #4 0x00007f0efe404f90 (/lib/x86_64-linux-gnu/libc.so.6+0x3bf90)
 #5 0x00000000065bec3e llvm::VPTransformState::get(llvm::VPValue*, llvm::VPIteration const&) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x65bec3e)
 #6 0x00000000065be8b9 llvm::InnerLoopVectorizer::scalarizeInstruction(llvm::Instruction*, llvm::VPReplicateRecipe*, llvm::VPIteration const&, bool, llvm::VPTransformState&) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x65be8b9)
 #7 0x00000000065be760 llvm::VPReplicateRecipe::execute(llvm::VPTransformState&) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x65be760)
 #8 0x00000000065be31e llvm::VPBasicBlock::execute(llvm::VPTransformState*) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x65be31e)
 #9 0x00000000065be047 llvm::VPRegionBlock::execute(llvm::VPTransformState*) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x65be047)
#10 0x00000000065bdf6c llvm::VPRegionBlock::execute(llvm::VPTransformState*) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x65bdf6c)
#11 0x00000000066fabf1 llvm::VPlan::execute(llvm::VPTransformState*) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x66fabf1)
#12 0x00000000062fd91e llvm::LoopVectorizationPlanner::executePlan(llvm::ElementCount, unsigned int, llvm::VPlan&, llvm::InnerLoopVectorizer&, llvm::DominatorTree*) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x62fd91e)
#13 0x000000000663a48f llvm::LoopVectorizePass::processLoop(llvm::Loop*) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x663a48f)
#14 0x0000000005edebea llvm::LoopVectorizePass::runImpl(llvm::Function&, llvm::ScalarEvolution&, llvm::LoopInfo&, llvm::TargetTransformInfo&, llvm::DominatorTree&, llvm::BlockFrequencyInfo&, llvm::TargetLibraryInfo*, llvm::DemandedBits&, llvm::AAResults&, llvm::AssumptionCache&, std::__1::function<llvm::LoopAccessInfo const& (llvm::Loop&)>&, llvm::OptimizationRemarkEmitter&, llvm::ProfileSummaryInfo*) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x5edebea)
#15 0x0000000005eddbb9 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x5eddbb9)
#16 0x0000000005edd89b (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x5edd89b)
#17 0x0000000005c6168a llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x5c6168a)
#18 0x0000000005c61521 clang::TemplateDeclInstantiator::VisitDecl(clang::Decl*) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x5c61521)
#19 0x0000000005ec7112 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x5ec7112)
#20 0x0000000005ec6dd1 (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x5ec6dd1)
#21 0x00000000063538c6 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x63538c6)
#22 0x00000000065d66c8 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::__1::unique_ptr<llvm::raw_pwrite_stream, std::__1::default_delete<llvm::raw_pwrite_stream> >) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x65d66c8)
#23 0x00000000060524d5 (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x60524d5)
#24 0x0000000005ea25a9 clang::ParseAST(clang::Sema&, bool, bool) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x5ea25a9)
#25 0x00000000063c128d clang::FrontendAction::Execute() (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x63c128d)
#26 0x00000000063c112d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x63c112d)
#27 0x00000000063c1541 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x63c1541)
#28 0x00000000066a9f54 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x66a9f54)
#29 0x00000000066a6de3 (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x66a6de3)
#30 0x00000000066a6c92 (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x66a6c92)
#31 0x00000000066a6c61 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x66a6c61)
#32 0x00000000066a69f4 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 (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x66a69f4)
#33 0x00000000066a685f clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x66a685f)
#34 0x00000000066a66f2 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::__1::pair<int, clang::driver::Command const*> >&) (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x66a66f2)
#35 0x00000000066752ee main (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x66752ee)
#36 0x00007f0efe3f018a __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#37 0x00007f0efe3f0245 call_init ./csu/../csu/libc-start.c:128:20
#38 0x00007f0efe3f0245 __libc_start_main ./csu/../csu/libc-start.c:368:5
#39 0x00000000064cce69 _start (/usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin/clang++.real+0x64cce69)
clang-14: error: clang frontend command failed with exit code 139 (use -v to see invocation)
Android (9352603, based on r450784d1) clang version 14.0.7 (https://android.googlesource.com/toolchain/llvm-project 4c603efb0cca074e9238af8b4106c30add4418f6)
Target: aarch64-unknown-linux-android31
Thread model: posix
InstalledDir: /usr/local/g/aosp-master-with-phones/prebuilts/clang/host/linux-x86/clang-r450784d1/bin
clang-14: note: diagnostic msg: 
********************

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

@DanAlbert
Copy link
Member

Duplicate of #1862

@DanAlbert DanAlbert marked this as a duplicate of #1862 Apr 20, 2023
@DanAlbert DanAlbert closed this as not planned Won't fix, can't repro, duplicate, stale Apr 20, 2023
@github-project-automation github-project-automation bot moved this from Triaged to Merged in NDK r26 Apr 20, 2023
@DanAlbert DanAlbert removed this from NDK r26 Apr 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants