[llvm] [ConstantInt] Disable implicit truncation in ConstantInt::get() (PR #171456)

Nathan Chancellor via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 14 15:48:31 PST 2026


nathanchance wrote:

@nikic One more that only appeared after testing `ARCH=hexagon`:

```c
enum { FORMAT_STATE_NUM };
struct {
} vsnprintf_spec;
unsigned state;
struct {
} vsnprintf_fmt;
char vsnprintf_str, vsnprintf_end, vsnprintf_old_fmt;
long vsnprintf_num;
int vsnprintf(char *buf, unsigned size, const char *fmt_str,
              __builtin_va_list args) {
  switch (vsnprintf_fmt, state) {
    int read = vsnprintf_old_fmt;
    read;
  case FORMAT_STATE_NUM:
    __builtin_va_arg(args, long long);
    vsnprintf_num, vsnprintf_end, vsnprintf_spec;
    goto out;
  }
out:
  return &vsnprintf_str - buf;
}
```

```
$ clang --target=hexagon-linux-musl -O2 -Wno-unused-value -S -emit-llvm -Xclang -disable-llvm-passes vsprintf.i
clang: llvm/include/llvm/ADT/APInt.h:128: llvm::APInt::APInt(unsigned int, uint64_t, bool, bool): Assertion `llvm::isUIntN(BitWidth, val) && "Value is not an N-bit unsigned value"' 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: clang --target=hexagon-linux-musl -O2 -Wno-unused-value -S -emit-llvm -Xclang -disable-llvm-passes vsprintf.i
1.	<eof> parser at end of file
2.	vsprintf.i:9:5: LLVM IR generation of declaration 'vsnprintf'
3.	vsprintf.i:9:5: Generating code for declaration 'vsnprintf'
4.	vsprintf.i:11:33: LLVM IR generation of compound statement ('{}')
 #0 0x00005643d2c46ba8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (clang-23+0x6069ba8)
 #1 0x00005643d2c44355 llvm::sys::RunSignalHandlers() (clang-23+0x6067355)
 #2 0x00005643d2bc3136 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f7ed703e4d0 (/usr/lib/libc.so.6+0x3e4d0)
 #4 0x00007f7ed709890c (/usr/lib/libc.so.6+0x9890c)
 #5 0x00007f7ed703e3a0 raise (/usr/lib/libc.so.6+0x3e3a0)
 #6 0x00007f7ed702557a abort (/usr/lib/libc.so.6+0x2557a)
 #7 0x00007f7ed70254e3 __assert_perror_fail (/usr/lib/libc.so.6+0x254e3)
 #8 0x00005643d0ad537e llvm::APInt::APInt(unsigned int, unsigned long, bool, bool) AArch64ISelLowering.cpp:0:0
 #9 0x00005643d2629045 llvm::ConstantInt::get(llvm::IntegerType*, unsigned long, bool, bool) (clang-23+0x5a4c045)
#10 0x00005643d364a489 (anonymous namespace)::HexagonABIInfo::EmitVAArg(clang::CodeGen::CodeGenFunction&, clang::CodeGen::Address, clang::QualType, clang::CodeGen::AggValueSlot) const Hexagon.cpp:0:0
#11 0x00005643d2f1c505 clang::CodeGen::CodeGenFunction::EmitVAArg(clang::VAArgExpr*, clang::CodeGen::Address&, clang::CodeGen::AggValueSlot) (clang-23+0x633f505)
#12 0x00005643d30927aa (anonymous namespace)::ScalarExprEmitter::VisitVAArgExpr(clang::VAArgExpr*) CGExprScalar.cpp:0:0
#13 0x00005643d308489d clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) (clang-23+0x64a789d)
#14 0x00005643d304cfed clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*) (clang-23+0x646ffed)
#15 0x00005643d2fe31d2 clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (clang-23+0x64061d2)
#16 0x00005643d2ff0fc6 clang::CodeGen::CodeGenFunction::EmitCaseStmt(clang::CaseStmt const&, llvm::ArrayRef<clang::Attr const*>) (clang-23+0x6413fc6)
#17 0x00005643d2fe3bfb clang::CodeGen::CodeGenFunction::EmitSimpleStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (clang-23+0x6406bfb)
#18 0x00005643d2fe30df clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (clang-23+0x64060df)
#19 0x00005643d2fe3b81 clang::CodeGen::CodeGenFunction::EmitSimpleStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (clang-23+0x6406b81)
#20 0x00005643d2fe30df clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (clang-23+0x64060df)
#21 0x00005643d2fe8234 clang::CodeGen::CodeGenFunction::EmitSwitchStmt(clang::SwitchStmt const&) (clang-23+0x640b234)
#22 0x00005643d2fe3591 clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (clang-23+0x6406591)
#23 0x00005643d2ff1171 clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) (clang-23+0x6414171)
#24 0x00005643d2fcef9c clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (clang-23+0x63f1f9c)
#25 0x00005643d2e97764 clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (clang-23+0x62ba764)
#26 0x00005643d2e8ef3f clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (clang-23+0x62b1f3f)
#27 0x00005643d2e940da clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) (clang-23+0x62b70da)
#28 0x00005643d2e8da31 clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) (clang-23+0x62b0a31)
#29 0x00005643d33f21cc (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) ModuleBuilder.cpp:0:0
#30 0x00005643d33e9a76 clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) (clang-23+0x680ca76)
#31 0x00005643d4a5ffba clang::ParseAST(clang::Sema&, bool, bool) (clang-23+0x7e82fba)
#32 0x00005643d38deef6 clang::FrontendAction::Execute() (clang-23+0x6d01ef6)
#33 0x00005643d384581d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (clang-23+0x6c6881d)
#34 0x00005643d39ba062 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (clang-23+0x6ddd062)
#35 0x00005643d0a715f4 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (clang-23+0x3e945f4)
#36 0x00005643d0a6d195 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>) driver.cpp:0:0
#37 0x00005643d0a6f76d int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(long, llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#38 0x00005643d36b6ee9 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0>(long) Job.cpp:0:0
#39 0x00005643d2bc2e1e llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (clang-23+0x5fe5e1e)
#40 0x00005643d36b6723 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (clang-23+0x6ad9723)
#41 0x00005643d367754c clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (clang-23+0x6a9a54c)
#42 0x00005643d3677767 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (clang-23+0x6a9a767)
#43 0x00005643d36947d8 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (clang-23+0x6ab77d8)
#44 0x00005643d0a6c9e0 clang_main(int, char**, llvm::ToolContext const&) (clang-23+0x3e8f9e0)
#45 0x00005643d0a7d197 main (clang-23+0x3ea0197)
#46 0x00007f7ed7027635 (/usr/lib/libc.so.6+0x27635)
#47 0x00007f7ed70276e9 __libc_start_main (/usr/lib/libc.so.6+0x276e9)
#48 0x00005643d0a6aba5 _start (clang-23+0x3e8dba5)
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
ClangBuiltLinux clang version 23.0.0git (https://github.com/llvm/llvm-project.git 8a8d65a0c59ab4d32eaded05fda0ce2ffdd25c39)
...
```

https://github.com/llvm/llvm-project/pull/171456


More information about the llvm-commits mailing list