[patch] testsuite: regression on failed charset.exp compilation [Re: [RFA-v3] Allow explicit 16 or 32 char in 'x /s']

Jan Kratochvil
2010-07-20T20:13:30Z

On Mon, 05 Jul 2010 12:17:33 +0200, Ulrich Weigand wrote:
> Tom Tromey wrote:
> > >>>>> "Ulrich" =3D=3D Ulrich Weigand <uweigand@de.ibm.com> writes:
> > Ulrich> * gdb.base/charset.c (main): Make sure malloc gets linked in.
> > With this patch I now get:
> > Running ../../../src/gdb/testsuite/gdb.base/charset.exp ...
> > gdb compile failed, ../../../src/gdb/testsuite/gdb.base/charset.c: In function 'main':
> > ../../../src/gdb/testsuite/gdb.base/charset.c:126: warning: incompatible implicit declaration of built-in function 'malloc'
[...]
> Can we split the testcase so that the parts that require the
> non-standard wchar_t definition are separate from the parts
> that construct strings in the inferior?

Implemented. OK to check-in?

This is a regression since gdb-7.1.

Testfile tested on x86_64-fedora13-linux-gnu.

While the malloc() result gets ignored warning gets generated only with
_FORTIFY_SOURCE level > 0 so we probably do not have to care about in the gdb
testsuite.

Thanks,
Jan

2010-07-20 Jan Kratochvil <jan.kratochvil@redhat.com>
Ulrich Weigand <uweigand@de.ibm.com>
Tom Tromey <tromey@redhat.com>

* gdb.base/charset-malloc.c: New file.
* gdb.base/charset.c (malloc_stub): New prototype.
(main): Call it instead of malloc itself.
* gdb.base/charset.exp: Use only prepare_for_testing.
(binfile): Remove the variable.

--- /dev/null
+++ b/gdb/testsuite/gdb.base/charset-malloc.c
@@ -0,0 +1,35 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2010 Free Software Foundation, Inc.
+
+ Contributed by Red Hat, originally written by Jim Blandy.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ Please email any bugs, comments, and/or additions to this file to:
+ bug-gdb@gnu.org */
+
+/* charset.c file cannot use a system include file as it has its own wchar_t
+ definition which would be in a conflict. Use this separate compilation
+ unit. */
+
+#include <stdlib.h>
+
+void
+malloc_stub (void)
+{
+ /* charset.exp wants to allocate memory for constants. So make sure malloc
+ gets linked into the program. */
+ malloc (1);
+}
--- a/gdb/testsuite/gdb.base/charset.c
+++ b/gdb/testsuite/gdb.base/charset.c
@@ -114,6 +114,8 @@ init_utf32 ()
utf_32_string[i] = iso_8859_1_string[i] & 0xff;
}

+extern void malloc_stub (void);
+
int main ()
{
#ifdef usestubs
@@ -121,9 +123,7 @@ int main ()
breakpoint();
#endif

- /* charset.exp wants to allocate memory for constants. So make sure malloc
- gets linked into the program. */
- malloc (1);
+ malloc_stub ();

/* Initialize ascii_string. */
init_string (ascii_string,
--- a/gdb/testsuite/gdb.base/charset.exp
+++ b/gdb/testsuite/gdb.base/charset.exp
@@ -27,18 +27,11 @@ if $tracelevel then {

set testfile "charset"
set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
- untested "couldn't compile ${srcdir}/${subdir}/${srcfile}"
+set srcmallocfile ${testfile}-malloc.c
+if { [prepare_for_testing ${testfile}.exp ${testfile} [list $srcfile $srcmallocfile]] } {
return -1
}

-# Start with a fresh gdb.
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
# Parse the output from a `show charset' command. Return the host
# and target charset as a two-element list.
proc parse_show_charset_output {testname} {