================ @@ -67,15 +68,19 @@ struct Bar { template <typename U, int num> constexpr int fail2() const { return 1 / 0; } // expected-warning {{division by zero}} \ // expected-note {{division by zero}} +#ifndef NEW_CONST_INTERP template <typename ...Args> constexpr int fail3(Args... args) const { return 1 / 0; } // expected-warning {{division by zero}} \ // expected-note {{division by zero}} +#endif }; constexpr Bar<int> bar; static_assert(bar.fail1<int>()); // expected-error {{constant expression}} \ // expected-note {{in call to 'bar.fail1<int>()'}} static_assert(bar.fail2<int*, 42>()); // expected-error {{constant expression}} \ // expected-note {{in call to 'bar.fail2<int *, 42>()'}} +#ifndef NEW_CONST_INTERP static_assert(bar.fail3(3, 4UL, bar, &bar)); // expected-error {{constant expression}} \ // expected-note {{in call to 'bar.fail3<int, unsigned long, Bar<int>, const Bar<int> *>(3, 4, {}, &bar)'}} ---------------- yronglin wrote:
Oh, the problem is in the example: https://godbolt.org/z/PP868Eh87. But I think there seem to be problems on both sides. The 3rd argument looks incorrect. *New constant interpreter:* ``` <source>:19:15: note: in call to '&bar->fail3<int, unsigned long, Bar<int>, const Bar<int> *>(3, 4, &bar, &bar)' 19 | static_assert(bar.fail3(3, 4UL, bar, &bar)); // expected-error {{constant expression}} \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3 warnings and 3 errors generated. ``` *Current constant interpreter:* ``` <source>:19:15: note: in call to 'bar.fail3<int, unsigned long, Bar<int>, const Bar<int> *>(3, 4, {}, &bar)' 19 | static_assert(bar.fail3(3, 4UL, bar, &bar)); // expected-error {{constant expression}} \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3 warnings and 3 errors generated. ``` https://github.com/llvm/llvm-project/pull/102170 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits