Rename 'free' in warning messages to 'release' (#150935)

Changed the warning message:

- **From**: 'Attempt to free released memory'
   **To**: 'Attempt to release already released memory'
- **From**: 'Attempt to free non-owned memory'
   **To**: 'Attempt to release non-owned memory'
- **From**: 'Use of memory after it is freed' 
   **To**: 'Use of memory after it is released'

All connected tests and their expectations have been changed
accordingly.

Inspired by [this
PR](https://github.com/llvm/llvm-project/pull/147542#discussion_r2195197922)
This commit is contained in:
Baghirov Feyruz 2025-07-28 18:02:56 +02:00 committed by GitHub
parent 837b2d464f
commit f0c90dfcd8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
28 changed files with 127 additions and 127 deletions

View File

@ -16,5 +16,5 @@ void af2() {
void *p = my_malloc(12); void *p = my_malloc(12);
my_free(p); my_free(p);
free(p); free(p);
// CHECK: warning: Attempt to free released memory [clang-analyzer-unix.Malloc] // CHECK: warning: Attempt to release already released memory [clang-analyzer-unix.Malloc]
} }

View File

@ -7,12 +7,12 @@ void f() {
int *p = new int(42); int *p = new int(42);
delete p; delete p;
delete p; delete p;
// CHECK: warning: Attempt to free released memory [clang-analyzer-cplusplus.NewDelete] // CHECK: warning: Attempt to release already released memory [clang-analyzer-cplusplus.NewDelete]
} }
void g() { void g() {
void *q = malloc(132); void *q = malloc(132);
free(q); free(q);
free(q); free(q);
// CHECK: warning: Attempt to free released memory [clang-analyzer-unix.Malloc] // CHECK: warning: Attempt to release already released memory [clang-analyzer-unix.Malloc]
} }

View File

@ -2,7 +2,7 @@
void test() { void test() {
int *p = malloc(1); int *p = malloc(1);
free(p); free(p);
free(p); // warn: attempt to free released memory free(p); // warn: attempt to release already released memory
} }
void test() { void test() {

View File

@ -2693,7 +2693,7 @@ void MallocChecker::HandleUseAfterFree(CheckerContext &C, SourceRange Range,
Frontend->UseFreeBug, Frontend->UseFreeBug,
AF.Kind == AF_InnerBuffer AF.Kind == AF_InnerBuffer
? "Inner pointer of container used after re/deallocation" ? "Inner pointer of container used after re/deallocation"
: "Use of memory after it is freed", : "Use of memory after it is released",
N); N);
R->markInteresting(Sym); R->markInteresting(Sym);
@ -2721,8 +2721,8 @@ void MallocChecker::HandleDoubleFree(CheckerContext &C, SourceRange Range,
if (ExplodedNode *N = C.generateErrorNode()) { if (ExplodedNode *N = C.generateErrorNode()) {
auto R = std::make_unique<PathSensitiveBugReport>( auto R = std::make_unique<PathSensitiveBugReport>(
Frontend->DoubleFreeBug, Frontend->DoubleFreeBug,
(Released ? "Attempt to free released memory" (Released ? "Attempt to release already released memory"
: "Attempt to free non-owned memory"), : "Attempt to release non-owned memory"),
N); N);
if (Range.isValid()) if (Range.isValid())
R->addRange(Range); R->addRange(Range);

View File

@ -33,9 +33,9 @@
</array> </array>
<key>depth</key><integer>0</integer> <key>depth</key><integer>0</integer>
<key>extended_message</key> <key>extended_message</key>
<string>Attempt to free released memory</string> <string>Attempt to release already released memory</string>
<key>message</key> <key>message</key>
<string>Attempt to free released memory</string> <string>Attempt to release already released memory</string>
</dict> </dict>
<dict> <dict>
<key>kind</key><string>control</string> <key>kind</key><string>control</string>
@ -232,7 +232,7 @@
</array> </array>
</dict> </dict>
</array> </array>
<key>description</key><string>Attempt to free released memory</string> <key>description</key><string>Attempt to release already released memory</string>
<key>category</key><string>Memory error</string> <key>category</key><string>Memory error</string>
<key>type</key><string>Double free</string> <key>type</key><string>Double free</string>
<key>check_name</key><string>cplusplus.NewDelete</string> <key>check_name</key><string>cplusplus.NewDelete</string>
@ -456,12 +456,12 @@
</array> </array>
<key>depth</key><integer>0</integer> <key>depth</key><integer>0</integer>
<key>extended_message</key> <key>extended_message</key>
<string>Attempt to free released memory</string> <string>Attempt to release already released memory</string>
<key>message</key> <key>message</key>
<string>Attempt to free released memory</string> <string>Attempt to release already released memory</string>
</dict> </dict>
</array> </array>
<key>description</key><string>Attempt to free released memory</string> <key>description</key><string>Attempt to release already released memory</string>
<key>category</key><string>Memory error</string> <key>category</key><string>Memory error</string>
<key>type</key><string>Double free</string> <key>type</key><string>Double free</string>
<key>check_name</key><string>cplusplus.NewDelete</string> <key>check_name</key><string>cplusplus.NewDelete</string>

View File

@ -1725,12 +1725,12 @@
</array> </array>
<key>depth</key><integer>0</integer> <key>depth</key><integer>0</integer>
<key>extended_message</key> <key>extended_message</key>
<string>Use of memory after it is freed</string> <string>Use of memory after it is released</string>
<key>message</key> <key>message</key>
<string>Use of memory after it is freed</string> <string>Use of memory after it is released</string>
</dict> </dict>
</array> </array>
<key>description</key><string>Use of memory after it is freed</string> <key>description</key><string>Use of memory after it is released</string>
<key>category</key><string>Memory error</string> <key>category</key><string>Memory error</string>
<key>type</key><string>Use-after-free</string> <key>type</key><string>Use-after-free</string>
<key>check_name</key><string>unix.Malloc</string> <key>check_name</key><string>unix.Malloc</string>
@ -2985,12 +2985,12 @@
</array> </array>
<key>depth</key><integer>0</integer> <key>depth</key><integer>0</integer>
<key>extended_message</key> <key>extended_message</key>
<string>Use of memory after it is freed</string> <string>Use of memory after it is released</string>
<key>message</key> <key>message</key>
<string>Use of memory after it is freed</string> <string>Use of memory after it is released</string>
</dict> </dict>
</array> </array>
<key>description</key><string>Use of memory after it is freed</string> <key>description</key><string>Use of memory after it is released</string>
<key>category</key><string>Memory error</string> <key>category</key><string>Memory error</string>
<key>type</key><string>Use-after-free</string> <key>type</key><string>Use-after-free</string>
<key>check_name</key><string>unix.Malloc</string> <key>check_name</key><string>unix.Malloc</string>

View File

@ -12,7 +12,7 @@ void DeleteInHeader::operator delete(void *ptr) {
::operator delete(ptr); ::operator delete(ptr);
self->data = 2; // expected-warning {{Use of memory after it is freed [cplusplus.NewDelete]}} self->data = 2; // expected-warning {{Use of memory after it is released [cplusplus.NewDelete]}}
} }
#endif // OVERLOADED_DELETE_IN_SYSTEM_HEADER #endif // OVERLOADED_DELETE_IN_SYSTEM_HEADER

View File

@ -9,7 +9,7 @@
void testMallocDoubleFree() { void testMallocDoubleFree() {
int *p = (int *)malloc(sizeof(int)); int *p = (int *)malloc(sizeof(int));
free(p); free(p);
free(p); // expected-warning{{Attempt to free released memory}} free(p); // expected-warning{{Attempt to release already released memory}}
} }
void testMallocLeak() { void testMallocLeak() {
@ -19,7 +19,7 @@ void testMallocLeak() {
void testMallocUseAfterFree() { void testMallocUseAfterFree() {
int *p = (int *)malloc(sizeof(int)); int *p = (int *)malloc(sizeof(int));
free(p); free(p);
int j = *p; // expected-warning{{Use of memory after it is freed}} int j = *p; // expected-warning{{Use of memory after it is released}}
} }
void testMallocBadFree() { void testMallocBadFree() {
@ -46,7 +46,7 @@ void testMismatchedDeallocator() {
void testNewDoubleFree() { void testNewDoubleFree() {
int *p = new int; int *p = new int;
delete p; delete p;
delete p; // expected-warning{{Attempt to free released memory}} delete p; // expected-warning{{Attempt to release already released memory}}
} }
void testNewLeak() { void testNewLeak() {
@ -59,7 +59,7 @@ void testNewLeak() {
void testNewUseAfterFree() { void testNewUseAfterFree() {
int *p = (int *)operator new(0); int *p = (int *)operator new(0);
delete p; delete p;
int j = *p; // expected-warning{{Use of memory after it is freed}} int j = *p; // expected-warning{{Use of memory after it is released}}
} }
void testNewBadFree() { void testNewBadFree() {
@ -95,7 +95,7 @@ void testShouldReportDoubleFreeNotMismatched() {
int *p = (int*)malloc(sizeof(int)*4); int *p = (int*)malloc(sizeof(int)*4);
globalPtr = p; globalPtr = p;
free(p); free(p);
delete globalPtr; // expected-warning {{Attempt to free released memory}} delete globalPtr; // expected-warning {{Attempt to release already released memory}}
} }
int *allocIntArray(unsigned c) { int *allocIntArray(unsigned c) {
return new int[c]; return new int[c];

View File

@ -155,52 +155,52 @@ void g(SomeClass &c, ...);
void testUseFirstArgAfterDelete() { void testUseFirstArgAfterDelete() {
int *p = new int; int *p = new int;
delete p; delete p;
f(p); // newdelete-warning{{Use of memory after it is freed}} f(p); // newdelete-warning{{Use of memory after it is released}}
} }
void testUseMiddleArgAfterDelete(int *p) { void testUseMiddleArgAfterDelete(int *p) {
delete p; delete p;
f(0, p); // newdelete-warning{{Use of memory after it is freed}} f(0, p); // newdelete-warning{{Use of memory after it is released}}
} }
void testUseLastArgAfterDelete(int *p) { void testUseLastArgAfterDelete(int *p) {
delete p; delete p;
f(0, 0, p); // newdelete-warning{{Use of memory after it is freed}} f(0, 0, p); // newdelete-warning{{Use of memory after it is released}}
} }
void testUseSeveralArgsAfterDelete(int *p) { void testUseSeveralArgsAfterDelete(int *p) {
delete p; delete p;
f(p, p, p); // newdelete-warning{{Use of memory after it is freed}} f(p, p, p); // newdelete-warning{{Use of memory after it is released}}
} }
void testUseRefArgAfterDelete(SomeClass &c) { void testUseRefArgAfterDelete(SomeClass &c) {
delete &c; delete &c;
g(c); // newdelete-warning{{Use of memory after it is freed}} g(c); // newdelete-warning{{Use of memory after it is released}}
} }
void testVariadicArgAfterDelete() { void testVariadicArgAfterDelete() {
SomeClass c; SomeClass c;
int *p = new int; int *p = new int;
delete p; delete p;
g(c, 0, p); // newdelete-warning{{Use of memory after it is freed}} g(c, 0, p); // newdelete-warning{{Use of memory after it is released}}
} }
void testUseMethodArgAfterDelete(int *p) { void testUseMethodArgAfterDelete(int *p) {
SomeClass *c = new SomeClass; SomeClass *c = new SomeClass;
delete p; delete p;
c->f(p); // newdelete-warning{{Use of memory after it is freed}} c->f(p); // newdelete-warning{{Use of memory after it is released}}
} }
void testUseThisAfterDelete() { void testUseThisAfterDelete() {
SomeClass *c = new SomeClass; SomeClass *c = new SomeClass;
delete c; delete c;
c->f(0); // newdelete-warning{{Use of memory after it is freed}} c->f(0); // newdelete-warning{{Use of memory after it is released}}
} }
void testDoubleDelete() { void testDoubleDelete() {
int *p = new int; int *p = new int;
delete p; delete p;
delete p; // newdelete-warning{{Attempt to free released memory}} delete p; // newdelete-warning{{Attempt to release already released memory}}
} }
void testExprDeleteArg() { void testExprDeleteArg() {
@ -412,7 +412,7 @@ public:
void testDoubleDeleteClassInstance() { void testDoubleDeleteClassInstance() {
DerefClass *foo = new DerefClass(); DerefClass *foo = new DerefClass();
delete foo; delete foo;
delete foo; // newdelete-warning {{Attempt to free released memory}} delete foo; // newdelete-warning {{Attempt to release already released memory}}
} }
class EmptyClass{ class EmptyClass{
@ -424,7 +424,7 @@ public:
void testDoubleDeleteEmptyClass() { void testDoubleDeleteEmptyClass() {
EmptyClass *foo = new EmptyClass(); EmptyClass *foo = new EmptyClass();
delete foo; delete foo;
delete foo; // newdelete-warning {{Attempt to free released memory}} delete foo; // newdelete-warning {{Attempt to release already released memory}}
} }
struct Base { struct Base {

View File

@ -78,11 +78,11 @@ void testObjcFreeNewed() {
void testFreeAfterDelete() { void testFreeAfterDelete() {
int *p = new int; int *p = new int;
delete p; delete p;
free(p); // newdelete-warning{{Use of memory after it is freed}} free(p); // newdelete-warning{{Use of memory after it is released}}
} }
void testStandardPlacementNewAfterDelete() { void testStandardPlacementNewAfterDelete() {
int *p = new int; int *p = new int;
delete p; delete p;
p = new (p) int; // newdelete-warning{{Use of memory after it is freed}} p = new (p) int; // newdelete-warning{{Use of memory after it is released}}
} }

View File

@ -16,8 +16,8 @@ void test() {
delete p; delete p;
// expected-note@-1 {{Memory is released}} // expected-note@-1 {{Memory is released}}
delete p; // expected-warning {{Attempt to free released memory}} delete p; // expected-warning {{Attempt to release already released memory}}
// expected-note@-1 {{Attempt to free released memory}} // expected-note@-1 {{Attempt to release already released memory}}
} }
struct Odd { struct Odd {
@ -29,7 +29,7 @@ struct Odd {
void test(Odd *odd) { void test(Odd *odd) {
odd->kill(); // expected-note{{Calling 'Odd::kill'}} odd->kill(); // expected-note{{Calling 'Odd::kill'}}
// expected-note@-1 {{Returning; memory was released}} // expected-note@-1 {{Returning; memory was released}}
delete odd; // expected-warning {{Attempt to free released memory}} delete odd; // expected-warning {{Attempt to release already released memory}}
// expected-note@-1 {{Attempt to free released memory}} // expected-note@-1 {{Attempt to release already released memory}}
} }

View File

@ -19,8 +19,8 @@ struct smart_ptr {
return (x || 0) ? nullptr : s; // expected-note{{Field 'x' is 0}} return (x || 0) ? nullptr : s; // expected-note{{Field 'x' is 0}}
// expected-note@-1{{Left side of '||' is false}} // expected-note@-1{{Left side of '||' is false}}
// expected-note@-2{{'?' condition is false}} // expected-note@-2{{'?' condition is false}}
// expected-warning@-3{{Use of memory after it is freed}} // expected-warning@-3{{Use of memory after it is released}}
// expected-note@-4{{Use of memory after it is freed}} // expected-note@-4{{Use of memory after it is released}}
} }
}; };

View File

@ -35,7 +35,7 @@ void testSmartPointer() {
SmartPointer Deleter(mem); SmartPointer Deleter(mem);
// destructor called here // destructor called here
} }
*mem = 0; // expected-warning{{Use of memory after it is freed}} *mem = 0; // expected-warning{{Use of memory after it is released}}
} }
@ -48,7 +48,7 @@ void testSmartPointer2() {
doSomething(); doSomething();
// destructor called here // destructor called here
} }
*mem = 0; // expected-warning{{Use of memory after it is freed}} *mem = 0; // expected-warning{{Use of memory after it is released}}
} }
@ -65,7 +65,7 @@ void testSubclassSmartPointer() {
doSomething(); doSomething();
// destructor called here // destructor called here
} }
*mem = 0; // expected-warning{{Use of memory after it is freed}} *mem = 0; // expected-warning{{Use of memory after it is released}}
} }
@ -82,7 +82,7 @@ void testMultipleInheritance1() {
doSomething(); doSomething();
// destructor called here // destructor called here
} }
*mem = 0; // expected-warning{{Use of memory after it is freed}} *mem = 0; // expected-warning{{Use of memory after it is released}}
} }
void testMultipleInheritance2() { void testMultipleInheritance2() {
@ -93,7 +93,7 @@ void testMultipleInheritance2() {
doSomething(); doSomething();
// destructor called here // destructor called here
} }
*mem = 0; // expected-warning{{Use of memory after it is freed}} *mem = 0; // expected-warning{{Use of memory after it is released}}
} }
void testMultipleInheritance3() { void testMultipleInheritance3() {
@ -103,7 +103,7 @@ void testMultipleInheritance3() {
// Remove dead bindings... // Remove dead bindings...
doSomething(); doSomething();
// destructor called here // destructor called here
// expected-warning@28 {{Attempt to free released memory}} // expected-warning@28 {{Attempt to release already released memory}}
} }
} }
@ -122,7 +122,7 @@ void testSmartPointerMember() {
doSomething(); doSomething();
// destructor called here // destructor called here
} }
*mem = 0; // expected-warning{{Use of memory after it is freed}} *mem = 0; // expected-warning{{Use of memory after it is release}}
} }
@ -524,7 +524,7 @@ struct NonTrivial {
return *this; return *this;
} }
~NonTrivial() { ~NonTrivial() {
delete[] p; // expected-warning {{free released memory}} delete[] p; // expected-warning {{release already released memory}}
} }
}; };
@ -593,5 +593,5 @@ void overrideLeak() {
void overrideDoubleDelete() { void overrideDoubleDelete() {
auto *a = new CustomOperators(); auto *a = new CustomOperators();
delete a; delete a;
delete a; // expected-warning@577 {{Attempt to free released memory}} delete a; // expected-warning@577 {{Attempt to release already released memory}}
} }

View File

@ -29,7 +29,7 @@ void test_getline_malloc_buffer() {
ssize_t r = getdelim(&buffer, &n, '\r', F1); ssize_t r = getdelim(&buffer, &n, '\r', F1);
// ptr may be dangling // ptr may be dangling
free(ptr); // expected-warning {{Attempt to free released memory}} free(ptr); // expected-warning {{Attempt to release already released memory}}
free(buffer); // ok free(buffer); // ok
fclose(F1); fclose(F1);
} }

View File

@ -41,7 +41,7 @@ void f1(void) {
g_free(g1); g_free(g1);
g_free(g2); g_free(g2);
g_free(g2); // expected-warning{{Attempt to free released memory}} g_free(g2); // expected-warning{{Attempt to release already released memory}}
} }
void f2(void) { void f2(void) {
@ -61,7 +61,7 @@ void f2(void) {
g_free(g1); g_free(g1);
g_free(g2); g_free(g2);
g_free(g3); g_free(g3);
g3 = g_memdup(g3, n_bytes); // expected-warning{{Use of memory after it is freed}} g3 = g_memdup(g3, n_bytes); // expected-warning{{Use of memory after it is released}}
} }
void f3(void) { void f3(void) {

View File

@ -45,13 +45,13 @@ void f1(void) {
void f2(void) { void f2(void) {
int *p = malloc(12); int *p = malloc(12);
free(p); free(p);
free(p); // expected-warning{{Attempt to free released memory}} free(p); // expected-warning{{Attempt to release already released memory}}
} }
void f2_realloc_0(void) { void f2_realloc_0(void) {
int *p = malloc(12); int *p = malloc(12);
realloc(p,0); realloc(p,0);
realloc(p,0); // expected-warning{{Attempt to free released memory}} realloc(p,0); // expected-warning{{Attempt to release already released memory}}
} }
void f2_realloc_1(void) { void f2_realloc_1(void) {
@ -106,25 +106,25 @@ void af1_g(struct stuff **pps) {
void af2(void) { void af2(void) {
int *p = my_malloc(12); int *p = my_malloc(12);
my_free(p); my_free(p);
free(p); // expected-warning{{Attempt to free released memory}} free(p); // expected-warning{{Attempt to release already released memory}}
} }
void af2b(void) { void af2b(void) {
int *p = my_malloc(12); int *p = my_malloc(12);
free(p); free(p);
my_free(p); // expected-warning{{Attempt to free released memory}} my_free(p); // expected-warning{{Attempt to release already released memory}}
} }
void af2c(void) { void af2c(void) {
int *p = my_malloc(12); int *p = my_malloc(12);
free(p); free(p);
my_hold(p); // expected-warning{{Attempt to free released memory}} my_hold(p); // expected-warning{{Attempt to release already released memory}}
} }
void af2d(void) { void af2d(void) {
int *p = my_malloc(12); int *p = my_malloc(12);
free(p); free(p);
my_hold2(0, 0, p); // expected-warning{{Attempt to free released memory}} my_hold2(0, 0, p); // expected-warning{{Attempt to release already released memory}}
} }
// No leak if malloc returns null. // No leak if malloc returns null.
@ -139,13 +139,13 @@ void af2e(void) {
void af3(void) { void af3(void) {
int *p = my_malloc(12); int *p = my_malloc(12);
my_hold(p); my_hold(p);
free(p); // expected-warning{{Attempt to free non-owned memory}} free(p); // expected-warning{{Attempt to release non-owned memory}}
} }
int * af4(void) { int * af4(void) {
int *p = my_malloc(12); int *p = my_malloc(12);
my_free(p); my_free(p);
return p; // expected-warning{{Use of memory after it is freed}} return p; // expected-warning{{Use of memory after it is released}}
} }
// This case is (possibly) ok, be conservative // This case is (possibly) ok, be conservative
@ -211,13 +211,13 @@ void pr6293(void) {
void f7(void) { void f7(void) {
char *x = (char*) malloc(4); char *x = (char*) malloc(4);
free(x); free(x);
x[0] = 'a'; // expected-warning{{Use of memory after it is freed}} x[0] = 'a'; // expected-warning{{Use of memory after it is released}}
} }
void f7_realloc(void) { void f7_realloc(void) {
char *x = (char*) malloc(4); char *x = (char*) malloc(4);
realloc(x,0); realloc(x,0);
x[0] = 'a'; // expected-warning{{Use of memory after it is freed}} x[0] = 'a'; // expected-warning{{Use of memory after it is released}}
} }
void PR6123(void) { void PR6123(void) {

View File

@ -54,19 +54,19 @@ void af1_g(MemoryAllocator &Alloc, struct stuff **pps) {
void af2(MemoryAllocator &Alloc) { void af2(MemoryAllocator &Alloc) {
void *p = Alloc.my_malloc(12); void *p = Alloc.my_malloc(12);
Alloc.my_free(p); Alloc.my_free(p);
free(p); // expected-warning{{Attempt to free released memory}} free(p); // expected-warning{{Attempt to release already released memory}}
} }
void af2b(MemoryAllocator &Alloc) { void af2b(MemoryAllocator &Alloc) {
void *p = Alloc.my_malloc(12); void *p = Alloc.my_malloc(12);
free(p); free(p);
Alloc.my_free(p); // expected-warning{{Attempt to free released memory}} Alloc.my_free(p); // expected-warning{{Attempt to release already released memory}}
} }
void af2c(MemoryAllocator &Alloc) { void af2c(MemoryAllocator &Alloc) {
void *p = Alloc.my_malloc(12); void *p = Alloc.my_malloc(12);
free(p); free(p);
Alloc.my_hold(p); // expected-warning{{Attempt to free released memory}} Alloc.my_hold(p); // expected-warning{{Attempt to release already released memory}}
} }
// No leak if malloc returns null. // No leak if malloc returns null.
@ -81,13 +81,13 @@ void af2e(MemoryAllocator &Alloc) {
void af3(MemoryAllocator &Alloc) { void af3(MemoryAllocator &Alloc) {
void *p = Alloc.my_malloc(12); void *p = Alloc.my_malloc(12);
Alloc.my_hold(p); Alloc.my_hold(p);
free(p); // expected-warning{{Attempt to free non-owned memory}} free(p); // expected-warning{{Attempt to release non-owned memory}}
} }
void * af4(MemoryAllocator &Alloc) { void * af4(MemoryAllocator &Alloc) {
void *p = Alloc.my_malloc(12); void *p = Alloc.my_malloc(12);
Alloc.my_free(p); Alloc.my_free(p);
return p; // expected-warning{{Use of memory after it is freed}} return p; // expected-warning{{Use of memory after it is released}}
} }
// This case is (possibly) ok, be conservative // This case is (possibly) ok, be conservative

View File

@ -12,10 +12,10 @@ private:
}; };
int *freeAfterReturnTemp() { int *freeAfterReturnTemp() {
return S().getData(); // expected-warning {{Use of memory after it is freed}} return S().getData(); // expected-warning {{Use of memory after it is released}}
} }
int *freeAfterReturnLocal() { int *freeAfterReturnLocal() {
S X; S X;
return X.getData(); // expected-warning {{Use of memory after it is freed}} return X.getData(); // expected-warning {{Use of memory after it is released}}
} }

View File

@ -59,13 +59,13 @@ int test4(void) {
my_free1(data); my_free1(data);
data = (int *)my_malloc2(1, 4); data = (int *)my_malloc2(1, 4);
my_free1(data); my_free1(data);
return *data; // expected-warning {{Use of memory after it is freed}} return *data; // expected-warning {{Use of memory after it is released}}
} }
void test6(void) { void test6(void) {
int *data = (int *)my_malloc2(1, 4); int *data = (int *)my_malloc2(1, 4);
my_free1((int*)data); my_free1((int*)data);
my_free1((int*)data); // expected-warning{{Use of memory after it is freed}} my_free1((int*)data); // expected-warning{{Use of memory after it is released}}
} }
// TODO: We should warn here. // TODO: We should warn here.
@ -96,5 +96,5 @@ int uafAndCallsFooWithEmptyReturn(void) {
int *x = (int*)malloc(12); int *x = (int*)malloc(12);
free(x); free(x);
fooWithEmptyReturn(12); fooWithEmptyReturn(12);
return *x; // expected-warning {{Use of memory after it is freed}} return *x; // expected-warning {{Use of memory after it is released}}
} }

View File

@ -46,7 +46,7 @@ void test_wrapper(void) {
(void) buf; (void) buf;
}//expected-warning{{Potential leak}} }//expected-warning{{Potential leak}}
// Test what happens when the same call frees and allocated memory. // Test what happens when the same call releases and allocated memory.
// Also tests the stack hint for parameters, when they are passed directly or via pointer. // Also tests the stack hint for parameters, when they are passed directly or via pointer.
void my_free(void *x) { void my_free(void *x) {
free(x); free(x);
@ -60,7 +60,7 @@ void my_malloc_and_free(void **x) {
void *test_double_action_call(void) { void *test_double_action_call(void) {
void *buf; void *buf;
my_malloc_and_free(&buf); my_malloc_and_free(&buf);
return buf; //expected-warning{{Use of memory after it is freed}} return buf; //expected-warning{{Use of memory after it is released}}
} }
// Test stack hint for 'reallocation failed'. // Test stack hint for 'reallocation failed'.
@ -98,7 +98,7 @@ void call_myfree_takingblock(void) {
int *p = malloc(sizeof(int)); int *p = malloc(sizeof(int));
myfree_takingblock(some_block, p); myfree_takingblock(some_block, p);
*p = 3;//expected-warning{{Use of memory after it is freed}} *p = 3;//expected-warning{{Use of memory after it is released}}
} }
// Test that we refer to the last symbol used in the leak diagnostic. // Test that we refer to the last symbol used in the leak diagnostic.

View File

@ -69,12 +69,12 @@ void test_uaf(void)
{ {
struct SomeData *data = alloc_data(); struct SomeData *data = alloc_data();
put_data_uncond(data); put_data_uncond(data);
data->i += 1; // expected-warning{{Use of memory after it is freed}} data->i += 1; // expected-warning{{Use of memory after it is released}}
} }
void test_no_uaf_atomic_after(void) void test_no_uaf_atomic_after(void)
{ {
struct SomeData *data = alloc_data(); struct SomeData *data = alloc_data();
put_data_unrelated_atomic(data); put_data_unrelated_atomic(data);
data->i += 1; // expected-warning{{Use of memory after it is freed}} data->i += 1; // expected-warning{{Use of memory after it is released}}
} }

View File

@ -97,13 +97,13 @@ void f1(void) {
void f2(void) { void f2(void) {
int *p = malloc(12); int *p = malloc(12);
free(p); free(p);
free(p); // expected-warning{{Attempt to free released memory}} free(p); // expected-warning{{Attempt to release already released memory}}
} }
void f2_realloc_0(void) { void f2_realloc_0(void) {
int *p = malloc(12); int *p = malloc(12);
realloc(p,0); realloc(p,0);
realloc(p,0); // expected-warning{{Attempt to free released memory}} realloc(p,0); // expected-warning{{Attempt to release already released memory}}
} }
void f2_realloc_1(void) { void f2_realloc_1(void) {
@ -153,7 +153,7 @@ void reallocSizeZero1(void) {
char *p = malloc(12); char *p = malloc(12);
char *r = realloc(p, 0); char *r = realloc(p, 0);
if (!r) { if (!r) {
free(p); // expected-warning {{Attempt to free released memory}} free(p); // expected-warning {{Attempt to release already released memory}}
} else { } else {
free(r); free(r);
} }
@ -163,11 +163,11 @@ void reallocSizeZero2(void) {
char *p = malloc(12); char *p = malloc(12);
char *r = realloc(p, 0); char *r = realloc(p, 0);
if (!r) { if (!r) {
free(p); // expected-warning {{Attempt to free released memory}} free(p); // expected-warning {{Attempt to release already released memory}}
} else { } else {
free(r); free(r);
} }
free(p); // expected-warning {{Attempt to free released memory}} free(p); // expected-warning {{Attempt to release already released memory}}
} }
void reallocSizeZero3(void) { void reallocSizeZero3(void) {
@ -262,7 +262,7 @@ void reallocfRadar6337483_3(void) {
char * tmp; char * tmp;
tmp = (char*)reallocf(buf, 0x1000000); tmp = (char*)reallocf(buf, 0x1000000);
if (!tmp) { if (!tmp) {
free(buf); // expected-warning {{Attempt to free released memory}} free(buf); // expected-warning {{Attempt to release already released memory}}
return; return;
} }
buf = tmp; buf = tmp;
@ -480,19 +480,19 @@ void pr6293(void) {
void f7(void) { void f7(void) {
char *x = (char*) malloc(4); char *x = (char*) malloc(4);
free(x); free(x);
x[0] = 'a'; // expected-warning{{Use of memory after it is freed}} x[0] = 'a'; // expected-warning{{Use of memory after it is released}}
} }
void f8(void) { void f8(void) {
char *x = (char*) malloc(4); char *x = (char*) malloc(4);
free(x); free(x);
char *y = strndup(x, 4); // expected-warning{{Use of memory after it is freed}} char *y = strndup(x, 4); // expected-warning{{Use of memory after it is released}}
} }
void f7_realloc(void) { void f7_realloc(void) {
char *x = (char*) malloc(4); char *x = (char*) malloc(4);
realloc(x,0); realloc(x,0);
x[0] = 'a'; // expected-warning{{Use of memory after it is freed}} x[0] = 'a'; // expected-warning{{Use of memory after it is released}}
} }
void PR6123(void) { void PR6123(void) {
@ -773,7 +773,7 @@ void nullFree(void) {
void paramFree(int *p) { void paramFree(int *p) {
myfoo(p); myfoo(p);
free(p); // no warning free(p); // no warning
myfoo(p); // expected-warning {{Use of memory after it is freed}} myfoo(p); // expected-warning {{Use of memory after it is released}}
} }
void allocaFree(void) { void allocaFree(void) {
@ -813,14 +813,14 @@ void mallocEscapeFreeFree(void) {
int *p = malloc(12); int *p = malloc(12);
myfoo(p); myfoo(p);
free(p); free(p);
free(p); // expected-warning{{Attempt to free released memory}} free(p); // expected-warning{{Attempt to release already released memory}}
} }
void mallocEscapeFreeUse(void) { void mallocEscapeFreeUse(void) {
int *p = malloc(12); int *p = malloc(12);
myfoo(p); myfoo(p);
free(p); free(p);
myfoo(p); // expected-warning{{Use of memory after it is freed}} myfoo(p); // expected-warning{{Use of memory after it is released}}
} }
int *myalloc(void); int *myalloc(void);
@ -846,7 +846,7 @@ void mallocBindFreeUse(void) {
int *x = malloc(12); int *x = malloc(12);
int *y = x; int *y = x;
free(y); free(y);
myfoo(x); // expected-warning{{Use of memory after it is freed}} myfoo(x); // expected-warning{{Use of memory after it is released}}
} }
void mallocEscapeMalloc(void) { void mallocEscapeMalloc(void) {
@ -871,13 +871,13 @@ void mallocFreeMalloc(void) {
void mallocFreeUse_params(void) { void mallocFreeUse_params(void) {
int *p = malloc(12); int *p = malloc(12);
free(p); free(p);
myfoo(p); //expected-warning{{Use of memory after it is freed}} myfoo(p); //expected-warning{{Use of memory after it is released}}
} }
void mallocFreeUse_params2(void) { void mallocFreeUse_params2(void) {
int *p = malloc(12); int *p = malloc(12);
free(p); free(p);
myfooint(*p); //expected-warning{{Use of memory after it is freed}} myfooint(*p); //expected-warning{{Use of memory after it is released}}
} }
void mallocFailedOrNot(void) { void mallocFailedOrNot(void) {
@ -895,14 +895,14 @@ struct StructWithInt {
int *mallocReturnFreed(void) { int *mallocReturnFreed(void) {
int *p = malloc(12); int *p = malloc(12);
free(p); free(p);
return p; // expected-warning {{Use of memory after it is freed}} return p; // expected-warning {{Use of memory after it is released}}
} }
int useAfterFreeStruct(void) { int useAfterFreeStruct(void) {
struct StructWithInt *px= malloc(sizeof(struct StructWithInt)); struct StructWithInt *px= malloc(sizeof(struct StructWithInt));
px->g = 5; px->g = 5;
free(px); free(px);
return px->g; // expected-warning {{Use of memory after it is freed}} return px->g; // expected-warning {{Use of memory after it is released}}
} }
void nonSymbolAsFirstArg(int *pp, struct StructWithInt *p); void nonSymbolAsFirstArg(int *pp, struct StructWithInt *p);
@ -935,7 +935,7 @@ void vallocEscapeFreeUse(void) {
int *p = valloc(12); int *p = valloc(12);
myfoo(p); myfoo(p);
free(p); free(p);
myfoo(p); // expected-warning{{Use of memory after it is freed}} myfoo(p); // expected-warning{{Use of memory after it is released}}
} }
int *Gl; int *Gl;
@ -1543,7 +1543,7 @@ void freeButNoMalloc(int *p, int x){
free(p); free(p);
//user forgot a return here. //user forgot a return here.
} }
free(p); // expected-warning {{Attempt to free released memory}} free(p); // expected-warning {{Attempt to release already released memory}}
} }
struct HasPtr { struct HasPtr {
@ -1553,7 +1553,7 @@ struct HasPtr {
char* reallocButNoMalloc(struct HasPtr *a, int c, int size) { char* reallocButNoMalloc(struct HasPtr *a, int c, int size) {
int *s; int *s;
char *b = realloc(a->p, size); char *b = realloc(a->p, size);
char *m = realloc(a->p, size); // expected-warning {{Attempt to free released memory}} char *m = realloc(a->p, size); // expected-warning {{Attempt to release already released memory}}
// We don't expect a use-after-free for a->P here because the warning above // We don't expect a use-after-free for a->P here because the warning above
// is a sink. // is a sink.
return a->p; // no-warning return a->p; // no-warning
@ -1722,7 +1722,7 @@ void testOffsetZeroDoubleFree(void) {
int *array = malloc(sizeof(int)*2); int *array = malloc(sizeof(int)*2);
int *p = &array[0]; int *p = &array[0];
free(p); free(p);
free(&array[0]); // expected-warning{{Attempt to free released memory}} free(&array[0]); // expected-warning{{Attempt to release already released memory}}
} }
void testOffsetPassedToStrlen(void) { void testOffsetPassedToStrlen(void) {
@ -1835,7 +1835,7 @@ int testNoCheckerDataPropagationFromLogicalOpOperandToOpResult(void) {
int ok = (param && value); int ok = (param && value);
free(param); free(param);
free(value); free(value);
// Previously we ended up with 'Use of memory after it is freed' on return. // Previously we ended up with 'Use of memory after it is released' on return.
return ok; // no warning return ok; // no warning
} }
@ -1970,7 +1970,7 @@ void gh149754(void *p) {
// was since then removed for the codebase. // was since then removed for the codebase.
if (!realloc(p, 8)) { if (!realloc(p, 8)) {
realloc(p, 8); realloc(p, 8);
free(p); // expected-warning {{Attempt to free released memory}} free(p); // expected-warning {{Attempt to release already released memory}}
} }
// expected-warning@+1 {{Potential memory leak}} // expected-warning@+1 {{Potential memory leak}}
} }

View File

@ -35,7 +35,7 @@ void testNSStringFreeWhenDoneYES3(NSUInteger dataLength) {
void testNSStringFreeWhenDoneYES4(NSUInteger dataLength) { void testNSStringFreeWhenDoneYES4(NSUInteger dataLength) {
unichar *data = (unichar*)malloc(42); unichar *data = (unichar*)malloc(42);
NSString *nsstr = [[NSString alloc] initWithCharactersNoCopy:data length:dataLength freeWhenDone:1]; NSString *nsstr = [[NSString alloc] initWithCharactersNoCopy:data length:dataLength freeWhenDone:1];
free(data); //expected-warning {{Attempt to free non-owned memory}} free(data); //expected-warning {{Attempt to release non-owned memory}}
} }
void testNSStringFreeWhenDoneYES(NSUInteger dataLength) { void testNSStringFreeWhenDoneYES(NSUInteger dataLength) {
@ -95,14 +95,14 @@ void testOffsetFree() {
void testRelinquished1() { void testRelinquished1() {
void *data = malloc(42); void *data = malloc(42);
NSData *nsdata = [NSData dataWithBytesNoCopy:data length:42 freeWhenDone:1]; NSData *nsdata = [NSData dataWithBytesNoCopy:data length:42 freeWhenDone:1];
free(data); // expected-warning {{Attempt to free non-owned memory}} free(data); // expected-warning {{Attempt to release non-owned memory}}
} }
void testRelinquished2() { void testRelinquished2() {
void *data = malloc(42); void *data = malloc(42);
NSData *nsdata; NSData *nsdata;
free(data); free(data);
[NSData dataWithBytesNoCopy:data length:42]; // expected-warning {{Use of memory after it is freed}} [NSData dataWithBytesNoCopy:data length:42]; // expected-warning {{Use of memory after it is released}}
} }
@interface My @interface My
@ -112,7 +112,7 @@ void testRelinquished2() {
void testUseAfterFree() { void testUseAfterFree() {
int *p = (int *)malloc(sizeof(int)); int *p = (int *)malloc(sizeof(int));
free(p); free(p);
[My param:p]; // expected-warning{{Use of memory after it is freed}} [My param:p]; // expected-warning{{Use of memory after it is released}}
} }
void testNoCopy() { void testNoCopy() {
@ -318,7 +318,7 @@ NSString *test12365078_no_malloc_returnValue(unichar *characters) {
void test12365078_nocheck_nomalloc(unichar *characters) { void test12365078_nocheck_nomalloc(unichar *characters) {
NSString *string = [[NSString alloc] initWithCharactersNoCopy:characters length:12 freeWhenDone:1]; NSString *string = [[NSString alloc] initWithCharactersNoCopy:characters length:12 freeWhenDone:1];
free(characters); // expected-warning {{Attempt to free non-owned memory}} free(characters); // expected-warning {{Attempt to release non-owned memory}}
} }
void test12365078_nested(unichar *characters) { void test12365078_nested(unichar *characters) {
@ -339,7 +339,7 @@ void test12365078_nested(unichar *characters) {
void test12365078_check_positive() { void test12365078_check_positive() {
unichar *characters = (unichar*)malloc(12); unichar *characters = (unichar*)malloc(12);
NSString *string = [[NSString alloc] initWithCharactersNoCopy:characters length:12 freeWhenDone:1]; NSString *string = [[NSString alloc] initWithCharactersNoCopy:characters length:12 freeWhenDone:1];
if (string) free(characters); // expected-warning{{Attempt to free non-owned memory}} if (string) free(characters); // expected-warning{{Attempt to release non-owned memory}}
} }
void *test_reinterpret_cast_to_block() { void *test_reinterpret_cast_to_block() {

View File

@ -112,7 +112,7 @@ void testCacheOut(PtrWrapper w) {
void testUseAfter(int *p) { void testUseAfter(int *p) {
SomeClass *c = new SomeClass; SomeClass *c = new SomeClass;
free(p); free(p);
c->f(p); // expected-warning{{Use of memory after it is freed}} c->f(p); // expected-warning{{Use of memory after it is released}}
delete c; delete c;
} }
@ -140,25 +140,25 @@ void testDeleteMallocked() {
void testDeleteOpAfterFree() { void testDeleteOpAfterFree() {
int *p = (int *)malloc(sizeof(int)); int *p = (int *)malloc(sizeof(int));
free(p); free(p);
operator delete(p); // expected-warning{{Use of memory after it is freed}} operator delete(p); // expected-warning{{Use of memory after it is released}}
} }
void testDeleteAfterFree() { void testDeleteAfterFree() {
int *p = (int *)malloc(sizeof(int)); int *p = (int *)malloc(sizeof(int));
free(p); free(p);
delete p; // expected-warning{{Use of memory after it is freed}} delete p; // expected-warning{{Use of memory after it is released}}
} }
void testStandardPlacementNewAfterFree() { void testStandardPlacementNewAfterFree() {
int *p = (int *)malloc(sizeof(int)); int *p = (int *)malloc(sizeof(int));
free(p); free(p);
p = new(p) int; // expected-warning{{Use of memory after it is freed}} p = new(p) int; // expected-warning{{Use of memory after it is released}}
} }
void testCustomPlacementNewAfterFree() { void testCustomPlacementNewAfterFree() {
int *p = (int *)malloc(sizeof(int)); int *p = (int *)malloc(sizeof(int));
free(p); free(p);
p = new(0, p) int; // expected-warning{{Use of memory after it is freed}} p = new(0, p) int; // expected-warning{{Use of memory after it is released}}
} }
void testUsingThisAfterDelete() { void testUsingThisAfterDelete() {

View File

@ -33,5 +33,5 @@ void useAfterFree(__isl_take Object *A) {
freeObj(B); freeObj(B);
A->Ref = 13; A->Ref = 13;
// no-warning: 'Use of memory after it is freed' was here. // no-warning: 'Use of memory after it is released' was here.
} }

View File

@ -42,8 +42,8 @@ StringUsed &StringUsed::operator=(const StringUsed &rhs) {
// expected-note@-2{{TRUE}} // expected-note@-2{{TRUE}}
// expected-note@-3{{UNKNOWN}} // expected-note@-3{{UNKNOWN}}
free(str); // expected-note{{Memory is released}} free(str); // expected-note{{Memory is released}}
str = strdup(rhs.str); // expected-warning{{Use of memory after it is freed}} str = strdup(rhs.str); // expected-warning{{Use of memory after it is released}}
// expected-note@-1{{Use of memory after it is freed}} // expected-note@-1{{Use of memory after it is released}}
// expected-note@-2{{Memory is allocated}} // expected-note@-2{{Memory is allocated}}
return *this; return *this;
} }
@ -90,8 +90,8 @@ StringUnused &StringUnused::operator=(const StringUnused &rhs) {
// expected-note@-2{{TRUE}} // expected-note@-2{{TRUE}}
// expected-note@-3{{UNKNOWN}} // expected-note@-3{{UNKNOWN}}
free(str); // expected-note{{Memory is released}} free(str); // expected-note{{Memory is released}}
str = strdup(rhs.str); // expected-warning{{Use of memory after it is freed}} str = strdup(rhs.str); // expected-warning{{Use of memory after it is released}}
// expected-note@-1{{Use of memory after it is freed}} // expected-note@-1{{Use of memory after it is released}}
return *this; return *this;
} }

View File

@ -31,7 +31,7 @@ void test(Node *N) {
delete N; delete N;
N = Next.getPointer(); N = Next.getPointer();
// no-warning: 'Use of memory after it is freed' was here as the same // no-warning: 'Use of memory after it is released' was here as the same
// 'StackArgumentsSpaceRegion' purged out twice as 'P'. // 'StackArgumentsSpaceRegion' purged out twice as 'P'.
} }
} }

View File

@ -57,8 +57,8 @@ void ctor_notetag_on_constraining_symbol(const char *p) {
free((void *)p); // expected-note {{Memory is released}} free((void *)p); // expected-note {{Memory is released}}
free((void *)p); free((void *)p);
// expected-warning@-1 {{Attempt to free released memory}} // expected-warning@-1 {{Attempt to release already released memory}}
// expected-note@-2 {{Attempt to free released memory}} // expected-note@-2 {{Attempt to release already released memory}}
} }
void ctor_no_notetag_symbol_already_constrained(const char *p) { void ctor_no_notetag_symbol_already_constrained(const char *p) {
@ -73,8 +73,8 @@ void ctor_no_notetag_symbol_already_constrained(const char *p) {
free((void *)p); // expected-note {{Memory is released}} free((void *)p); // expected-note {{Memory is released}}
free((void *)p); free((void *)p);
// expected-warning@-1 {{Attempt to free released memory}} // expected-warning@-1 {{Attempt to release already released memory}}
// expected-note@-2 {{Attempt to free released memory}} // expected-note@-2 {{Attempt to release already released memory}}
} }
void ctor_no_notetag_if_not_interesting(const char *p1, const char *p2) { void ctor_no_notetag_if_not_interesting(const char *p1, const char *p2) {
@ -83,6 +83,6 @@ void ctor_no_notetag_if_not_interesting(const char *p1, const char *p2) {
free((void *)p1); // expected-note {{Memory is released}} free((void *)p1); // expected-note {{Memory is released}}
free((void *)p1); free((void *)p1);
// expected-warning@-1 {{Attempt to free released memory}} // expected-warning@-1 {{Attempt to release already released memory}}
// expected-note@-2 {{Attempt to free released memory}} // expected-note@-2 {{Attempt to release already released memory}}
} }