Skip to content

[libc++] Enable -Wmissing-prototypes #116261

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion libcxx/include/fstream
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ _LIBCPP_PUSH_MACROS

_LIBCPP_BEGIN_NAMESPACE_STD

# if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_WIN32API)
# if _LIBCPP_STD_VER >= 23 && defined(_LIBCPP_WIN32API)
_LIBCPP_EXPORTED_FROM_ABI void* __filebuf_windows_native_handle(FILE* __file) noexcept;
# endif

Expand Down
5 changes: 4 additions & 1 deletion libcxx/src/charconv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,12 @@ _LIBCPP_BEGIN_NAMESPACE_STD

namespace __itoa {

_LIBCPP_DIAGNOSTIC_PUSH
_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wmissing-prototypes")
// These functions exist for ABI compatibility, so we don't ever want a declaration.
_LIBCPP_EXPORTED_FROM_ABI char* __u32toa(uint32_t value, char* buffer) noexcept { return __base_10_u32(buffer, value); }

_LIBCPP_EXPORTED_FROM_ABI char* __u64toa(uint64_t value, char* buffer) noexcept { return __base_10_u64(buffer, value); }
_LIBCPP_DIAGNOSTIC_POP

} // namespace __itoa

Expand Down
2 changes: 1 addition & 1 deletion libcxx/src/experimental/time_zone.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -720,7 +720,7 @@ __get_sys_info(sys_seconds __time,
// Iff the "offsets" are the same '__current.__end' is replaced with
// '__next.__end', which effectively merges the two objects in one object. The
// function returns true if a merge occurred.
[[nodiscard]] bool __merge_continuation(sys_info& __current, const sys_info& __next) {
[[nodiscard]] static bool __merge_continuation(sys_info& __current, const sys_info& __next) {
if (__current.end != __next.begin)
return false;

Expand Down
3 changes: 3 additions & 0 deletions libcxx/src/experimental/tzdb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ _LIBCPP_BEGIN_NAMESPACE_STD

namespace chrono {

_LIBCPP_DIAGNOSTIC_PUSH
_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wmissing-prototypes")
// This function is weak so it can be overriden in the tests. The
// declaration is in the test header test/support/test_tzdb.h
_LIBCPP_WEAK string_view __libcpp_tzdb_directory() {
Expand All @@ -58,6 +60,7 @@ _LIBCPP_WEAK string_view __libcpp_tzdb_directory() {
# error "unknown path to the IANA Time Zone Database"
#endif
}
_LIBCPP_DIAGNOSTIC_POP

//===----------------------------------------------------------------------===//
// Details
Expand Down
2 changes: 2 additions & 0 deletions libcxx/src/filesystem/int128_builtins.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
#include <__config>
#include <climits>

_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wmissing-prototypes") // See the FIXME above

#if _LIBCPP_HAS_INT128

extern "C" __attribute__((no_sanitize("undefined"))) _LIBCPP_EXPORTED_FROM_ABI __int128_t
Expand Down
4 changes: 2 additions & 2 deletions libcxx/src/include/from_chars_floating_point.h
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ struct __exponent_result {
// __offset, 0, false. This allows using the results unconditionally, the
// __present is important for the scientific notation, where the value is
// mandatory.
__exponent_result __parse_exponent(const char* __input, size_t __n, size_t __offset, char __marker) {
static __exponent_result __parse_exponent(const char* __input, size_t __n, size_t __offset, char __marker) {
if (__offset + 1 < __n && // an exponent always needs at least one digit.
std::tolower(__input[__offset]) == __marker && //
!std::isspace(__input[__offset + 1]) // leading whitespace is not allowed.
Expand All @@ -213,7 +213,7 @@ __exponent_result __parse_exponent(const char* __input, size_t __n, size_t __off
}

// Here we do this operation as int64 to avoid overflow.
int32_t __merge_exponents(int64_t __fractional, int64_t __exponent, int __max_biased_exponent) {
static int32_t __merge_exponents(int64_t __fractional, int64_t __exponent, int __max_biased_exponent) {
int64_t __sum = __fractional + __exponent;

if (__sum > __max_biased_exponent)
Expand Down
2 changes: 2 additions & 0 deletions libcxx/src/support/win32/compiler_rt_shims.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
#include <cmath>
#include <complex>

_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wmissing-prototypes") // See comment above

template <class T>
static std::__complex_t<T> mul_impl(T a, T b, T c, T d) {
T __ac = a * c;
Expand Down
2 changes: 1 addition & 1 deletion libcxx/src/support/win32/locale_win32.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ int __snprintf(char* ret, size_t n, __locale_t loc, const char* format, ...) {
// Like sprintf, but when return value >= 0 it returns
// a pointer to a malloc'd string in *sptr.
// If return >= 0, use free to delete *sptr.
int __libcpp_vasprintf(char** sptr, const char* __restrict format, va_list ap) {
static int __libcpp_vasprintf(char** sptr, const char* __restrict format, va_list ap) {
*sptr = nullptr;
// Query the count required.
va_list ap_copy;
Expand Down
5 changes: 5 additions & 0 deletions libcxxabi/src/cxa_personality.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@
#include "private_typeinfo.h"
#include "unwind.h"

// The functions defined in this file are magic functions called only by the compiler.
#ifdef __clang__
# pragma clang diagnostic ignored "-Wmissing-prototypes"
#endif

// TODO: This is a temporary workaround for libc++abi to recognize that it's being
// built against LLVM's libunwind. LLVM's libunwind started reporting _LIBUNWIND_VERSION
// in LLVM 15 -- we can remove this workaround after shipping LLVM 17. Once we remove
Expand Down
6 changes: 6 additions & 0 deletions libcxxabi/src/private_typeinfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -831,6 +831,10 @@ bool __pointer_to_member_type_info::can_catch_nested(
#pragma clang diagnostic ignored "-Wmissing-field-initializers"
#endif

#pragma GCC diagnostic push
// __dynamic_cast is called by the compiler, so there is no prototype
#pragma GCC diagnostic ignored "-Wmissing-prototypes"

// __dynamic_cast

// static_ptr: pointer to an object of type static_type; nonnull, and since the
Expand Down Expand Up @@ -953,6 +957,8 @@ __dynamic_cast(const void *static_ptr, const __class_type_info *static_type,
return const_cast<void*>(dst_ptr);
}

#pragma GCC diagnostic pop

#ifdef __clang__
#pragma clang diagnostic pop
#endif
Expand Down
2 changes: 1 addition & 1 deletion libunwind/include/unwind_arm_ehabi.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ _Unwind_VRS_Pop(_Unwind_Context *context, _Unwind_VRS_RegClass regclass,
_Unwind_VRS_DataRepresentation representation);

#if defined(_LIBUNWIND_UNWIND_LEVEL1_EXTERNAL_LINKAGE)
#define _LIBUNWIND_EXPORT_UNWIND_LEVEL1 extern
#define _LIBUNWIND_EXPORT_UNWIND_LEVEL1 extern __inline__
#else
#define _LIBUNWIND_EXPORT_UNWIND_LEVEL1 static __inline__
#endif
Expand Down
3 changes: 3 additions & 0 deletions libunwind/include/unwind_itanium.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ extern void _Unwind_SetGR(struct _Unwind_Context *context, int index,
extern uintptr_t _Unwind_GetIP(struct _Unwind_Context *context);
extern void _Unwind_SetIP(struct _Unwind_Context *, uintptr_t new_value);

extern _Unwind_Reason_Code __gnu_unwind_frame(_Unwind_Exception *,
struct _Unwind_Context *);

#ifdef __cplusplus
}
#endif
Expand Down
1 change: 1 addition & 0 deletions libunwind/src/Unwind-EHABI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include "config.h"
#include "libunwind.h"
#include "libunwind_ext.h"
#include "unwind_itanium.h"
#include "unwind.h"

namespace {
Expand Down
1 change: 0 additions & 1 deletion libunwind/src/UnwindLevel1.c
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,6 @@ unwind_phase1(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *except
}
return _URC_NO_REASON;
}
extern int __unw_step_stage2(unw_cursor_t *);

#if defined(_LIBUNWIND_USE_GCS)
// Enable the GCS target feature to permit gcspop instructions to be used.
Expand Down
1 change: 1 addition & 0 deletions libunwind/src/Unwind_AIXExtras.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
// This file is only used for AIX.
#if defined(_AIX)

#include "AddressSpace.hpp"
#include "config.h"
#include "libunwind_ext.h"
#include <sys/debug.h>
Expand Down
1 change: 1 addition & 0 deletions libunwind/src/libunwind_ext.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ extern "C" {
extern int __unw_getcontext(unw_context_t *);
extern int __unw_init_local(unw_cursor_t *, unw_context_t *);
extern int __unw_step(unw_cursor_t *);
extern int __unw_step_stage2(unw_cursor_t *);
extern int __unw_get_reg(unw_cursor_t *, unw_regnum_t, unw_word_t *);
extern int __unw_get_fpreg(unw_cursor_t *, unw_regnum_t, unw_fpreg_t *);
extern int __unw_set_reg(unw_cursor_t *, unw_regnum_t, unw_word_t);
Expand Down
1 change: 1 addition & 0 deletions runtimes/cmake/Modules/WarningFlags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ function(cxx_add_warning_flags target enable_werror enable_pedantic)
-Wzero-length-array
-Wdeprecated-redundant-constexpr-static-def
-Wno-nullability-completeness
-Wmissing-prototypes
)

if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
Expand Down
Loading