summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@fb.com>2021-07-30 17:25:08 -0700
committerEmilio Cobos Álvarez <emilio@crisal.io>2021-08-24 11:50:55 +0200
commitb71e73bfb58a7c70d6e1561b258b4f648246a374 (patch)
treecf4036af894091891626668f883959ce2b01e7a3 /tests
parentcf6edbd7b0dc59b82311b65dcb62d5993349f577 (diff)
Detect and avoid cycles when resolving items.
These can happen in certain cases involving incomplete qualified dependent types. To avoid looping forever, we need to check for them. Closes #2085.
Diffstat (limited to 'tests')
-rw-r--r--tests/expectations/tests/qualified-dependent-types.rs17
-rw-r--r--tests/headers/qualified-dependent-types.hpp16
2 files changed, 33 insertions, 0 deletions
diff --git a/tests/expectations/tests/qualified-dependent-types.rs b/tests/expectations/tests/qualified-dependent-types.rs
new file mode 100644
index 00000000..f1b2c845
--- /dev/null
+++ b/tests/expectations/tests/qualified-dependent-types.rs
@@ -0,0 +1,17 @@
+#![allow(
+ dead_code,
+ non_snake_case,
+ non_camel_case_types,
+ non_upper_case_globals
+)]
+
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct Foo {
+ pub _address: u8,
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct Bar {
+ pub _address: u8,
+}
diff --git a/tests/headers/qualified-dependent-types.hpp b/tests/headers/qualified-dependent-types.hpp
new file mode 100644
index 00000000..fcdfc87c
--- /dev/null
+++ b/tests/headers/qualified-dependent-types.hpp
@@ -0,0 +1,16 @@
+// Issue #2085.
+
+template<typename T>
+struct Foo;
+
+template<typename T, typename U>
+struct Bar {};
+
+template<typename T>
+struct Bar<T, void> {
+ using BarDependent = typename Foo<T>::Dependent;
+ void method(const BarDependent &);
+};
+
+template<typename T>
+void Bar<T, void>::method(const BarDependent &) {}