Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Aug 2016 21:37:20 -0700
From:      Mark Millard <markmi@dsl-only.net>
To:        freebsd-stable@freebsd.org
Subject:   stable/11 -r304029: amd64-gcc says: sys/dev/hptmv/vdevice.h error: variably modified '_ArrayTables' at file scope
Message-ID:  <1CF12CBC-0933-41DE-AC50-7CDA3330A542@dsl-only.net>

next in thread | raw e-mail | index | archive | help
[This was part of Bugzilla report 211540 against the HighPoint =
RocketRAID 182x driver code. My -r304029 build attempt using -r304029 =
still reports the error. This note is just about a build-ability problem =
under amd64-gcc: I only tried it to add to the testing of 11.0. I'm =
personally not blocked by the problem.]

Attempting to build stable/11 -r304029 for TARGET_ARCH=3Damd64 with =
amd64-gcc (amd64-xtoolchain-gcc) reports:

/usr/src/sys/dev/hptmv/vdevice.h:145:2: error: variably modified =
'_ArrayTables' at file scope [-Werror]
  BYTE    _ArrayTables[MAX_ARRAY_PER_VBUS * ARRAY_VDEV_SIZE];
  ^

The "variably modified '_ArrayTables' at file scope" messages refer to =
(various .h files contributing):

#define MAX_VDEVICE_PER_VBUS 8
. . .
#ifndef MAX_ARRAY_PER_VBUS
#define MAX_ARRAY_PER_VBUS (MAX_VDEVICE_PER_VBUS*2) /* worst case */
#endif
. . .
#define ARRAY_VDEV_SIZE =
((UINT)(ULONG_PTR)&((PVDevice)0)->u+sizeof(RaidArray))
. . .
typedef struct _VBus  {
. . .
#ifdef SUPPORT_ARRAY
        PVDevice pFreeArrayLink;
        BYTE    _ArrayTables[MAX_ARRAY_PER_VBUS * ARRAY_VDEV_SIZE];
#endif
. . .
} VBus;


ARRAY_VDEV_SIZE from /usr/src/sys/dev/hptmv/vdevice.h is what is being =
complained about for its use in typedef struct _VBus's _ArrayTables =
field at file scope.


amd64-gcc does not treat =
((UINT)(ULONG_PTR)&((PVDevice)0)->u+sizeof(RaidArray)) as a known =
constant where such is required in the _ArrayTables field declaration.



/usr/src/sys/dev/hptmv/vdevice.h having =
((UINT)(ULONG_PTR)&((PVDevice)0)->u+sizeof(RaidArray)) for =
ARRAY_VDEV_SIZE goes back to -r136849 and the file's creation on =
2004-Oct-24. It appears that SUPPORT_ARRAY was defined back then. SO the =
code is old.



Context details:

# svnlite info /usr/src/ | grep "Rev[i:]"=20
you have mail
Revision: 304029
Last Changed Rev: 304029

# uname -apKU
FreeBSD FreeBSDx64 11.0-PRERELEASE FreeBSD 11.0-PRERELEASE #4 r304029M: =
Sat Aug 13 00:40:30 PDT 2016     =
markmi@FreeBSDx64:/usr/obj/clang/amd64.amd64/usr/src/sys/GENERIC-NODBG  =
amd64 amd64 1100500 1100500

# more ~/src.configs/src.conf.amd64-xtoolchain.amd64-host=20
TO_TYPE=3Damd64
TOOLS_TO_TYPE=3Dx86_64
VERSION_CONTEXT=3D11.0
#
KERNCONF=3DGENERIC-NODBG
TARGET=3D${TO_TYPE}
.if ${.MAKE.LEVEL} =3D=3D 0
TARGET_ARCH=3D${TO_TYPE}
.export TARGET_ARCH
.endif
#
WITHOUT_CROSS_COMPILER=3D
WITHOUT_SYSTEM_COMPILER=3D
#
WITH_LIBCPLUSPLUS=3D
WITHOUT_BINUTILS_BOOTSTRAP=3D
WITHOUT_CLANG_BOOTSTRAP=3D
WITH_CLANG=3D
WITH_CLANG_IS_CC=3D
WITH_CLANG_FULL=3D
WITH_CLANG_EXTRAS=3D
WITH_LLDB=3D
#PORTS_MODULES=3Demulators/virtualbox-ose-additions
#
#WITH_BOOT=3D for amd64-xtoolschain-gcc/amd64-gcc gets something like...=20=

# --- all_subdir_sys ---
# -994 bytes available
# *** [boot2] Error code 1
WITHOUT_BOOT=3D
WITH_LIB32=3D
#
WITHOUT_ELFTOOLCHAIN_BOOTSTRAP=3D
WITHOUT_GCC_BOOTSTRAP=3D
WITHOUT_GCC=3D
WITHOUT_GCC_IS_CC=3D
WITHOUT_GNUCXX=3D
#
NO_WERROR=3D
#WERROR=3D
MALLOC_PRODUCTION=3D
#
WITH_DEBUG_FILES=3D
#
#
# For TO (so-called "cross") stages . . .
# So-called-cross via ${TO_TYPE}-xtoolchain-gcc/${TO_TYPE}-gcc. . .
# TOOLS_TO_TYPE based on ${TO_TYPE}-xtoolchain-gcc related binutils. . .
#
CROSS_TOOLCHAIN=3D${TO_TYPE}-gcc
X_COMPILER_TYPE=3Dgcc
CROSS_BINUTILS_PREFIX=3D/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/
.if ${.MAKE.LEVEL} =3D=3D 0
=
XCC=3D/usr/local/bin/${TOOLS_TO_TYPE}-portbld-freebsd${VERSION_CONTEXT}-gc=
c
=
XCXX=3D/usr/local/bin/${TOOLS_TO_TYPE}-portbld-freebsd${VERSION_CONTEXT}-g=
++
=
XCPP=3D/usr/local/bin/${TOOLS_TO_TYPE}-portbld-freebsd${VERSION_CONTEXT}-c=
pp
.export XCC
.export XCXX
.export XCPP
XAS=3D/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/as
XAR=3D/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/ar
XLD=3D/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/ld
XNM=3D/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/nm
XOBJCOPY=3D/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/objcopy
XOBJDUMP=3D/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/objdump
XRANLIB=3D/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/ranlib
XSIZE=3D/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/size
#NO-SUCH: XSTRINGS=3D/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/strings
XSTRINGS=3D/usr/local/bin/${TOOLS_TO_TYPE}-freebsd-strings
.export XAS
.export XAR
.export XLD
.export XNM
.export XOBJCOPY
.export XOBJDUMP
.export XRANLIB
.export XSIZE
.export XSTRINGS
.endif
#
#
# =46rom based on clang (via system). . .
#
.if ${.MAKE.LEVEL} =3D=3D 0
CC=3D/usr/bin/clang
CXX=3D/usr/bin/clang++
CPP=3D/usr/bin/clang-cpp
.export CC
.export CXX
.export CPP
.endif

# more ~/src.configs/make.conf=20
CFLAGS.gcc+=3D -v

=3D=3D=3D
Mark Millard
markmi at dsl-only.net




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1CF12CBC-0933-41DE-AC50-7CDA3330A542>