diff options
author | Andrew Cagney <cagney@redhat.com> | 2000-07-17 02:56:12 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2000-07-17 02:56:12 +0000 |
commit | 4f823a66fa0c764d76967a10c222804cb97f29c5 (patch) | |
tree | b8d53657d46789782ef885b7e7d0292cb4a013b4 /gdb/testsuite/gdb.base | |
parent | 08c44e659e4277eedba21b963a6848ef4ae3948f (diff) | |
download | gdb-4f823a66fa0c764d76967a10c222804cb97f29c5.zip gdb-4f823a66fa0c764d76967a10c222804cb97f29c5.tar.gz gdb-4f823a66fa0c764d76967a10c222804cb97f29c5.tar.bz2 |
* gdb.base/exprs.exp: Test casts to a pointer including over and
underflow.
Diffstat (limited to 'gdb/testsuite/gdb.base')
-rw-r--r-- | gdb/testsuite/gdb.base/exprs.exp | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/gdb/testsuite/gdb.base/exprs.exp b/gdb/testsuite/gdb.base/exprs.exp index f31407c..925a902 100644 --- a/gdb/testsuite/gdb.base/exprs.exp +++ b/gdb/testsuite/gdb.base/exprs.exp @@ -1,4 +1,5 @@ -# Copyright (C) 1988, 1990, 1991, 1992, 1994, 1997 Free Software Foundation, Inc. +# 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 @@ -215,3 +216,44 @@ test_expr "set variable v_unsigned_long=~0" "print v_unsigned_long == 0" "\\$\[0 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" |