[clang] [clang-tools-extra] Renaming 'free' in warning messages to 'release' (PR #150935)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 28 05:58:50 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-static-analyzer-1
Author: Baghirov Feyruz (feyruzb)
<details>
<summary>Changes</summary>
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)
---
Patch is 40.72 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/150935.diff
28 Files Affected:
- (modified) clang-tools-extra/test/clang-tidy/infrastructure/static-analyzer-config.cpp (+1-1)
- (modified) clang-tools-extra/test/clang-tidy/infrastructure/static-analyzer.cpp (+2-2)
- (modified) clang/docs/analyzer/checkers/unix_malloc_example.c (+1-1)
- (modified) clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp (+3-3)
- (modified) clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist (+6-6)
- (modified) clang/test/Analysis/Inputs/expected-plists/malloc-plist.c.plist (+6-6)
- (modified) clang/test/Analysis/Inputs/overloaded-delete-in-header.h (+1-1)
- (modified) clang/test/Analysis/Malloc+MismatchedDeallocator+NewDelete.cpp (+5-5)
- (modified) clang/test/Analysis/NewDelete-checker-test.cpp (+11-11)
- (modified) clang/test/Analysis/NewDelete-intersections.mm (+2-2)
- (modified) clang/test/Analysis/NewDelete-path-notes.cpp (+4-4)
- (modified) clang/test/Analysis/diagnostics/dtors.cpp (+2-2)
- (modified) clang/test/Analysis/dtor.cpp (+9-9)
- (modified) clang/test/Analysis/getline-alloc.c (+1-1)
- (modified) clang/test/Analysis/gmalloc.c (+2-2)
- (modified) clang/test/Analysis/malloc-annotations.c (+10-10)
- (modified) clang/test/Analysis/malloc-annotations.cpp (+5-5)
- (modified) clang/test/Analysis/malloc-free-after-return.cpp (+2-2)
- (modified) clang/test/Analysis/malloc-interprocedural.c (+3-3)
- (modified) clang/test/Analysis/malloc-plist.c (+3-3)
- (modified) clang/test/Analysis/malloc-refcounted.c (+2-2)
- (modified) clang/test/Analysis/malloc.c (+22-22)
- (modified) clang/test/Analysis/malloc.mm (+6-6)
- (modified) clang/test/Analysis/new.cpp (+5-5)
- (modified) clang/test/Analysis/retain-count-alloc.cpp (+1-1)
- (modified) clang/test/Analysis/self-assign.cpp (+4-4)
- (modified) clang/test/Analysis/stack-frame-context-revision.cpp (+1-1)
- (modified) clang/test/Analysis/std-string.cpp (+6-6)
``````````diff
diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/static-analyzer-config.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/static-analyzer-config.cpp
index 725f87717346c..6a9641e646f43 100644
--- a/clang-tools-extra/test/clang-tidy/infrastructure/static-analyzer-config.cpp
+++ b/clang-tools-extra/test/clang-tidy/infrastructure/static-analyzer-config.cpp
@@ -16,5 +16,5 @@ void af2() {
void *p = my_malloc(12);
my_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]
}
diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/static-analyzer.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/static-analyzer.cpp
index af9693ad09960..c45f219b66426 100644
--- a/clang-tools-extra/test/clang-tidy/infrastructure/static-analyzer.cpp
+++ b/clang-tools-extra/test/clang-tidy/infrastructure/static-analyzer.cpp
@@ -7,12 +7,12 @@ void f() {
int *p = new int(42);
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 *q = malloc(132);
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]
}
diff --git a/clang/docs/analyzer/checkers/unix_malloc_example.c b/clang/docs/analyzer/checkers/unix_malloc_example.c
index 68c5a4a8f1c5f..30df074b5aaa9 100644
--- a/clang/docs/analyzer/checkers/unix_malloc_example.c
+++ b/clang/docs/analyzer/checkers/unix_malloc_example.c
@@ -2,7 +2,7 @@
void test() {
int *p = malloc(1);
free(p);
- free(p); // warn: attempt to free released memory
+ free(p); // warn: attempt to release already released memory
}
void test() {
diff --git a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
index a7704da82fcc2..369d6194dbb65 100644
--- a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
@@ -2693,7 +2693,7 @@ void MallocChecker::HandleUseAfterFree(CheckerContext &C, SourceRange Range,
Frontend->UseFreeBug,
AF.Kind == AF_InnerBuffer
? "Inner pointer of container used after re/deallocation"
- : "Use of memory after it is freed",
+ : "Use of memory after it is released",
N);
R->markInteresting(Sym);
@@ -2721,8 +2721,8 @@ void MallocChecker::HandleDoubleFree(CheckerContext &C, SourceRange Range,
if (ExplodedNode *N = C.generateErrorNode()) {
auto R = std::make_unique<PathSensitiveBugReport>(
Frontend->DoubleFreeBug,
- (Released ? "Attempt to free released memory"
- : "Attempt to free non-owned memory"),
+ (Released ? "Attempt to release already released memory"
+ : "Attempt to release non-owned memory"),
N);
if (Range.isValid())
R->addRange(Range);
diff --git a/clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist b/clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist
index 957988bbb95b3..e4adeca6cf5a6 100644
--- a/clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist
+++ b/clang/test/Analysis/Inputs/expected-plists/NewDelete-path-notes.cpp.plist
@@ -33,9 +33,9 @@
</array>
<key>depth</key><integer>0</integer>
<key>extended_message</key>
- <string>Attempt to free released memory</string>
+ <string>Attempt to release already released memory</string>
<key>message</key>
- <string>Attempt to free released memory</string>
+ <string>Attempt to release already released memory</string>
</dict>
<dict>
<key>kind</key><string>control</string>
@@ -232,7 +232,7 @@
</array>
</dict>
</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>type</key><string>Double free</string>
<key>check_name</key><string>cplusplus.NewDelete</string>
@@ -456,12 +456,12 @@
</array>
<key>depth</key><integer>0</integer>
<key>extended_message</key>
- <string>Attempt to free released memory</string>
+ <string>Attempt to release already released memory</string>
<key>message</key>
- <string>Attempt to free released memory</string>
+ <string>Attempt to release already released memory</string>
</dict>
</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>type</key><string>Double free</string>
<key>check_name</key><string>cplusplus.NewDelete</string>
diff --git a/clang/test/Analysis/Inputs/expected-plists/malloc-plist.c.plist b/clang/test/Analysis/Inputs/expected-plists/malloc-plist.c.plist
index 8ae58503b9c7e..3fdf5da43636d 100644
--- a/clang/test/Analysis/Inputs/expected-plists/malloc-plist.c.plist
+++ b/clang/test/Analysis/Inputs/expected-plists/malloc-plist.c.plist
@@ -1725,12 +1725,12 @@
</array>
<key>depth</key><integer>0</integer>
<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>
- <string>Use of memory after it is freed</string>
+ <string>Use of memory after it is released</string>
</dict>
</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>type</key><string>Use-after-free</string>
<key>check_name</key><string>unix.Malloc</string>
@@ -2985,12 +2985,12 @@
</array>
<key>depth</key><integer>0</integer>
<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>
- <string>Use of memory after it is freed</string>
+ <string>Use of memory after it is released</string>
</dict>
</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>type</key><string>Use-after-free</string>
<key>check_name</key><string>unix.Malloc</string>
diff --git a/clang/test/Analysis/Inputs/overloaded-delete-in-header.h b/clang/test/Analysis/Inputs/overloaded-delete-in-header.h
index 8243961d84830..96aa4af672f50 100644
--- a/clang/test/Analysis/Inputs/overloaded-delete-in-header.h
+++ b/clang/test/Analysis/Inputs/overloaded-delete-in-header.h
@@ -12,7 +12,7 @@ void DeleteInHeader::operator delete(void *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
diff --git a/clang/test/Analysis/Malloc+MismatchedDeallocator+NewDelete.cpp b/clang/test/Analysis/Malloc+MismatchedDeallocator+NewDelete.cpp
index 6c20b4ba53dae..b9eb85d6b69fa 100644
--- a/clang/test/Analysis/Malloc+MismatchedDeallocator+NewDelete.cpp
+++ b/clang/test/Analysis/Malloc+MismatchedDeallocator+NewDelete.cpp
@@ -9,7 +9,7 @@
void testMallocDoubleFree() {
int *p = (int *)malloc(sizeof(int));
free(p);
- free(p); // expected-warning{{Attempt to free released memory}}
+ free(p); // expected-warning{{Attempt to release already released memory}}
}
void testMallocLeak() {
@@ -19,7 +19,7 @@ void testMallocLeak() {
void testMallocUseAfterFree() {
int *p = (int *)malloc(sizeof(int));
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() {
@@ -46,7 +46,7 @@ void testMismatchedDeallocator() {
void testNewDoubleFree() {
int *p = new int;
delete p;
- delete p; // expected-warning{{Attempt to free released memory}}
+ delete p; // expected-warning{{Attempt to release already released memory}}
}
void testNewLeak() {
@@ -59,7 +59,7 @@ void testNewLeak() {
void testNewUseAfterFree() {
int *p = (int *)operator new(0);
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() {
@@ -95,7 +95,7 @@ void testShouldReportDoubleFreeNotMismatched() {
int *p = (int*)malloc(sizeof(int)*4);
globalPtr = 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) {
return new int[c];
diff --git a/clang/test/Analysis/NewDelete-checker-test.cpp b/clang/test/Analysis/NewDelete-checker-test.cpp
index 7c3e142d586bb..c417b9c2ac97e 100644
--- a/clang/test/Analysis/NewDelete-checker-test.cpp
+++ b/clang/test/Analysis/NewDelete-checker-test.cpp
@@ -155,52 +155,52 @@ void g(SomeClass &c, ...);
void testUseFirstArgAfterDelete() {
int *p = new int;
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) {
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) {
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) {
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) {
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() {
SomeClass c;
int *p = new int;
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) {
SomeClass *c = new SomeClass;
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() {
SomeClass *c = new SomeClass;
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() {
int *p = new int;
delete p;
- delete p; // newdelete-warning{{Attempt to free released memory}}
+ delete p; // newdelete-warning{{Attempt to release already released memory}}
}
void testExprDeleteArg() {
@@ -412,7 +412,7 @@ class DerefClass{
void testDoubleDeleteClassInstance() {
DerefClass *foo = new DerefClass();
delete foo;
- delete foo; // newdelete-warning {{Attempt to free released memory}}
+ delete foo; // newdelete-warning {{Attempt to release already released memory}}
}
class EmptyClass{
@@ -424,7 +424,7 @@ class EmptyClass{
void testDoubleDeleteEmptyClass() {
EmptyClass *foo = new EmptyClass();
delete foo;
- delete foo; // newdelete-warning {{Attempt to free released memory}}
+ delete foo; // newdelete-warning {{Attempt to release already released memory}}
}
struct Base {
diff --git a/clang/test/Analysis/NewDelete-intersections.mm b/clang/test/Analysis/NewDelete-intersections.mm
index e897f48b83962..eddfb3294073e 100644
--- a/clang/test/Analysis/NewDelete-intersections.mm
+++ b/clang/test/Analysis/NewDelete-intersections.mm
@@ -78,11 +78,11 @@ void testObjcFreeNewed() {
void testFreeAfterDelete() {
int *p = new int;
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() {
int *p = new int;
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}}
}
diff --git a/clang/test/Analysis/NewDelete-path-notes.cpp b/clang/test/Analysis/NewDelete-path-notes.cpp
index 2837fd1951e23..852632f83ff64 100644
--- a/clang/test/Analysis/NewDelete-path-notes.cpp
+++ b/clang/test/Analysis/NewDelete-path-notes.cpp
@@ -16,8 +16,8 @@ void test() {
delete p;
// expected-note at -1 {{Memory is released}}
- delete p; // expected-warning {{Attempt to free released memory}}
- // expected-note at -1 {{Attempt to free released memory}}
+ delete p; // expected-warning {{Attempt to release already released memory}}
+ // expected-note at -1 {{Attempt to release already released memory}}
}
struct Odd {
@@ -29,7 +29,7 @@ struct Odd {
void test(Odd *odd) {
odd->kill(); // expected-note{{Calling 'Odd::kill'}}
// expected-note at -1 {{Returning; memory was released}}
- delete odd; // expected-warning {{Attempt to free released memory}}
- // expected-note at -1 {{Attempt to free released memory}}
+ delete odd; // expected-warning {{Attempt to release already released memory}}
+ // expected-note at -1 {{Attempt to release already released memory}}
}
diff --git a/clang/test/Analysis/diagnostics/dtors.cpp b/clang/test/Analysis/diagnostics/dtors.cpp
index 6a8349da9d78c..61e71fdb3bee3 100644
--- a/clang/test/Analysis/diagnostics/dtors.cpp
+++ b/clang/test/Analysis/diagnostics/dtors.cpp
@@ -19,8 +19,8 @@ struct smart_ptr {
return (x || 0) ? nullptr : s; // expected-note{{Field 'x' is 0}}
// expected-note at -1{{Left side of '||' is false}}
// expected-note at -2{{'?' condition is false}}
- // expected-warning at -3{{Use of memory after it is freed}}
- // expected-note at -4{{Use of memory after it is freed}}
+ // expected-warning at -3{{Use of memory after it is released}}
+ // expected-note at -4{{Use of memory after it is released}}
}
};
diff --git a/clang/test/Analysis/dtor.cpp b/clang/test/Analysis/dtor.cpp
index c17c886d97fb4..9e00e937a7c29 100644
--- a/clang/test/Analysis/dtor.cpp
+++ b/clang/test/Analysis/dtor.cpp
@@ -35,7 +35,7 @@ void testSmartPointer() {
SmartPointer Deleter(mem);
// 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();
// 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();
// 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();
// 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() {
@@ -93,7 +93,7 @@ void testMultipleInheritance2() {
doSomething();
// 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() {
@@ -103,7 +103,7 @@ void testMultipleInheritance3() {
// Remove dead bindings...
doSomething();
// destructor called here
- // expected-warning at 28 {{Attempt to free released memory}}
+ // expected-warning at 28 {{Attempt to release already released memory}}
}
}
@@ -122,7 +122,7 @@ void testSmartPointerMember() {
doSomething();
// 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;
}
~NonTrivial() {
- delete[] p; // expected-warning {{free released memory}}
+ delete[] p; // expected-warning {{release already released memory}}
}
};
@@ -593,5 +593,5 @@ void overrideLeak() {
void overrideDoubleDelete() {
auto *a = new CustomOperators();
delete a;
- delete a; // expected-warning at 577 {{Attempt to free released memory}}
+ delete a; // expected-warning at 577 {{Attempt to release already released memory}}
}
diff --git a/clang/test/Analysis/getline-alloc.c b/clang/test/Analysis/getline-alloc.c
index 74a40a11b9782..43d0a2d357162 100644
--- a/clang/test/Analysis/getline-alloc.c
+++ b/clang/test/Analysis/getline-alloc.c
@@ -29,7 +29,7 @@ void test_getline_malloc_buffer() {
ssize_t r = getdelim(&buffer, &n, '\r', F1);
// 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
fclose(F1);
}
diff --git a/clang/test/Analysis/gmalloc.c b/clang/test/Analysis/gmalloc.c
index dae28ebfa910c..a94e5db64a482 100644
--- a/clang/test/Analysis/gmalloc.c
+++ b/clang/test/Analysis/gmalloc.c
@@ -41,7 +41,7 @@ void f1(void) {
g_free(g1);
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) {
@@ -61,7 +61,7 @@ void f2(void) {
g_free(g1);
g_free(g2);
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) {
diff --git a/clang/test/Analysis/malloc-annotations.c b/clang/test/Analysis/malloc-annotations.c
index 3a8b1b2842d07..68ac71d51e45c 100644
--- a/clang/test/Analysis/malloc-annotations.c
+++ b/clang/test/Analysis/malloc-annotations.c
@@ -45,13 +45,13 @@ void f1(void) {
void f2(void) {
int *p = malloc(12);
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) {
int *p = malloc(12);
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) {
@@ -106,25 +106,25 @@ void af1_g(struct stuff **pps) {
void af2(void) {
int *p = my_malloc(12);
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) {
int *p = my_malloc(12);
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) {
int *p = my_malloc(12);
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) {
int *p = my_malloc(12);
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 ret...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/150935
More information about the cfe-commits
mailing list