Index: lib/StaticAnalyzer/Core/AnalyzerOptions.cpp =================================================================== --- lib/StaticAnalyzer/Core/AnalyzerOptions.cpp +++ lib/StaticAnalyzer/Core/AnalyzerOptions.cpp @@ -203,7 +203,7 @@ bool AnalyzerOptions::mayInlineCXXAllocator() { return getBooleanOption(InlineCXXAllocator, "c++-allocator-inlining", - /*Default=*/false); + /*Default=*/true); } bool AnalyzerOptions::mayInlineCXXContainerMethods() { Index: test/Analysis/NewDelete-custom.cpp =================================================================== --- test/Analysis/NewDelete-custom.cpp +++ 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) Index: test/Analysis/ctor.mm =================================================================== --- test/Analysis/ctor.mm +++ test/Analysis/ctor.mm @@ -572,10 +572,9 @@ } 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 @@ 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}} } } Index: test/Analysis/new.cpp =================================================================== --- test/Analysis/new.cpp +++ test/Analysis/new.cpp @@ -34,7 +34,7 @@ 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 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; Index: test/Analysis/virtualcall.cpp =================================================================== --- test/Analysis/virtualcall.cpp +++ test/Analysis/virtualcall.cpp @@ -262,6 +262,9 @@ //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