<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/119360>119360</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang crashes when using va_arg with array of non-literal size as a memcpy src
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mo7sen
</td>
</tr>
</table>
<pre>
```c
#include "stdint.h"
#include "stdarg.h"
#include "string.h"
void foo(uint32_t size, ...)
{
va_list args;
va_start(args, size);
uint8_t value[size];
memcpy(value, va_arg(args, uint8_t[size]), size);
va_end(args);
}
int main()
{
foo(4, 1);
}
```
Compiling this code crashes clang with the following stacktrace:
```
Stack dump:
0. Program arguments: /opt/compiler-explorer/clang-19.1.0/bin/clang -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -fno-verbose-asm -S --gcc-toolchain=/opt/compiler-explorer/gcc-13.2.0 -fcolor-diagnostics -fno-crash-diagnostics <source>
1. <source>:17:1: current parser token 'int'
2. <source>:5:6: LLVM IR generation of declaration 'foo'
3. <source>:5:6: Generating code for declaration 'foo'
#0 0x00000000036fdb08 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x36fdb08)
#1 0x00000000036fbc74 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x36fbc74)
#2 0x0000000003647be8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007d60dc842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x0000000003e67115 clang::CodeGen::CodeGenFunction::EmitAggregateCopy(clang::CodeGen::LValue, clang::CodeGen::LValue, clang::QualType, clang::CodeGen::AggValueSlot::Overlap_t, bool) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3e67115)
#5 0x0000000003e67e35 (anonymous namespace)::AggExprEmitter::EmitCopy(clang::QualType, clang::CodeGen::AggValueSlot const&, clang::CodeGen::AggValueSlot const&) (.isra.0) CGExprAgg.cpp:0:0
#6 0x0000000003e68cf5 (anonymous namespace)::AggExprEmitter::EmitFinalDestCopy(clang::QualType, clang::CodeGen::LValue const&, clang::CodeGen::CodeGenFunction::ExprValueKind) CGExprAgg.cpp:0:0
#7 0x0000000003e69763 clang::CodeGen::CodeGenFunction::EmitAggFinalDestCopy(clang::QualType, clang::CodeGen::AggValueSlot, clang::CodeGen::LValue const&, clang::CodeGen::CodeGenFunction::ExprValueKind) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3e69763)
#8 0x0000000003e4ad8f clang::CodeGen::CodeGenFunction::EmitLoadOfAnyValue(clang::CodeGen::LValue, clang::CodeGen::AggValueSlot, clang::SourceLocation) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3e4ad8f)
#9 0x0000000003beebf7 (anonymous namespace)::X86_64ABIInfo::EmitVAArg(clang::CodeGen::CodeGenFunction&, clang::CodeGen::Address, clang::QualType, clang::CodeGen::AggValueSlot) const X86.cpp:0:0
#10 0x0000000003dba113 clang::CodeGen::CodeGenFunction::EmitVAArg(clang::VAArgExpr*, clang::CodeGen::Address&, clang::CodeGen::AggValueSlot) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3dba113)
#11 0x0000000003e6c908 (anonymous namespace)::AggExprEmitter::Visit(clang::Expr*) CGExprAgg.cpp:0:0
#12 0x0000000003e6d439 clang::CodeGen::CodeGenFunction::EmitAggExpr(clang::Expr const*, clang::CodeGen::AggValueSlot) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3e6d439)
#13 0x0000000003e6e0dd clang::CodeGen::CodeGenFunction::EmitAggExprToLValue(clang::Expr const*) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3e6e0dd)
#14 0x0000000003e5068e clang::CodeGen::CodeGenFunction::EmitLValueHelper(clang::Expr const*, clang::CodeGen::KnownNonNull_t) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3e5068e)
#15 0x0000000003e54005 clang::CodeGen::CodeGenFunction::EmitArrayToPointerDecay(clang::Expr const*, clang::CodeGen::LValueBaseInfo*, clang::CodeGen::TBAAAccessInfo*) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3e54005)
#16 0x0000000003e547fa EmitPointerWithAlignment(clang::Expr const*, clang::CodeGen::LValueBaseInfo*, clang::CodeGen::TBAAAccessInfo*, clang::CodeGen::KnownNonNull_t, clang::CodeGen::CodeGenFunction&) CGExpr.cpp:0:0
#17 0x0000000003e54ce4 clang::CodeGen::CodeGenFunction::EmitPointerWithAlignment(clang::Expr const*, clang::CodeGen::LValueBaseInfo*, clang::CodeGen::TBAAAccessInfo*, clang::CodeGen::KnownNonNull_t) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3e54ce4)
#18 0x0000000003e546c3 EmitPointerWithAlignment(clang::Expr const*, clang::CodeGen::LValueBaseInfo*, clang::CodeGen::TBAAAccessInfo*, clang::CodeGen::KnownNonNull_t, clang::CodeGen::CodeGenFunction&) CGExpr.cpp:0:0
#19 0x0000000003e54ce4 clang::CodeGen::CodeGenFunction::EmitPointerWithAlignment(clang::Expr const*, clang::CodeGen::LValueBaseInfo*, clang::CodeGen::TBAAAccessInfo*, clang::CodeGen::KnownNonNull_t) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3e54ce4)
#20 0x0000000003d89f5d clang::CodeGen::CodeGenFunction::EmitBuiltinExpr(clang::GlobalDecl, unsigned int, clang::CallExpr const*, clang::CodeGen::ReturnValueSlot) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3d89f5d)
#21 0x0000000003e62fa0 clang::CodeGen::CodeGenFunction::EmitCallExpr(clang::CallExpr const*, clang::CodeGen::ReturnValueSlot) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3e62fa0)
#22 0x0000000003eb0777 (anonymous namespace)::ScalarExprEmitter::VisitCallExpr(clang::CallExpr const*) CGExprScalar.cpp:0:0
#23 0x0000000003ea6c91 clang::StmtVisitorBase<std::add_pointer, (anonymous namespace)::ScalarExprEmitter, llvm::Value*>::Visit(clang::Stmt*) CGExprScalar.cpp:0:0
#24 0x0000000003eac182 clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3eac182)
#25 0x0000000003e405ce clang::CodeGen::CodeGenFunction::EmitAnyExpr(clang::Expr const*, clang::CodeGen::AggValueSlot, bool) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3e405ce)
#26 0x0000000003e5ee6d clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3e5ee6d)
#27 0x0000000003a3a4da clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3a3a4da)
#28 0x0000000003a41059 clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3a41059)
#29 0x0000000003aa74aa clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::Stmt const*) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3aa74aa)
#30 0x0000000003ab4478 clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3ab4478)
#31 0x0000000003b0d86b clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3b0d86b)
#32 0x0000000003b09595 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3b09595)
#33 0x0000000003b09ef0 clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3b09ef0)
#34 0x0000000003b13177 clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) (.part.0) CodeGenModule.cpp:0:0
#35 0x0000000003fd0a1e (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) ModuleBuilder.cpp:0:0
#36 0x0000000003fc2519 clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3fc2519)
#37 0x0000000005f18764 clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x5f18764)
#38 0x0000000003fce825 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3fce825)
#39 0x0000000004274201 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x4274201)
#40 0x00000000041f699b clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x41f699b)
#41 0x000000000435a843 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x435a843)
#42 0x0000000000c874dc cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0xc874dc)
#43 0x0000000000c8146d ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#44 0x0000000004017309 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::'lambda'()>(long) Job.cpp:0:0
#45 0x0000000003648013 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3648013)
#46 0x0000000004017529 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#47 0x0000000003fdd947 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3fdd947)
#48 0x0000000003fde2fd clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3fde2fd)
#49 0x0000000003fe7d4c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0x3fe7d4c)
#50 0x0000000000c847f1 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-19.1.0/bin/clang+0xc847f1)
#51 0x0000000000b5c2d4 main (/opt/compiler-explorer/clang-19.1.0/bin/clang+0xb5c2d4)
#52 0x00007d60dc829d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#53 0x00007d60dc829e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#54 0x0000000000c80f0e _start (/opt/compiler-explorer/clang-19.1.0/bin/clang+0xc80f0e)
clang: error: clang frontend command failed with exit code 139 (use -v to see invocation)
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW19z5Cb2_TTyC9VdElK3pAc_yO3xZBInmd_YNb-8dSFAMjs0qAD5z376LUDdasnttt3WJru1SSWxLeByzuFyuSCEtGa1oPQ8WFwEi8sz1Jo7qc43MtVUnJWSPJ0Hy9D_i4OwCGDMBOYtoSCAUBvChJnfBRAeKkOqfqlMMdGXhcW9ZARUUgYwa5kwMVwboNk_aQBXYD6fBzAHtmJ6EYQFAADcozVn2gCkah3Ee0-1QcoEMHMFcNUZyX0dW82az9YG3CPe0mBx4SosLnsj3Y8N3eDmKYCZrwhX1jpS9Z7tztSeEZgf7NNDo4LsGm8L00tfhQkDNoiJAGa2cJ-qVyWxhqNxw-3IeCMruWkYZ6IG5o5pgCWhACuk76gGmCNRgwdm7oC5o6CSnMsHW1UbhH8YhTAN4mJk88aWAdJuGl8WzoMw_6pkrdDGSt9uqDA6iAsQwCvZmABeYYeBqhl9bLhUVNlntu9ZlM-jeRjAq9LS9A_BrCYPSFWzBMxqMJPWDmoaa601TWvmGsw2nN9vwGz2mC1nSG9m-kkY9BjEl0wYysGsEnJ2T1UpNbXlYHYDZrMa45mRkuM7K2p8eRSfrRzFczgPwazCkks1IwzVQmrDsPY9OB0Hj4N4pWWrrG6fgrCIrDaDZ3ERpfZ_Vh_cKkWFAQ1Smipg5A8qQABTJkwA0yAs4IHmiyAulrb19fX3X8GXb6CmgipkmBRAVoBQzFH3ZwBT5yfWVHzM1OfOhKi9f1RSvWgIBDAOQfgYbv-JlxUpwwzYEbEeERf6SftfviomjPOXW-dLMOsrKfSwltooijYBXFpHdrRz4Lz9JMcJ4EX42MHxE8aCjUZgS5wmh8CuOEWibX4XN6wWiNugI1wYJIBLa3wKaLbzHhocQkvSkmZgZZ3qG8Xynqonj-UnJAi3PWSdRoM6KykMfTRz3NgZGbr_vP24s5-SZUhwlsAFDDsSnJUBvHrMlutlMuNMtI-zWrS-AM-1nC8dZNekB5wMANNlGkULH0U6DSWhn6kY_HHVCmy9yD_8tGGmqGtFa2ToSrpg-pKB6-_bKPuuGv_XIn771BxtWNS1a3rDpfFPfr-niqNmbWyzUko-xYB7hXr9FmP9aLywnSAhxdNGthoItKG6cZMl30H99NgoK5yhqlfxuXjvJQ6wFNp0s--dDZw2c6YVssxzsPpsQRZ1fcANlyPWGa5OZn3FBOKXVJ9I3zvMm4gfdt_HRjkTvzC7cB_nnY545-kyPmm2fJD0wNn_THE-Pn2sZP30yYaCJohk1fsFvZaI_F4V4qkLHh-IP0eUvXEL7bXEbgmdRA3Ht1cjH6hRUlpW6WvT6g8X8IuLL19EJXtJvheFS2LfquUrIYMQRbX-aFiGuXdF8Ee2HM0uu6wPkxBSoig6YXYdYO4eWV8OYPEmmm-On1N4gSfa7QdgHEWjIIPzMDsluH5nmpmhEDsNXg5zFgEcISBJnJ8U5nx_YwTbeHR8LCZW2bPoVY5HHGlIyMkcb-X1gdAz4joFB4uy5zBK3hbhMqMnRE8H_SfKG3rqYP0i5IP4TYrfWs7X0wyXI9NTHeVZiyQMT8lTlUJPt_KrtJtKdUkxejqRsRftAmnq4u7xyrcXRVFgTLXeVZ5CIatBr9ByrFBaIWBJd2z_n5m7grNa2N38X8T67R709kTF564-nB2IZelYFkyT9zvOf6WGk_gYpknvY9lYzCWO__axKP_bxybzMTjKArO8WpywMF-0jBsmnicgn7ks7dYLc3e2uz0QcscwQ9qI8zcL_o2aVolp00LHvNdlnBbCCoXv12XLarQ1-Iu5ejY911ECWoZp-upG6AYjjtThLPjNrLeT3Bt7PtXhKG1ES5xHg02i2RjXpVR2-gXxShviixAh68bPcSvvu-nA1d4hZ5duFv7c93C2b7G8jdUokUQ4yuD7fauH_ErYmuwwzgHt3WaUJCbhAp-QDxfiabJ9y4RcHZue6zjdo3R5Qpj8UgupKHmV7xRh3iLs8Q_zMhSjhKATXM65-NjpBwPVzxmX_X-jVRCv9hoUxuwxjT9NQdbT6ckO8yaUROHihA31Sm4a2QpiKdosQbbmBsvm2YFXX2tw8uc98c_bcXuavQjDLAmhNEEnjPj2yYUkT0dHfgICDuKOwOglGSqTJM3eR6B7LUdt4bG0pPfZPgU9GnVWn7cVbQ43PtX_mAqOZ6_CMA8pQ5Ity9dU-FWSltN-ED3bLeRLWjHBPMu3aOKf71bACTh6Fj1HOOKYL_JXTxsOc_xP4GbR99ziMTdavZpHHub2MqNJUNOqzwhH7ynLKI7S9L2ob2VzTe9ph3Efu3-ylXveIGW6l2D7lp4nTqPXfxUJUURfy-w6mzYQSPVl03D_2L8SPo7xs5JtY1cwmAOPye5zCD2Q043e0VUYLqLBmnOB8A8qyEoK3W622fJ7QXx0mD2sfpgHWcGiirJ0OdhJf0VK0-LmdhT56QaNFrmJ0q4OQg8wG6lKM3goMhSDl2gUt4Z2j9zNnwl0sx33sAZrawLTBIaDbcmVksJQQQ7gmgZR1-cOUTJYLJOoWub5aJnwfXwR2iCB6WGtXqYwyeLW4epRDxa3JF6gLBm8gurw9eDvd68DxznYgNwkobzD06MdLFMhztKEYIBxtO7umB1Ofe_QKN9dgeEzuAL3kpFpQHtUPeZ4hDlKlgRsZV1Ft27e7iG_2SDOv1O8i5UHCCyHa6i10V2hGWRCRLH7Q6EyGSwuSRilcZg7CfaMVl2yslZORVfaXePbbsEx4rxE-Me6EsMthu-4c41VtJKbDRJkPAsPjtbu9EA2tndkBdgTx12wdDU_dUO5a7Be48fHKPJ_lEgzvPb3MTsJB5Xtg7VRiBm9LR6ZQ5xbV5dqr9xW2dvQF7sXvL5JAFOONqXdCKW9VDDbXr76WZYHBmMxukKVhVG8Nw6HLkp151KtuEEV5U8DLY-P2xRXwBzC3sGXY2dawMG6-z_nDKOU6vCop6NEiuRJ-qJqbpTQs5VsK-UgFI8a2gov3Yc5UrUYpBd7xD62ijuaveuMkgtCYUXeK8LPstQvK_CzLK-ZHp4LHIu1uxFvELOD_fyY_KhonVv8W6Sz4vTSDQ8XKpqSBL8E83Lv98GCfmAlf0nyP1G6CbJFJ8dOrEU4WoOTtOqyxW3msAXrQkPx7CTtpRX2w7mCRdLjHGRjYbnAkCTu_vxHO_Km-o7g8FotzEn-zmu1rklvMB4bpEkI1mvbxn-7sN6j8eYuaLLXRTIaxLAKKfDGPz4O1pjvauuvgCpl433RfWNQdek4wJ3nVohxSvy3B_SRGX_xPIqdV7Sagtk9MBJoSgHbS5vz3RcNVAHlXi1RO3Fsy_3vFM7IeUzyOEdn9DxK4ziDaRplZ3fnMM8zmBBSllGFCcniBIVZXKVJHlYVJeiMncMQJhGMwihMsjibkyyiKa7yKC3TRUiTIAnpBjE-tw4-l6o-Y1q39DyK8ngZnnFUUq7dlzMQdiLBYHF5ps5tg1nZ1jpIQs600b0Jwwyn516r7dcZD3dUgFYzUXdfmXi1kF3hgayAkGLGmaEKcfd1CUAaoO4TFaAVPmsVP78zpnEX3OFVAK9qZu7aco7lxvqLnaD-x6xR8h8UWwdwZHQArzo-9-fwXwEAAP__jEWrBA">