================
@@ -1543,3 +1544,55 @@ namespace GH197403 {
}
static_assert(test() == 0);
}
+
+namespace GH223064 {
+ struct A {
+ int n;
+ };
+ struct B : A {} b[2];
+
+ constexpr int *base_array_element() {
+ A *p = b;
+ return &static_cast<B *>(p)[1].n;
+ }
+ static_assert(base_array_element() == &b[1].n);
+
+ constexpr int pointer_difference() {
+ A *p = b;
+ return p - p;
+ }
+ static_assert(pointer_difference() == 0);
----------------
ChenMiaoi wrote:
Could you also add a negative test for subtracting base pointers from different
array elements? This would verify that the change to `AreElementsOfSameArray`
still rejects that case.
``` cc
constexpr auto difference(A *p, A *q) {
return p - q;
}
static_assert(difference(&b[1], &b[0]) == 1);
```
https://github.com/llvm/llvm-project/pull/230599
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits