[PATCH] D152259: [Clang] Reject increment of bool value in unevaluated contexts after C++17

2023-06-06 Thread Yurong via Phabricator via cfe-commits
yronglin added a comment.

In D152259#4399793 , @erichkeane 
wrote:

> In D152259#4399781 , @yronglin 
> wrote:
>
>> Thanks for your review @erichkeane ! Seems the CI failure not caused by this 
>> patch.
>
> I agree, I don't think it is related.

Thanks, landed in 540294845babbb2be909ea456323d7bc8a1763df 



Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D152259

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


[PATCH] D152259: [Clang] Reject increment of bool value in unevaluated contexts after C++17

2023-06-06 Thread Yurong via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG540294845bab: [Clang] Reject increment of bool value in 
unevaluated contexts after C++17 (authored by yronglin).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D152259

Files:
  clang/docs/ReleaseNotes.rst
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/test/SemaCXX/bool-increment-SFINAE.cpp


Index: clang/test/SemaCXX/bool-increment-SFINAE.cpp
===
--- /dev/null
+++ clang/test/SemaCXX/bool-increment-SFINAE.cpp
@@ -0,0 +1,37 @@
+// RUN: %clang_cc1 %std_cxx98-14 -fsyntax-only -verify=precxx17 %s
+// RUN: %clang_cc1 -std=c++17 -fsyntax-only -verify=expected %s
+// RUN: %clang_cc1 -std=c++17 -DFAILED_CXX17 -fsyntax-only -verify=failcxx17 %s
+// RUN: %clang_cc1 %std_cxx20- -fsyntax-only -verify=cxx20 %s
+// expected-no-diagnostics
+
+template auto f(T t) -> decltype(++t); // precxx17-warning 
{{incrementing expression of type bool is deprecated}}
+
+auto f(...) -> void;
+void g() { f(true); }
+
+#ifdef FAILED_CXX17
+
+template auto f1(T t) -> decltype(++t); // failcxx17-note {{candidate 
template ignored: substitution failure [with T = bool]: ISO C++17 does not 
allow incrementing expression of type bool}}
+auto f1(void) -> void; // failcxx17-note {{candidate function not viable: 
requires 0 arguments, but 1 was provided}}
+void g1() { f1(true); } // failcxx17-error {{no matching function for call to 
'f1'}}
+
+#endif
+
+#if __cplusplus >= 202002L
+template 
+concept can_increment = requires(T t) {
+  ++t;
+};
+
+template 
+void f() {
+  static_assert(requires(T t) { ++t; }); // cxx20-error {{static assertion 
failed due to requirement 'requires (bool t) { <>; }'}}
+}
+
+int main() {
+  f(); // cxx20-note {{in instantiation of function template 
specialization 'f' requested here}}
+  static_assert(!can_increment); 
+
+  return 0;
+}
+#endif
Index: clang/include/clang/Basic/DiagnosticSemaKinds.td
===
--- clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -7661,7 +7661,7 @@
   "incompatible with C++17">, InGroup;
 def ext_increment_bool : ExtWarn<
   "ISO C++17 does not allow incrementing expression of type bool">,
-  DefaultError, InGroup;
+  DefaultError, SFINAEFailure, InGroup;
 def err_increment_decrement_enum : Error<
   "cannot %select{decrement|increment}0 expression of enum type %1">;
 
Index: clang/docs/ReleaseNotes.rst
===
--- clang/docs/ReleaseNotes.rst
+++ clang/docs/ReleaseNotes.rst
@@ -476,6 +476,8 @@
 - Fix crash when passing a braced initializer list to a parentehsized aggregate
   initialization expression.
   (`#63008 `_).
+- Reject increment of bool value in unevaluated contexts after C++17.
+  (`#47517 `_).
 
 Bug Fixes to Compiler Builtins
 ^^


Index: clang/test/SemaCXX/bool-increment-SFINAE.cpp
===
--- /dev/null
+++ clang/test/SemaCXX/bool-increment-SFINAE.cpp
@@ -0,0 +1,37 @@
+// RUN: %clang_cc1 %std_cxx98-14 -fsyntax-only -verify=precxx17 %s
+// RUN: %clang_cc1 -std=c++17 -fsyntax-only -verify=expected %s
+// RUN: %clang_cc1 -std=c++17 -DFAILED_CXX17 -fsyntax-only -verify=failcxx17 %s
+// RUN: %clang_cc1 %std_cxx20- -fsyntax-only -verify=cxx20 %s
+// expected-no-diagnostics
+
+template auto f(T t) -> decltype(++t); // precxx17-warning {{incrementing expression of type bool is deprecated}}
+
+auto f(...) -> void;
+void g() { f(true); }
+
+#ifdef FAILED_CXX17
+
+template auto f1(T t) -> decltype(++t); // failcxx17-note {{candidate template ignored: substitution failure [with T = bool]: ISO C++17 does not allow incrementing expression of type bool}}
+auto f1(void) -> void; // failcxx17-note {{candidate function not viable: requires 0 arguments, but 1 was provided}}
+void g1() { f1(true); } // failcxx17-error {{no matching function for call to 'f1'}}
+
+#endif
+
+#if __cplusplus >= 202002L
+template 
+concept can_increment = requires(T t) {
+  ++t;
+};
+
+template 
+void f() {
+  static_assert(requires(T t) { ++t; }); // cxx20-error {{static assertion failed due to requirement 'requires (bool t) { <>; }'}}
+}
+
+int main() {
+  f(); // cxx20-note {{in instantiation of function template specialization 'f' requested here}}
+  static_assert(!can_increment); 
+
+  return 0;
+}
+#endif
Index: clang/include/clang/Basic/DiagnosticSemaKinds.td
===
--- clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -7661,7 

[PATCH] D152259: [Clang] Reject increment of bool value in unevaluated contexts after C++17

2023-06-06 Thread Erich Keane via Phabricator via cfe-commits
erichkeane added a comment.

In D152259#4399781 , @yronglin wrote:

> Thanks for your review @erichkeane ! Seems the CI failure not caused by this 
> patch.

I agree, I don't think it is related.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D152259

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


[PATCH] D152259: [Clang] Reject increment of bool value in unevaluated contexts after C++17

2023-06-06 Thread Yurong via Phabricator via cfe-commits
yronglin added a comment.

Thanks for your review @erichkeane ! Seems the CI failure not caused by this 
patch.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D152259

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