testsuite: Fix leaks in tree-dynamic-object-size-0.c
Checks
Commit Message
In commit e5cfb9cac1d7aba9a8ea73bfe7922cfaff9d61f3 I introduced tests
for strdup and strndup with leaks. Fix those leaks.
gcc/testsuite/ChangeLog:
* gcc.dg/builtin-dynamic-object-size-0.c (test_strdup,
test_strndup, test_strdup_min, test_strndup_min): Free RES
before returning from function.
---
.../gcc.dg/builtin-dynamic-object-size-0.c | 20 +++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
Comments
On 12/5/22 07:28, Siddhesh Poyarekar wrote:
> In commit e5cfb9cac1d7aba9a8ea73bfe7922cfaff9d61f3 I introduced tests
> for strdup and strndup with leaks. Fix those leaks.
>
> gcc/testsuite/ChangeLog:
>
> * gcc.dg/builtin-dynamic-object-size-0.c (test_strdup,
> test_strndup, test_strdup_min, test_strndup_min): Free RES
> before returning from function.
We don't generally worry about these kinds of issues in the testsuite.
My only worry would be compromising the test. By adding the free calls
the compiler might match up the allocation and release and potentially
turn it into an alloca. I don't think we're likely to do that in this
case, but it's worth keeping in mind.
So OK as long as you've verified the test still does what it's supposed
to do.
jeff
On 2022-12-05 11:38, Jeff Law wrote:
>
>
> On 12/5/22 07:28, Siddhesh Poyarekar wrote:
>> In commit e5cfb9cac1d7aba9a8ea73bfe7922cfaff9d61f3 I introduced tests
>> for strdup and strndup with leaks. Fix those leaks.
>>
>> gcc/testsuite/ChangeLog:
>>
>> * gcc.dg/builtin-dynamic-object-size-0.c (test_strdup,
>> test_strndup, test_strdup_min, test_strndup_min): Free RES
>> before returning from function.
> We don't generally worry about these kinds of issues in the testsuite.
> My only worry would be compromising the test. By adding the free calls
> the compiler might match up the allocation and release and potentially
> turn it into an alloca. I don't think we're likely to do that in this
> case, but it's worth keeping in mind.
Ack, thanks, I'll keep that in mind.
> So OK as long as you've verified the test still does what it's supposed
> to do.
I have verified that the test still works correctly and the optimizer
hasn't done anything funny with the calls, i.e. the str*dup calls and
free calls are as is.
Thanks,
Sid
@@ -486,7 +486,10 @@ __attribute__ ((noinline))
test_strdup (const char *in)
{
char *res = __builtin_strdup (in);
- return __builtin_dynamic_object_size (res, 0);
+ size_t sz = __builtin_dynamic_object_size (res, 0);
+
+ __builtin_free (res);
+ return sz;
}
size_t
@@ -494,7 +497,10 @@ __attribute__ ((noinline))
test_strndup (const char *in, size_t bound)
{
char *res = __builtin_strndup (in, bound);
- return __builtin_dynamic_object_size (res, 0);
+ size_t sz = __builtin_dynamic_object_size (res, 0);
+
+ __builtin_free (res);
+ return sz;
}
size_t
@@ -502,7 +508,10 @@ __attribute__ ((noinline))
test_strdup_min (const char *in)
{
char *res = __builtin_strdup (in);
- return __builtin_dynamic_object_size (res, 2);
+ size_t sz = __builtin_dynamic_object_size (res, 2);
+
+ __builtin_free (res);
+ return sz;
}
size_t
@@ -510,7 +519,10 @@ __attribute__ ((noinline))
test_strndup_min (const char *in, size_t bound)
{
char *res = __builtin_strndup (in, bound);
- return __builtin_dynamic_object_size (res, 2);
+ size_t sz = __builtin_dynamic_object_size (res, 2);
+
+ __builtin_free (res);
+ return sz;
}
/* Other tests. */