I think I put it there after reading: test/PCH/cxx_exprs.cpp:4:// Test with pch. Use '-ast-dump' to force deserialization of function bodies.
I have made a patch to address this issue, but it will need a review. On Wed, May 20, 2015 at 7:46 PM, Richard Trieu <[email protected]> wrote: >> >> Modified: cfe/trunk/test/SemaCXX/delete.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/delete.cpp?rev=237608&r1=237607&r2=237608&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/SemaCXX/delete.cpp (original) >> +++ cfe/trunk/test/SemaCXX/delete.cpp Mon May 18 14:59:11 2015 >> @@ -1,9 +1,130 @@ >> -// RUN: %clang_cc1 -fsyntax-only -verify %s >> -// RUN: cp %s %t >> -// RUN: %clang_cc1 -fixit -x c++ %t >> -// RUN: %clang_cc1 -E -o - %t | FileCheck %s >> +// Test without PCH >> +// RUN: %clang_cc1 -fsyntax-only -include %S/delete-mismatch.h >> -fdiagnostics-parseable-fixits -std=c++11 %s 2>&1 | FileCheck %s >> + >> +// Test with PCH >> +// RUN: %clang_cc1 -x c++-header -std=c++11 -emit-pch -o %t >> %S/delete-mismatch.h >> +// RUN: %clang_cc1 -std=c++11 -include-pch %t -DWITH_PCH -fsyntax-only >> -verify %s -ast-dump > > Why is an AST dump being performed here? >> >> >> void f(int a[10][20]) { >> - // CHECK: delete[] a; >> delete a; // expected-warning {{'delete' applied to a pointer-to-array >> type}} >> + // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:9-[[@LINE-1]]:9}:"[]" >> +} >> +namespace MemberCheck { >> +struct S { >> + int *a = new int[5]; // expected-note4 {{allocated with 'new[]' here}} >> + int *b; >> + int *c; >> + static int *d; >> + S(); >> + S(int); >> + ~S() { >> + delete a; // expected-warning {{'delete' applied to a pointer that >> was allocated with 'new[]'; did you mean 'delete[]'?}} >> + delete b; // expected-warning {{'delete' applied to a pointer that >> was allocated with 'new[]'; did you mean 'delete[]'?}} >> + delete[] c; // expected-warning {{'delete[]' applied to a pointer >> that was allocated with 'new'; did you mean 'delete'?}} >> + } >> + void f(); >> +}; >> + >> +void S::f() >> +{ >> + delete a; // expected-warning {{'delete' applied to a pointer that was >> allocated with 'new[]'; did you mean 'delete[]'?}} >> + delete b; // expected-warning {{'delete' applied to a pointer that was >> allocated with 'new[]'; did you mean 'delete[]'?}} >> +} >> + >> +S::S() >> +: b(new int[1]), c(new int) {} // expected-note3 {{allocated with 'new[]' >> here}} >> +// expected-note@-1 {{allocated with 'new' here}} >> + >> +S::S(int i) >> +: b(new int[i]), c(new int) {} // expected-note3 {{allocated with 'new[]' >> here}} >> +// expected-note@-1 {{allocated with 'new' here}} >> + >> +struct S2 : S { >> + ~S2() { >> + delete a; // expected-warning {{'delete' applied to a pointer that >> was allocated with 'new[]'; did you mean 'delete[]'?}} >> + } >> +}; >> +int *S::d = new int[42]; // expected-note {{allocated with 'new[]' here}} >> +void f(S *s) { >> + int *a = new int[1]; // expected-note {{allocated with 'new[]' here}} >> + delete a; // expected-warning {{'delete' applied to a pointer that was >> allocated with 'new[]'; did you mean 'delete[]'?}} >> + delete s->a; // expected-warning {{'delete' applied to a pointer that >> was allocated with 'new[]'; did you mean 'delete[]'?}} >> + delete s->b; // expected-warning {{'delete' applied to a pointer that >> was allocated with 'new[]'; did you mean 'delete[]'?}} >> + delete s->c; >> + delete s->d; >> + delete S::d; // expected-warning {{'delete' applied to a pointer that >> was allocated with 'new[]'; did you mean 'delete[]'?}} >> +} >> + >> +// At least one constructor initializes field with matching form of >> 'new'. >> +struct MatchingNewIsOK { >> + int *p; >> + bool is_array_; >> + MatchingNewIsOK() : p{new int}, is_array_(false) {} >> + explicit MatchingNewIsOK(unsigned c) : p{new int[c]}, is_array_(true) >> {} >> + ~MatchingNewIsOK() { >> + if (is_array_) >> + delete[] p; >> + else >> + delete p; >> + } >> +}; >> + >> +// At least one constructor's body is missing; no proof of mismatch. >> +struct CantProve_MissingCtorDefinition { >> + int *p; >> + CantProve_MissingCtorDefinition(); >> + CantProve_MissingCtorDefinition(int); >> + ~CantProve_MissingCtorDefinition(); >> +}; >> + >> +CantProve_MissingCtorDefinition::CantProve_MissingCtorDefinition() >> + : p(new int) >> +{ } >> + >> +CantProve_MissingCtorDefinition::~CantProve_MissingCtorDefinition() >> +{ >> + delete[] p; >> +} >> + >> +struct base {}; >> +struct derived : base {}; >> +struct InitList { >> + base *p, *p2 = nullptr, *p3{nullptr}, *p4; >> + InitList(unsigned c) : p(new derived[c]), p4(nullptr) {} // >> expected-note {{allocated with 'new[]' here}} >> + InitList(unsigned c, unsigned) : p{new derived[c]}, p4{nullptr} {} // >> expected-note {{allocated with 'new[]' here}} >> + ~InitList() { >> + delete p; // expected-warning {{'delete' applied to a pointer that >> was allocated with 'new[]'; did you mean 'delete[]'?}} >> + delete [] p; >> + delete p2; >> + delete [] p3; >> + delete p4; >> + } >> +}; >> +} >> + >> +namespace NonMemberCheck { >> +#define DELETE_ARRAY(x) delete[] (x) >> +#define DELETE(x) delete (x) >> +void f() { >> + int *a = new int(5); // expected-note2 {{allocated with 'new' here}} >> + delete[] a; // expected-warning {{'delete[]' applied to a >> pointer that was allocated with 'new'; did you mean 'delete'?}} >> + int *b = new int; >> + delete b; >> + int *c{new int}; // expected-note {{allocated with 'new' here}} >> + int *d{new int[1]}; // expected-note2 {{allocated with 'new[]' here}} >> + delete [ ] c; // expected-warning {{'delete[]' applied to a >> pointer that was allocated with 'new'; did you mean 'delete'?}} >> + // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:9-[[@LINE-1]]:17}:"" >> + delete d; // expected-warning {{'delete' applied to a pointer >> that was allocated with 'new[]'; did you mean 'delete[]'?}} >> + // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:9-[[@LINE-1]]:9}:"[]" >> + DELETE_ARRAY(a); // expected-warning {{'delete[]' applied to a >> pointer that was allocated with 'new'; did you mean 'delete'?}} >> + DELETE(d); // expected-warning {{'delete' applied to a pointer >> that was allocated with 'new[]'; did you mean 'delete[]'?}} >> +} >> } >> +#ifndef WITH_PCH >> +pch_test::X::X() >> + : a(new int[1]) // expected-note{{allocated with 'new[]' here}} >> +{ } >> +pch_test::X::X(int i) >> + : a(new int[i]) // expected-note{{allocated with 'new[]' here}} >> +{ } >> +#endif >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
