Request for comments on proposed patch for warning "levels" support

Hi,

I'm working on an implementation for part of the #pragma warning from Visual C++[1]. An example is below:

   // regular code here
   code()

   // Coming across safe code that triggers warnings at level 4
   #pragma warning(push,3)

   // code that triggers warnings at level 4
   // silenced because we set the level to 3 above

   #pragma warning(pop)

The effect of this is to set the global warning level to be 3 for some portion of the file. Each global warning level has associated warnings, kind of like the -Wall and -Wextra parameters. So when the global warning level is 3, only those warnings that have a level <= 3 will be enabled.

The implementation that I am proposing is:

  * Have all warnings default to level 1
  * Map individual warnings to higher levels via a new mixin in Diagnostic.td
  * Add a "current level" to the DiagState class
  * Modify DiagState so that the warning level filters out warnings that should be ignored

The attached patch contains a first go. The way it is constructed at the moment, all warnings will be enabled as they are at level 1 and the "current level" defaults to 4.

Also note that the patch contains diffs against some more local changes. I hope that there is still enough context.

The important files in the diff (imo):

  * Diagnostic.h/cpp
  * Diagnostic.td

I look forward to your comments.

Thanks for your time!

Sohail

[1] http://msdn.microsoft.com/en-us/library/2c8f766e.aspx

pragma-warning-level.patch (15.1 KB)

The implementation that I am proposing is:

* Have all warnings default to level 1
* Map individual warnings to higher levels via a new mixin in Diagnostic.td
* Add a "current level" to the DiagState class
* Modify DiagState so that the warning level filters out warnings that
should be ignored

...

I look forward to your comments.

Forgive me, late night and I forgot the main point of the email: is this the best way to go about it?!