<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62377>62377</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Assertion failure when assigning to `__imag(A)` for non-complex `A`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:frontend
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tbaederr
</td>
</tr>
</table>
<pre>
Take this code:
```c++
constexpr void foo() {
int a = 10;
__imag(a) = 12;
}
```
Godbolt: https://godbolt.org/z/KoavMTTb4
Running this in clang results in an assertion failure:
```
clang++: /home/tbaeder/code/llvm-project/clang/lib/AST/ExprClassification.cpp:57: Cl clang::Expr::ClassifyImpl(clang::ASTContext &, clang::SourceLocation *) const: Assertion `isLValue()' 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: bin/clang++ -c ./array.cpp -std=c++20
1. ./array.cpp:204:17: current parser token ';'
2. ./array.cpp:202:22: parsing function body 'foo'
3. ./array.cpp:202:22: in compound statement ('{}')
#0 0x000000000036ce91 __interceptor_backtrace.part.0 (bin/clang+++0x36ce91)
#1 0x00007fd51fb580f4 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/tbaeder/code/llvm-project/llvm/lib/Support/Unix/Signals.inc:602:11
#2 0x00007fd51fb59ace PrintStackTraceSignalHandler(void*) /home/tbaeder/code/llvm-project/llvm/lib/Support/Unix/Signals.inc:676:1
#3 0x00007fd51fb5112e llvm::sys::RunSignalHandlers() /home/tbaeder/code/llvm-project/llvm/lib/Support/Signals.cpp:104:5
#4 0x00007fd51fb56023 llvm::sys::CleanupOnSignal(unsigned long) /home/tbaeder/code/llvm-project/llvm/lib/Support/Unix/Signals.inc:368:1
#5 0x00007fd51f3c9ad1 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) /home/tbaeder/code/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:0:7
#6 0x00007fd51f3caf80 CrashRecoverySignalHandler(int) /home/tbaeder/code/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:0:51
#7 0x00007fd54285fb20 __restore_rt (/lib64/libc.so.6+0x3cb20)
#8 0x00007fd5428afe5c __pthread_kill_implementation (/lib64/libc.so.6+0x8ce5c)
#9 0x00007fd54285fa76 gsignal (/lib64/libc.so.6+0x3ca76)
#10 0x00007fd5428497fc abort (/lib64/libc.so.6+0x267fc)
#11 0x00007fd54284971b _nl_load_domain.cold (/lib64/libc.so.6+0x2671b)
#12 0x00007fd542858656 (/lib64/libc.so.6+0x35656)
#13 0x00007fd5621e70fa clang::Expr::ClassifyImpl(clang::ASTContext&, clang::SourceLocation*) const /home/tbaeder/code/llvm-project/clang/lib/AST/ExprClassification.cpp:57:5
#14 0x00007fd5621ef551 clang::Expr::ClassifyModifiable(clang::ASTContext&, clang::SourceLocation&) const /home/tbaeder/code/llvm-project/clang/include/clang/AST/Expr.h:412:12
#15 0x00007fd5621ebdde clang::Expr::isModifiableLvalue(clang::ASTContext&, clang::SourceLocation*) const /home/tbaeder/code/llvm-project/clang/lib/AST/ExprClassification.cpp:704:23
#16 0x00007fd5673c5d2d CheckForModifiableLvalue(clang::Expr*, clang::SourceLocation, clang::Sema&) /home/tbaeder/code/llvm-project/clang/lib/Sema/SemaExpr.cpp:13995:34
#17 0x00007fd5673c2e2a clang::Sema::CheckAssignmentOperands(clang::Expr*, clang::ActionResult<clang::Expr*, true>&, clang::SourceLocation, clang::QualType, clang::BinaryOperatorKind) /home/tbaeder/code/llvm-project/clang/lib/Sema/SemaExpr.cpp:14169:7
```
`__imag(a)` is not an lvalue but is assumed (and asserted) to be.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWF1v2zgW_TX0C1GDIq2vBz-oSb27mA6m22T31aDIK5sbihRIKhPvr1-QUmJbzTSDTgNsYdgqRV6ec-4HecO9VwcDsEX5R5TfrvgYjtZtQ8tBgnOr1srT9p4_AA5H5bGwEhBrELlF5Pm7INNHIPoxftKosMYHeBocfrRK4s5aRCtEa4zKeQbGygTMMWK3OCOIPQ_v96rnB0QrnqbHt_TlLSpvF7tO__2bla3VAbEGH0MYfMRId4juDtOLtXUHRHf_RXT3i-WPv97ft5tLEl9HY5Q5TCSVwUJzc8AO_KhDGuAGc-_BBWUN7rjSo_tDIWYFoolZEtZgRHdH2wOiu1lbRHdJTbrT-rH_MDj7HxAhjk4Ld1q1iO6au3tEd5-eBnejo7M6JXgEsRbDgFiTl9H4jZ4QR0SsiZOnp3nJ6R_9oBGtLuY0d_c31gR4ChjRAtGbSwN3dnQCPttpJ4xoE12RXBp3a16EQAVR_vO_uR5hci-iZVIH5HpS4cvnT83dJ-zHtlfR2-0YZR2sCzjYpa9UOI7tWth-FuVbbZT3I3hEd5gbiZURepQxNAELx_0Rt1w8BMcFREaDg8FZAd6DxD5xisNxJffeCsUDSOxGg71waggz5LvAxQOWYz-8OJisEam_OHtwvMfcHcYeTIjAcavM2WXR1_iDwGtEd9w5fopOwh98kIjdzulB5_DIosmriYg1lGwQa7LkUzE6BybggTsPDgf7ANEVZcwFWk5G6OtGaPyOX2lxjOtuNCJ5LOZztJIScrbC3rISE8L2gx2NxD7wAJE-Th4vYz6Xt_GB1nMGI8oIJk_k5R8rBNRZzGwTwAkYgnX7F1etB-7CmkR736iJ6EfyNC2_sp_N9stO5lnX5hXpNjiFTApgf_LTwxenTEgOvZ-iojpPcvz3vfXBAe_nFFAmpJrzp1P1OUhTpt6NQ4xrRHf_MuopDqiD4dqvlRGINUUSNMvOJOiCRM0F4AXiycbfuZE64qhiNZ3z8Z1glkWEeUbJFiizjMJrUn8dzRVY_1zw_yrMZ3xTXGYpRfIzvs0CX0Eoew3fjQZuxuG3GSWi1WjS2SextjHe3ktRVlTXiuZXiJmoucxi9HNjzam3o8eG9-CHFLD1jD6Wt68g7CO401y5U1VPbyfJ0xxEqxTGN_jn03sNxOwWglhTnikWC4q8qwi-Wr4M7J-Ve29gzC_8UF6A3NAq71pK8H7vwAfrYO_mEhe3KDbTr1h7uy6mqiRaSq6KUnVtj3eQC7zfD-HogMv9g9J6r_pBp_L5fLT-8QaVgFxcbVAvAfOywAeflHwDKy-LF1OxfpJrU5u67ATmrX2DNC3KTlwZyr4xlLV4b_ReWy730vZcmbWwWr5lN2uv7NIF16rIi-9zzIv8muNl5SpoBiXp-I_fk966Jl3ekt71tpefGW4WDLs8z77P8FcrVad4q-HHeRZ_hed8Z7sYOXNeHxFrNlk6J-mZZb5g2UoJr7NU_szv8-N8Lf2_9WaZjjLKzkwvy2ZRMpFLKvHNEcTDzrrvU0siRNDfJXX9Eno-e_NHGU4m0k9y4HxGs7rO48m3OVMrF9QoUP4NmClUI98m9aWxUP42gONG-j9Dt0mX3K-pbUPs5vX5wY2A2Ke3I-Dq5T9Hru9PAyyGPyrD3SlhDNb9oox8Bzk3WVGfz9dFn_kyeNU4o4Jg5bGxIbauOgUMbscQB7n3Yw9yunLIua-FBDxY3MJ6JbdM1qzmK9hmRUVzktd1uTpuqwI6KUnXtrwsyYZAXnNSF6IF1rGOyJXaUkIZ2dAiI5uClesykywru7LsWlEBJ2hDoOdKr6MOsStfpZZuW1BWlivNW9A-_S2C0meVOxdTNgpLUX67ctskYTsePNoQrXzwZ2NBBQ3bZtmp49-PkBp4dZjafIsvBWtmwTrrsLHmQ2x2NDzFOVHY1ej09sdb1UTtfwEAAP__fLdLfg">