aaron.ballman added inline comments.
================ Comment at: clang/test/AST/Interp/records.cpp:260 + class _C : public _B {}; + constexpr _C c{12}; +}; ---------------- We should test that the initialization actually happened. ================ Comment at: clang/test/AST/Interp/records.cpp:262 +}; +#endif + ---------------- Another test would be for invalid base initialization, like: ``` struct Base { int a; }; struct Intermediate : Base { int b; }; struct Final : Intermediate { int c; constexpr Final(int a, int b, int c) : c(c) {} }; static_assert(Final{1, 2, 3}.c == 3, ""); // OK static_assert(Final{1, 2, 3}.a == 0, ""); // Error, reads uninitialized member ``` or with multiple bases: ``` struct Base { int a; }; struct Mixin { int b; constexpr Mixin() = default; constexpr Mixin(int b) : b(b) {} }; struct Final : Base, Mixin { int c; constexpr Final(int a, int b, int c) : Mixin(b), c(c) {} constexpr Final(int a, int b, int c, bool) : c(c) {} }; static_assert(Final{1, 2, 3}.c == 3, ""); // OK static_assert(Final{1, 2, 3}.b == 2, ""); // OK static_assert(Final{1, 2, 3}.a == 0, ""); // Error, reads uninitialized member ``` or in a different form: ``` struct Base { int a; }; struct Mixin { int b; }; struct Final : Base, Mixin { int c; constexpr Final(int a, int b, int c) : c(c) { this->b = b; } constexpr Final(int a, int b, int c, bool) : c(c) {} }; static_assert(Final{1, 2, 3}.c == 3, ""); // OK static_assert(Final{1, 2, 3}.b == 2, ""); // OK static_assert(Final{1, 2, 3}.a == 0, ""); // Error, reads uninitialized member ``` Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143466/new/ https://reviews.llvm.org/D143466 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits