[clang] b0b96fb - Fix erroneous `-Wmissing-prototypes` for Win32 entry points (#98105)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 9 18:38:35 PDT 2024
Author: Max Winkler
Date: 2024-07-09T18:38:32-07:00
New Revision: b0b96fbff47c74940a62073c579372f3c47df9c8
URL: https://github.com/llvm/llvm-project/commit/b0b96fbff47c74940a62073c579372f3c47df9c8
DIFF: https://github.com/llvm/llvm-project/commit/b0b96fbff47c74940a62073c579372f3c47df9c8.diff
LOG: Fix erroneous `-Wmissing-prototypes` for Win32 entry points (#98105)
Fixes https://github.com/llvm/llvm-project/issues/94366.
Added:
Modified:
clang/docs/ReleaseNotes.rst
clang/lib/Sema/SemaDecl.cpp
clang/test/Sema/no-warn-missing-prototype.c
Removed:
################################################################################
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index fac4c8e69dc15..3b105d91958cc 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -686,6 +686,9 @@ Improvements to Clang's diagnostics
- Clang now shows implicit deduction guides when diagnosing overload resolution failure. #GH92393.
+- Clang no longer emits a "no previous prototype" warning for Win32 entry points under ``-Wmissing-prototypes``.
+ Fixes #GH94366.
+
Improvements to Clang's time-trace
----------------------------------
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index aa44608035538..97e1f7e05e44e 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -15222,6 +15222,9 @@ ShouldWarnAboutMissingPrototype(const FunctionDecl *FD,
if (II->isStr("main") || II->isStr("efi_main"))
return false;
+ if (FD->isMSVCRTEntryPoint())
+ return false;
+
// Don't warn about inline functions.
if (FD->isInlined())
return false;
diff --git a/clang/test/Sema/no-warn-missing-prototype.c b/clang/test/Sema/no-warn-missing-prototype.c
index 6059b6aa0f146..17d69ac8913fa 100644
--- a/clang/test/Sema/no-warn-missing-prototype.c
+++ b/clang/test/Sema/no-warn-missing-prototype.c
@@ -1,5 +1,6 @@
// RUN: %clang_cc1 -fsyntax-only -Wmissing-prototypes -x c -ffreestanding -verify %s
// RUN: %clang_cc1 -fsyntax-only -Wmissing-prototypes -x c++ -ffreestanding -verify %s
+// RUN: %clang_cc1 -fms-compatibility -fsyntax-only -Wmissing-prototypes -x c++ -ffreestanding -triple=x86_64-pc-win32 -verify -DMS %s
// expected-no-diagnostics
int main() {
return 0;
@@ -8,3 +9,21 @@ int main() {
int efi_main() {
return 0;
}
+
+#ifdef MS
+int wmain(int, wchar_t *[], wchar_t *[]) {
+ return 0;
+}
+
+int wWinMain(void*, void*, wchar_t*, int) {
+ return 0;
+}
+
+int WinMain(void*, void*, char*, int) {
+ return 0;
+}
+
+bool DllMain(void*, unsigned, void*) {
+ return true;
+}
+#endif
More information about the cfe-commits
mailing list