[PATCH] D141818: Add test for an invalid requirement in requires expr.

Utkarsh Saxena via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Jan 15 22:38:13 PST 2023


usaxena95 created this revision.
usaxena95 added reviewers: ilya-biryukov, erichkeane.
Herald added a project: All.
usaxena95 requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

The one introduced in D140547 <https://reviews.llvm.org/D140547> was brittle. Fixing max template depth to
a small value would still test the same issue without causing actual
stack exhaustion.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D141818

Files:
  clang/test/SemaCXX/invalid-requirement-requires-expr.cpp


Index: clang/test/SemaCXX/invalid-requirement-requires-expr.cpp
===================================================================
--- /dev/null
+++ 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}}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D141818.489433.patch
Type: text/x-patch
Size: 1204 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230116/5a9b9813/attachment.bin>


More information about the cfe-commits mailing list