Author: Utkarsh Saxena Date: 2023-01-16T12:28:49+01:00 New Revision: 15ad244670a9ef0bf93b7c8a598586d4a841b197
URL: https://github.com/llvm/llvm-project/commit/15ad244670a9ef0bf93b7c8a598586d4a841b197 DIFF: https://github.com/llvm/llvm-project/commit/15ad244670a9ef0bf93b7c8a598586d4a841b197.diff LOG: Add test for an invalid requirement in requires expr. The one introduced in D140547 was brittle. Fixing max template depth to a small value would still test the same issue without causing actual stack exhaustion. Differential Revision: https://reviews.llvm.org/D141818 Added: clang/test/SemaCXX/invalid-requirement-requires-expr.cpp Modified: Removed: ################################################################################ diff --git a/clang/test/SemaCXX/invalid-requirement-requires-expr.cpp b/clang/test/SemaCXX/invalid-requirement-requires-expr.cpp new file mode 100644 index 000000000000..097ada3caa13 --- /dev/null +++ b/clang/test/SemaCXX/invalid-requirement-requires-expr.cpp @@ -0,0 +1,27 @@ +// RUN: %clang -fsyntax-only -std=c++2a -Xclang -verify -ftemplate-depth=5 -ftemplate-backtrace-limit=4 %s + +// RequiresExpr contains invalid requirement. (Eg. Highly recurisive template). +template<int x> +struct A { static constexpr bool far(); }; +class B { + bool data_member; + friend struct A<1>; +}; + +template<> +constexpr bool A<0>::far() { return true; } + +template<int x> +constexpr bool A<x>::far() { + return requires(B b) { + b.data_member; + requires A<x-1>::far(); // #Invalid + // expected-error@#Invalid {{recursive template instantiation exceeded maximum depth}} + // expected-note@#Invalid {{in instantiation}} + // expected-note@#Invalid 2 {{while}} + // expected-note@#Invalid {{contexts in backtrace}} + // expected-note@#Invalid {{increase recursive template instantiation depth}} + }; +} +static_assert(A<1>::far()); +static_assert(!A<6>::far()); // expected-note {{in instantiation of member function}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits