Closed
Description
One of our internal tests started hitting an assertion failure when compiled with optimizations which I was able to bisect back to commit de3445e. I was also able to reduce the test case to the following code:
struct Value {
union {
__attribute__((__vector_size__(32))) char v32qi;
long m64;
} _data;
Value &SetType();
Value(Value &v) { _data.v32qi = v._data.v32qi; }
static Value Create__v2di();
static Value Create__m64() { return Create__v2di().SetType(); }
};
long Test397_expect = (long)__builtin_ia32_pshufw(
(__attribute__((
__vector_size__(4 * sizeof(short)))) short)Value::Create__m64()
._data.m64,
0);
When compiled with optimizations enabled, we get hit an assertion failure:
$ ~/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang -c -O2 repro.cpp
clang: /home/dyung/src/upstream/llvm_clean_git/llvm/lib/IR/Type.cpp:686: static llvm::FixedVectorType* llvm::FixedVectorType::get(llvm::Type*, unsigned int): Assertion `isValidElementType(ElementType) && "Element type of a VectorType must " "be an integer, floating point, or " "pointer type."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: /home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang -c -O2 repro.cpp
1. <eof> parser at end of file
2. Optimizer
#0 0x000056486cdd42e4 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
#1 0x000056486cdd208c llvm::sys::CleanupOnSignal(unsigned long) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x3e9f08c)
#2 0x000056486cd08938 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007f71c4e7a420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x00007f71c494700b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#5 0x00007f71c4926859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
#6 0x00007f71c4926729 get_sysdep_segment_value /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:509:8
#7 0x00007f71c4926729 _nl_load_domain /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:970:34
#8 0x00007f71c4937fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#9 0x000056486c55c52f llvm::FixedVectorType::get(llvm::Type*, unsigned int) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x362952f)
#10 0x000056486cc3db66 isVectorPromotionViable(llvm::sroa::Partition&, llvm::DataLayout const&) SROA.cpp:0:0
#11 0x000056486cc4ff86 llvm::SROAPass::rewritePartition(llvm::AllocaInst&, llvm::sroa::AllocaSlices&, llvm::sroa::Partition&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x3d1cf86)
#12 0x000056486cc526aa llvm::SROAPass::splitAlloca(llvm::AllocaInst&, llvm::sroa::AllocaSlices&) (.part.0) SROA.cpp:0:0
#13 0x000056486cc54cb7 llvm::SROAPass::runOnAlloca(llvm::AllocaInst&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x3d21cb7)
#14 0x000056486cc566c6 llvm::SROAPass::runImpl(llvm::Function&, llvm::DominatorTree&, llvm::AssumptionCache&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x3d236c6)
#15 0x000056486cc577c9 llvm::SROAPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x3d247c9)
#16 0x000056486e14f036 llvm::detail::PassModel<llvm::Function, llvm::SROAPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x521c036)
#17 0x000056486a5fa734 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x16c7734)
#18 0x000056486bb6aff6 llvm::CGSCCToFunctionPassAdaptor::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x2c37ff6)
#19 0x000056486a5e0cf6 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::CGSCCToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x16adcf6)
#20 0x000056486bb62937 llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x2c2f937)
#21 0x000056486c679a46 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x3746a46)
#22 0x000056486bb66dd4 llvm::DevirtSCCRepeatedPass::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x2c33dd4)
#23 0x000056486c6799f6 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::DevirtSCCRepeatedPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x37469f6)
#24 0x000056486bb64e04 llvm::ModuleToPostOrderCGSCCPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x2c31e04)
#25 0x000056486c6803aa llvm::ModuleInlinerWrapperPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x374d3aa)
#26 0x000056486e151d56 llvm::detail::PassModel<llvm::Module, llvm::ModuleInlinerWrapperPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x521ed56)
#27 0x000056486c53f5ba llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x360c5ba)
#28 0x000056486d19f4c0 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&) BackendUtil.cpp:0:0
#29 0x000056486d1a1a52 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x426ea52)
#30 0x000056486e0e47bb clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x51b17bb)
#31 0x000056486efb4b59 clang::ParseAST(clang::Sema&, bool, bool) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x6081b59)
#32 0x000056486e0e31b8 clang::CodeGenAction::ExecuteAction() (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x51b01b8)
#33 0x000056486d982089 clang::FrontendAction::Execute() (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x4a4f089)
#34 0x000056486d90a11e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x49d711e)
#35 0x000056486da67283 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x4b34283)
#36 0x000056486a2a0524 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x136d524)
#37 0x000056486a299658 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#38 0x000056486d77a279 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#39 0x000056486cd090da llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x3dd60da)
#40 0x000056486d77aacf clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#41 0x000056486d744df9 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x4811df9)
#42 0x000056486d74587d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x481287d)
#43 0x000056486d74f29c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x481c29c)
#44 0x000056486a29e903 clang_main(int, char**) (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x136b903)
#45 0x00007f71c4928083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#46 0x000056486a29924e _start (/home/dyung/src/upstream/de3445e0ef15c420955ad720fccf08473f460443-linux/bin/clang+0x136624e)