[PATCH] D121517: Incorrectly accepts overload of (T&, int) vs. (T const&, U) #54347

2022-03-12 Thread Ed Catmur via Phabricator via cfe-commits
ecatmur created this revision.
Herald added a project: All.
ecatmur requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

clang correctly rejects as ambiguous:

template int f(T&, int); // 1
template int f(T const&, U); // 2
int g(int const& i) { return f(i, 0); }
However if the order of template parameters in (2) is swapped:

template int f(T&, int); // 1
template int f(T const&, U); // 2'
int g(int const& i) { return f(i, 0); }
clang incorrectly accepts, calling (1).

All versions tested up to current trunk incorrectly accept; 3.6 and older also 
incorrectly accept the first case.
gcc correctly rejects both cases since 4.5, incorrectly accepting in earlier 
versions.
icc 13 onwards correctly rejects.
MSVC correctly rejects (although it has other bugs in this area).

The problem appears to be that DeduceTemplateArgumentsByTypeMatch incorrectly 
believes that P and A are distinct; P is type-parameter-0-1 whereas A is 
type-parameter-0-0.

I believe this can be fixed simply by removing the hasSameUnqualifiedType 
check, since if the types are dissimilar the call would fail later anyway,


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D121517

Files:
  clang/lib/Sema/SemaTemplateDeduction.cpp
  clang/test/SemaCXX/overload-call.cpp


Index: clang/test/SemaCXX/overload-call.cpp
===
--- clang/test/SemaCXX/overload-call.cpp
+++ clang/test/SemaCXX/overload-call.cpp
@@ -688,3 +688,13 @@
 f(pmf);
   }
 }
+
+namespace PR54347 {
+  template void f(T&, int);
+  template void f(T const&, U);
+  void g(int const& i) { f(i, 0); } // expected-error {{ambiguous}}
+
+  template void f(T(&)[5], int);
+  template void f(T const(&)[5], U);
+  void g(int const(& a)[5]) { f(a, 0); } // expected-error {{ambiguous}}
+}
Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -1358,7 +1358,7 @@
 if (ARef)
   A = A->getPointeeType();
 
-if (PRef && ARef && S.Context.hasSameUnqualifiedType(P, A)) {
+if (PRef && ARef) {
   // C++11 [temp.deduct.partial]p9:
   //   If, for a given type, deduction succeeds in both directions (i.e.,
   //   the types are identical after the transformations above) and both


Index: clang/test/SemaCXX/overload-call.cpp
===
--- clang/test/SemaCXX/overload-call.cpp
+++ clang/test/SemaCXX/overload-call.cpp
@@ -688,3 +688,13 @@
 f(pmf);
   }
 }
+
+namespace PR54347 {
+  template void f(T&, int);
+  template void f(T const&, U);
+  void g(int const& i) { f(i, 0); } // expected-error {{ambiguous}}
+
+  template void f(T(&)[5], int);
+  template void f(T const(&)[5], U);
+  void g(int const(& a)[5]) { f(a, 0); } // expected-error {{ambiguous}}
+}
Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -1358,7 +1358,7 @@
 if (ARef)
   A = A->getPointeeType();
 
-if (PRef && ARef && S.Context.hasSameUnqualifiedType(P, A)) {
+if (PRef && ARef) {
   // C++11 [temp.deduct.partial]p9:
   //   If, for a given type, deduction succeeds in both directions (i.e.,
   //   the types are identical after the transformations above) and both
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D121517: Incorrectly accepts overload of (T&, int) vs. (T const&, U) #54347

2022-03-12 Thread Ed Catmur via Phabricator via cfe-commits
ecatmur added a comment.

https://github.com/llvm/llvm-project/issues/54347


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D121517/new/

https://reviews.llvm.org/D121517

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D121517: Incorrectly accepts overload of (T&, int) vs. (T const&, U) #54347

2022-03-12 Thread Ed Catmur via Phabricator via cfe-commits
ecatmur updated this revision to Diff 414824.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D121517/new/

https://reviews.llvm.org/D121517

Files:
  clang/lib/Sema/SemaTemplateDeduction.cpp
  clang/test/SemaCXX/overload-call.cpp


Index: clang/test/SemaCXX/overload-call.cpp
===
--- clang/test/SemaCXX/overload-call.cpp
+++ clang/test/SemaCXX/overload-call.cpp
@@ -688,3 +688,13 @@
 f(pmf);
   }
 }
+
+namespace PR54347 {
+  template void f(T&, int);
+  template void f(T const&, U);
+  void g(int const& i) { f(i, 0); } // expected-error {{ambiguous}}
+
+  template void f(T(&)[5], int);
+  template void f(T const(&)[5], U);
+  void g(int const(& a)[5]) { f(a, 0); } // expected-error {{ambiguous}}
+}
Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -1358,7 +1358,7 @@
 if (ARef)
   A = A->getPointeeType();
 
-if (PRef && ARef && S.Context.hasSameUnqualifiedType(P, A)) {
+if (PRef && ARef) {
   // C++11 [temp.deduct.partial]p9:
   //   If, for a given type, deduction succeeds in both directions (i.e.,
   //   the types are identical after the transformations above) and both


Index: clang/test/SemaCXX/overload-call.cpp
===
--- clang/test/SemaCXX/overload-call.cpp
+++ clang/test/SemaCXX/overload-call.cpp
@@ -688,3 +688,13 @@
 f(pmf);
   }
 }
+
+namespace PR54347 {
+  template void f(T&, int);
+  template void f(T const&, U);
+  void g(int const& i) { f(i, 0); } // expected-error {{ambiguous}}
+
+  template void f(T(&)[5], int);
+  template void f(T const(&)[5], U);
+  void g(int const(& a)[5]) { f(a, 0); } // expected-error {{ambiguous}}
+}
Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -1358,7 +1358,7 @@
 if (ARef)
   A = A->getPointeeType();
 
-if (PRef && ARef && S.Context.hasSameUnqualifiedType(P, A)) {
+if (PRef && ARef) {
   // C++11 [temp.deduct.partial]p9:
   //   If, for a given type, deduction succeeds in both directions (i.e.,
   //   the types are identical after the transformations above) and both
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D121517: Incorrectly accepts overload of (T&, int) vs. (T const&, U) #54347

2022-03-12 Thread Ed Catmur via Phabricator via cfe-commits
ecatmur updated this revision to Diff 414825.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D121517/new/

https://reviews.llvm.org/D121517

Files:
  clang/lib/Sema/SemaTemplateDeduction.cpp
  clang/test/SemaCXX/overload-call.cpp


Index: clang/test/SemaCXX/overload-call.cpp
===
--- clang/test/SemaCXX/overload-call.cpp
+++ clang/test/SemaCXX/overload-call.cpp
@@ -688,3 +688,13 @@
 f(pmf);
   }
 }
+
+namespace PR54347 {
+  template void f(T&, int); // expected-note {{candidate function}}
+  template void f(T const&, U) // expected-note {{candidate 
function}};
+  void g(int const& i) { f(i, 0); } // expected-error {{ambiguous}}
+
+  template void f(T(&)[5], int); // expected-note {{candidate 
function}}
+  template void f(T const(&)[5], U); // expected-note 
{{candidate function}}
+  void g(int const(& a)[5]) { f(a, 0); } // expected-error {{ambiguous}}
+}
Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -1358,7 +1358,7 @@
 if (ARef)
   A = A->getPointeeType();
 
-if (PRef && ARef && S.Context.hasSameUnqualifiedType(P, A)) {
+if (PRef && ARef) {
   // C++11 [temp.deduct.partial]p9:
   //   If, for a given type, deduction succeeds in both directions (i.e.,
   //   the types are identical after the transformations above) and both


Index: clang/test/SemaCXX/overload-call.cpp
===
--- clang/test/SemaCXX/overload-call.cpp
+++ clang/test/SemaCXX/overload-call.cpp
@@ -688,3 +688,13 @@
 f(pmf);
   }
 }
+
+namespace PR54347 {
+  template void f(T&, int); // expected-note {{candidate function}}
+  template void f(T const&, U) // expected-note {{candidate function}};
+  void g(int const& i) { f(i, 0); } // expected-error {{ambiguous}}
+
+  template void f(T(&)[5], int); // expected-note {{candidate function}}
+  template void f(T const(&)[5], U); // expected-note {{candidate function}}
+  void g(int const(& a)[5]) { f(a, 0); } // expected-error {{ambiguous}}
+}
Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -1358,7 +1358,7 @@
 if (ARef)
   A = A->getPointeeType();
 
-if (PRef && ARef && S.Context.hasSameUnqualifiedType(P, A)) {
+if (PRef && ARef) {
   // C++11 [temp.deduct.partial]p9:
   //   If, for a given type, deduction succeeds in both directions (i.e.,
   //   the types are identical after the transformations above) and both
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D121517: Incorrectly accepts overload of (T&, int) vs. (T const&, U) #54347

2022-03-12 Thread Ed Catmur via Phabricator via cfe-commits
ecatmur updated this revision to Diff 414826.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D121517/new/

https://reviews.llvm.org/D121517

Files:
  clang/lib/Sema/SemaTemplateDeduction.cpp
  clang/test/SemaCXX/overload-call.cpp


Index: clang/test/SemaCXX/overload-call.cpp
===
--- clang/test/SemaCXX/overload-call.cpp
+++ clang/test/SemaCXX/overload-call.cpp
@@ -688,3 +688,13 @@
 f(pmf);
   }
 }
+
+namespace PR54347 {
+  template void f(T&, int); // expected-note {{candidate function}}
+  template void f(T const&, U); // expected-note {{candidate 
function}}
+  void g(int const& i) { f(i, 0); } // expected-error {{ambiguous}}
+
+  template void f(T(&)[5], int); // expected-note {{candidate 
function}}
+  template void f(T const(&)[5], U); // expected-note 
{{candidate function}}
+  void g(int const(& a)[5]) { f(a, 0); } // expected-error {{ambiguous}}
+}
Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -1358,7 +1358,7 @@
 if (ARef)
   A = A->getPointeeType();
 
-if (PRef && ARef && S.Context.hasSameUnqualifiedType(P, A)) {
+if (PRef && ARef) {
   // C++11 [temp.deduct.partial]p9:
   //   If, for a given type, deduction succeeds in both directions (i.e.,
   //   the types are identical after the transformations above) and both


Index: clang/test/SemaCXX/overload-call.cpp
===
--- clang/test/SemaCXX/overload-call.cpp
+++ clang/test/SemaCXX/overload-call.cpp
@@ -688,3 +688,13 @@
 f(pmf);
   }
 }
+
+namespace PR54347 {
+  template void f(T&, int); // expected-note {{candidate function}}
+  template void f(T const&, U); // expected-note {{candidate function}}
+  void g(int const& i) { f(i, 0); } // expected-error {{ambiguous}}
+
+  template void f(T(&)[5], int); // expected-note {{candidate function}}
+  template void f(T const(&)[5], U); // expected-note {{candidate function}}
+  void g(int const(& a)[5]) { f(a, 0); } // expected-error {{ambiguous}}
+}
Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -1358,7 +1358,7 @@
 if (ARef)
   A = A->getPointeeType();
 
-if (PRef && ARef && S.Context.hasSameUnqualifiedType(P, A)) {
+if (PRef && ARef) {
   // C++11 [temp.deduct.partial]p9:
   //   If, for a given type, deduction succeeds in both directions (i.e.,
   //   the types are identical after the transformations above) and both
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D121517: Incorrectly accepts overload of (T&, int) vs. (T const&, U) #54347

2022-03-12 Thread Ed Catmur via Phabricator via cfe-commits
ecatmur updated this revision to Diff 414848.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D121517/new/

https://reviews.llvm.org/D121517

Files:
  clang/lib/Sema/SemaTemplateDeduction.cpp
  clang/test/SemaCXX/overload-call.cpp


Index: clang/test/SemaCXX/overload-call.cpp
===
--- clang/test/SemaCXX/overload-call.cpp
+++ clang/test/SemaCXX/overload-call.cpp
@@ -688,3 +688,13 @@
 f(pmf);
   }
 }
+
+namespace PR54347 {
+  template void f1(T&, int); // expected-note {{candidate function}}
+  template void f1(T const&, U); // expected-note 
{{candidate function}}
+  void g1(int const& i) { f1(i, 0); } // expected-error {{ambiguous}}
+
+  template void f2(T(&)[5], int); // expected-note {{candidate 
function}}
+  template void f2(T const(&)[5], U); // expected-note 
{{candidate function}}
+  void g2(int const(& a)[5]) { f2(a, 0); } // expected-error {{ambiguous}}
+}
Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -1358,7 +1358,7 @@
 if (ARef)
   A = A->getPointeeType();
 
-if (PRef && ARef && S.Context.hasSameUnqualifiedType(P, A)) {
+if (PRef && ARef) {
   // C++11 [temp.deduct.partial]p9:
   //   If, for a given type, deduction succeeds in both directions (i.e.,
   //   the types are identical after the transformations above) and both


Index: clang/test/SemaCXX/overload-call.cpp
===
--- clang/test/SemaCXX/overload-call.cpp
+++ clang/test/SemaCXX/overload-call.cpp
@@ -688,3 +688,13 @@
 f(pmf);
   }
 }
+
+namespace PR54347 {
+  template void f1(T&, int); // expected-note {{candidate function}}
+  template void f1(T const&, U); // expected-note {{candidate function}}
+  void g1(int const& i) { f1(i, 0); } // expected-error {{ambiguous}}
+
+  template void f2(T(&)[5], int); // expected-note {{candidate function}}
+  template void f2(T const(&)[5], U); // expected-note {{candidate function}}
+  void g2(int const(& a)[5]) { f2(a, 0); } // expected-error {{ambiguous}}
+}
Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -1358,7 +1358,7 @@
 if (ARef)
   A = A->getPointeeType();
 
-if (PRef && ARef && S.Context.hasSameUnqualifiedType(P, A)) {
+if (PRef && ARef) {
   // C++11 [temp.deduct.partial]p9:
   //   If, for a given type, deduction succeeds in both directions (i.e.,
   //   the types are identical after the transformations above) and both
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D134231: [clang][C++20] p0960 Allow initializing aggregates from a parenthesized list of values

2022-09-19 Thread Ed Catmur via Phabricator via cfe-commits
ecatmur created this revision.
ecatmur added a reviewer: clang-language-wg.
Herald added subscribers: ChuanqiXu, JDevlieghere.
Herald added a project: All.
ecatmur requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

- p0960 Allow initializing aggregates from a parenthesized list of values
- p1975 Fixing the wording of parenthesized aggregate-initialization

Follows gcc for the most part, except for coroutines (cf. 
https://cpplang.slack.com/archives/CBTFTLR9R/p1657730176797929)

Fixes https://github.com/llvm/llvm-project/issues/53627

In competition with https://reviews.llvm.org/D129531, sorry - I got frustrated 
waiting.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D134231

Files:
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/include/clang/Sema/Initialization.h
  clang/lib/Frontend/InitPreprocessor.cpp
  clang/lib/Sema/SemaCast.cpp
  clang/lib/Sema/SemaCoroutine.cpp
  clang/lib/Sema/SemaExprCXX.cpp
  clang/lib/Sema/SemaInit.cpp
  clang/test/CXX/class/class.compare/class.spaceship/p1.cpp
  clang/test/CXX/over/over.match/over.match.viable/p3.cpp
  clang/test/CXX/temp/temp.decls/temp.variadic/p4.cpp
  clang/test/Lexer/cxx-features.cpp
  clang/test/SemaCXX/cxx20-p0960-aggregate-paren-init.cpp
  clang/test/SemaCXX/cxx2a-explicit-bool.cpp

Index: clang/test/SemaCXX/cxx2a-explicit-bool.cpp
===
--- clang/test/SemaCXX/cxx2a-explicit-bool.cpp
+++ clang/test/SemaCXX/cxx2a-explicit-bool.cpp
@@ -30,6 +30,9 @@
 A<-1> a(0);
 // expected-error@-1 {{no matching constructor}}
 // expected-note@-2 {{in instantiation of template class}}
+#if __cpp_aggregate_paren_init >= 201902
+// expected-note@-4{{candidate aggregate parenthesis initializer not viable}}
+#endif
 
 template
 struct B {
Index: clang/test/SemaCXX/cxx20-p0960-aggregate-paren-init.cpp
===
--- /dev/null
+++ clang/test/SemaCXX/cxx20-p0960-aggregate-paren-init.cpp
@@ -0,0 +1,239 @@
+// RUN: %clang_cc1 -std=c++20 -verify %s
+// RUN: %clang_cc1 -std=c++17 -verify %s
+
+// p0960 Allow initializing aggregates from a parenthesized list of values
+// p1975 Fixing the wording of parenthesized aggregate-initialization
+// class.temporary/6
+// dcl.init/17.5, 17.6
+
+#if __cplusplus >= 202002 && __cpp_aggregate_paren_init < 201902
+#   error "should set __cpp_aggregate_paren_init in C++20 mode"
+#endif
+
+// definitions for std::move
+namespace std { template  T &&move(T &); }
+// definitions for std::is_constructible
+namespace std {
+template
+inline constexpr bool is_constructible_v = __is_constructible(T, A...);
+}
+
+int i1[](1, 2, 3);
+#if __cpp_aggregate_paren_init < 201902
+// expected-error@-2{{array initializer must be an initializer list}}
+#else
+static_assert(sizeof i1 == sizeof(int[3]));
+#endif
+
+int i2[2](1, 2, 3);
+#if __cpp_aggregate_paren_init < 201902
+// expected-error@-2{{array initializer must be an initializer list}}
+#else
+// expected-error@-4{{excess elements in array initializer}}
+#endif
+
+int i3[4](1, 2, 3);
+#if __cpp_aggregate_paren_init < 201902
+// expected-error@-2{{array initializer must be an initializer list}}
+#endif
+
+int i4[](1);
+#if __cpp_aggregate_paren_init < 201902
+// expected-error@-2{{array initializer must be an initializer list}}
+#else
+static_assert(sizeof i4 == sizeof(int[1]));
+#endif
+
+int *p1 = new int[](1, 2, 3);
+#if __cpp_aggregate_paren_init < 201902
+// expected-error@-2{{array 'new' cannot have initialization arguments}}
+#endif
+
+int *p2[2] = new int[2](1, 2, 3);
+#if __cpp_aggregate_paren_init < 201902
+// expected-error@-2{{array 'new' cannot have initialization arguments}}
+#else
+// expected-error@-4{{excess elements in array initializer}}
+#endif
+
+int *p3 = new int[4](1, 2, 3);
+#if __cpp_aggregate_paren_init < 201902
+// expected-error@-2{{array 'new' cannot have initialization arguments}}
+#endif
+
+struct E {
+#if __cpp_aggregate_paren_init >= 201902
+// expected-note@-2 +{{candidate constructor (the implicit copy constructor) not viable}}
+// expected-note@-3 +{{candidate constructor (the implicit move constructor) not viable}}
+#endif
+  E(int);
+#if __cpp_aggregate_paren_init >= 201902
+// expected-note@-2 +{{candidate constructor not viable: requires 1 argument, but 0 were provided}}
+#endif
+};
+
+E e1[3](1, 2, 3);
+#if __cpp_aggregate_paren_init < 201902
+// expected-error@-2{{array initializer must be an initializer list}}
+#endif
+
+E e2[4](1, 2, 3);
+#if __cpp_aggregate_paren_init < 201902
+// expected-error@-2{{array initializer must be an initializer list}}
+#else
+// expected-error@-4{{no matching constructor for initialization of 'E'}}
+// expected-note@-5{{in implicit initialization of array element 3 with omitted initializer}}
+#endif
+
+struct A {
+#if __cpp_aggregate_paren_init < 201902
+// expected-note@-2 +{{candidate constructor (the implicit copy constructor) no

[PATCH] D121517: Incorrectly accepts overload of (T&, int) vs. (T const&, U) #54347

2023-01-11 Thread Ed Catmur via Phabricator via cfe-commits
ecatmur added a comment.

ping


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D121517/new/

https://reviews.llvm.org/D121517

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D134231: [clang][C++20] p0960 Allow initializing aggregates from a parenthesized list of values

2022-11-06 Thread Ed Catmur via Phabricator via cfe-commits
ecatmur added a comment.

In D134231#3803380 , @shafik wrote:

> Hello Ed, thank you for picking up this work.
>
> I liked the approach in the first PR, did you consider reaching out to the 
> author is asking if it was ok to commandeer the work to allow it to move 
> forward?

Hi Shafik,

No, I didn't consider that - sorry! I felt that having done this work 
independently it was worth presenting separately. Sorry if I wasted anyone's 
time and happy to see that Alan has picked up the other PR. I'll close this as 
superseded if I can work out how.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D134231/new/

https://reviews.llvm.org/D134231

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits