From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/6120 Path: news.gmane.org!not-for-mail From: Rich Felker Newsgroups: gmane.linux.lib.musl.general Subject: Re: [PATCH 1/9] interface additions for the C thread implementation Date: Sun, 7 Sep 2014 11:16:10 -0400 Message-ID: <20140907151610.GD23797@brightrain.aerifal.cx> References: <20140907002123.GX23797@brightrain.aerifal.cx> <1410081238.4856.137.camel@eris.loria.fr> <1410088603.4856.146.camel@eris.loria.fr> <20140907113220.GB23797@brightrain.aerifal.cx> <1410101101.4856.158.camel@eris.loria.fr> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1410102990 24036 80.91.229.3 (7 Sep 2014 15:16:30 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 7 Sep 2014 15:16:30 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-6133-gllmg-musl=m.gmane.org@lists.openwall.com Sun Sep 07 17:16:24 2014 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1XQeCW-0000j1-1l for gllmg-musl@plane.gmane.org; Sun, 07 Sep 2014 17:16:24 +0200 Original-Received: (qmail 24531 invoked by uid 550); 7 Sep 2014 15:16:23 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 24523 invoked from network); 7 Sep 2014 15:16:23 -0000 Content-Disposition: inline In-Reply-To: <1410101101.4856.158.camel@eris.loria.fr> User-Agent: Mutt/1.5.21 (2010-09-15) Original-Sender: Rich Felker Xref: news.gmane.org gmane.linux.lib.musl.general:6120 Archived-At: On Sun, Sep 07, 2014 at 04:45:01PM +0200, Jens Gustedt wrote: > Am Sonntag, den 07.09.2014, 07:32 -0400 schrieb Rich Felker: > > On Sun, Sep 07, 2014 at 01:16:43PM +0200, Jens Gustedt wrote: > > > Am Sonntag, den 07.09.2014, 14:05 +0400 schrieb Alexander Monakov: > > > > On Sun, 7 Sep 2014, Jens Gustedt wrote: > > > > > > > For the C++ API/ABI, these also are different types, now, with type names > > > > > > > (that are used for name mangling, e.g) as listed above. > > > > > > > > > > > > > > Somebody better versed in C++ could perhaps contribute code that > > > > > > > overloads the comparison and assignment operators such that a compilation > > > > > > > that tries to compare or copy these types fails. > > > > > > > > > > > > I'm not sure what you meant by this last paragraph. > > > > > > > > > > AFAIR in C++ there are ways to inhibit usage of copy assignment by > > > > > declaring some "operator=" function that is never defined. But my C++ > > > > > has really become rusty. > > > > > > > > There's no need to do that since those are unrelated structs, and therefore no > > > > operator== and operator= are available in the first place. You also can't do > > > > that in C (but in C++ you get an error rather than a warning when trying > > > > to assign pointers). > > > > > > This is not about assignment between different types and also not for > > > pointers but for the struct themselves. > > > > > > With the current C threads version the following is a priori allowed, > > > but shouldn't: > > > > > > mtx_t a, b; > > > mtx_init(&a, mtx_plain); > > > b = a; > > > > > > This "works" in C and in C++. > > > > > > The corresponding code in pthreads would be UB. > > > > I'm not clear on whether the assignment is well-defined in pthreads, > > but actually attempting to use the mutex (by passing it to any of the > > pthread_mutex_* functions) would be UB. The same should be true for > > C11 threads; if not, it's a defect. > > It is. It is a defect? Or..? > sure, we all (should) know that, but the average user wouldn't > > > I don't think the committee intended to forbid any of the above types > > of implementation; on the contrary it seems they went out of their way > > to support crazy types of implementations, e.g. by omitting > > initializers. > > No, unfortunately for the later, the lack of a definition for default > initialization and initializers seems to be intentional. There are > people on the committee who defend the interdiction of statically > initialized mutexes, seemingly because some oldish windows thread > implementation didn't have it. That's what I mean. By refusing to support static initialization of mutexes, they seem to be supporting the possibility of implementations for which static initialization is impractical, much like some of the crazy ideas I mentioned above. Rich