--- /dev/null
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -x c++ -std=c++20 %s -verify -fmodules -fmodules-cache-path=%t
+#pragma clang module build std
+module std [system] {
+ module concepts [system] {
+ module assignable [system] {
+ }
+ export *
+ }
+ module functional [system] {
+ export *
+ }
+
+
+ module type_traits [system] {
+ export *
+ }
+}
+
+#pragma clang module contents
+#pragma clang module begin std.type_traits
+namespace std {
+template<class _Tp, class _Up>
+concept same_as = __is_same(_Tp, _Up);
+
+template <class...>
+struct common_reference;
+
+template <class _Tp, class _Up> struct common_reference<_Tp, _Up>
+{
+ using type = _Tp;
+};
+}
+#pragma clang module end // type_traits
+
+#pragma clang module begin std.concepts.assignable
+#pragma clang module import std.type_traits
+namespace std {
+template<class _Tp, class _Up>
+concept common_reference_with =
+ same_as<typename common_reference<_Tp, _Up>::type, typename common_reference<_Up, _Tp>::type>;
+}
+namespace std {
+template<class _Lhs, class _Rhs>
+concept assignable_from =
+ common_reference_with<const __remove_reference_t(_Lhs)&, const __remove_reference_t(_Rhs)&> ;
+}
+#pragma clang module end // std.concepts.assignable
+
+#pragma clang module begin std.functional
+#pragma clang module import std.concepts.assignable
+namespace std {
+template<class _Sp, class _Ip>
+concept sentinel_for = assignable_from<_Ip&, _Ip>;
+template <class _Sp, class _Ip>
+concept nothrow_sentinel_for = sentinel_for<_Sp, _Ip>;
+}
+#pragma clang module end // std::functional
+#pragma clang module endbuild // contents
+
+
+#pragma clang module import std.functional
+constexpr bool ntsf_subsumes_sf(std::nothrow_sentinel_for<char*> auto) requires true {
+ return true;
+}
+constexpr bool ntsf_subsumes_sf(std::sentinel_for<char*> auto);
+static_assert(ntsf_subsumes_sf("foo"));
+
+// Note: Doing diagnostics verify lines in the individual modules isn't
+// permitted, and using 'bookmarks' in a module also doesn't work, so we're
+// forced to diagnose this by line-number.
+//
+// Check to ensure that this error happens, prior to a revert of a concepts
+// sugaring patch, this diagnostic didn't happen correctly.
+
+// expected-error@* {{partial specialization of 'common_reference<_Tp, _Up>' must be imported from module 'std.type_traits' before it is required}}
+// expected-note@63 {{while substituting into concept arguments here}}
+// expected-note@*{{partial specialization declared here is not reachable}}