64 lines · cpp
1// RUN: %clang_analyze_cc1 -analyzer-checker=debug.AnalysisOrder -analyzer-config c++-allocator-inlining=true,debug.AnalysisOrder:PreStmtCXXNewExpr=true,debug.AnalysisOrder:PostStmtCXXNewExpr=true,debug.AnalysisOrder:PreCall=true,debug.AnalysisOrder:PostCall=true,debug.AnalysisOrder:NewAllocator=true %s 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-INLINE2// RUN: %clang_analyze_cc1 -analyzer-checker=debug.AnalysisOrder -analyzer-config c++-allocator-inlining=false,debug.AnalysisOrder:PreStmtCXXNewExpr=true,debug.AnalysisOrder:PostStmtCXXNewExpr=true,debug.AnalysisOrder:PreCall=true,debug.AnalysisOrder:PostCall=true,debug.AnalysisOrder:NewAllocator=true %s 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-NO-INLINE3 4#include "Inputs/system-header-simulator-cxx.h"5 6namespace std {7void *malloc(size_t);8void free(void *);9} // namespace std10 11void *operator new(size_t size) { return std::malloc(size); }12void operator delete(void *ptr, size_t size) { std::free(ptr); }13 14struct S {15 S() {}16 ~S() {}17};18 19void foo();20 21void test() {22 S *s = new S();23 foo();24 delete s;25}26 27/*28void test() {29 S *s = new S();30// CHECK-INLINE: PreCall (operator new)31// CHECK-INLINE-NEXT: PreCall (std::malloc)32// CHECK-INLINE-NEXT: PostCall (std::malloc)33// CHECK-INLINE-NEXT: PostCall (operator new)34// CHECK-INLINE-NEXT: NewAllocator35// CHECK-NO-INLINE: PreCall (S::S)36// CHECK-INLINE-NEXT: PreCall (S::S)37// CHECK-NEXT: PostCall (S::S)38// CHECK-NEXT: PreStmt<CXXNewExpr>39// CHECK-NEXT: PostStmt<CXXNewExpr>40 foo();41// CHECK-NEXT: PreCall (foo)42// CHECK-NEXT: PostCall (foo)43 delete s;44// CHECK-NEXT: PreCall (S::~S)45// CHECK-NEXT: PostCall (S::~S)46// CHECK-NEXT: PreCall (operator delete)47// CHECK-INLINE-NEXT: PreCall (std::free)48// CHECK-INLINE-NEXT: PostCall (std::free)49// CHECK-NEXT: PostCall (operator delete)50}51 52void operator delete(void *ptr, size_t size) {53 std::free(ptr);54// CHECK-NO-INLINE-NEXT: PreCall (std::free)55// CHECK-NO-INLINE-NEXT: PostCall (std::free)56}57 58void *operator new(size_t size) {59 return std::malloc(size);60// CHECK-NO-INLINE-NEXT: PreCall (std::malloc)61// CHECK-NO-INLINE-NEXT: PostCall (std::malloc)62}63*/64