[cfe-dev] [PATCH] Make libcxx compile on x86_64 Linux w/ g++ 4.4.3
Howard Hinnant
hhinnant at apple.com
Wed Jun 2 08:23:14 PDT 2010
Thanks Matt. What is pthread_t on your system? And are you sure that assigning NULL to it is putting it into a state that means "not a thread"?
-Howard
On Jun 2, 2010, at 3:35 AM, Matt Johnson wrote:
> Hi,
> Just thought I'd contribute a small patch that helped libcxx compile on
> my machine using g++ 4.4.3 with -std=c++0x. Without it I got the
> following message:
>
> + g++ -std=c++0x -c -g -Os -fPIC -nostdinc++ -I../include
> ../src/condition_variable.cpp
> In file included from ../src/condition_variable.cpp:11:
> ../include/thread: In member function ‘std::__1::thread&
> std::__1::thread::operator=(std::__1::thread&&)’:
> ../include/thread:268: error: no match for ‘operator!=’ in
> ‘((std::__1::thread*)this)->std::__1::thread::__t_ !=
> std::__1::__get_nullptr_t()’
> ../include/system_error:569: note: candidates are: bool
> std::__1::operator!=(const std::__1::error_condition&, const
> std::__1::error_condition&)
> ../include/system_error:565: note: bool std::__1::operator!=(const
> std::__1::error_condition&, const std::__1::error_code&)
> ../include/system_error:561: note: bool std::__1::operator!=(const
> std::__1::error_code&, const std::__1::error_condition&)
> ../include/system_error:557: note: bool std::__1::operator!=(const
> std::__1::error_code&, const std::__1::error_code&)
> ../include/cstddef:73: note: bool
> std::__1::operator!=(std::__1::nullptr_t, std::__1::nullptr_t)
> ../include/thread:271: error: cannot convert ‘std::__1::nullptr_t’ to
> ‘pthread_t’ in assignment
>
> This happens because nullptr is not convertible or comparable to
> integral types (except bool), only pointers and pointer-to-members
> (http://en.wikipedia.org/wiki/C%2B%2B0x#Null_pointer_constant), so you
> can't use it to check or set __t, at least not directly. There's
> probably a better way to do it than this, just thought I'd bring the
> matter to your attention. For what it's worth, I haven't hacked the test
> script to run on my machine yet so I haven't tested it, but it does
> compile with minimal #warnings about exception_ptr not being implemented.
>
> mrj10 at mjlap:~/llvm/libcxx/include$ svn diff thread
> Index: thread
> ===================================================================
> --- thread (revision 105315)
> +++ thread (working copy)
> @@ -265,10 +265,12 @@
> thread&
> thread::operator=(thread&& __t)
> {
> - if (__t_ != nullptr)
> + //if (__t_ != nullptr)
> + if (__t_ != NULL)
> terminate();
> __t_ = __t.__t_;
> - __t.__t_ = nullptr;
> + //__t.__t_ = nullptr;
> + __t.__t_ = NULL;
> return *this;
> }
>
> Thanks,
> Matt
>
> --
> Matt Johnson
> Graduate Student
> University of Illinois at Urbana-Champaign, Dept. of ECE
> Coordinated Science Lab, Rm. 213
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
More information about the cfe-dev
mailing list