]> granicus.if.org Git - clang/commit
Parse the warning options twice. The first pass sets diagnostic state, while
authorChad Rosier <mcrosier@apple.com>
Thu, 3 Nov 2011 21:23:39 +0000 (21:23 +0000)
committerChad Rosier <mcrosier@apple.com>
Thu, 3 Nov 2011 21:23:39 +0000 (21:23 +0000)
commit05272a659437fc6ec7fa5a7c3f3fc6eb220a6fa2
tree9ac4aa322bb9c8b79352731ae6a30ad67ab64831
parent27368f9f1942a42b668cd1d9426859566c4f8540
Parse the warning options twice.  The first pass sets diagnostic state, while
the second pass reports warnings/errors.  This has the effect that we follow
the more canonical "last option wins" paradigm when there are conflicting
options.
rdar://10383776

Previously, we parsed the warning options in order.  This caused non-intuitive
behavior:

1) clang test.c -Wnosuchwarning -Wno-unknown-warning-option
Before:
warning: unknown warning option '-Wnosuchwarning' [-Wunknown-warning-option]
1 warning generated.
After:
[0 warning generated.]

2) clang test.c -Wnosuchwarning -Werror=unknown-warning-option
Before:
warning: unknown warning option '-Wnosuchwarning' [-Wunknown-warning-option]
1 warning generated.
After:
error: unknown warning option '-Wnosuchwarning' [-Werror,-Wunknown-warning-option]

3) clang test.c -Werror=unknown-warning-option -Wnosuchwarning -Wno-error=unknown-warning-option -Wnosuchwarning
Before:
error: unknown warning option '-Wnosuchwarning' [-Werror,-Wunknown-warning-option]
warning: unknown warning option '-Wnosuchwarning' [-Wunknown-warning-option]
After:
warning: unknown warning option '-Wnosuchwarning' [-Wunknown-warning-option]
warning: unknown warning option '-Wnosuchwarning' [-Wunknown-warning-option]
2 warnings generated.

4) clang test.c -Werror=unknown-warning-option -Wnosuchwarning -Wno-error=unknown-warning-option -Wno-unknown-warning-option -Wnosuchwarning
Before:
error: unknown warning option '-Wnosuchwarning' [-Werror,-Wunknown-warning-option]

After:
[0 warning generated.]

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@143657 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Frontend/Warnings.cpp