This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [rfa/testsuite] Was: [rfc] Allow cast from int -> pointer


Andrew Cagney wrote:
> Wed Jul 12 18:14:29 2000  Andrew Cagney  <cagney@b1.cygnus.com>
> 
>         * gdb.base/exprs.exp: Test casts to a pointer including over and
>         underflow.
> 

FYI, attatched is the revised and hopefully final patch.  It grubs
around in GDB to determine if:

	sizeof (long long) > sizeof (void*)

If it isn't, it marks the test as xfail since the intended overflow
doesn't occure (perhaphs GDB needs a ``long long long'' type :-).  Is
this the correct time to use xfail?

Since it avoids a multi-line command it also runs a lot faster.

Ok?

	Andrew
Wed Jul 12 18:14:29 2000  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdb.base/exprs.exp: Test casts to a pointer including over and
 	underflow.

Index: gdb.base/exprs.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/exprs.exp,v
retrieving revision 1.1.1.2
diff -p -r1.1.1.2 exprs.exp
*** exprs.exp	1999/06/28 16:03:12	1.1.1.2
--- exprs.exp	2000/07/13 07:47:38
***************
*** 1,4 ****
! #   Copyright (C) 1988, 1990, 1991, 1992, 1994, 1997 Free Software Foundation, Inc.
  
  # 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
--- 1,5 ----
! #   Copyright (C) 1988, 1990, 1991, 1992, 1994, 1997, 2000 Free
! #   Software Foundation, Inc.
  
  # 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
*************** test_expr "set variable v_unsigned_long=
*** 215,217 ****
--- 216,259 ----
  test_expr "set variable v_unsigned_long=~0" "print v_unsigned_long != 0" "\\$\[0-9\]* = $true"  "print v_unsigned_long != (unsigned long)~0" "\\$\[0-9\]* = $false"  "print unsigned long != (~0)"
  test_expr "set variable v_unsigned_long=~0" "print v_unsigned_long < 0" "\\$\[0-9\]* = $false"  "print v_unsigned_long < 0x7FFF" "\\$\[0-9\]* = $false"  "print unsigned long < (~0)"
  test_expr "set variable v_unsigned_long=~0" "print v_unsigned_long > 0" "\\$\[0-9\]* = $true"  "print v_unsigned_long > 0x7FFF" "\\$\[0-9\]* = $true"  "print unsigned long > (~0)"
+ #
+ # Test expressions with casts to a pointer.
+ # NB: Some architectures convert a ``NULL'' pointer into
+ #     something else. Don't simply test for 0.
+ #
+ test_expr "set variable v_signed_char = 0" "print (void*)v_signed_char" "\\$\[0-9\]* = .void \\*. $hex" "print (void*)v_signed_char"
+ test_expr "set variable v_signed_short = 0" "print (void*)v_signed_short" "\\$\[0-9\]* = .void \\*. $hex" "print (void*)v_signed_short"
+ test_expr "set variable v_signed_int = 0" "print (void*)v_signed_int" "\\$\[0-9\]* = .void \\*. $hex" "print (void*)v_signed_int"
+ test_expr "set variable v_signed_long = 0" "print (void*)v_signed_long" "\\$\[0-9\]* = .void \\*. $hex" "print (void*)v_signed_long"
+ test_expr "set variable v_unsigned_char = 0" "print (void*)v_unsigned_char" "\\$\[0-9\]* = .void \\*. $hex" "print (void*)v_unsigned_char"
+ test_expr "set variable v_unsigned_short = 0" "print (void*)v_unsigned_short" "\\$\[0-9\]* = .void \\*. $hex" "print (void*)v_unsigned_short"
+ test_expr "set variable v_unsigned_int = 0" "print (void*)v_unsigned_int" "\\$\[0-9\]* = .void \\*. $hex" "print (void*)v_unsigned_int"
+ test_expr "set variable v_unsigned_long = 0" "print (void*)v_unsigned_long" "\\$\[0-9\]* = .void \\*. $hex" "print (void*)v_unsigned_long"
+ #
+ # Test expressions with pointers out of range
+ #
+ # NB: For some architectures, all of sizeof(long),
+ #     sizeof(long long) and sizeof(void*) are
+ #     the same size so this test can not work.
+ #
+ send_gdb "print sizeof (long long) > sizeof (long)\n"
+ gdb_expect {
+     -re "\\$\[0-9\]* = $true" {
+ 	set ok 1
+ 	pass "sizeof (long long) > sizeof (long) (true)"
+     }
+     -re "\\$\[0-9\]* = $false" {
+ 	set ok 0
+ 	pass "sizeof (long long) > sizeof (long) (false)"
+     }
+     timeout {
+ 	set ok 0
+ 	fail "sizeof (long long) > sizeof (long) (timeout)"
+     }
+ }
+ if [expr ! $ok] { setup_xfail "*-*-*" }
+ gdb_test "print (void*) ((long long) (unsigned long) -1 + 1)" \
+ 	"warning: value truncated.*" "truncate (void*) 0x00000000ffffffff + 1"
+ if [expr ! $ok] { setup_xfail "*-*-*" }
+ gdb_test "print (void*) (~((long long)(unsigned long) -1) - 1)" \
+ 	"warning: value truncated.*" "truncate (void*) 0xffffffff00000000 - 1"

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]