[llvm-bugs] [Bug 44712] New: False positive coming from EXPECT_NEAR in googletest (aka gtest).
via llvm-bugs
llvm-bugs at lists.llvm.org
Wed Jan 29 17:20:27 PST 2020
https://bugs.llvm.org/show_bug.cgi?id=44712
Bug ID: 44712
Summary: False positive coming from EXPECT_NEAR in googletest
(aka gtest).
Product: clang
Version: 9.0
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: Static Analyzer
Assignee: dcoughlin at apple.com
Reporter: cassio.neri at gmail.com
CC: dcoughlin at apple.com, llvm-bugs at lists.llvm.org
The static analyzer issues two false positives inside googletest in this code.
#include <gtest/gtest.h>
TEST(Foo, Test) {
EXPECT_NEAR(1.0, 1.1, 0.2);
}
$ scan-build clang++ -std=c++17 -g -c file.cpp
/usr/include/gtest/internal/gtest-port.h:1205:20: warning: Use of memory after
it is freed
T* get() const { return ptr_; }
^~~~~~~~~~~
/usr/include/gtest/internal/gtest-port.h:1216:16: warning: Attempt to delete
released memory
delete ptr_;
^
The following short self-contained example reproduces the issue. (For easy of
reference, it uses the same names that appear inside googletest's code.)
template <typename T>
struct scoped_ptr {
~scoped_ptr() { delete ptr_; }
T* ptr_;
};
struct AssertionResult {
operator bool() const { return success_; }
char* message() const { return message_.ptr_; }
bool success_;
scoped_ptr<char> message_;
};
AssertionResult DoubleNearPredFormat();
void partial_expansion_of_EXPECT_NEAR() {
if (const AssertionResult gtest_ar = (DoubleNearPredFormat()))
gtest_ar.message();
}
FWIW: Any of the following changes make the problem to go away:
1) Removing the extra parentheses around the call to DoubleNearPredFormat().
(This is very surprising to me. Indeed, the need to add those parentheses to
reproduce the issue was quite hard to find!)
2) Replacing scoped_ptr with std::unique_ptr. (Although not identical, these
classes are similar.)
3) Making scoped_ptr a non template and substituting T by char.
I've seen this behavior with clang 7.1 and 9.0.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20200130/55715af1/attachment.html>
More information about the llvm-bugs
mailing list