Index: cmake/modules/HandleLLVMOptions.cmake =================================================================== --- cmake/modules/HandleLLVMOptions.cmake +++ cmake/modules/HandleLLVMOptions.cmake @@ -580,6 +580,8 @@ # Enable -Wstring-conversion to catch misuse of string literals. add_flag_if_supported("-Wstring-conversion" STRING_CONVERSION_FLAG) + # Enable -Wstrict-prototypes to catch incorrectly declared functions in C. + add_flag_if_supported("-Wstrict-prototypes" STRICT_PROTOTYPES_FLAG) endif (LLVM_ENABLE_WARNINGS AND (LLVM_COMPILER_IS_GCC_COMPATIBLE OR CLANG_CL)) if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND NOT LLVM_ENABLE_WARNINGS) Index: projects/compiler-rt/lib/profile/GCDAProfiling.c =================================================================== --- projects/compiler-rt/lib/profile/GCDAProfiling.c +++ projects/compiler-rt/lib/profile/GCDAProfiling.c @@ -92,7 +92,7 @@ /* * A list of functions to write out the data. */ -typedef void (*writeout_fn)(); +typedef void (*writeout_fn)(void); struct writeout_fn_node { writeout_fn fn; @@ -105,7 +105,7 @@ /* * A list of flush functions that our __gcov_flush() function should call. */ -typedef void (*flush_fn)(); +typedef void (*flush_fn)(void); struct flush_fn_node { flush_fn fn; Index: projects/compiler-rt/lib/profile/InstrProfiling.h =================================================================== --- projects/compiler-rt/lib/profile/InstrProfiling.h +++ projects/compiler-rt/lib/profile/InstrProfiling.h @@ -63,8 +63,8 @@ const char *__llvm_profile_end_names(void); uint64_t *__llvm_profile_begin_counters(void); uint64_t *__llvm_profile_end_counters(void); -ValueProfNode *__llvm_profile_begin_vnodes(); -ValueProfNode *__llvm_profile_end_vnodes(); +ValueProfNode *__llvm_profile_begin_vnodes(void); +ValueProfNode *__llvm_profile_end_vnodes(void); /*! * \brief Clear profile counters to zero. @@ -164,7 +164,7 @@ * merge mode is turned on for instrumented programs with shared libs). * Side-effect: this API call will invoke malloc with dynamic memory allocation. */ -const char *__llvm_profile_get_path_prefix(); +const char *__llvm_profile_get_path_prefix(void); /*! \brief Get the magic token for the file format. */ uint64_t __llvm_profile_get_magic(void); Index: projects/compiler-rt/lib/profile/InstrProfilingFile.c =================================================================== --- projects/compiler-rt/lib/profile/InstrProfilingFile.c +++ projects/compiler-rt/lib/profile/InstrProfilingFile.c @@ -86,7 +86,7 @@ 0, 0, 0, PNS_unknown}; int getpid(void); -static int getCurFilenameLength(); +static int getCurFilenameLength(void); static const char *getCurFilename(char *FilenameBuf); static unsigned doMerging() { return lprofCurFilename.MergePoolSize; } Index: projects/compiler-rt/lib/profile/InstrProfilingInternal.h =================================================================== --- projects/compiler-rt/lib/profile/InstrProfilingInternal.h +++ projects/compiler-rt/lib/profile/InstrProfilingInternal.h @@ -155,27 +155,27 @@ void lprofMergeValueProfData(struct ValueProfData *SrcValueProfData, __llvm_profile_data *DstData); -VPDataReaderType *lprofGetVPDataReader(); +VPDataReaderType *lprofGetVPDataReader(void); /* Internal interface used by test to reset the max number of * tracked values per value site to be \p MaxVals. */ void lprofSetMaxValsPerSite(uint32_t MaxVals); -void lprofSetupValueProfiler(); +void lprofSetupValueProfiler(void); /* Return the profile header 'signature' value associated with the current * executable or shared library. The signature value can be used to for * a profile name that is unique to this load module so that it does not * collide with profiles from other binaries. It also allows shared libraries * to dump merged profile data into its own profile file. */ -uint64_t lprofGetLoadModuleSignature(); +uint64_t lprofGetLoadModuleSignature(void); /* * Return non zero value if the profile data has already been * dumped to the file. */ -unsigned lprofProfileDumped(); -void lprofSetProfileDumped(); +unsigned lprofProfileDumped(void); +void lprofSetProfileDumped(void); COMPILER_RT_VISIBILITY extern void (*FreeHook)(void *); COMPILER_RT_VISIBILITY extern uint8_t *DynamicBufferIOBuffer; Index: projects/compiler-rt/lib/profile/InstrProfilingUtil.h =================================================================== --- projects/compiler-rt/lib/profile/InstrProfilingUtil.h +++ projects/compiler-rt/lib/profile/InstrProfilingUtil.h @@ -54,9 +54,9 @@ /* Temporarily suspend SIGKILL. Return value of 1 means a restore is needed. * Other return values mean no restore is needed. */ -int lprofSuspendSigKill(); +int lprofSuspendSigKill(void); /* Restore previously suspended SIGKILL. */ -void lprofRestoreSigKill(); +void lprofRestoreSigKill(void); #endif /* PROFILE_INSTRPROFILINGUTIL_H */ Index: projects/libunwind/src/config.h =================================================================== --- projects/libunwind/src/config.h +++ projects/libunwind/src/config.h @@ -119,9 +119,9 @@ #ifdef __cplusplus extern "C" { #endif - extern bool logAPIs(); - extern bool logUnwinding(); - extern bool logDWARF(); + extern bool logAPIs(void); + extern bool logUnwinding(void); + extern bool logDWARF(void); #ifdef __cplusplus } #endif Index: projects/libunwind/src/unwind_ext.h =================================================================== --- projects/libunwind/src/unwind_ext.h +++ projects/libunwind/src/unwind_ext.h @@ -23,7 +23,7 @@ // implemented elsewhere. extern struct _Unwind_FunctionContext * -__Unwind_SjLj_GetTopOfFunctionStack(); +__Unwind_SjLj_GetTopOfFunctionStack(void); extern void __Unwind_SjLj_SetTopOfFunctionStack(struct _Unwind_FunctionContext *fc);