<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/101801>101801</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang][Interp] Revisiting local variables always fails if visiting their initializers fails
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:frontend,
constexpr
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tbaederr
</td>
</tr>
</table>
<pre>
```c++
template<typename T, int Size>
struct Arr {
static constexpr int S = Size;
constexpr Arr(int elem) {}
constexpr int size() const { return S; }
};
int foo() {
int k;
const Arr<int, 3> A(k);
Arr<int, A.size()> B{12};
return 12;
}
```
The above code is currently being rejected. While evaluating the `A.size()` call, we visit `A`, including its initializer. The initializer however is not constant because it tried to load a value from `k`.
The current interpreter simply returns an APValue pointing to the decl for non-reference types:
https://github.com/llvm/llvm-project/blob/2fc71e4e4b0c2eabd7c863f5cdfa6245c1d87c71/clang/lib/AST/ExprConstant.cpp#L8675-L8681
... and will, potentially, visit the initializer later in `findCompleteObject()`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVM2OqzgTfRpnU2oEdvjJgkV-OtInXekbTbdm1sYuEk87NrKL9M19-pGBdNJ3NxJKAJ86PnVOGRmjOTnElpU7Vh5WcqSzDy11EjWGsOq8vrWsyudLMb5LV35g-ZbwMlhJyMSebgM6eUF4Z3wPxhG8mV_IxOuMjBRGRbANAVi9VANEkmQUKO8i4c8hzHXAxGGpviMfiG0IjDcJhxYvjG8mvvpwp_zOFRMLbxJsWkhgCEhjcPDGxA6-KtPNfbv5N9X33i_lT6rTwsdD28KchIm9cZT6F0y8wpbx5oPxzQP6DbPNHuoSfMfqXcGfdcBdasEf2r4E3xN51vx-RpCdvyIorxFMBDWGgI7sDTo07gQB_0FFqDP4-2wsAl6lHSWlJTojsCr_pqvKQUlrk95PhKuJhiZM2nfKWdlRp2JDEYwzZKQ1vzBkkKQ8vYCz_8QrhqTJeZpNk46gQyXHiGAIKBjUQB6slxokJGkIffCXtOcHq_IMfu926S-FgmEISBggmstgb4t5EaSD7R9_TVyDN27u1U_talQWeh_AefcSsMeATiGkYY5MLNuciYbpiR8ZP54MnccuU_7C-NHa6_3vZQg-Wcv4sbO-Y_zIe1UXuMZ1lyuOstO1airRl0r3suLrUhW6qVVdMH5UVrpTIjKpcPv2zvjx9ecQ9otLmRoGxsWPpqrLlx9N1RTPPmRZBtJp-DRzUoMndMl4e0uPc2r0Wx6QDm46Jcnb3ji995fBIuH_u7mNJf9spVuhN2IjV9gWNedVLYqiWp3bvNIaS7FpxLpZa-xVXvN6UxS17qXoJa5My3O-zptc5E3RiCorRJmjLIRUm82aq5Ktc7xIY7NkYObDaWViHLEt8qLJi5WVHdo4fZc4ny0S2z54R-g045zxfVq4n_j0pjysQjvF0Y2nyNa5NZHig58M2elLN9OVB1bu_jeNDisP8CdOXqUBsV5JC1cZjOwsRpD2U94i9NLYCKaHLyCd0YRnZxfQagy2_c-jM_UfGT8uFlxb_m8AAAD__4gFwAI">