From 2f7994014542920ad6ca726fbd8d023a5f49abc2 Mon Sep 17 00:00:00 2001 From: Richard Kreckel Date: Sun, 27 Oct 2019 14:57:36 +0100 Subject: [PATCH] Replace typedef int[] trick with static_assert. --- include/cln/number.h | 3 ++- m4/floatparam.m4 | 28 ++++++++-------------------- m4/intparam.m4 | 6 +++--- 3 files changed, 13 insertions(+), 24 deletions(-) diff --git a/include/cln/number.h b/include/cln/number.h index aeb7d2d..8abb22b 100644 --- a/include/cln/number.h +++ b/include/cln/number.h @@ -257,7 +257,8 @@ template inline const type& the(const cl_number& x) { // check that sizeof(type)==sizeof(cl_number) - int (*dummy1)(int assertion1 [1 - 2 * (sizeof(type) != sizeof(cl_number))]); (void)dummy1; + static_assert(sizeof(type)==sizeof(cl_number), + "sizeof(type)!=sizeof(cl_number)"); return *(const type *) &x; } // Conversions to subtypes without checking, macro version: diff --git a/m4/floatparam.m4 b/m4/floatparam.m4 index 56dd53e..6afda75 100644 --- a/m4/floatparam.m4 +++ b/m4/floatparam.m4 @@ -22,20 +22,16 @@ AC_DEFUN([CL_FLOATPARAM_CROSS], epsilon_bits=-1; y="($type)1.0" while true; do AC_TRY_COMPILE([], - [typedef int verify[2*( - (($type)(($type)1.0 + ($type)($y)) == ($type)1.0) - || ($type)(($type)(($type)1.0 + ($type)($y)) - ($type)1.0) != ($type)($y) - ) - 1];], + [static_assert((($type)(($type)1.0 + ($type)($y)) == ($type)1.0) + || ($type)(($type)(($type)1.0 + ($type)($y)) - ($type)1.0) != ($type)($y), "");], [break;]) epsilon_bits=`expr $epsilon_bits + 1`; y="$y * ($type)0.5" done negepsilon_bits=-1; y="($type)-1.0" while true; do AC_TRY_COMPILE([], - [typedef int verify[2*( - (($type)(($type)1.0 + ($type)($y)) == ($type)1.0) - || ($type)(($type)(($type)1.0 + ($type)($y)) - ($type)1.0) != ($type)($y) - ) - 1];], + [static_assert((($type)(($type)1.0 + ($type)($y)) == ($type)1.0) + || ($type)(($type)(($type)1.0 + ($type)($y)) - ($type)1.0) != ($type)($y), "");], [break;]) negepsilon_bits=`expr $negepsilon_bits + 1`; y="$y * ($type)0.5" done @@ -68,30 +64,22 @@ AC_DEFUN([CL_FLOATPARAM_CROSS], rounds= if test -z "$rounds"; then AC_TRY_COMPILE([], - [typedef int verify[2*( - $ys1 == $y1 && $ys2 == $y2 && $zs1 == $z1 && $zs2 == $z2 - ) - 1];], + [static_assert($ys1 == $y1 && $ys2 == $y2 && $zs1 == $z1 && $zs2 == $z2, "");], [rounds=rounds_to_nearest]) fi if test -z "$rounds"; then AC_TRY_COMPILE([], - [typedef int verify[2*( - $ys1 == $y1 && $ys2 == $y1 && $zs1 == $z1 && $zs2 == $z1 - ) - 1];], + [static_assert($ys1 == $y1 && $ys2 == $y1 && $zs1 == $z1 && $zs2 == $z1, "");], [rounds=rounds_to_zero]) fi if test -z "$rounds"; then AC_TRY_COMPILE([], - [typedef int verify[2*( - $ys1 == $y2 && $ys2 == $y2 && $zs1 == $z1 && $zs2 == $z1 - ) - 1];], + [static_assert($ys1 == $y2 && $ys2 == $y2 && $zs1 == $z1 && $zs2 == $z1, "");], [rounds=rounds_to_infinity]) fi if test -z "$rounds"; then AC_TRY_COMPILE([], - [typedef int verify[2*( - $ys1 == $y1 && $ys2 == $y1 && $zs1 == $z2 && $zs2 == $z2 - ) - 1];], + [static_assert($ys1 == $y1 && $ys2 == $y1 && $zs1 == $z2 && $zs2 == $z2, "");], [rounds=rounds_to_minus_infinity]) fi if test -n "$rounds"; then diff --git a/m4/intparam.m4 b/m4/intparam.m4 index b9967bb..d8536b2 100644 --- a/m4/intparam.m4 +++ b/m4/intparam.m4 @@ -113,7 +113,7 @@ AC_DEFUN([CL_INTPARAM_CROSS], echo "#error \"Integer types long long and unsigned long long have different sizes!!\"" fi fi - AC_TRY_COMPILE([], [typedef int verify[2*(sizeof(char*)<=sizeof (long))-1];], + AC_TRY_COMPILE([], [static_assert(sizeof(char*) <= sizeof(long), "");], [], [echo "#error \"Type char * does not fit into a long!!\""]) _AC_COMPUTE_INT([sizeof (char *)], [pointer_size]) pointer_bitsize=`expr $pointer_size '*' $char_bitsize` @@ -258,7 +258,7 @@ AC_DEFUN([CL_INTPARAM_BITSIZE], [ n=1; x="($1)2" while true; do - AC_TRY_COMPILE([], [typedef int verify[2*(($1)($x) == 0) - 1];], + AC_TRY_COMPILE([], [static_assert(($1)($x) == 0, "");], [$2=$n; break;], [if test $n = 1000; then $2=; break; fi;]) n=`expr $n + 1`; x="$x * ($1)2" @@ -290,7 +290,7 @@ AC_DEFUN([CL_INTPARAM_ALIGNOF], #else # define alignof(type) offsetof (struct { char slot1; type slot2; }, slot2) #endif -], [typedef int verify[2*(alignof($1) == $n) - 1];], +], [static_assert(alignof($1) == $n, "");], [$2=$n; break;] [if test $n = 0; then $2=; break; fi]) n=`expr $n '*' 2` -- 2.49.0