Date: Tue, 22 Oct 2013 23:23:27 +0200 From: Jilles Tjoelker <jilles@stack.nl> To: Tijl Coosemans <tijl@FreeBSD.org> Cc: multimedia-list freebsd <freebsd-multimedia@freebsd.org>, William Grzybowski <william88@gmail.com>, freebsd-standards@FreeBSD.org Subject: Re: VLC 2.1.0 Message-ID: <20131022212327.GB20055@stack.nl> In-Reply-To: <20131022174715.59433270@kalimero.tijl.coosemans.org> References: <CAHtVNLONK3hZTUoJoebjtdZbhwK8pA8deO1um191zF5pZowF9A@mail.gmail.com> <20131022152502.61214646@kalimero.tijl.coosemans.org> <CAHtVNLOp%2BXqj%2BEbVsxDsLj4tjsxJkjWLm9G0ze_ND_noYGu_=Q@mail.gmail.com> <20131022174715.59433270@kalimero.tijl.coosemans.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Oct 22, 2013 at 05:47:15PM +0200, Tijl Coosemans wrote: > On Tue, 22 Oct 2013 12:30:38 -0200 William Grzybowski wrote: > > On Tue, Oct 22, 2013 at 11:25 AM, Tijl Coosemans <tijl@coosemans.org> wrote: > >> On Tue, 22 Oct 2013 10:55:28 -0200 William Grzybowski wrote: > >>> I am trying to update vlc to 2.1.0, its the final step to get rid of > >>> ffmpeg1 as well. > >>> I was wondering if any c++ guru out there have any clues on how to fix this: > >>> http://pastebin.ca/2469885 > >>> http://people.freebsd.org/~wg/vlc2.1.0.txt > >> I think the problem is that clang doesn't expect } after a label. > >> So try adding a ; or (void)0; between the label and vlc_cleanup_run(). > > That works, thank you! > I suspect that clang is correct to complain about this and if so we > might want to add (void)0; to the definition of pthread_cleanup_pop > in /usr/include/pthread.h. Let's see what -standards has to say > about this. > Summarised: the idiom that VLC uses is this: > pthread_cleanup_push(...); > ... > if (error) goto cleanup; > ... > cleanup: > pthread_cleanup_pop(...); > Because the definition of the pthread_cleanup_pop macro starts with } > clang complains. glibc has do { } while (0); at the start of the pthread_cleanup_pop define. I think this is a better option than ; or (void)0; as it minimizes the wrong things it can combine with. Reading POSIX, it seems valid to put a label right before an invocation of pthread_cleanup_pop. In such a case, the invocation still appears as a statement and can be paired with a pthread_cleanup_push in the same lexical scope. Therefore the following patch to src seems appropriate. Index: include/pthread.h =================================================================== --- include/pthread.h (revision 256728) +++ include/pthread.h (working copy) @@ -175,6 +175,7 @@ { #define pthread_cleanup_pop(execute) \ + do { } while (0); \ } \ __pthread_cleanup_pop_imp(execute); \ } -- Jilles Tjoelker
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20131022212327.GB20055>