/* Module duplicate checking can have t1 = new, t2 =
existing, and they should be considered matching at this
point. */
- && (DECL_CONTEXT (t1) != map_context_from
- && DECL_CONTEXT (t2) != map_context_to))
+ && !(DECL_CONTEXT (t1) == map_context_from
+ && DECL_CONTEXT (t2) == map_context_to))
/* When comparing hash table entries, only an exact match is
good enough; we don't want to replace 'this' with the
version from another function. But be more flexible
--- /dev/null
+// PR 98372 ICE due to incorrect type compare
+// { dg-do compile { target c++11 } }
+
+template <typename _Tp> using remove_pointer_t = typename _Tp ::type;
+template <bool> struct enable_if;
+template <bool _Cond, typename>
+using enable_if_t = typename enable_if<_Cond>::type;
+template <typename> bool is_convertible_v;
+template <typename, unsigned long = 0> class Span;
+template <typename T, unsigned long> class Span {
+ using element_type = T;
+ template <unsigned long N>
+ Span(element_type (&arr)[N],
+ enable_if_t<is_convertible_v<remove_pointer_t<decltype(data(arr))>>,
+ decltype(nullptr)>);
+};
+template <typename T> class Span<T> {
+ using element_type = T;
+ template <unsigned long N>
+ Span(element_type (&arr)[N],
+ enable_if_t<is_convertible_v<remove_pointer_t<decltype(data(arr))>>,
+ decltype(nullptr)>);
+};
+
+struct aaa
+{
+ Span<char> data0;
+};