================
@@ -24,6 +44,103 @@ using enum E;
 #endif
 }
 
+namespace cwg2627 { // cwg2627: 19
+#if __cplusplus >= 202002L
+struct C {
+  long long i : 8;
+  friend auto operator<=>(C, C) = default;
+};
+
+void f() {
+  C x{1}, y{2};
+  static_cast<void>(x <=> y);
+  static_cast<void>(x.i <=> y.i);
+}
+
+template<typename T>
+struct CDependent {
+  T i : 8;
+  friend auto operator<=>(CDependent, CDependent) = default;
+};
+
+template<typename T>
+concept three_way_comparable = requires(T t) { { t <=> t }; };
+template<typename T>
+concept bf_three_way_comparable = requires(T t) { { t.i <=> t.i }; };
+static_assert(three_way_comparable<CDependent<long long>>);
+static_assert(bf_three_way_comparable<CDependent<long long>>);
+#endif
+
+#if __cplusplus >= 201103L
+template<int W>
+struct D {
+  __int128 i : W;
+};
+
+template<int W>
+std::int64_t f(D<W> d) {
+    return std::int64_t{ d.i }; // #cwg2627-f
+}
+
+template std::int64_t f(D<63>);
+template std::int64_t f(D<64>);
+template std::int64_t f(D<65>);
+// since-cxx11-error-re@#cwg2627-f {{non-constant-expression cannot be 
narrowed from type '__int128' to 'std::int64_t' (aka '{{.+}}') in initializer 
list}}
+//   since-cxx11-note@-2 {{in instantiation of function template 
specialization 'cwg2627::f<65>' requested here}}
+//   since-cxx11-note@#cwg2627-f {{insert an explicit cast to silence this 
issue}}
+
+template<typename Target, typename Source>
+Target g(Source x) {
+    return Target{ x.i }; // #cwg2627-g
+}
+
+template<typename T, int N>
+struct E {
+  T i : N;
+};
+
+template std::int16_t g(E<int, 16>);
+template std::int16_t g(E<unsigned, 15>);
+template std::int16_t g(E<unsigned, 16>);
+// since-cxx11-error-re@#cwg2627-g {{non-constant-expression cannot be 
narrowed from type 'unsigned int' to '{{.+}}' in initializer list}}
----------------
Endilll wrote:

You should move expected directives under the line the error is emitted for. 
This makes you consistent with the rest of the DR tests, and match the original 
intention of closely tracking compiler output as seen on e.g. Compiler Explorer.

https://github.com/llvm/llvm-project/pull/78112
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to