Mesa is compiled with -std=c99 but this does not allow anonymous structs within a union unless using a recent version of gcc. When compiling with gcc 4.2.1 the following error is thrown when compiling the gallium radeonsi driver unless configure.ac is changed to have either -std=gnu99 or -std=c99 -fms-extensions. libtool: compile: gcc -DPACKAGE_NAME=\"Mesa\" -DPACKAGE_TARNAME=\"mesa\" -DPACKAGE_VERSION=\"10.2.0-devel\" "-DPACKAGE_STRING=\"Mesa 10.2.0-devel\"" "-DPACKAGE_BUGREPORT=\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\"" -DPACKAGE_URL=\"\" -DPACKAGE=\"mesa\" -DVERSION=\"10.2.0-devel\" - DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DYYTEXT_POINTER=1 -DHAVE_CLOCK_GETTIME=1 -DHAVE_PTHREAD_PRIO_INHERIT=1 -DHAVE_PTHREAD=1 -I. -I/usr/local/include -I/usr/local/include/libelf -I../../../../src/gallium/drivers/radeon -I./include -I../../../../include -I.. /../../../src/gallium/include -I../../../../src/gallium/auxiliary -I../../../../src/gallium/drivers -DDEBUG -DUSE_X86_64_ASM -DHAVE_DLOPEN -DHAVE_POS IX_MEMALIGN -DHAVE_LIBDRM -DGLX_INDIRECT_RENDERING -DGLX_DIRECT_RENDERING -DHAVE_PTHREAD -DUSE_EXTERNAL_DXTN_LIB=1 -DHAVE_ALIAS -DHAVE_MINCORE -DHAVE _LLVM=0x0303 -fvisibility=hidden -I/usr/X11R6/include -I/usr/include/dev/pci/drm -I/usr/local/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -O2 -Wall -std=c99 -Werror=implicit-function-declaration -Werror=missing-prototypes -fno-strict-aliasing -fno-builtin-memcm p -g -O0 -MT si_descriptors.lo -MD -MP -MF .deps/si_descriptors.Tpo -c si_descriptors.c -fPIC -DPIC -o .libs/si_descriptors.o In file included from si_descriptors.c:27: si_pipe.h:113: warning: declaration does not declare anything si_descriptors.c: In function 'si_init_all_descriptors': si_descriptors.c:990: error: 'union <anonymous>' has no member named 'const_buffers' si_descriptors.c:991: error: 'union <anonymous>' has no member named 'rw_buffers' si_descriptors.c:992: error: 'union <anonymous>' has no member named 'sampler_views'
This appears to have been fixed a while ago, though I note the fix is not currently on the 10.2 branch. commit 74388dd24bc7fdb9e62ec18096163f5426e03fbf Author: Adam Jackson <ajax@redhat.com> Date: Tue Apr 22 12:46:08 2014 -0400 radeonsi: Don't use anonymous struct trick in atom tracking I'm somewhat impressed that current gccs will let you do this, but sufficiently old ones (including 4.4.7 in RHEL6) won't. Reviewed-by: Marek Olšák <marek.olsak@amd.com> Signed-off-by: Adam Jackson <ajax@redhat.com> src/gallium/drivers/radeonsi/si_descriptors.c | 6 +++--- src/gallium/drivers/radeonsi/si_hw_context.c | 2 +- src/gallium/drivers/radeonsi/si_pipe.c | 6 +++--- src/gallium/drivers/radeonsi/si_pipe.h | 2 +- src/gallium/drivers/radeonsi/si_state.c | 2 +- src/gallium/drivers/radeonsi/si_state_draw.c | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-)
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.