This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
[PATCH] Add missing headers to fix implicit function defns
- From: Pat Pannuto <pat dot pannuto at gmail dot com>
- To: newlib at sourceware dot org
- Cc: Pat Pannuto <pat dot pannuto at gmail dot com>
- Date: Sun, 15 Jan 2017 19:12:02 -0500
- Subject: [PATCH] Add missing headers to fix implicit function defns
- Authentication-results: sourceware.org; auth=none
A few files were missing headers for memset/malloc, likely missed
because the files don't directly call the functions, rather they
come in via macros in libc/include/sys/reent.h:
#define _REENT_CHECK(var, what, type, size, init) do { \
struct _reent *_r = (var); \
if (_r->what == NULL) { \
_r->what = (type)malloc(size); \
#define _REENT_CHECK_ASCTIME_BUF(var) \
_REENT_CHECK(var, _asctime_buf, char *, _REENT_ASCTIME_SIZE, \
memset((var)->_asctime_buf, 0, _REENT_ASCTIME_SIZE))
Without these fixes, implicit function signatures are provided,
which gcc warns could cause aliasing issues down the line:
../../../../../../../newlib-2.5.0/newlib/libc/time/asctime.c:62:3: warning: type of 'memset' does not match original declaration [-Wlto-type-mismatch]
/Volumes/code/external/newlib-cygwin/newlib/libc/include/string.h:29:7: note: return value type mismatch
_PTR _EXFUN(memset,(_PTR, int, size_t));
^
/Volumes/code/external/newlib-cygwin/newlib/libc/include/string.h:29:7: note: 'memset' was previously declared here
/Volumes/code/external/newlib-cygwin/newlib/libc/include/string.h:29:7: note: code may be misoptimized unless -fno-strict-aliasing is used
../../../../../../../newlib-2.5.0/newlib/libc/time/asctime.c:62:3: warning: type of 'malloc' does not match original declaration [-Wlto-type-mismatch]
/Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: return value type mismatch
extern _PTR malloc _PARAMS ((size_t));
^
/Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: 'malloc' was previously declared here
/Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: code may be misoptimized unless -fno-strict-aliasing is used
../../../../../../../newlib-2.5.0/newlib/libc/time/lcltime.c:58:3: warning: type of 'malloc' does not match original declaration [-Wlto-type-mismatch]
/Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: return value type mismatch
extern _PTR malloc _PARAMS ((size_t));
^
/Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: 'malloc' was previously declared here
/Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: code may be misoptimized unless -fno-strict-aliasing is used
../../../../../../../newlib-2.5.0/newlib/libc/string/strsignal.c:70:3: warning: type of 'malloc' does not match original declaration [-Wlto-type-mismatch]
/Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: return value type mismatch
extern _PTR malloc _PARAMS ((size_t));
^
/Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: 'malloc' was previously declared here
/Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: code may be misoptimized unless -fno-strict-aliasing is used
Including the proper headers elminates the implicit function
signatures and these warnings.
---
newlib/libc/string/strsignal.c | 1 +
newlib/libc/string/strtok.c | 1 +
newlib/libc/time/asctime.c | 2 ++
newlib/libc/time/lcltime.c | 1 +
4 files changed, 5 insertions(+)
diff --git a/newlib/libc/string/strsignal.c b/newlib/libc/string/strsignal.c
index e03c1086b..94ae26db1 100644
--- a/newlib/libc/string/strsignal.c
+++ b/newlib/libc/string/strsignal.c
@@ -56,6 +56,7 @@ QUICKREF
#include <string.h>
#include <signal.h>
#include <stdio.h>
+#include <stdlib.h>
#include <reent.h>
char *
diff --git a/newlib/libc/string/strtok.c b/newlib/libc/string/strtok.c
index 21607e04a..8d07ab387 100644
--- a/newlib/libc/string/strtok.c
+++ b/newlib/libc/string/strtok.c
@@ -85,6 +85,7 @@ QUICKREF
/* undef STRICT_ANSI so that strtok_r prototype will be defined */
#undef __STRICT_ANSI__
#include <string.h>
+#include <stdlib.h>
#include <_ansi.h>
#include <reent.h>
diff --git a/newlib/libc/time/asctime.c b/newlib/libc/time/asctime.c
index 024310bbf..f56b511b8 100644
--- a/newlib/libc/time/asctime.c
+++ b/newlib/libc/time/asctime.c
@@ -47,6 +47,8 @@ ANSI C requires <<asctime>>.
<<asctime>> requires no supporting OS subroutines.
*/
+#include <stdlib.h>
+#include <string.h>
#include <time.h>
#include <_ansi.h>
#include <reent.h>
diff --git a/newlib/libc/time/lcltime.c b/newlib/libc/time/lcltime.c
index 16162bfb0..2c9a25fd7 100644
--- a/newlib/libc/time/lcltime.c
+++ b/newlib/libc/time/lcltime.c
@@ -44,6 +44,7 @@ ANSI C requires <<localtime>>.
<<localtime>> requires no supporting OS subroutines.
*/
+#include <stdlib.h>
#include <time.h>
#include <reent.h>
--
2.11.0