aaron.ballman added subscribers: hubert.reinterpretcast, rsmith. aaron.ballman added inline comments.
================ Comment at: clang/test/AST/Interp/records.cpp:509-512 + constexpr A *a2 = &b + 1; // expected-error {{must be initialized by a constant expression}} \ + // expected-note {{cannot access base class of pointer past the end of object}} \ + // ref-error {{must be initialized by a constant expression}} \ + // ref-note {{cannot access base class of pointer past the end of object}} ---------------- tbaeder wrote: > cor3ntin wrote: > > aaron.ballman wrote: > > > I may have jumped the gun on accepting this, actually. Forming the > > > pointer to `&b + 1` is fine, but evaluating it by dereferencing it would > > > be UB. e.g., http://eel.is/c++draft/expr.const#13.3 > > We probably want tests that ensure `&b+2` is invalid in all cases > It's being evaluated because the base class is accessed, isn't it? if `b` was > of type `A*`, we would not emit a diagnostic (see line 506 above). I'm not seeing the access to the base class -- we're forming a pointer, not dereferencing it. https://godbolt.org/z/vxThqczeo I think this is an existing Clang bug. CC @hubert.reinterpretcast @rsmith for additional opinions. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D149013/new/ https://reviews.llvm.org/D149013 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits