On Aug 24, 2013 2:39 AM, "Peter N Lewis" <[email protected]> wrote: > > Ping. > > Eli queried whether -Wgnu-zero-variadic-macro-argumentsand -Wgnu-token-pasting-comma should be a single flag (which is fine with me, but then what to call it) and questioned whether -Wgnu-line-zero-directive is correct as 'it isn't really a "line-zero" directive', which I didn't quite follow, but I'm happy to change it if anyone else has a better name.
Bes guess on an alternative name would be 'zero line directive' (a line directive that is zero, rather than a 'line zero' directive) > > Thanks, > Peter. > > On 21/08/2013, at 21:10 , Peter N Lewis <[email protected]> wrote: > > > Here is batch two of the specific gnu flags. This patch adds the following flags: > > > > -Wgnu-zero-variadic-macro-arguments > > -Wgnu-token-pasting-comma > > -Wgnu-imaginary-constant > > -Wgnu-binary-literal > > -Wgnu-line-zero-directive > > > > I'm not overly convinced on the exact naming of the flags, but they were the best I could come up with. I'd be happy to hear any thoughts. > > > > The patch includes a test with four invocations, and another five disabled by default. > > > > > > Index: test/Lexer/gnu-flags.c > > =================================================================== > > --- test/Lexer/gnu-flags.c (revision 0) > > +++ test/Lexer/gnu-flags.c (revision 0) > > @@ -0,0 +1,58 @@ > > +// RUN: %clang_cc1 -fsyntax-only -verify %s -DNONE > > +// RUN: %clang_cc1 -fsyntax-only -verify %s -DALL -Wgnu > > +// RUN: %clang_cc1 -fsyntax-only -verify %s -DALL \ > > +// RUN: -Wgnu-zero-variadic-macro-arguments -Wgnu-token-pasting-comma \ > > +// RUN: -Wgnu-imaginary-constant -Wgnu-binary-literal -Wgnu-line-zero-directive > > +// RUN: %clang_cc1 -fsyntax-only -verify %s -DNONE -Wgnu \ > > +// RUN: -Wno-gnu-zero-variadic-macro-arguments -Wno-gnu-token-pasting-comma \ > > +// RUN: -Wno-gnu-imaginary-constant -Wno-gnu-binary-literal -Wno-gnu-line-zero-directive > > +// RUNNOT: %clang_cc1 -fsyntax-only -verify %s -DZEROARGS -Wgnu-zero-variadic-macro-arguments > > +// RUNNOT: %clang_cc1 -fsyntax-only -verify %s -DTOKENPASTING -Wgnu-token-pasting-comma > > +// RUNNOT: %clang_cc1 -fsyntax-only -verify %s -DIMAGINARYCONST -Wgnu-imaginary-constant > > +// RUNNOT: %clang_cc1 -fsyntax-only -verify %s -DBINARYLITERAL -Wgnu-binary-literal > > +// RUNNOT: %clang_cc1 -fsyntax-only -verify %s -DLINE0 -Wgnu-line-zero-directive > > + > > +#if NONE > > +// expected-no-diagnostics > > +#endif > > + > > + > > +#if ALL || ZEROARGS > > +// expected-warning@+11 {{must specify at least one argument for '...' parameter of variadic macro}} > > +// expected-note@+6 {{macro 'efoo' defined here}} > > +#endif > > +#if ALL || TOKENPASTING > > +// expected-warning@+3 {{token pasting of ',' and __VA_ARGS__ is a GNU extension}} > > +#endif > > + > > +#define efoo(format, args...) foo(format , ##args) > > + > > +void foo( const char* c ) > > +{ > > + efoo("6"); > > +} > > + > > + > > +#if ALL || IMAGINARYCONST > > +// expected-warning@+3 {{imaginary constants are a GNU extension}} > > +#endif > > + > > +float _Complex c = 1.if; > > + > > + > > +#if ALL || BINARYLITERAL > > +// expected-warning@+3 {{binary integer literals are a GNU extension}} > > +#endif > > + > > +int b = 0b0101; > > + > > + > > +// This case is handled differently because lit has a bug whereby #line 0 is reported to be on line 4294967295 > > +// http://llvm.org/bugs/show_bug.cgi?id=16952 > > +#if ALL || LINE0 > > +#line 0 // expected-warning {{#line directive with zero argument is a GNU extension}} > > +#else > > +#line 0 > > +#endif > > + > > +// WARNING: Do not add more tests after the #line 0 line! Add them before the LINE0 test > > Index: include/clang/Basic/DiagnosticGroups.td > > =================================================================== > > --- include/clang/Basic/DiagnosticGroups.td (revision 188870) > > +++ include/clang/Basic/DiagnosticGroups.td (working copy) > > @@ -28,6 +28,7 @@ > > def Availability : DiagGroup<"availability">; > > def Section : DiagGroup<"section">; > > def AutoImport : DiagGroup<"auto-import">; > > +def GNUBinaryLiteral : DiagGroup<"gnu-binary-literal">; > > def BitFieldConstantConversion : DiagGroup<"bitfield-constant-conversion">; > > def ConstantConversion : > > DiagGroup<"constant-conversion", [ BitFieldConstantConversion ] >; > > @@ -152,6 +153,7 @@ > > def DanglingElse: DiagGroup<"dangling-else">; > > def DanglingField : DiagGroup<"dangling-field">; > > def DistributedObjectModifiers : DiagGroup<"distributed-object-modifiers">; > > +def GNUImaginaryConstant : DiagGroup<"gnu-imaginary-constant">; > > def IgnoredQualifiers : DiagGroup<"ignored-qualifiers">; > > def : DiagGroup<"import">; > > def IncompatiblePointerTypesDiscardsQualifiers > > @@ -168,6 +170,7 @@ > > def : DiagGroup<"inline">; > > def : DiagGroup<"invalid-pch">; > > def GNULabelsAsValue : DiagGroup<"gnu-label-as-value">; > > +def GNULineZeroDirective : DiagGroup<"gnu-line-zero-directive">; > > def LiteralRange : DiagGroup<"literal-range">; > > def LocalTypeTemplateArgs : DiagGroup<"local-type-template-args", > > [CXX98CompatLocalTypeTemplateArgs]>; > > @@ -260,6 +263,7 @@ > > def TautologicalOutOfRangeCompare : DiagGroup<"tautological-constant-out-of-range-compare">; > > def TautologicalCompare : DiagGroup<"tautological-compare", > > [TautologicalOutOfRangeCompare]>; > > +def GNUTokenPastingComma : DiagGroup<"gnu-token-pasting-comma">; > > def HeaderHygiene : DiagGroup<"header-hygiene">; > > def DuplicateDeclSpecifier : DiagGroup<"duplicate-decl-specifier">; > > def CompareDistinctPointerType : DiagGroup<"compare-distinct-pointer-types">; > > @@ -368,6 +372,7 @@ > > def VolatileRegisterVar : DiagGroup<"volatile-register-var">; > > def Visibility : DiagGroup<"visibility">; > > def ZeroLengthArray : DiagGroup<"zero-length-array">; > > +def GNUZeroVariadicMacroArguments : DiagGroup<"gnu-zero-variadic-macro-arguments">; > > > > // GCC calls -Wdeprecated-writable-strings -Wwrite-strings. > > def GCCWriteStrings : DiagGroup<"write-strings" , [DeprecatedWritableStr]>; > > @@ -534,14 +539,15 @@ > > def C99 : DiagGroup<"c99-extensions">; > > > > // A warning group for warnings about GCC extensions. > > -def GNU : DiagGroup<"gnu", [GNUAlignofExpression, GNUCaseRange, > > - GNUComplexInteger, > > +def GNU : DiagGroup<"gnu", [GNUAlignofExpression, GNUBinaryLiteral, > > + GNUCaseRange, GNUComplexInteger, > > GNUConditionalOmittedOperand, > > GNUDesignator, GNUEmptyInitializer, > > VLAExtension, > > - GNULabelsAsValue, > > - GNUStatementExpression, GNUStaticFloatInit, > > - ZeroLengthArray]>; > > + GNUImaginaryConstant, GNULabelsAsValue, > > + GNULineZeroDirective, GNUStatementExpression, > > + GNUStaticFloatInit, GNUTokenPastingComma, > > + ZeroLengthArray, GNUZeroVariadicMacroArguments]>; > > // A warning group for warnings about code that clang accepts but gcc doesn't. > > def GccCompat : DiagGroup<"gcc-compat">; > > > > Index: include/clang/Basic/DiagnosticLexKinds.td > > =================================================================== > > --- include/clang/Basic/DiagnosticLexKinds.td (revision 188870) > > +++ include/clang/Basic/DiagnosticLexKinds.td (working copy) > > @@ -165,7 +165,7 @@ > > "Unicode character literals may not contain multiple characters">; > > def err_exponent_has_no_digits : Error<"exponent has no digits">; > > def ext_imaginary_constant : Extension< > > - "imaginary constants are a GNU extension">, InGroup<GNU>; > > + "imaginary constants are a GNU extension">, InGroup<GNUImaginaryConstant>; > > def err_hexconstant_requires_exponent : Error< > > "hexadecimal floating constants require an exponent">; > > def err_hexconstant_requires_digits : Error< > > @@ -173,7 +173,7 @@ > > def ext_hexconstant_invalid : Extension< > > "hexadecimal floating constants are a C99 feature">, InGroup<C99>; > > def ext_binary_literal : Extension< > > - "binary integer literals are a GNU extension">, InGroup<GNU>; > > + "binary integer literals are a GNU extension">, InGroup<GNUBinaryLiteral>; > > def ext_binary_literal_cxx1y : Extension< > > "binary integer literals are a C++1y extension">, InGroup<CXX1y>; > > def warn_cxx11_compat_binary_literal : Warning< > > @@ -320,7 +320,7 @@ > > InGroup<DiagGroup<"embedded-directive">>; > > def ext_missing_varargs_arg : Extension< > > "must specify at least one argument for '...' parameter of variadic macro">, > > - InGroup<GNU>; > > + InGroup<GNUZeroVariadicMacroArguments>; > > def ext_empty_fnmacro_arg : Extension< > > "empty macro arguments are a C99 feature">, InGroup<C99>; > > def warn_cxx98_compat_empty_fnmacro_arg : Warning< > > @@ -455,7 +455,7 @@ > > "'##' cannot appear at start of macro expansion">; > > def err_paste_at_end : Error<"'##' cannot appear at end of macro expansion">; > > def ext_paste_comma : Extension< > > - "token pasting of ',' and __VA_ARGS__ is a GNU extension">, InGroup<GNU>; > > + "token pasting of ',' and __VA_ARGS__ is a GNU extension">, InGroup<GNUTokenPastingComma>; > > def err_unterm_macro_invoc : Error< > > "unterminated function-like macro invocation">; > > def err_too_many_args_in_macro_invoc : Error< > > @@ -480,7 +480,7 @@ > > "#line directive requires a positive integer argument">; > > def ext_pp_line_zero : Extension< > > "#line directive with zero argument is a GNU extension">, > > - InGroup<GNU>; > > + InGroup<GNULineZeroDirective>; > > def err_pp_line_invalid_filename : Error< > > "invalid filename for #line directive">; > > def warn_pp_line_decimal : Warning< > > > > <gnu-lex-flags.diff> > > > > -- > > Keyboard Maestro 6.1 now out - set web checkboxes & radio buttons, exit from loops, and more. > > > > Keyboard Maestro <http://www.keyboardmaestro.com/> Macros for your Mac > > <http://www.stairways.com/> < http://download.keyboardmaestro.com/> > > > > _______________________________________________ > > cfe-commits mailing list > > [email protected] > > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > -- > Keyboard Maestro 6.2 now out - control Mail, reveal a file, format AppleScripts and more. > > Keyboard Maestro <http://www.keyboardmaestro.com/> Macros for your Mac > <http://www.stairways.com/> < http://download.keyboardmaestro.com/> > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
