diff --git a/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp b/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp index 48e3e22af04a..26fea772d0a1 100644 --- a/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp +++ b/clang/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp @@ -203,7 +203,7 @@ bool AnalyzerOptions::mayInlineTemplateFunctions() { bool AnalyzerOptions::mayInlineCXXAllocator() { return getBooleanOption(InlineCXXAllocator, "c++-allocator-inlining", - /*Default=*/false); + /*Default=*/true); } bool AnalyzerOptions::mayInlineCXXContainerMethods() { diff --git a/clang/test/Analysis/NewDelete-custom.cpp b/clang/test/Analysis/NewDelete-custom.cpp index 845beb337437..f5a2952699ff 100644 --- a/clang/test/Analysis/NewDelete-custom.cpp +++ b/clang/test/Analysis/NewDelete-custom.cpp @@ -1,7 +1,7 @@ -// RUN: %clang_analyze_cc1 -analyzer-checker=core,cplusplus.NewDelete,unix.Malloc -std=c++11 -fblocks -verify %s -// RUN: %clang_analyze_cc1 -analyzer-checker=core,cplusplus.NewDelete,cplusplus.NewDeleteLeaks,unix.Malloc -std=c++11 -DLEAKS=1 -fblocks -verify %s -// RUN: %clang_analyze_cc1 -analyzer-checker=core,cplusplus.NewDelete,unix.Malloc -std=c++11 -analyzer-config c++-allocator-inlining=true -DALLOCATOR_INLINING=1 -fblocks -verify %s -// RUN: %clang_analyze_cc1 -analyzer-checker=core,cplusplus.NewDelete,cplusplus.NewDeleteLeaks,unix.Malloc -std=c++11 -analyzer-config c++-allocator-inlining=true -DLEAKS=1 -DALLOCATOR_INLINING=1 -fblocks -verify %s +// RUN: %clang_analyze_cc1 -analyzer-checker=core,cplusplus.NewDelete,unix.Malloc -std=c++11 -analyzer-config c++-allocator-inlining=false -fblocks -verify %s +// RUN: %clang_analyze_cc1 -analyzer-checker=core,cplusplus.NewDelete,cplusplus.NewDeleteLeaks,unix.Malloc -std=c++11 -analyzer-config c++-allocator-inlining=false -DLEAKS=1 -fblocks -verify %s +// RUN: %clang_analyze_cc1 -analyzer-checker=core,cplusplus.NewDelete,unix.Malloc -std=c++11 -DALLOCATOR_INLINING=1 -fblocks -verify %s +// RUN: %clang_analyze_cc1 -analyzer-checker=core,cplusplus.NewDelete,cplusplus.NewDeleteLeaks,unix.Malloc -std=c++11 -DLEAKS=1 -DALLOCATOR_INLINING=1 -fblocks -verify %s #include "Inputs/system-header-simulator-cxx.h" #if !(LEAKS && !ALLOCATOR_INLINING) diff --git a/clang/test/Analysis/ctor.mm b/clang/test/Analysis/ctor.mm index e903263431fc..6a8711d8e8dc 100644 --- a/clang/test/Analysis/ctor.mm +++ b/clang/test/Analysis/ctor.mm @@ -572,10 +572,9 @@ namespace ZeroInitialization { } void testNew() { - // FIXME: Pending proper implementation of constructors for 'new'. raw_pair *pp = new raw_pair(); - clang_analyzer_eval(pp->p1 == 0); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(pp->p2 == 0); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(pp->p1 == 0); // expected-warning{{TRUE}} + clang_analyzer_eval(pp->p2 == 0); // expected-warning{{TRUE}} } void testArrayNew() { @@ -679,8 +678,7 @@ namespace InitializerList { void testDynamic() { List *list = new List{1, 2}; - // FIXME: When we handle constructors with 'new', this will be TRUE. - clang_analyzer_eval(list->usedInitializerList); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(list->usedInitializerList); // expected-warning{{TRUE}} } } diff --git a/clang/test/Analysis/new.cpp b/clang/test/Analysis/new.cpp index 6cfcb1d92719..2a73e2d4e877 100644 --- a/clang/test/Analysis/new.cpp +++ b/clang/test/Analysis/new.cpp @@ -34,7 +34,7 @@ void *testPlacementNew() { void *y = new (x) int; clang_analyzer_eval(x == y); // expected-warning{{TRUE}}; - clang_analyzer_eval(*x == 1); // expected-warning{{UNKNOWN}}; + clang_analyzer_eval(*x == 1); // expected-warning{{TRUE}}; return y; } @@ -200,8 +200,7 @@ int testNoInitializationPlacement() { int n; new (&n) int; - // Should warn that n is uninitialized. - if (n) { // no-warning + if (n) { // expected-warning{{Branch condition evaluates to a garbage value}} return 0; } return 1; diff --git a/clang/test/Analysis/virtualcall.cpp b/clang/test/Analysis/virtualcall.cpp index c22a8463c04a..1929abf6f0aa 100644 --- a/clang/test/Analysis/virtualcall.cpp +++ b/clang/test/Analysis/virtualcall.cpp @@ -262,6 +262,9 @@ int main() { //expected-note-re@-2 {{{{^}}Calling default constructor for 'M'}} #endif Y *y = new Y; +#if !PUREONLY + //expected-note-re@-2 {{{{^}}Calling default constructor for 'Y'}} +#endif delete y; header::Z z; #if !PUREONLY