Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Jul 2013 10:10:45 +0000 (UTC)
From:      David Chisnall <theraven@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r253319 - head/lib/msun/src
Message-ID:  <201307131010.r6DAAjrL078366@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: theraven
Date: Sat Jul 13 10:10:45 2013
New Revision: 253319
URL: http://svnweb.freebsd.org/changeset/base/253319

Log:
  Ensure that the _Generic() macro in math.h works with qualified types.
  
  tgmath.h contains the same bugs and so should be fixed in the same way.

Modified:
  head/lib/msun/src/math.h

Modified: head/lib/msun/src/math.h
==============================================================================
--- head/lib/msun/src/math.h	Sat Jul 13 08:17:55 2013	(r253318)
+++ head/lib/msun/src/math.h	Sat Jul 13 10:10:45 2013	(r253319)
@@ -83,22 +83,31 @@ extern const union __nan_un {
 
 #if (__STDC_VERSION__ >= 201112L && defined(__clang__)) || \
     __has_extension(c_generic_selections)
-#define	__fp_type_select(x, f, d, ld) _Generic((x),     \
-	float: f(x),                                    \
-	double: d(x),                                   \
-	long double: ld(x))
+#define	__fp_type_select(x, f, d, ld) _Generic((x),			\
+    float: f(x),							\
+    double: d(x),							\
+    long double: ld(x),							\
+    volatile float: f(x),						\
+    volatile double: d(x),						\
+    volatile long double: ld(x),					\
+    volatile const float: f(x),						\
+    volatile const double: d(x),					\
+    volatile const long double: ld(x),					\
+    const float: f(x),							\
+    const double: d(x),							\
+    const long double: ld(x))
 #elif __GNUC_PREREQ__(3, 1) && !defined(__cplusplus)
-#define	__fp_type_select(x, f, d, ld) __builtin_choose_expr(              \
-	__builtin_types_compatible_p(__typeof(x), long double), ld(x),    \
-	__builtin_choose_expr(                                            \
-	__builtin_types_compatible_p(__typeof(x), double), d(x),          \
-	__builtin_choose_expr(                                            \
-	__builtin_types_compatible_p(__typeof(x), float), f(x), (void)0)))
+#define	__fp_type_select(x, f, d, ld) __builtin_choose_expr(		\
+    __builtin_types_compatible_p(__typeof(x), long double), ld(x),	\
+    __builtin_choose_expr(						\
+    __builtin_types_compatible_p(__typeof(x), double), d(x),		\
+    __builtin_choose_expr(						\
+    __builtin_types_compatible_p(__typeof(x), float), f(x), (void)0)))
 #else
-#define	 __fp_type_select(x, f, d, ld)                         \
-	((sizeof(x) == sizeof(float)) ? f(x)                   \
-	: (sizeof(x) == sizeof(double)) ? d(x)                 \
-	: ld(x))
+#define	 __fp_type_select(x, f, d, ld)					\
+    ((sizeof(x) == sizeof(float)) ? f(x)				\
+    : (sizeof(x) == sizeof(double)) ? d(x)				\
+    : ld(x))
 #endif
 
 #define	fpclassify(x) \
@@ -189,21 +198,21 @@ int	__signbitf(float) __pure2;
 int	__signbitl(long double) __pure2;
 
 static __inline int
-__inline_isnan(double __x)
+__inline_isnan(__const double __x)
 {
 
 	return (__x != __x);
 }
 
 static __inline int
-__inline_isnanf(float __x)
+__inline_isnanf(__const float __x)
 {
 
 	return (__x != __x);
 }
 
 static __inline int
-__inline_isnanl(long double __x)
+__inline_isnanl(__const long double __x)
 {
 
 	return (__x != __x);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201307131010.r6DAAjrL078366>