On Tue, Apr 29, 2014 at 7:37 PM, Prathamesh Kulkarni
<bilbotheelffri...@gmail.com> wrote:
> On Tue, Apr 29, 2014 at 6:49 PM, Manuel López-Ibáñez
> <lopeziba...@gmail.com> wrote:
>> This hunk in your patch doesn't seem related:
> Oops, Sorry. Removed that, and re-tested.
>>
>> @@ -509,6 +509,9 @@ Warn about missing fields in struct init
>>  Wsizeof-pointer-memaccess
>>  C ObjC C++ ObjC++ Var(warn_sizeof_pointer_memaccess) Warning
>> LangEnabledBy(C ObjC C++ ObjC++,Wall)
>>
>> +Wsizeof-array-argument
>> +C Var(warn_sizeof_array_argument) Warning LangEnabledBy(C,Wall)
>> +
>>  Wsuggest-attribute=format
>>  C ObjC C++ ObjC++ Var(warn_suggest_attribute_format) Warning
>>  Warn about functions which might be candidates for format attributes
>>
>> Also, it would be good to update doc/invoke.texi, the current
>> description is a bit confusing. It says it is enabled by default when
>> it actually isn't (nor after your patch). I propose something like:
>>
>>
>> Index: gcc/doc/invoke.texi
>> ===================================================================
>> --- gcc/doc/invoke.texi (revision 208669)
>> +++ gcc/doc/invoke.texi (working copy)
>> @@ -4997,9 +4997,10 @@
>>  @item -Wvariadic-macros
>>  @opindex Wvariadic-macros
>>  @opindex Wno-variadic-macros
>> -Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
>> -alternate syntax when in pedantic ISO C99 mode.  This is default.
>> -To inhibit the warning messages, use @option{-Wno-variadic-macros}.
>> +Warn if variadic macros are used in ISO C90 mode, or if the GNU
>> +alternate syntax is used in ISO C99 mode.  This is enabled by either
>> +@option{-Wpedantic} or @option{-Wtraditional}.  To inhibit the warning
>> +messages, use @option{-Wno-variadic-macros}.
>>
>>  @item -Wvarargs
>>  @opindex Wvarargs
> Thanks. I added this to the patch.
>>
>> On 29 April 2014 14:41, Prathamesh Kulkarni <bilbotheelffri...@gmail.com> 
>> wrote:
>
> Is this version OK ?
>
> [libcpp]
> * macro.c (parse_params): Remove check for Wpedantic for variadic macros.
>
> [gcc/c-family]
> * c.opt (-Wvariadic-macros): Init(-1) instead of Init(1).
> * c-opts.c (c_common_handle_option): Add case OPT_Wvariadic_macros.
>                (sanitize_cpp_opts): Check condition for pedantic or
> warn_traditional.
>
> [gcc/testsuite/gcc.dg/cpp]
> * Wvariadic-5.c: New test-case.
>
> [gcc/doc]
> * invoke.text: Change documentation for Wvariadic-macros option.
Sorry for the spelling mistake. Re-posting the changelog.

[libcpp]
* macro.c (parse_params): Remove check for Wpedantic for variadic macros.

[gcc/c-family]
* c.opt (-Wvariadic-macros): Init(-1) instead of Init(1).
* c-opts.c (c_common_handle_option): Add case OPT_Wvariadic_macros.
               (sanitize_cpp_opts): Check condition for pedantic or
warn_traditional.

[gcc/testsuite/gcc.dg/cpp]
* Wvariadic-5.c: New test-case.

[gcc/doc]
* invoke.texi (-Wvariadic-macros): Change documentation for
-Wvariadic-macros option.

Thanks and Regards,
Prathamesh

>
> Thanks and Regards,
> Prathamesh
>
>>> On Tue, Apr 29, 2014 at 2:07 PM, Manuel López-Ibáñez
>>> <lopeziba...@gmail.com> wrote:
>>>> On 23 April 2014 20:03, Prathamesh Kulkarni <bilbotheelffri...@gmail.com> 
>>>> wrote:
>>>>> I didn't attach the patch, I am extremely sorry for the noise.
>>>>> I am re-posting the mail.
>>>>> This is a follow up mail to 
>>>>> http://gcc.gnu.org/ml/gcc-help/2014-04/msg00096.html
>>>>> I have attached patch that prints the warning when passed 
>>>>> -Wvariadic-macros
>>>>> (I mostly followed it along lines of -Wlong-long).
>>>>> OK for trunk ?
>>>>
>>>> Hi Prathamesh,
>>>>
>>>> Thanks for CCing me! I cannot approve patches, but it looks almost
>>>> perfect to me. Did you run the regression testsuite and compare the
>>>> results before/after your patch? I would expect at least one testcase
>>>> testing this warning that would be affected by the change. If not, it
>>>> would be nice to add testcases for this. Also, there is another place
>>>> that tests for both Wpedantic and Wvariadic-macros just above the one
>>>> that you modify. I think you should update all of them to just test
>>>> for Wvariadic-macros.
>>>>
>>>> Once you do that, I hope Joseph will approve it quickly, it seems an
>>>> obvious fix to me for consistency with Wlong-long and to allow people
>>>> to use this warning without enabling Wpedantic (also, it will enable
>>>> the warning with Wtraditional as intended, which is currently broken).
>>>>
>>> Thanks, I modified the patch to remove Wpedantic check and added a new
>>> test-case.
>>> For changes to libcpp, do I need to run the entire test-suite or only 
>>> runinng
>>> libcpp tests (RUNTESTFLAGS=cpp.exp) is fine ?
>>> I ran libcpp tests, and there appeared to be no failures.
>>>
>>> [libcpp]
>>> * macro.c (parse_params): Remove check for Wpedantic for variadic macros.
>>>
>>> [gcc/c-family]
>>> * c.opt (-Wvariadic-macros): Init(-1) instead of Init(1).
>>> * c-opts.c (c_common_handle_option): Add case OPT_Wvariadic_macros.
>>>                (sanitize_cpp_opts): Check condition for pedantic or
>>> warn_traditional.
>>>
>>> [gcc/testsuite/gcc.dg/cpp]
>>> * Wvariadic-5.c: New test-case.
>>>
>>> Thanks and Regards,
>>> Prathamesh
>>>
>>>> Cheers,
>>>>
>>>> Manuel.
Index: libcpp/macro.c
===================================================================
--- libcpp/macro.c	(revision 209800)
+++ libcpp/macro.c	(working copy)
@@ -2794,14 +2794,12 @@ parse_params (cpp_reader *pfile, cpp_mac
 				   pfile->spec_nodes.n__VA_ARGS__);
 	      pfile->state.va_args_ok = 1;
 	      if (! CPP_OPTION (pfile, c99)
-		  && CPP_OPTION (pfile, cpp_pedantic)
 		  && CPP_OPTION (pfile, warn_variadic_macros))
 		cpp_pedwarning
                   (pfile, CPP_W_VARIADIC_MACROS,
 		   "anonymous variadic macros were introduced in C99");
 	    }
-	  else if (CPP_OPTION (pfile, cpp_pedantic)
-		   && CPP_OPTION (pfile, warn_variadic_macros))
+	  else if (CPP_OPTION (pfile, warn_variadic_macros))
 	    cpp_pedwarning (pfile, CPP_W_VARIADIC_MACROS,
 		            "ISO C does not permit named variadic macros");
 
Index: gcc/c-family/c-opts.c
===================================================================
--- gcc/c-family/c-opts.c	(revision 209800)
+++ gcc/c-family/c-opts.c	(working copy)
@@ -396,6 +396,10 @@ c_common_handle_option (size_t scode, co
       cpp_opts->cpp_warn_long_long = value;
       break;
 
+    case OPT_Wvariadic_macros:
+      cpp_opts->warn_variadic_macros = value;
+      break;
+
     case OPT_Wmissing_include_dirs:
       cpp_opts->warn_missing_include_dirs = value;
       break;
@@ -1227,8 +1231,9 @@ sanitize_cpp_opts (void)
 
   /* Similarly with -Wno-variadic-macros.  No check for c99 here, since
      this also turns off warnings about GCCs extension.  */
-  cpp_opts->warn_variadic_macros
-    = cpp_warn_variadic_macros && (pedantic || warn_traditional);
+  if (cpp_warn_variadic_macros == -1)
+    cpp_warn_variadic_macros = pedantic || warn_traditional;
+  cpp_opts->warn_variadic_macros = cpp_warn_variadic_macros;
 
   /* If we're generating preprocessor output, emit current directory
      if explicitly requested or if debugging information is enabled.
Index: gcc/c-family/c.opt
===================================================================
--- gcc/c-family/c.opt	(revision 209800)
+++ gcc/c-family/c.opt	(working copy)
@@ -785,7 +785,7 @@ C ObjC C++ ObjC++ Var(warn_unused_result
 Warn if a caller of a function, marked with attribute warn_unused_result, does not use its return value
 
 Wvariadic-macros
-C ObjC C++ ObjC++ Var(cpp_warn_variadic_macros) Init(1) Warning
+C ObjC C++ ObjC++ Var(cpp_warn_variadic_macros) Init(-1) Warning
 Warn about using variadic macros
 
 Wvarargs
Index: gcc/doc/invoke.texi
===================================================================
--- gcc/doc/invoke.texi	(revision 209800)
+++ gcc/doc/invoke.texi	(working copy)
@@ -4997,9 +4997,10 @@ modes.  To inhibit the warning messages,
 @item -Wvariadic-macros
 @opindex Wvariadic-macros
 @opindex Wno-variadic-macros
-Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
-alternate syntax when in pedantic ISO C99 mode.  This is default.
-To inhibit the warning messages, use @option{-Wno-variadic-macros}.
+Warn if variadic macros are used in ISO C90 mode, or if the GNU
+alternate syntax is used in ISO C99 mode.  This is enabled by either
+@option{-Wpedantic} or @option{-Wtraditional}.  To inhibit the warning
+messages, use @option{-Wno-variadic-macros}.
 
 @item -Wvarargs
 @opindex Wvarargs
Index: gcc/testsuite/gcc.dg/cpp/Wvariadic-5.c
===================================================================
--- gcc/testsuite/gcc.dg/cpp/Wvariadic-5.c	(revision 0)
+++ gcc/testsuite/gcc.dg/cpp/Wvariadic-5.c	(working copy)
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-std=iso9899:1990 -Wvariadic-macros" } */
+
+#define f(x,...)	/* { dg-warning "variadic" } */
+#define g(x,y...)	/* { dg-warning "variadic" } */
+int not_empty;

Reply via email to