Author: Vlad Serebrennikov
Date: 2024-06-21T13:50:03+04:00
New Revision: 2b5d1fb889fca7287858db0791bfecc1465f23e1

URL: 
https://github.com/llvm/llvm-project/commit/2b5d1fb889fca7287858db0791bfecc1465f23e1
DIFF: 
https://github.com/llvm/llvm-project/commit/2b5d1fb889fca7287858db0791bfecc1465f23e1.diff

LOG: [clang] Add test for CWG2811 "Clarify "use" of main" (#96168)

This patch covers
[CWG2811](https://cplusplus.github.io/CWG/issues/2811.html) "Clarify
"use" of main", basically adding a test for `-Wmain`, focusing on usages
of `main` in unevaluated contexts.

To my understanding, the diagnostic message is based on the wording, so
I updated it based on the new wording. I also replaces "ISO C++
requires" with a phrasing that explicitly says "extension".

Added: 
    

Modified: 
    clang/include/clang/Basic/DiagnosticSemaKinds.td
    clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp
    clang/test/CXX/drs/cwg28xx.cpp
    clang/www/cxx_dr_status.html

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td 
b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 9bf55acbac011..25a87078a5709 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -973,7 +973,7 @@ def err_main_global_variable :
 def warn_main_redefined : Warning<"variable named 'main' with external linkage 
"
     "has undefined behavior">, InGroup<Main>;
 def ext_main_used : Extension<
-  "ISO C++ does not allow 'main' to be used by a program">, InGroup<Main>;
+    "referring to 'main' within an expression is a Clang extension">, 
InGroup<Main>;
 
 /// parser diagnostics
 def ext_no_declarators : ExtWarn<"declaration does not declare anything">,

diff  --git a/clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp 
b/clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp
index 506232ebacc4c..6614003fb93dd 100644
--- a/clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp
+++ b/clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp
@@ -16,9 +16,9 @@ int main(int argc, char **argv)
   = delete; // expected-error {{'main' is not allowed to be deleted}}
 #else
 {
-  int (*pmain)(int, char**) = &main; // expected-error {{ISO C++ does not 
allow 'main' to be used by a program}}
+  int (*pmain)(int, char**) = &main; // expected-error {{referring to 'main' 
within an expression is a Clang extension}}
 
   if (argc)
-    main(0, 0); // expected-error {{ISO C++ does not allow 'main' to be used 
by a program}}
+    main(0, 0); // expected-error {{referring to 'main' within an expression 
is a Clang extension}}
 }
 #endif

diff  --git a/clang/test/CXX/drs/cwg28xx.cpp b/clang/test/CXX/drs/cwg28xx.cpp
index 67aa34484fe8b..c77bd433d8e21 100644
--- a/clang/test/CXX/drs/cwg28xx.cpp
+++ b/clang/test/CXX/drs/cwg28xx.cpp
@@ -6,6 +6,30 @@
 // RUN: %clang_cc1 -std=c++23 -pedantic-errors 
-verify=expected,since-cxx20,since-cxx23 %s
 // RUN: %clang_cc1 -std=c++2c -pedantic-errors 
-verify=expected,since-cxx20,since-cxx23,since-cxx26 %s
 
+
+int main() {} // required for cwg2811
+
+namespace cwg2811 { // cwg2811: 3.5
+#if __cplusplus >= 201103L
+void f() {
+  (void)[&] {
+    using T = decltype(main);
+    // expected-error@-1 {{referring to 'main' within an expression is a Clang 
extension}}
+  };
+  using T2 = decltype(main);
+  // expected-error@-1 {{referring to 'main' within an expression is a Clang 
extension}}
+}
+
+using T = decltype(main);
+// expected-error@-1 {{referring to 'main' within an expression is a Clang 
extension}}
+
+int main();
+
+using U = decltype(main);
+using U2 = decltype(&main);
+#endif
+} // namespace cwg2811
+
 namespace cwg2819 { // cwg2819: 19 tentatively ready 2023-12-01
 #if __cpp_constexpr >= 202306L
   constexpr void* p = nullptr;

diff  --git a/clang/www/cxx_dr_status.html b/clang/www/cxx_dr_status.html
index 7474a4f65585b..937f67981e296 100755
--- a/clang/www/cxx_dr_status.html
+++ b/clang/www/cxx_dr_status.html
@@ -16682,7 +16682,7 @@ <h2 id="cxxdr">C++ defect report implementation 
status</h2>
     <td><a 
href="https://cplusplus.github.io/CWG/issues/2811.html";>2811</a></td>
     <td>DR</td>
     <td>Clarify "use" of main</td>
-    <td class="unknown" align="center">Unknown</td>
+    <td class="full" align="center">Clang 3.5</td>
   </tr>
   <tr class="open" id="2812">
     <td><a 
href="https://cplusplus.github.io/CWG/issues/2812.html";>2812</a></td>


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

Reply via email to