Description: variably modified ‘XXX’ at file scope In UTS sources offsetof() is defined as #define offsetof(s, m) ((size_t)(&((s *)0)->m)) and used when defining static arrays, e. g.: https://github.com/illumos/illumos-gate/blob/master/usr/src/uts/i86pc/os/fakebop.c#L147 https://github.com/illumos/illumos-gate/blob/master/usr/src/uts/i86pc/sys/fastboot.h#L70 gcc >= 4.5 will no accept it and will produce a warning: warning: variably modified ‘saved_drives’ at file scope Bug: https://www.illumos.org/issues/3373 Index: uts/usr/src/uts/common/sys/sysmacros.h =================================================================== --- uts.orig/usr/src/uts/common/sys/sysmacros.h +++ uts/usr/src/uts/common/sys/sysmacros.h @@ -370,7 +370,11 @@ extern unsigned char bcd_to_byte[256]; #if (defined(_KERNEL) || defined(_FAKE_KERNEL)) && !defined(_KMEMUSER) #if !defined(offsetof) -#define offsetof(s, m) ((size_t)(&(((s *)0)->m))) +# if defined(__GNUC__) +# define offsetof(s, m) __builtin_offsetof(s, m) +# else +# define offsetof(s, m) ((size_t)(&(((s *)0)->m))) +# endif /* __GNUC__ */ #endif /* !offsetof */ #define container_of(m, s, name) \ Index: uts/usr/src/uts/common/avs/ns/rdc/rdc.c =================================================================== --- uts.orig/usr/src/uts/common/avs/ns/rdc/rdc.c +++ uts/usr/src/uts/common/avs/ns/rdc/rdc.c @@ -25,6 +25,7 @@ #define _RDC_ #include +#include #include #include #include @@ -523,13 +524,6 @@ convert_ioctl_args(int cmd, intptr_t arg /* - * Yet another standard thing that is not standard ... - */ -#ifndef offsetof -#define offsetof(s, m) ((size_t)(&((s *)0)->m)) -#endif - -/* * Build a 32bit rdc_set structure and copyout to the user level. */ int Index: uts/usr/src/uts/common/avs/ns/rdc/rdc_io.c =================================================================== --- uts.orig/usr/src/uts/common/avs/ns/rdc/rdc_io.c +++ uts/usr/src/uts/common/avs/ns/rdc/rdc_io.c @@ -24,6 +24,7 @@ */ #include +#include #include #include #include @@ -5639,12 +5640,6 @@ done: return (rc); } -/* - * Yet another standard thing that is not standard ... - */ -#ifndef offsetof -#define offsetof(s, m) ((size_t)(&((s *)0)->m)) -#endif static int rdc_status(void *arg, int mode, rdc_config_t *uparms, spcs_s_info_t kstatus) Index: uts/usr/src/uts/common/avs/ns/sv/sv.c =================================================================== --- uts.orig/usr/src/uts/common/avs/ns/sv/sv.c +++ uts/usr/src/uts/common/avs/ns/sv/sv.c @@ -54,6 +54,7 @@ #include #include +#include #include #include @@ -2416,10 +2417,6 @@ sv_lyr_strategy(struct buf *bp) } -#ifndef offsetof -#define offsetof(s, m) ((size_t)(&((s *)0)->m)) -#endif - /* * re-write the size of the current partition */ Index: uts/usr/src/uts/common/inet/ipf/netinet/ip_fil.h =================================================================== --- uts.orig/usr/src/uts/common/inet/ipf/netinet/ip_fil.h +++ uts/usr/src/uts/common/inet/ipf/netinet/ip_fil.h @@ -14,6 +14,7 @@ #ifndef __IP_FIL_H__ #define __IP_FIL_H__ +#include #include "netinet/ip_compat.h" #include @@ -671,10 +672,6 @@ typedef struct frentry { #define fr_rif fr_tifs[1] #define FR_NOLOGTAG 0 - -#ifndef offsetof -#define offsetof(t,m) (size_t)((&((t *)0)->m)) -#endif #define FR_CMPSIZ (sizeof(struct frentry) - \ offsetof(struct frentry, fr_func)) Index: uts/usr/src/uts/common/io/sfe/sfe_util.c =================================================================== --- uts.orig/usr/src/uts/common/io/sfe/sfe_util.c +++ uts/usr/src/uts/common/io/sfe/sfe_util.c @@ -40,6 +40,7 @@ * System Header files. */ #include +#include #include #include #include @@ -106,10 +107,6 @@ static int gem_debug = GEM_DEBUG_LEVEL; #define GET_TXBUF(dp, sn) \ &(dp)->tx_buf[SLOT((dp)->tx_slots_base + (sn), (dp)->gc.gc_tx_buf_size)] - -#ifndef offsetof -#define offsetof(t, m) ((long)&(((t *) 0)->m)) -#endif #define TXFLAG_VTAG(flag) \ (((flag) & GEM_TXFLAG_VTAG) >> GEM_TXFLAG_VTAG_SHIFT) Index: uts/usr/src/uts/common/io/vscan/vscan_svc.c =================================================================== --- uts.orig/usr/src/uts/common/io/vscan/vscan_svc.c +++ uts/usr/src/uts/common/io/vscan/vscan_svc.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -57,7 +58,6 @@ #define VS_ACCESS_DENY 2 /* return EACCES */ #define tolower(C) (((C) >= 'A' && (C) <= 'Z') ? (C) - 'A' + 'a' : (C)) -#define offsetof(s, m) (size_t)(&(((s *)0)->m)) /* global variables - tunable via /etc/system */ uint32_t vs_reqs_max = VS_REQS_DEFAULT; /* max scan requests */ Index: uts/usr/src/uts/common/sys/ecppvar.h =================================================================== --- uts.orig/usr/src/uts/common/sys/ecppvar.h +++ uts/usr/src/uts/common/sys/ecppvar.h @@ -513,7 +513,6 @@ struct ecppkstat { * Other useful macros */ #define NELEM(a) (sizeof (a) / sizeof (*(a))) -#define offsetof(s, m) ((size_t)(&(((s *)0)->m))) #ifdef __cplusplus } Index: uts/usr/src/uts/common/sys/ib/clients/of/sol_ofs/sol_cma.h =================================================================== --- uts.orig/usr/src/uts/common/sys/ib/clients/of/sol_ofs/sol_cma.h +++ uts/usr/src/uts/common/sys/ib/clients/of/sol_ofs/sol_cma.h @@ -35,10 +35,6 @@ extern "C" { #include #include /* Transport Specific */ -#if !defined(offsetof) -#define offsetof(s, m) (size_t)(&(((s *)0)->m)) -#endif - #define IS_UDP_CMID(idp) ((idp)->ps == RDMA_PS_UDP || \ (idp)->ps == RDMA_PS_IPOIB) #define IS_VALID_SOCKADDR(sockaddrp) \ Index: uts/usr/src/uts/common/sys/usb/clients/audio/usb_ac/usb_ac.h =================================================================== --- uts.orig/usr/src/uts/common/sys/usb/clients/audio/usb_ac/usb_ac.h +++ uts/usr/src/uts/common/sys/usb/clients/audio/usb_ac/usb_ac.h @@ -329,9 +329,6 @@ _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_aud #define USB_AH_PLUMBED 2 #define UNKNOWN_PLUMBED 3 -/* other useful macros */ -#define offsetof(s, m) ((size_t)(&(((s *)0)->m))) - Index: uts/usr/src/uts/common/sys/usb/clients/video/usbvc/usbvc_var.h =================================================================== --- uts.orig/usr/src/uts/common/sys/usb/clients/video/usbvc/usbvc_var.h +++ uts/usr/src/uts/common/sys/usb/clients/video/usbvc/usbvc_var.h @@ -173,8 +173,6 @@ typedef struct usbvc_vic { #define PRINT_MASK_DEVMAP 0x00000200 #define PRINT_MASK_ALL 0xFFFFFFFF -#define offsetof(s, m) ((size_t)(&(((s *)0)->m))) - #define USBVC_MAX_PKTS 40 #define USBVC_DEFAULT_READ_BUF_NUM 3 Index: uts/usr/src/uts/sun/io/scsi/adapters/sf.c =================================================================== --- uts.orig/usr/src/uts/sun/io/scsi/adapters/sf.c +++ uts/usr/src/uts/sun/io/scsi/adapters/sf.c @@ -56,9 +56,6 @@ static int sfdebug = 0; static int sf_bus_config_debug = 0; -/* Why do I have to do this? */ -#define offsetof(s, m) (size_t)(&(((s *)0)->m)) - #include #include #include @@ -77,6 +74,7 @@ static int sf_bus_config_debug = 0; #include #include #include +#include static int sf_info(dev_info_t *, ddi_info_cmd_t, void *, void **); static int sf_attach(dev_info_t *, ddi_attach_cmd_t); Index: uts/usr/src/uts/sun4u/io/rmclomv.c =================================================================== --- uts.orig/usr/src/uts/sun4u/io/rmclomv.c +++ uts/usr/src/uts/sun4u/io/rmclomv.c @@ -26,6 +26,7 @@ #include +#include #include #include #include @@ -53,7 +54,6 @@ #include #include -#define offsetof(s, m) (size_t)(&(((s *)0)->m)) #define RMCRESBUFLEN 1024 #define DATE_TIME_MSG_SIZE 78 #define RMCLOMV_WATCHDOG_MODE "rmclomv-watchdog-mode" Index: uts/usr/src/uts/common/io/ecpp.c =================================================================== --- uts.orig/usr/src/uts/common/io/ecpp.c +++ uts/usr/src/uts/common/io/ecpp.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include Index: uts/usr/src/uts/intel/io/drm/radeon_cp.c =================================================================== --- uts.orig/usr/src/uts/intel/io/drm/radeon_cp.c +++ uts/usr/src/uts/intel/io/drm/radeon_cp.c @@ -41,6 +41,7 @@ #include "radeon_drv.h" #include "r300_reg.h" #include "radeon_io32.h" +#include static int radeon_do_cleanup_cp(drm_device_t *dev); Index: uts/usr/src/uts/common/io/usb/clients/audio/usb_ac/usb_ac.c =================================================================== --- uts.orig/usr/src/uts/common/io/usb/clients/audio/usb_ac/usb_ac.c +++ uts/usr/src/uts/common/io/usb/clients/audio/usb_ac/usb_ac.c @@ -65,6 +65,7 @@ #include #include #include +#include #include Index: uts/usr/src/uts/common/io/usb/clients/video/usbvc/usbvc.c =================================================================== --- uts.orig/usr/src/uts/common/io/usb/clients/video/usbvc/usbvc.c +++ uts/usr/src/uts/common/io/usb/clients/video/usbvc/usbvc.c @@ -149,6 +149,7 @@ #include #include +#include #include #include #include /* V4L2 API header file */ Index: uts/usr/src/uts/common/io/ib/clients/of/sol_ofs/sol_cma.c =================================================================== --- uts.orig/usr/src/uts/common/io/ib/clients/of/sol_ofs/sol_cma.c +++ uts/usr/src/uts/common/io/ib/clients/of/sol_ofs/sol_cma.c @@ -36,6 +36,7 @@ /* Standard driver includes */ #include +#include #include #include #include