================
@@ -209,10 +208,6 @@ namespace {
         ArraySize = 0;
         MostDerivedLength = I + 1;
         IsArray = false;
-      } else {
-        // Path[I] describes a base class.
----------------
ChenMiaoi wrote:

Could we retain the else branch with a comment explaining why base-class path 
entries must preserve the most-derived object's array information?

For example, whether the pointer refers to the A base subobject of `b[0]`, 
`b.item[0]` or `b[0].item[0]`, the most-derived object is still an array 
element:

``` txt
b → [0] → A
b → item → [0] → A
b → [0] → item → [0] → A
```

Entering the base subobject does not change that, so its most-derived object's 
array information should be preserved.

Removing the assignments also affects some cases. For example, this valid code 
currently compiles:

``` cc
struct A { int n; };
struct B : A {} b[2];

constexpr int f() {
  A *p = b;
  return p - p;
}

static_assert(f() == 0);
```

Could you also check whether removing the code in this branch causes issues in 
any other cases?



https://github.com/llvm/llvm-project/pull/230599
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to