<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/67685>67685</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] Crash on `-fms-extensions` code
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:frontend,
crash
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hazohelet
</td>
</tr>
</table>
<pre>
The following code with `-fms-extensions` flag causes clang ICE.
```c++
class Test1 {
public:
int a;
};
consteval int f1() {
Test1 var;
var.Test1::Test1(var);
return 0;
}
static_assert(f1());
```
Live demo: https://godbolt.org/z/ddxqbY1v9
Backtrace:
```console
clang++: /root/llvm-project/clang/lib/AST/ExprConstant.cpp:6273: bool HandleFunctionCall(clang::SourceLocation, const clang::FunctionDecl*, const {anonymous}::LValue*, const clang::Expr*, llvm::ArrayRef<const clang::Expr*>, {anonymous}::CallRef, const clang::Stmt*, {anonymous}::EvalInfo&, clang::APValue&, const {anonymous}::LValue*):
Assertion `This && (MD->isCopyAssignmentOperator() || MD->isMoveAssignmentOperator())' 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: /opt/compiler-explorer/clang-assertions-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -std=c++2b -fms-extensions <source>
1. <eof> parser at end of file
#0 0x0000000003708fb8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3708fb8)
#1 0x0000000003706c7c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3706c7c)
#2 0x000000000364f8d8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007f905bb8c420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x00007f905b64f00b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
#5 0x00007f905b62e859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
#6 0x00007f905b62e729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
#7 0x00007f905b63ffd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#8 0x0000000006fc3370 HandleFunctionCall(clang::SourceLocation, clang::FunctionDecl const*, (anonymous namespace)::LValue const*, clang::Expr const*, llvm::ArrayRef<clang::Expr const*>, (anonymous namespace)::CallRef, clang::Stmt const*, (anonymous namespace)::EvalInfo&, clang::APValue&, (anonymous namespace)::LValue const*) ExprConstant.cpp:0:0
#9 0x0000000006ff6775 (anonymous namespace)::VoidExprEvaluator::VisitCallExpr(clang::CallExpr const*) ExprConstant.cpp:0:0
#10 0x0000000006ff7d17 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::VoidExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#11 0x0000000006f9ac39 Evaluate(clang::APValue&, (anonymous namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
#12 0x0000000006f9ae6f EvaluateIgnoredValue((anonymous namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
#13 0x0000000006fbeac9 EvaluateStmt((anonymous namespace)::StmtResult&, (anonymous namespace)::EvalInfo&, clang::Stmt const*, clang::SwitchCase const*) (.part.0) ExprConstant.cpp:0:0
#14 0x0000000006fbe0cf EvaluateStmt((anonymous namespace)::StmtResult&, (anonymous namespace)::EvalInfo&, clang::Stmt const*, clang::SwitchCase const*) (.part.0) ExprConstant.cpp:0:0
#15 0x0000000006fc30eb HandleFunctionCall(clang::SourceLocation, clang::FunctionDecl const*, (anonymous namespace)::LValue const*, clang::Expr const*, llvm::ArrayRef<clang::Expr const*>, (anonymous namespace)::CallRef, clang::Stmt const*, (anonymous namespace)::EvalInfo&, clang::APValue&, (anonymous namespace)::LValue const*) ExprConstant.cpp:0:0
#16 0x00000000070022b2 (anonymous namespace)::IntExprEvaluator::VisitCallExpr(clang::CallExpr const*) ExprConstant.cpp:0:0
#17 0x0000000006fab82f clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#18 0x0000000006f9a57e Evaluate(clang::APValue&, (anonymous namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
#19 0x0000000006f9add3 EvaluateAsBooleanCondition(clang::Expr const*, bool&, (anonymous namespace)::EvalInfo&) ExprConstant.cpp:0:0
#20 0x0000000006fdff1b (anonymous namespace)::IntExprEvaluator::VisitCastExpr(clang::CastExpr const*) ExprConstant.cpp:0:0
#21 0x0000000006faba34 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#22 0x0000000006f9a57e Evaluate(clang::APValue&, (anonymous namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
#23 0x0000000006fa4809 EvaluateAsRValue((anonymous namespace)::EvalInfo&, clang::Expr const*, clang::APValue&) ExprConstant.cpp:0:0
#24 0x0000000006fa5def clang::Expr::EvaluateAsRValue(clang::Expr::EvalResult&, clang::ASTContext const&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6fa5def)
#25 0x00000000063f84da clang::Sema::VerifyIntegerConstantExpression(clang::Expr*, llvm::APSInt*, clang::Sema::VerifyICEDiagnoser&, clang::Sema::AllowFoldKind) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x63f84da)
#26 0x00000000063f8dd2 clang::Sema::VerifyIntegerConstantExpression(clang::Expr*, llvm::APSInt*, unsigned int, clang::Sema::AllowFoldKind) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x63f8dd2)
#27 0x0000000006297c68 clang::Sema::BuildStaticAssertDeclaration(clang::SourceLocation, clang::Expr*, clang::Expr*, clang::SourceLocation, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6297c68)
#28 0x0000000005ebcf5a clang::Parser::ParseStaticAssertDeclaration(clang::SourceLocation&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5ebcf5a)
#29 0x0000000005eae989 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5eae989)
#30 0x0000000005e79814 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e79814)
#31 0x0000000005e7a71d clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e7a71d)
#32 0x0000000005e6ea5a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e6ea5a)
#33 0x00000000049724d8 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x49724d8)
#34 0x00000000041d6509 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41d6509)
#35 0x00000000041571ee clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41571ee)
#36 0x00000000042b584e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x42b584e)
#37 0x0000000000bdcb46 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbdcb46)
#38 0x0000000000bd440a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#39 0x0000000003fb4a69 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
#40 0x000000000364fd84 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x364fd84)
#41 0x0000000003fb505f 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
#42 0x0000000003f7d3a5 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f7d3a5)
#43 0x0000000003f7de0d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f7de0d)
#44 0x0000000003f85d35 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f85d35)
#45 0x0000000000bd9fec clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbd9fec)
#46 0x0000000000ad4d61 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xad4d61)
#47 0x00007f905b630083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#48 0x0000000000bd3eee _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbd3eee)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWl1z4yjW_jXkhnJKRt8XuXCUeN7M21OTaqemaq9cCJDNNgYNoLQzv34LSbaFbKeTnrh3Zne73BVbgsNznvMpBDaGryRjNyC-BfHdFW7sWumbNf5DrZlg9qpU9OXmac1gpYRQX7lcQaIog1-5XUOQBJNqYyZsa5k0XEkDkgBWAq8gwY1hBhKB5Qo-FPfXILgDwQwkQfchAN26T3uVCGwMfGLGTiFI-4t1UwpOQDjrZxYIzALY_eHSQgzCfiRI7w7fO4FKGsuesYBuZDUFKAMoP8juhXUrPmN9mN6vMvzxjPV1O9JhCWfdV5S5aSgfz9TMNlrCwAM3QGYstpwssTFMW4CyHTZP1I6k4cRP_JlByjYKhDO4trY2Dg6aAzRfKVoqYa-VXgE0_wOgOaXb38t_TJ_zbu4tJl-sxoQd2NzbQUmjBNvbQa56w4QzCNBcK2UBmgvxvJnUWv2TEfezHzcXvARoPls8ATS_39a6cLRjaa9JXYNwlqA0dHJKpQT8PyypYPNGEsuVLLAQAGWdoJbWhWo0YZ8Uwe4-QAVsjQgHQ3aT7xgRAM0OY0B6i6WSLxvVmNYZ3OhPv2HRMG_cQJaD299zynUXZ1rjl8-sAmFxdkJ47-acXNEp5WafWm9hN7Zf7-Tc-2csHmSlAEra-YeZs8dekeTtCud7Q89aR-NKumB9WnMDW0EJBCj75W4CwntuClW_zNpEsGHS_lozja3S-5gpQFrA3dhf1DM7N7b9pLDCXDDaB_zjp_vZ4h6aptxwCzEsmxXUrFbaQqvGfsztuimvidr0LnfsedyYhhmA5hBLCrkkoqEM2jWDRGOzhuXe01EBa81qrQgzhlFoWv9yl91MbIwiHFtGoW4kNETz2vaQFxaTL5A2m3rPYnANgvxRq5XGG4j1qnHKmz5GVN3GhNrUXDA9YdtaKM30Lk4meGcCM7G6kV8AmpdcHsLIhRucrOhXrKtJBCcrOFFOLq5rJ72xdWOvDZxsHBdwMtlmyQSbzcS8SIu3ILzj0jIBJws4mawImVilBFljLkF49yo8N9hIXJu1snBSESWUnlCOV1IZy4mBk0qqSUusf9lYCsK7PoWjEo6KAARh0dMd3ncETh2BICyYqkB4D2usDdMQW8gkhaqCFd_lIAhQGMBgG-z-hWmQVWU2CFPzYrovj5pL25rrqbN5dhik8delMlYzvOlDh0vbOrTz1Q8xGkC3wbaH53x_j386wp-QlJzCXwiGZVP_Khd8JbFLiI1s6zGFQrlVLoHWgfHQIg9tElUZzWDhrP6ZEfXM9EsHr8vgLtZ7Jr0xhZKWbXepP2j_75cI-yXSKg_issxIhAK4XGpmrNJsqW2vZ1dQtlmyTKKJ4LLZTlay6W7Udq0ZptdGXQetLtMoQoGnSeQtk0RVEJRQY27YG-QTJzlpJUdhEJSe5NiXjFgW5xCX6k3IB5IRyuLck5yMJad7q79ZZop8makvM6wqmrxPZhhWNPFkZkMvSSoShmnwPUX9dDnv6tquQKJsX92gxBtm6ja682Gd82aM6rR373R5PzehL--vIxgWer_Ev0ePt5b899KRwxO92Cggc9-aVZKm8bcW-k1x6iQ73E1b9bvL3HDrGOk6pKH5d1ffAc5lz2AELqXTdEx0u6rSt9gwEBYHG2_wF7Zsl1vWVr-BvmOtUNF2rM4VDgqO_No39VuUmvpK5ZiEOewXZb70d5n_vBd9B_NoDJIl1R7kw0oqzWiPLfuRuEIfV8kwOZDXtdbfwuNGfWamEfbP8noU58N7X7kl6wIbPyAByq5rrK2rXG_RNxrrG5DqP1nfeFxcAlb-r7j8HYuLs2YytGYaBAiV6FsLPUj7Q2pL6nsaLjNUXay2HCl1mdKSjbN2nLK_XGnJxyApDfcgZ-ZWKfcwVChJeRfO2Wtx17L4fiXeABSNug9aVdPyT3mvsae8t7v6PhLRdOy9OIz-5t6LjnqOv6D3olEDgqMsyAfe-_mjm6KzGfstYEfdA44pq462Mvd4RhqcHec1E0N0i6f-2X-HPzlEaL7bsPzYbYxeqf0DqtPa7yHCKoso9mKDbXDvt0zz6uVBWrZieyqdssyYk6nnuNg_Lh7kqXZovEZxf9dtnDktjxqr_eiZEOrrXAn6_1zSC2z79HR4fCVjvihFP4Sv_R5Xu430b2SEUuQx4vcGKE9Jkp1Gd9twQRftq5xug921mVjj48r1apM64OqbV48F7SLso5npFPeY8TqMmJWkir3Yemz3cwffv4ub5ALa9GA9bXJfG8zyLH9Vm7Ma7G4o3afAbxhtnAFa6XRmreZlY5n5nhHjNWYXYbElaciiv0kfszTPptGrLN5vLdMSi7NsfgQbbgSXK7fGombkUnS02np0TEd04HRKX6XjSdWf2DMT3dvMIQ-_1vj3hj1a7T9LuoE_adXU7VPm_Wv15BdFG8EeNrXS1oUiu1RwtWp6PCCfh4ThE6mifWWcjaEPG4eLpbcekofZ6-6iPEUR9RJ_oSj7iclZu6OwS9KMNJb1l_pXpR-LtAfiIfVau2hKkzjwUtdcuzwk6QmoFwLZYfBAxj7IOJ0y5tPZLfvQdhLdqYRjRs9rdRFf7nF6ingtUoTKOIuYX6lbyAd9nvdZOHtN34skpR6fp4DX0QQlJWWUQEKmyw12MrLT21drfLRn5V9DBXxWnF5Gjw6lp0Y2UiOKAgx35BfTpzZTDJRZbLAQvzFilX7Y1OKkTonfoToZx48xOaSaPzN98jnLf4kSVmWEk7wlZiC36vchl7rltr3bn5bYPUYTLESJyZdlJf2E363d-1AxLdRmgyUdB_VJG7Zv6N01VbvVsfC2AhZWc7nqy0hn4P2E5ZJst9P-rFOJDSdL0w7vWfQGuwtLqzG3Znd7JA4L4WJC6cF9N2SwizPbPyZ2UwBKBd6U7nElPVCFst0r8Z9VedIeUTB-kU2zaGCKU6-ruzufG7nAFRMvHp2vm-4C7-Y7xEPPj6YjF4uD2HuU_69zkdGrhbO-4B9qqFIa4vgsca3t8FHF3LHpJfPRRDfA2_d429DZj9gl6dX2HCoc88IC-l5eflalOU_Kz6r8xI2_GfRaat77QY25c4HjXYFXeeyd5cewyQKv2Y0in80spuFZL7sbfPcahxMdwzkr_EA2Pz69dfR4_MWjwp5XjHRYdx3KDn-bVmZHG0vnyvaH9yQOmQfd6w0DTCOaTKED_dFrd6K9tcfne4IgC-FyKXjpMjHWdjkA8tZTRFGQhd4q464rZIzBTv7H8-uEH1b3D0Bf0ZuQ5mGOr9jNNMnjfBrkKLha3-S0TKMozTI2LUsWBXmIq6gKK8IIzcMIX_EbFKAwyFE2jRAKgus0ruIkSPM8j6u0YhWIArbBXFw7l7pWenXVnjC9SdIki68ELpkw7dl4hHYhVPUPIwAhgAp3w_UV7ld8d6Vv2gOrZbMyIAoEN9YcRFtuRXvSvhMV33Un6GB3OPfESXqiKLtqtLj5_nOyrSL_CgAA___OgZ6i">