[clang] [clang][bytecode] Assert on virtual func call from array elem (PR #158502)
Timm Baeder via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 16 06:09:28 PDT 2025
================
@@ -1100,3 +1100,25 @@ namespace DiscardedTrivialCXXConstructExpr {
constexpr int y = foo(12); // both-error {{must be initialized by a constant expression}} \
// both-note {{in call to}}
}
+
+namespace VirtualFunctionCallThroughArrayElem {
+ struct X {
+ constexpr virtual int foo() const {
+ return 3;
+ }
+ };
+ constexpr X xs[5];
+ static_assert(xs[3].foo() == 3);
+
+ constexpr X xs2[1][2];
+ static_assert(xs2[0].foo() == 3); // both-error {{is not a structure or union}}
+ static_assert(xs2[0][0].foo() == 3);
+
+ struct Y: public X {
+ constexpr int foo() const override {
+ return 1;
+ }
+ };
+ constexpr Y ys[20];
----------------
tbaederr wrote:
can you include the original reproducer from #152893 as well? This patch fixes the assertion failure but the diagnostic output is still different between the two interpreters.
https://github.com/llvm/llvm-project/pull/158502
More information about the cfe-commits
mailing list