<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/150709>150709</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] Accepts ill-formed program containing function call via member pointer to member in sibling class during constant evaluation
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
keinflue
</td>
</tr>
</table>
<pre>
Clang accepts the following C++ program that is ill-formed (see https://godbolt.org/z/hGooP8MxY)
```
struct A { };
struct B : A { };
struct C : A {
constexpr void foo() {}
};
consteval void test() {
auto p = &C::foo;
auto q = static_cast<void (A::*)()>(p);
B b;
A& a = b;
(a.*q)();
}
int main() { test(); }
```
The program should be ill-formed, because the most derived object `b` does not contain the member `C::foo` which the member pointer `a` references, causing the call to have undefined behavior.
This is a variation of https://github.com/llvm/llvm-project/issues/150705 with the `virtual` keyword removed, which instead causes a crash.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJykVMGu4zYM_Br6QmzgR8d2fPDBSZqeCvTQS08FbdGxuoqVlWS_3X59IfmlyS7Q0wIGEknDEYdDkb3X11mkhfII5TnjJUzWtZ9Fz6NZJOut-taeDM9X5GGQe_AYJsHRGmPf9XzFE9AR6Ih3Z6-ObxgmDqg9amM-jdbdRCHQwYvgFMLdQ9EBXYAuV6t6a8LOuivQ5R-gy_Srtb8ffvv6J1ADeRe_Kv_48s4HtwwBO4T6iFCfoTg-d48IRfc_Z6fnGeQdIuJgZx_k693harXC0VqgA1CTIPU5XvzggLzb0CubDR3Ehxf4xshLsHhHKM4IVJ2iyKKLvMV3iC8J4QMHPfw1sA9QnBIp0KHbgoC6KD9dAMUvQId7-vfgOWL_XHRAFXIifdkFOvAOqPvyQnT8EJUU6TngjfX8lPGiCoqthN9XH_Luj0n-M9lPdjEKe3mxGeiEvQy8eEktcrM-oBKnV1Fo-79lCAhV3kOVo7LicbYhWhFYz1uA3HpxEfNSwCrH90kP0yvibvUcNiRHgJNRnMyD-JhDzCA2ZgwY2BgMFideBZdZyahniXlPvGrrdviQFhvWI-PKTnPQdkY7_tiwOkxLvxvsDehizPr4-XR3NooDumjvl5jE5a3M67zEdx22xKHKV-3Cwibm-1m-vVun0MnNrlvhNo06dhqrJEFiOoNjP-0y1RaqKRrOpH2ry2J_yIuqzqa2LwZiFmpU0-yVKkauqlpRUb8xjVw2mW4ppzKvqaS3kvb1bjiMdd5TXfQkTfNWwT6XG2uzi0riW8yShjYJaDLDvRifZgPREKcAEMUx4dokvV-uHva50T74J0XQwaSBskWUZ-w-RsfLUHi00kcHRMfGZR5S7ZNtq-YfDQ_2saNn9Lo3MWow7D2qxaVFfKw8B4wPdklOZosz7U9a2WRrS_8GAAD__xV4mC0">