This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: GCC 4.5: "nonconstant array index in initializer" error
The minimal code example is following:
extern unsigned int __invalid_size_argument;
#define TYPECHECK(t) ( sizeof(t) == sizeof(t[1]) ? sizeof(t) :
__invalid_size_argument )
static int arr[] = {
[TYPECHECK(int)] = 0,
};
int main()
{
return 0;
}
command line is: gcc test.c
GCC 4.5.0 revision 146607 compiles this code with following errors:
test.c:5: error: nonconstant array index in initializer
test.c:5: error: (near initialization for 'arr')
released GCC 4.4.0 compiles without any errors
2009/4/23 Joseph S. Myers <joseph@codesourcery.com>:
> On Thu, 23 Apr 2009, Denis Onischenko wrote:
>
>> 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
>
> How then are its operands (DRM_IOCTL_VERSION, DRM_IOCTL_GET_UNIQUE, etc.)
> defined?
>
> You should send a complete, self-contained, minimal code example that
> reproduces the issue you see, complete with the compilation options used,
> rather than snippets without all the previous declarations they require.
> Your message needs to contain all the information needed to reproduce the
> problem without referring to any external sources.
>
> --
> Joseph S. Myers
> joseph@codesourcery.com
>