On Mon, 9 Nov 2015, Conrad E. Meyer wrote:
Log:
linuxkpi/sysfs.h: Cast arg2 through intptr_t to avoid GCC warning
The code compiles fine under Clang, but GCC on PPC is less permissive about
integer and pointer sizes. (An intmax_t is clearly *large enough* to hold a
pointer value.)
Another follow-up to r290475.
This shouldn't compile either.
Modified: head/sys/compat/linuxkpi/common/include/linux/sysfs.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/sysfs.h Mon Nov 9
15:59:42 2015 (r290612)
+++ head/sys/compat/linuxkpi/common/include/linux/sysfs.h Mon Nov 9
16:50:42 2015 (r290613)
@@ -80,7 +80,7 @@ sysctl_handle_attr(SYSCTL_HANDLER_ARGS)
ssize_t len;
kobj = arg1;
- attr = (struct attribute *)arg2;
+ attr = (struct attribute *)(intptr_t)arg2;
This can have any result (except undefined behviour) since the pointer type
is not void *. No warning is required but a good compiler would give 1.
if (kobj->ktype == NULL || kobj->ktype->sysfs_ops == NULL)
return (ENODEV);
buf = (char *)get_zeroed_page(GFP_KERNEL);
This shouldn't compile either. The pointer type is not void *, and the
integer type is neither intptr_t nor uintptr_t except accidentally on
some arches (it is unsigned long), while uintptr_t is unsigned on i386
and unsigned long on amd64. No warning is required, but a good compiler
would give 1 and a half.
This works on x86 of course, and the code isn't required to work on anything
else, but the compiler doesn't know this so should warn about logical
type mismatches.
Bruce
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"