4e4b857841
Summary: In the existing implementation of `ASSERT*`, test termination happens in `~Tester`, which is called when instance of `Tester` goes out of scope. This is the cause of many scan-build bugs. This diff changes `ASSERT*` to terminate the test immediately. Also added one suppression in `util/signal_test.cc` scan-build bugs before: http://home.fburl.com/~sugak/latest/index.html after: http://home.fburl.com/~sugak/latest2/index.html Test Plan: Modify some test to fail an assertion and make sure that `ASSERT*` terminated the test. Run `make analyze` and make sure no 'Called C++ object pointer is null' and 'Dereference of null pointer' bugs reported. Run tests and make sure no failing tests: ```lang=bash % make check % USE_CLANG=1 make check ``` Reviewers: meyering, lgalanis, sdong, rven, igor Reviewed By: igor Subscribers: dhruba, leveldb Differential Revision: https://reviews.facebook.net/D33381
39 lines
664 B
C++
39 lines
664 B
C++
// Copyright (c) 2013, Facebook, Inc. All rights reserved.
|
|
// This source code is licensed under the BSD-style license found in the
|
|
// LICENSE file in the root directory of this source tree. An additional grant
|
|
// of patent rights can be found in the PATENTS file in the same directory.
|
|
//
|
|
#include "port/stack_trace.h"
|
|
#include <assert.h>
|
|
|
|
namespace {
|
|
void f0() {
|
|
char *p = nullptr;
|
|
|
|
#ifndef __clang_analyzer__
|
|
// cppcheck-suppress nullPointer
|
|
*p = 10; /* SIGSEGV here!! */
|
|
#endif
|
|
}
|
|
|
|
void f1() {
|
|
f0();
|
|
}
|
|
|
|
void f2() {
|
|
f1();
|
|
}
|
|
|
|
void f3() {
|
|
f2();
|
|
}
|
|
} // namespace
|
|
|
|
int main() {
|
|
rocksdb::port::InstallStackTraceHandler();
|
|
|
|
f3();
|
|
|
|
return 0;
|
|
}
|