On 28 May 2013 17:10, Steve Ellcey wrote:
> On Wed, 2013-05-22 at 09:14 +0100, Jonathan Wakely wrote:
>> This alters the configure script to enable C++11 thread library
>> features based on targets that are known to support the features,
>> rather than based on link tests which are disabled by default. With
>> Glibc 2.17 this enables a nanosecond resolution std::system_clock in
>> the default configuration, yay!
>>
>> I've tested this on two versions of Fedora and Debian, but would be
>> grateful for test results on Solaris, Cygwin and BSD targets, and for
>> cross-compilers to any of those targets.
>>
>> * acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Add KIND=auto to
>> enable features if target OS is known to support them.
>> * configure.ac (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Default to 'auto'.
>> * configure: Regenerate.
>>
>>
>> Tested x86_64-linux, committed to trunk.
>
> Jonathan,
>
> This has broken the mips-mti-elf build for me,
I don't think it was my patch that broke it, because
compatibility-chrono.cc didn't exist when my patch went in :-)
> this target uses newlib
> and I am building with the latest newlib sources as well as the latest
> GCC sources. I don't know if this is related to the problem that others
> have had or not. I saw emails about test failures but not about build
> failures. The problem I get when building a x86 to mips cross compiler
> is:
>
> /local/home/sellcey/nightly2/src/gcc/libstdc++-v3/src/c++11/compatibility-chrono.cc:
> In static member function 'static std::chrono::system_clock::time_point
> std::chrono::system_clock::now()':
> /local/home/sellcey/nightly2/src/gcc/libstdc++-v3/src/c++11/compatibility-chrono.cc:81:14:
> error: 'from_time_t' is not a member of 'std::chrono::system_clock'
> return system_clock::from_time_t(__sec);
> ^
> /local/home/sellcey/nightly2/src/gcc/libstdc++-v3/src/c++11/compatibility-chrono.cc:83:5:
> warning: control reaches end of non-void function [-Wreturn-type]
> }
>
> I will dig around some more but I thought I would see if you had any
> ideas on what the problem was and how to fix it.
Does this help?
--- src/c++11/compatibility-chrono.cc.orig 2013-05-28
17:27:54.631919423 +0100
+++ src/c++11/compatibility-chrono.cc 2013-05-28 17:28:43.697861786 +0100
@@ -78,7 +78,9 @@
+ chrono::microseconds(tv.tv_usec)));
#else
std::time_t __sec = std::time(0);
- return system_clock::from_time_t(__sec);
+ typedef chrono::time_point<system_clock, seconds> __from;
+ return time_point_cast<system_clock::duration>
+ (__from(chrono::seconds(__sec)));
#endif
}