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