]> granicus.if.org Git - clang/commit
[analyzer] CStringChecker: Fix a crash on C++ overloads of standard functions.
authorArtem Dergachev <artem.dergachev@gmail.com>
Wed, 19 Dec 2018 21:50:46 +0000 (21:50 +0000)
committerArtem Dergachev <artem.dergachev@gmail.com>
Wed, 19 Dec 2018 21:50:46 +0000 (21:50 +0000)
commitb99a35b5aefdf2bb77e6a9522e3c7fada2b73fa7
tree56954573d93ef81ba19fb7a02d4eac6f1e764655
parente4f56bec7bc91fa4437b8e7ce1ac6e5a017766d8
[analyzer] CStringChecker: Fix a crash on C++ overloads of standard functions.

It turns out that it's not all that uncommon to have a C++ override of, say,
memcpy that receives a structure (or two) by reference (or by value, if it's
being copied from) and copies memory from it (or into it, if it's passed
by reference). In this case the argument will be of structure type (recall that
expressions of reference type do not exist: instead, C++ classifies expressions
into prvalues and lvalues and xvalues).

In this scenario we crash because we are trying to assume that, say,
a memory region is equal to an empty CompoundValue (the non-lazy one; this is
what makeZeroVal() return for compound types and it represents prvalue of
an object that is initialized with an empty initializer list).

Add defensive checks.

Differential Revision: https://reviews.llvm.org/D55873

rdar://problem/45366551

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@349682 91177308-0d34-0410-b5e6-96231b3b80d8
lib/StaticAnalyzer/Checkers/CStringChecker.cpp