forked from OSchip/llvm-project
Fix the behavior of clang's -w flag.
It is intended to disable _all_ warnings, even those upgraded to errors via `-Werror=warningname` or `#pragma clang diagnostic error' Fixes: https://llvm.org/PR38231 Differential Revision: https://reviews.llvm.org/D53199 llvm-svn: 352535
This commit is contained in:
parent
d37ff4e888
commit
3f8b916698
|
@ -456,12 +456,17 @@ DiagnosticIDs::getDiagnosticSeverity(unsigned DiagID, SourceLocation Loc,
|
|||
if (Result == diag::Severity::Ignored)
|
||||
return Result;
|
||||
|
||||
// Honor -w, which is lower in priority than pedantic-errors, but higher than
|
||||
// -Werror.
|
||||
// FIXME: Under GCC, this also suppresses warnings that have been mapped to
|
||||
// errors by -W flags and #pragma diagnostic.
|
||||
if (Result == diag::Severity::Warning && State->IgnoreAllWarnings)
|
||||
return diag::Severity::Ignored;
|
||||
// Honor -w: this disables all messages which which are not Error/Fatal by
|
||||
// default (disregarding attempts to upgrade severity from Warning to Error),
|
||||
// as well as disabling all messages which are currently mapped to Warning
|
||||
// (whether by default or downgraded from Error via e.g. -Wno-error or #pragma
|
||||
// diagnostic.)
|
||||
if (State->IgnoreAllWarnings) {
|
||||
if (Result == diag::Severity::Warning ||
|
||||
(Result >= diag::Severity::Error &&
|
||||
!isDefaultMappingAsError((diag::kind)DiagID)))
|
||||
return diag::Severity::Ignored;
|
||||
}
|
||||
|
||||
// If -Werror is enabled, map warnings to errors unless explicitly disabled.
|
||||
if (Result == diag::Severity::Warning) {
|
||||
|
|
|
@ -13,6 +13,9 @@
|
|||
// RUN: %clang_cc1 %s -Rpass=inline -Rno-everything -emit-llvm -o - 2>&1 | FileCheck %s --check-prefix=CHECK-NO-REMARKS
|
||||
// RUN: %clang_cc1 %s -Rpass=inline -Rno-everything -Reverything -emit-llvm -o - 2>&1 | FileCheck %s --check-prefix=CHECK-REMARKS
|
||||
//
|
||||
// Check that -w doesn't disable remarks.
|
||||
// RUN: %clang_cc1 %s -Rpass=inline -w -emit-llvm -o - 2>&1 | FileCheck %s --check-prefix=CHECK-REMARKS
|
||||
//
|
||||
// FIXME: -Reverything should imply -Rpass=.*.
|
||||
// RUN: %clang_cc1 %s -Reverything -emit-llvm -o - 2>/dev/null | FileCheck %s --check-prefix=CHECK-NO-REMARKS
|
||||
//
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
// Check that -w has lower priority than -pedantic-errors.
|
||||
// Check that -w takes precedence over -pedantic-errors.
|
||||
// RUN: %clang_cc1 -verify -pedantic-errors -w %s
|
||||
|
||||
void f0() { f1(); } // expected-error {{implicit declaration of function}}
|
||||
// Expect *not* to see a diagnostic for "implicit declaration of function"
|
||||
// expected-no-diagnostics
|
||||
|
||||
void f0() { f1(); }
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
// Verify that various combinations of flags properly keep the sign-compare
|
||||
// warning disabled.
|
||||
|
||||
// RUN: %clang_cc1 -verify -Wno-error=sign-compare %s
|
||||
// RUN: %clang_cc1 -verify -Wsign-compare -w -Wno-error=sign-compare %s
|
||||
// RUN: %clang_cc1 -verify -w -Werror=sign-compare %s
|
||||
// expected-no-diagnostics
|
||||
|
||||
int f0(int x, unsigned y) {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// Check that #pragma diagnostic warning overrides -Werror. This matches GCC's
|
||||
// original documentation, but not its earlier implementations.
|
||||
//
|
||||
// Check that #pragma diagnostic warning overrides -Werror.
|
||||
//
|
||||
// RUN: %clang_cc1 -verify -Werror %s
|
||||
|
||||
#pragma clang diagnostic warning "-Wsign-compare"
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
// Check that "#pragma diagnostic error" is suppressed by -w.
|
||||
//
|
||||
// RUN: %clang_cc1 -verify -Werror -w %s
|
||||
|
||||
// expected-no-diagnostics
|
||||
#pragma gcc diagnostic error "-Wsign-compare"
|
||||
int f0(int x, unsigned y) {
|
||||
return x < y;
|
||||
}
|
|
@ -1,17 +1,17 @@
|
|||
// RUN: rm -rf %t
|
||||
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -w -Werror=auto-import %s -I %S/Inputs \
|
||||
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -Werror=auto-import %s -I %S/Inputs \
|
||||
// RUN: -fmodule-implementation-of category_right -fsyntax-only
|
||||
|
||||
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -w -Werror=auto-import %s -I %S/Inputs \
|
||||
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -Werror=auto-import %s -I %S/Inputs \
|
||||
// RUN: -fmodule-implementation-of category_right -dM -E -o - 2>&1 | FileCheck %s
|
||||
// CHECK-NOT: __building_module
|
||||
|
||||
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -w -Werror=auto-import %s -I %S/Inputs \
|
||||
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -Werror=auto-import %s -I %S/Inputs \
|
||||
// RUN: -fmodule-implementation-of category_left -verify
|
||||
|
||||
// RUN: %clang_cc1 -x objective-c-header -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -w -Werror=auto-import %s -I %S/Inputs \
|
||||
// RUN: %clang_cc1 -x objective-c-header -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -Werror=auto-import %s -I %S/Inputs \
|
||||
// RUN: -fmodule-implementation-of category_right -emit-pch -o %t.pch
|
||||
// RUN: %clang_cc1 -x objective-c-header -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -w -Werror=auto-import %s -I %S/Inputs \
|
||||
// RUN: %clang_cc1 -x objective-c-header -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -Werror=auto-import %s -I %S/Inputs \
|
||||
// RUN: -DWITH_PREFIX -fmodules-ignore-macro=WITH_PREFIX -include-pch %t.pch -fmodule-implementation-of category_right
|
||||
|
||||
#ifndef WITH_PREFIX
|
||||
|
|
Loading…
Reference in New Issue