Suppressed compiler warnings reported by gcc 4.4.x on the source code
of regression tests about intentionally uninitialized variables and
about intentionally freed non-heap memory.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10794 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/configure.in b/configure.in
index 5c7c725..f4ee9c3 100644
--- a/configure.in
+++ b/configure.in
@@ -1255,6 +1255,29 @@
 CFLAGS=$safe_CFLAGS
 
 
+# does this compiler support -Wno-uninitialized ?
+
+AC_MSG_CHECKING([if gcc accepts -Wno-uninitialized])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-Wno-uninitialized"
+
+AC_TRY_COMPILE(
+[ ],
+[
+  return 0;
+],
+[
+AC_SUBST([FLAG_W_NO_UNINITIALIZED], [-Wno-uninitialized])
+AC_MSG_RESULT([yes])
+],
+[
+AC_SUBST([FLAG_W_NO_UNINITIALIZED], [])
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+
 # does this compiler support -Wextra or the older -W ?
 
 AC_MSG_CHECKING([if gcc accepts -Wextra or -W])
diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am
index 14200ad..43a44a8 100644
--- a/memcheck/tests/Makefile.am
+++ b/memcheck/tests/Makefile.am
@@ -251,8 +251,14 @@
 deep_templates_SOURCES	= deep_templates.cpp
 deep_templates_CXXFLAGS	= $(AM_CFLAGS) -O -gstabs
 
+error_counts_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
+
+inits_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
+
 long_namespace_xml_SOURCES = long_namespace_xml.cpp
 
+manuel1_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
+
 memcmptest_CFLAGS	= $(AM_CFLAGS) -fno-builtin-memcmp
 
 mismatches_SOURCES	= mismatches.cpp
@@ -260,6 +266,10 @@
 new_nothrow_SOURCES 	= new_nothrow.cpp
 new_override_SOURCES 	= new_override.cpp
 
+origin2_not_quite_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
+
+origin3_no_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
+
 # This requires optimisation in order to get just one resulting error.
 origin4_many_CFLAGS	= $(AM_CFLAGS) -O
 
diff --git a/memcheck/tests/badfree.c b/memcheck/tests/badfree.c
index 3a22567..f9393c7 100644
--- a/memcheck/tests/badfree.c
+++ b/memcheck/tests/badfree.c
@@ -2,7 +2,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-
+static void* return_arg(void* q);
 int main ( void )
 {
    void* p = (void*)0x87654321;
@@ -12,7 +12,18 @@
    free(p);
 
    /* Free a pointer to a stack block */
-   free(q);
+   free(return_arg(q));
 
    return 0;
 }
+
+/*
+ * The only purpose of the function below is to make sure that gcc 4.4.x does
+ * not print the following warning during the compilation of this test program:
+ * warning: attempt to free a non-heap object
+ */
+static void* return_arg(void* q)
+{
+   return q;
+}
+
diff --git a/memcheck/tests/xml1.c b/memcheck/tests/xml1.c
index abf2d38..6cab287 100644
--- a/memcheck/tests/xml1.c
+++ b/memcheck/tests/xml1.c
@@ -2,7 +2,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 
-
+static void* return_arg(void* p);
 int frame3 ( void )
 {
   int *a = malloc(10 * sizeof(int));
@@ -25,7 +25,7 @@
   free(a);
 
   // more invalid frees
-  free(&n);
+  free(return_arg(&n));
 
   // leak ..
   a = malloc(99 * sizeof(int));
@@ -48,3 +48,14 @@
 {
   return frame1() - 1;
 }
+
+/*
+ * The only purpose of the function below is to make sure that gcc 4.4.x does
+ * not print the following warning during the compilation of this test program:
+ * warning: attempt to free a non-heap object
+ */
+static void* return_arg(void* p)
+{
+   return p;
+}
+