[cfe-dev] GSoC Final Report | ISL Memory Management Using Clang Static Analyzer
Malhar Thakkar via cfe-dev
cfe-dev at lists.llvm.org
Wed Aug 23 21:16:07 PDT 2017
Hello everyone,
This
<https://docs.google.com/document/d/1oC3qxh_q-Ly8DVsijcb4U5H8pkcA-19OR8NCeYthBN8/edit?usp=sharing>
is the final report of my GSoC project. The aim of my project was to add
support to RetainCountChecker to perform reference counting of objects in
frameworks written in C, primarily for the Integer Set Library (ISL).
My work in this GSoC project primarily involved the following two tasks:
- Analyze how the RetainCountChecker performs (in terms of true/false
positives and true/false negatives) on the ISL codebase.
- Fix most of the true positives (due to missing annotations) and false
positives by adding certain functionalities to the RetainCountChecker.
Patches submitted to clang and ISL:
-
Missing annotations in various functions in ISL resulted in a lot of
leak warnings for reference counted objects. To suppress these warnings, I
submitted patches
<http://repo.or.cz/isl.git/search/HEAD?s=Malhar+Thakkar;st=author> to
add missing annotations to such functions.
-
False positives were raised when the RetainCountChecker analyzed the
bodies of functions (which perform reference counting) of the form
obj_free(), obj_copy() and obj_cow(). To prevent such false positives, I
submitted this patch <https://reviews.llvm.org/D34937>. This patch makes
the checker trust the implementations of these functions and hence,
prevents it to analyze the bodies of these functions.
-
Diagnostic notes emitted by the RetainCountChecker were specific to Core
Foundation and Objective-C objects. To support more generalized reference
counting annotations and emit more generalized diagnostic notes, I
submitted this patch <https://reviews.llvm.org/D35613>.
- Original RetainCountChecker did not have the functionality of
performing reference counting of function parameters on the callee-side
which can prove to be very useful for various kinds of debugging. This
patch <https://reviews.llvm.org/D36441> adds that functionality.
Analysis of building the ISL codebase with Clang Static Analyzer during
various stages can be found here
<https://docs.google.com/spreadsheets/d/1G233lt251m-z1TwcHqAzaV6vrrGGVkt0-WKh4QAaW9U/edit?usp=sharing>.
Note that the “View Report” hyperlinks will not work on your systems since
their paths are pertaining to my local system.
Usage
-
Download the latest clang source code by git clone
http://llvm.org/git/clang.git and build it from source.
-
Download the latest ISL source code by git clone git://repo.or.cz/isl.git
-
Prepend obj_free(), obj_cow() and obj_free() functions in ISL with
__attribute__((annotate("rc_ownership_trusted_implementation")) as
mentioned above.
-
Run the following scripts (in order) in the ISL home directory to build
it using Clang Static Analyzer.
-
$LLVM_BUILD/bin/scan-build --use-analyzer $LLVM_BUILD/bin/clang
--use-cc $LLVM_BUILD/bin/clang -o <output_folder_path> -enable-checker
osx.cocoa.RetainCount ./configure CC="gcc"
CFLAGS='-Wno-nullability-completeness -I/usr/local/include'
-
$LLVM_BUILD/bin/scan-build --use-analyzer $LLVM_BUILD/bin/clang
--use-cc $LLVM_BUILD/bin/clang -o <output_folder_path> -enable-checker
osx.cocoa.RetainCount make CC="gcc" CFLAGS='-Wno-nullability-completeness
-I/usr/local/include -I/$ISL_SRC
-D__isl_give="__attribute__((annotate(\"rc_ownership_returns_retained\")))"
-D__isl_take="__attribute__((annotate(\"rc_ownership_consumed\")))"'
- Run $LLVM_BUILD/bin/scan-view on the output directory to view the
results.
Let me know your thoughts on my final report.
Thank you.
Regards,
Malhar Thakkar
ᐧ
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170824/7b6be804/attachment.html>
More information about the cfe-dev
mailing list