[cfe-commits] [Patch] Fix for comma-removal ahead of __VA_ARGS__ in macros
Jean-Daniel Dupas
devlists at shadowlab.org
Mon Nov 5 00:50:52 PST 2012
Le 5 nov. 2012 à 09:08, Eli Friedman <eli.friedman at gmail.com> a écrit :
> On Sun, Nov 4, 2012 at 3:10 PM, Andy Gibbs <andyg1001 at hotmail.co.uk> wrote:
>> Hi,
>>
>> Please could someone review the attached patch for me before I commit it.
>>
>> This patch fixes the rules surrounding the removal of a leading comma where
>> a __VA_ARGS__ expansion is empty.
>>
>> GCC has the extension, implemented already in clang for...
>>
>> #define M(...) call(a, ## __VA_ARGS__)
>>
>> This will expand to "call(a)" for "M()", removing the comma. However, under
>> -std=c99, this behaviour changes so that the comma is not removed. The
>> attached patch follows this behaviour when in c99 mode in clang. In gnu99
>> mode, it behaves as before, and similarly for pre-c99 dialects and for c++
>> (all checked against gcc's behaviour).
>
> Why do we need to change the behavior in C99 mode? As far as I can
> tell, it's impossible to construct a strictly conforming program for
> which the C99 standard specifies behavior different from the gcc
> extension.
It's going to break a lot of code. clang defaults to C99 (as does Xcode projects) and a lot of code rely on this behavior.
-- Jean-Daniel
More information about the cfe-commits
mailing list