================
@@ -197,6 +198,87 @@ def test_is_const_method(self):
         self.assertTrue(foo.is_const_method())
         self.assertFalse(bar.is_const_method())
 
+    def test_get_method_qualifiers(self):
+        """Ensure Cursor.get_method_qualifiers works."""
+        source = """
+        class X {
+            void unqualified();
+            void c() const;
+            void v() volatile;
+            void cv() const volatile;
+            void r() __restrict;
+            void cvr() const volatile __restrict;
+        };
+        """
+        tu = get_tu(source, lang="cpp")
+
+        unqualified = get_cursor(tu, "unqualified")
+        c = get_cursor(tu, "c")
+        v = get_cursor(tu, "v")
+        cv = get_cursor(tu, "cv")
+        r = get_cursor(tu, "r")
+        cvr = get_cursor(tu, "cvr")
+        self.assertIsNotNone(unqualified)
+        self.assertIsNotNone(c)
+        self.assertIsNotNone(v)
+        self.assertIsNotNone(cv)
+        self.assertIsNotNone(r)
+        self.assertIsNotNone(cvr)
+
+        q = unqualified.get_method_qualifiers()
+        self.assertIsInstance(q, Qualifiers)
+        self.assertFalse(q.Const)
+        self.assertFalse(q.Volatile)
+        self.assertFalse(q.Restrict)
+
+        q = c.get_method_qualifiers()
+        self.assertTrue(q.Const)
+        self.assertFalse(q.Volatile)
+        self.assertFalse(q.Restrict)
+
+        q = v.get_method_qualifiers()
+        self.assertFalse(q.Const)
+        self.assertTrue(q.Volatile)
+        self.assertFalse(q.Restrict)
+
+        q = cv.get_method_qualifiers()
+        self.assertTrue(q.Const)
+        self.assertTrue(q.Volatile)
+        self.assertFalse(q.Restrict)
+
+        q = r.get_method_qualifiers()
+        self.assertFalse(q.Const)
+        self.assertFalse(q.Volatile)
+        self.assertTrue(q.Restrict)
+
+        q = cvr.get_method_qualifiers()
+        self.assertTrue(q.Const)
+        self.assertTrue(q.Volatile)
+        self.assertTrue(q.Restrict)
+
+        # Explicit object member functions have no method qualifiers
+        source = """
+        struct S {
+            void explicit_const(this const S&);
+            void explicit_cv(this const volatile S&);
+        };
+        """
+        tu = get_tu(source, lang="cpp", flags=["-std=c++23"])
+        ec = get_cursor(tu, "explicit_const")
+        ecv = get_cursor(tu, "explicit_cv")
+        self.assertIsNotNone(ec)
+        self.assertIsNotNone(ecv)
+
+        q = ec.get_method_qualifiers()
+        self.assertFalse(q.Const)
+        self.assertFalse(q.Volatile)
+        self.assertFalse(q.Restrict)
+
+        q = ecv.get_method_qualifiers()
+        self.assertFalse(q.Const)
+        self.assertFalse(q.Volatile)
+        self.assertFalse(q.Restrict)
+
----------------
DeinAlptraum wrote:

This should be split into a separate test case

https://github.com/llvm/llvm-project/pull/183305
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to