From fd9ee1eef92d956d1d30d0476ec6b77990eeef1d Mon Sep 17 00:00:00 2001 From: Artem Dergachev Date: Wed, 13 Jan 2016 15:13:48 +0000 Subject: [analyzer] Provide .def-files and visitors for SVal/SymExpr/MemRegion. Provide separate visitor templates for the three hierarchies, and also the `FullSValVisitor' class, which is a union of all three visitors. Additionally, add a particular example visitor, `SValExplainer', in order to test the visitor templates. This visitor is capable of explaining the SVal, SymExpr, or MemRegion in a natural language. Differential Revision: http://reviews.llvm.org/D15448 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@257605 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/analyzer/DebugChecks.rst | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'docs/analyzer') diff --git a/docs/analyzer/DebugChecks.rst b/docs/analyzer/DebugChecks.rst index 771e39fc43..bfa3142efb 100644 --- a/docs/analyzer/DebugChecks.rst +++ b/docs/analyzer/DebugChecks.rst @@ -162,6 +162,41 @@ ExprInspection checks } while(0); // expected-warning{{SYMBOL DEAD}} +- void clang_analyzer_explain(a single argument of any type); + + This function explains the value of its argument in a human-readable manner + in the warning message. You can make as many overrides of its prototype + in the test code as necessary to explain various integral, pointer, + or even record-type values. + + Example usage:: + + void clang_analyzer_explain(int); + void clang_analyzer_explain(void *); + + void foo(int param, void *ptr) { + clang_analyzer_explain(param); // expected-warning{{argument 'param'}} + if (!ptr) + clang_analyzer_explain(ptr); // expected-warning{{memory address '0'}} + } + +- size_t clang_analyzer_getExtent(void *); + + This function returns the value that represents the extent of a memory region + pointed to by the argument. This value is often difficult to obtain otherwise, + because no valid code that produces this value. However, it may be useful + for testing purposes, to see how well does the analyzer model region extents. + + Example usage:: + + void foo() { + int x, *y; + size_t xs = clang_analyzer_getExtent(&x); + clang_analyzer_explain(xs); // expected-warning{{'4'}} + size_t ys = clang_analyzer_getExtent(&y); + clang_analyzer_explain(ys); // expected-warning{{'8'}} + } + Statistics ========== -- cgit v1.2.1