analyzer/pr104308.c: Avoid optimizing away the copies

Message ID 20220504002938.3011-1-palmer@rivosinc.com
State Accepted
Delegated to: David Malcolm
Headers
Series analyzer/pr104308.c: Avoid optimizing away the copies |

Commit Message

Palmer Dabbelt May 4, 2022, 12:29 a.m. UTC
  The test cases in analyzer/pr104308.c use uninitialized values in a way
that doesn't plumb through to the return value of the function.  This
allows the accesses to be deleted, which can result in the diagnostic
not firing.

gcc/testsuite/ChangeLog

	* gcc.dg/analyzer/pr104308.c (test_memmove_within_uninit):
	Return the result of the copy.
	(test_memcpy_From_uninit): Likewise.
---
I was worried this had something to do with this test failing on RISC-V.
I don't think that's actually the case (IIUC we're just not inlining the
memmove, which elides the diagnostic), but I'd already written it so I
figured I'd send it along.
---
 gcc/testsuite/gcc.dg/analyzer/pr104308.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
  

Comments

David Malcolm Feb. 14, 2024, 2:01 p.m. UTC | #1
On Tue, 2022-05-03 at 17:29 -0700, Palmer Dabbelt wrote:
> The test cases in analyzer/pr104308.c use uninitialized values in a
> way
> that doesn't plumb through to the return value of the function.  This
> allows the accesses to be deleted, which can result in the diagnostic
> not firing.

Thanks; LGTM for trunk.

Dave

> 
> gcc/testsuite/ChangeLog
> 
>         * gcc.dg/analyzer/pr104308.c (test_memmove_within_uninit):
>         Return the result of the copy.
>         (test_memcpy_From_uninit): Likewise.
> ---
> I was worried this had something to do with this test failing on
> RISC-V.
> I don't think that's actually the case (IIUC we're just not inlining
> the
> memmove, which elides the diagnostic), but I'd already written it so
> I
> figured I'd send it along.
> ---
>  gcc/testsuite/gcc.dg/analyzer/pr104308.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/gcc/testsuite/gcc.dg/analyzer/pr104308.c
> b/gcc/testsuite/gcc.dg/analyzer/pr104308.c
> index a3a0cbb7317..ae40e59c41c 100644
> --- a/gcc/testsuite/gcc.dg/analyzer/pr104308.c
> +++ b/gcc/testsuite/gcc.dg/analyzer/pr104308.c
> @@ -8,12 +8,13 @@ int test_memmove_within_uninit (void)
>  {
>    char s[5]; /* { dg-message "region created on stack here" } */
>    memmove(s, s + 1, 2); /* { dg-warning "use of uninitialized value"
> } */
> -  return 0;
> +  return s[0];
>  }
>  
>  int test_memcpy_from_uninit (void)
>  {
>    char a1[5];
>    char a2[5]; /* { dg-message "region created on stack here" } */
> -  return (memcpy(a1, a2, 5) == a1); /* { dg-warning "use of
> uninitialized value" } */
> +  memcpy(a1, a2, 5); /* { dg-warning "use of uninitialized value" }
> */
> +  return a1[0];
>  }
  

Patch

diff --git a/gcc/testsuite/gcc.dg/analyzer/pr104308.c b/gcc/testsuite/gcc.dg/analyzer/pr104308.c
index a3a0cbb7317..ae40e59c41c 100644
--- a/gcc/testsuite/gcc.dg/analyzer/pr104308.c
+++ b/gcc/testsuite/gcc.dg/analyzer/pr104308.c
@@ -8,12 +8,13 @@  int test_memmove_within_uninit (void)
 {
   char s[5]; /* { dg-message "region created on stack here" } */
   memmove(s, s + 1, 2); /* { dg-warning "use of uninitialized value" } */
-  return 0;
+  return s[0];
 }
 
 int test_memcpy_from_uninit (void)
 {
   char a1[5];
   char a2[5]; /* { dg-message "region created on stack here" } */
-  return (memcpy(a1, a2, 5) == a1); /* { dg-warning "use of uninitialized value" } */
+  memcpy(a1, a2, 5); /* { dg-warning "use of uninitialized value" } */
+  return a1[0];
 }