Issue 64723
Summary Crash with concepts in diagnoseWellFormedUnsatisfiedConstraintExpr
Labels clang:frontend, crash-on-invalid
Assignees zyn0217
Reporter zyn0217
    The following code hits an assertion from `diagnoseWellFormedUnsatisfiedConstraintExpr`:
```cpp
template <typename _Iterator> class normal_iterator {};

/// is_convertible
template <typename From, typename To> struct is_convertible {};

template <typename From, typename To>
inline constexpr bool is_convertible_v = is_convertible<From, To>::value;

template <typename From, typename To>
concept convertible_to = is_convertible_v<From, To>;

template <typename IteratorL, typename IteratorR>
  requires requires(IteratorL __lhs, IteratorR __rhs) {
    { __lhs == __rhs } -> convertible_to<bool>;
  }
constexpr bool operator==(normal_iterator<IteratorL> __lhs,
 normal_iterator<IteratorR> __rhs) {
  return __lhs.base() == __rhs.base();
}

template <typename T> struct Vector {
 normal_iterator<T> begin() const { return {}; }
  normal_iterator<T> end() const { return {}; }
};

class Object;

void function(Vector<Object *> objects) { objects.begin() == objects.end(); }
```

https://clang.godbolt.org/z/evchKETWq

See https://github.com/clangd/clangd/issues/1726 for analysis.

_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to