This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: GCC 4.5: "nonconstant array index in initializer" error


Thanks for reply!

DRM_IOCTL_NR is defined as

#define _IOC_NRBITS  8

#define _IOC_NRSHIFT 0
#define _IOC_NRMASK  ((1 << _IOC_NRBITS)-1)

#define _IOC_NR(nr)        (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)

#define DRV_IOCTL_NR(n)            _IOC_NR(n)



i.e. expands to an integer constant expression




2009/4/23 Joseph S. Myers <joseph@codesourcery.com>:
> On Thu, 23 Apr 2009, Denis Onischenko wrote:
>
>> The following errors appears when I tried to compile linux kernel
>> 2.6.30-rc2 with GCC 4.5:
>>
>>
>> linux-2.6/drivers/gpu/drm/drm_drv.c:59: error: nonconstant array index
>> in initializer
>> linux-2.6/drivers/gpu/drm/drm_drv.c:59: error: (near initialization
>> for 'drm_ioctls')
>> ...
>>
>> compiled code looks like this:
>>
>> static struct drm_ioctl_desc drm_ioctls[] = {
>> ? ? DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version, 0),
>> ? ? DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE, drm_getunique, 0),
>> ...
>>
>> where DRM_IOCTL_DEF defined as
>>
>> #define DRM_IOCTL_DEF(ioctl, _func, _flags) \
>> ? ? [DRM_IOCTL_NR(ioctl)] = {.cmd = ioctl, .func = _func, .flags = _flags}
>
> And how is DRM_IOCTL_NR defined? ?To be used here it should be defined to
> expand to an integer constant expression.
>
>> If it is not a bug, is there a way to disable this conformance rules
>> checking with GCC 4.5 ?
>
> There is no general way. ?In particular cases the errors can be made into
> pedwarns or pedwarns-if-pedantic if there seems to be a good reason for a
> coding style not letting proper integer constant expressions be used in a
> particular case.
>
> --
> Joseph S. Myers
> joseph@codesourcery.com
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]