aaron.ballman accepted this revision. aaron.ballman added inline comments. This revision is now accepted and ready to land.
================ Comment at: clang/test/AST/Interp/switch.cpp:46 +constexpr int withInit() { + switch(int a = 2; a) { + case 1: return -1; ---------------- tbaeder wrote: > aaron.ballman wrote: > > I think it would be good to add a non-trivial init and show that it fails > > when appropriate. e.g., > > ``` > > struct Weirdo { > > consteval Weirdo(int); > > Weirdo(double); > > > > int Val = 1; > > }; > > > > constexpr int whatever() { > > switch (Weirdo W(12); W.Val) { > > case 1: return 12; > > default: return 100; > > } > > } > > > > constexpr int whatever_else() { > > switch (Weirdo W(1.2); W.Val) { // Should get an error because of the > > init not being constexpr > > case 1: return 12; > > default: return 100; > > } > > } > > > > static_assert(whatever() == 12, ""); > > static_assert(whatever_else() == 12, ""); // Shouldn't compile because the > > function isn't constexpr > > ``` > This is unfortunately hard do test with the new constant interpreter right > now. It never emits the "never produces a constant expression" diagnostic > because I removed the `Run()` call from `isPotentialConstantExpression()`. I > need to revert that and instead fix the interpreter to correctly takes this > mode into account. > > And for the non-constexpr constructor, we will reject the call in the > `static_assert()`, but not diagnose anything useful because we're not > checking the constructor for constexpr-ness (this is part of > https://reviews.llvm.org/D137563 I believe). I'd be fine if the tests were added with FIXME comments (or commented out if they're too disruptive). CHANGES SINCE LAST ACTION https://reviews.llvm.org/D137415/new/ https://reviews.llvm.org/D137415 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits