This test fails on strict-alignment platforms because a call to memcpy is not 
turned into a simple move and thus yields an additional warning:

warning: '__builtin_memcpy' writing 4 bytes into a region of size 0 overflows 
the destination [-Wstringop-overflow=]

The attached patch tweaks the test so that this call to memcpy is preserved on 
the other platforms too (by adding one character to the string) and adds the 
additional dg-warning directive.

Tested on visium-elf & x86_64-suse-linux, applied on the mainline as obvious.


2018-01-16  Eric Botcazou  <ebotca...@adacore.com>

        * c-c++-common/Wrestrict.c (test_strcpy_range): Bump string size of one
        test and add dg-warning for the -Wstringop-overflow warning.

-- 
Eric Botcazou
Index: c-c++-common/Wrestrict.c
===================================================================
--- c-c++-common/Wrestrict.c	(revision 256562)
+++ c-c++-common/Wrestrict.c	(working copy)
@@ -758,7 +758,8 @@ void test_strcpy_range (void)
   T (8, "012", a + r, a);            /* { dg-warning "accessing 4 bytes at offsets \\\[3, \[0-9\]+] and 0 may overlap 1 byte at offset 3" "strcpy" } */
 
   r = SR (DIFF_MAX - 2, DIFF_MAX - 1);
-  T (8, "012", a + r, a);            /* { dg-warning "accessing 4 bytes at offsets \\\[\[0-9\]+, \[0-9\]+] and 0 overlaps" "strcpy" } */
+  T (8, "0123", a + r, a);            /* { dg-warning "accessing 5 bytes at offsets \\\[\[0-9\]+, \[0-9\]+] and 0 overlaps" "strcpy" } */
+                                      /* { dg-warning "writing 5 bytes into a region of size 0 overflows" "memcpy" { target *-*-* } .-1 } */
 
   /* Exercise the full range of ptrdiff_t.  */
   r = signed_value ();

Reply via email to