diff options
author | Jordan Rose <jordan_rose@apple.com> | 2013-04-02 00:26:15 +0000 |
---|---|---|
committer | Jordan Rose <jordan_rose@apple.com> | 2013-04-02 00:26:15 +0000 |
commit | d11ef1aaf784bdb1830ecfb8808937cc17cef32c (patch) | |
tree | de5ad496db91ce654eab4296f56352cef3e708cb /clang/test | |
parent | 24eea5d003e73e46e2259b8630e8105b8d67c901 (diff) | |
download | bcm5719-llvm-d11ef1aaf784bdb1830ecfb8808937cc17cef32c.tar.gz bcm5719-llvm-d11ef1aaf784bdb1830ecfb8808937cc17cef32c.zip |
[analyzer] Allow suppressing diagnostics reported within the 'std' namespace
This is controlled by the 'suppress-c++-stdlib' analyzer-config flag.
It is currently off by default.
This is more suppression than we'd like to do, since obviously there can
be user-caused issues within 'std', but it gives us the option to wield
a large hammer to suppress false positives the user likely can't work
around.
llvm-svn: 178513
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Analysis/Inputs/system-header-simulator-cxx.h | 7 | ||||
-rw-r--r-- | clang/test/Analysis/diagnostics/explicit-suppression.cpp | 71 |
2 files changed, 78 insertions, 0 deletions
diff --git a/clang/test/Analysis/Inputs/system-header-simulator-cxx.h b/clang/test/Analysis/Inputs/system-header-simulator-cxx.h index 03de527a02d..eee0e31a6f8 100644 --- a/clang/test/Analysis/Inputs/system-header-simulator-cxx.h +++ b/clang/test/Analysis/Inputs/system-header-simulator-cxx.h @@ -73,6 +73,13 @@ namespace std { struct nothrow_t {}; extern const nothrow_t nothrow; + + template<class InputIter, class OutputIter> + OutputIter copy(InputIter II, InputIter IE, OutputIter OI) { + while (II != IE) + *OI++ = *II++; + return OI; + } } void* operator new(std::size_t, const std::nothrow_t&) throw(); diff --git a/clang/test/Analysis/diagnostics/explicit-suppression.cpp b/clang/test/Analysis/diagnostics/explicit-suppression.cpp new file mode 100644 index 00000000000..6bc950f5d50 --- /dev/null +++ b/clang/test/Analysis/diagnostics/explicit-suppression.cpp @@ -0,0 +1,71 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-config suppress-c++-stdlib=false -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-config suppress-c++-stdlib=true -DSUPPRESSED=1 -verify %s + +#ifdef SUPPRESSED +// expected-no-diagnostics +#endif + +#include "../Inputs/system-header-simulator-cxx.h" + +void clang_analyzer_eval(bool); + +void testCopyNull(int *I, int *E) { + std::copy(I, E, (int *)0); +#ifndef SUPPRESSED + // This line number comes from system-header-simulator-cxx.h. + // expected-warning@65 {{Dereference of null pointer}} +#endif +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// PR15613: expected-* can't refer to diagnostics in other source files. +// The current implementation only matches line numbers, but has an upper limit +// of the number of lines in the main source file. |