[Patch] Fix libstdc++ build when using uclibc instead of glibc

Jonathan Wakely jwakely@redhat.com
Wed Jan 6 20:34:00 GMT 2016


On 05/01/16 14:43 -0800, Steve Ellcey  wrote:
>While trying to build GCC with uclibc instead of glibc I ran into a build
>failure in libstdc++.  uclibc doesn't seem to provide the isfinite function
>like glibc does so that means that libstdc++ doesn't have std::isfinite.
>
>This in turn caused include/ext/random.tcc to not compile because it uses
>std::isfinite.  I can easily see how this might be considered a uclibc
>bug but given that it is the only build problem I ran into I was hoping
>we could fix it in libstdc++ by using __builtin_finite instead of

Shouldn't that be __builtin_isfinite not __builtin_finite ?

>std::isfinite.  This fixes my uclibc build and also worked for glibc
>with no regressions.
>
>OK to checkin?

>Steve Ellcey
>sellcey@imgtec.com
>
>
>2016-01-05  Steve Ellcey  <sellcey@imgtec.com>
>
>	* include/ext/random.tcc: Use __builtin_finite instead of
>	std::isfinite.
>
>
>diff --git a/libstdc++-v3/include/ext/random.tcc b/libstdc++-v3/include/ext/random.tcc
>index a9c5a2b..3467823 100644
>--- a/libstdc++-v3/include/ext/random.tcc
>+++ b/libstdc++-v3/include/ext/random.tcc
>@@ -1570,7 +1570,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
> 			      return __t; });
> 	      __norm = std::sqrt(__sum);
> 	    }
>-	  while (__norm == _RealType(0) || ! std::isfinite(__norm));
>+	  while (__norm == _RealType(0) || ! __builtin_finite(__norm));
>
> 	  std::transform(__ret.begin(), __ret.end(), __ret.begin(),
> 			 [__norm](_RealType __val){ return __val / __norm; });



More information about the Libstdc++ mailing list