| 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