[PATCH] Small fix for tgmath.h

Richard Smith richard at metafoo.co.uk
Thu May 9 10:42:51 PDT 2013


On Mon, Apr 1, 2013 at 12:42 PM, YunZhong Gao <gaoyunzhong at gmail.com> wrote:

>   static_assert does not seem to work with C programs
>

That's why I said to use _Static_assert. :-)


>   and tgmath does not seem to work with C++ programs.
>
>   Using an array declaration works as Richard described, and
>   I update my patch accordingly.
>

Thanks, committed in r181527, with s/static_check/_Static_assert/, and with
the test disabled for freestanding implementations (<tgmath.h> includes
<math.h> -- this is still relying on system headers more than I'd like, but
that seems hard to avoid).


> http://llvm-reviews.chandlerc.com/D595
>
> CHANGE SINCE LAST DIFF
>   http://llvm-reviews.chandlerc.com/D595?vs=1447&id=1470#toc
>
> Files:
>   lib/Headers/tgmath.h
>   test/Headers/tgmath.c
>
> Index: lib/Headers/tgmath.h
> ===================================================================
> --- lib/Headers/tgmath.h
> +++ lib/Headers/tgmath.h
> @@ -1340,15 +1340,15 @@
>
>  // creal
>
> -static float _Complex
> +static float
>      _TG_ATTRS
>      __tg_creal(float __x) {return __x;}
>
> -static double _Complex
> +static double
>      _TG_ATTRS
>      __tg_creal(double __x) {return __x;}
>
> -static long double _Complex
> +static long double
>      _TG_ATTRS
>      __tg_creal(long double __x) {return __x;}
>
> Index: test/Headers/tgmath.c
> ===================================================================
> --- test/Headers/tgmath.c
> +++ test/Headers/tgmath.c
> @@ -0,0 +1,39 @@
> +// RUN: %clang -fsyntax-only %s
> +
> +#include <tgmath.h>
> +
> +#define static_check(x) extern char dummy_array[(x) ? 1 : -1]
> +
> +float f;
> +double d;
> +long double l;
> +
> +float complex fc;
> +double complex dc;
> +long double complex lc;
> +
> +// creal
> +
> +static_check(sizeof(creal(f)) == sizeof(f));
> +static_check(sizeof(creal(d)) == sizeof(d));
> +static_check(sizeof(creal(l)) == sizeof(l));
> +
> +static_check(sizeof(creal(fc)) == sizeof(f));
> +static_check(sizeof(creal(dc)) == sizeof(d));
> +static_check(sizeof(creal(lc)) == sizeof(l));
> +
> +// fabs
> +
> +static_check(sizeof(fabs(f)) == sizeof(f));
> +static_check(sizeof(fabs(d)) == sizeof(d));
> +static_check(sizeof(fabs(l)) == sizeof(l));
> +
> +static_check(sizeof(fabs(fc)) == sizeof(f));
> +static_check(sizeof(fabs(dc)) == sizeof(d));
> +static_check(sizeof(fabs(lc)) == sizeof(l));
> +
> +// logb
> +
> +static_check(sizeof(logb(f)) == sizeof(f));
> +static_check(sizeof(logb(d)) == sizeof(d));
> +static_check(sizeof(logb(l)) == sizeof(l));
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130509/2895b6fd/attachment.html>


More information about the cfe-commits mailing list