From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32055 invoked by alias); 6 May 2011 14:13:06 -0000 Received: (qmail 32043 invoked by uid 22791); 6 May 2011 14:13:03 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 06 May 2011 14:12:44 +0000 Received: (qmail 16932 invoked from network); 6 May 2011 14:12:43 -0000 Received: from unknown (HELO ?192.168.0.102?) (yao@127.0.0.2) by mail.codesourcery.com with ESMTPA; 6 May 2011 14:12:43 -0000 Message-ID: <4DC401D0.1050500@codesourcery.com> Date: Fri, 06 May 2011 14:13:00 -0000 From: Yao Qi User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.14) Gecko/20110223 Lightning/1.0b2 Thunderbird/3.1.8 MIME-Version: 1.0 To: gdb-patches@sourceware.org Subject: [patch, testsuite] Tests to _Complex type Content-Type: multipart/mixed; boundary="------------090907090307050301050708" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-05/txt/msg00186.txt.bz2 This is a multi-part message in MIME format. --------------090907090307050301050708 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Content-length: 1419 When I am fixing GDB's inf-call in one port, I find tests to _Complex type is quite limited, especially on argument passing, there is none. This patch is to add more tests to _Complex type on argument passing and vararg support. Of course, these changes can be split, and moved to callfuncs.exp and varargs.exp respectively. I don't know to what extent _Complex is supported on all GDB ports, so I put all _Complex related stuff into complex.exp. I run this case on these three systems I have, and some problems are exposed: i686-pc-linux-gnu: two SIGSEGV FAIL: gdb.base/complex.exp: print find_max_double_real(4, dc1, dc2, dc3, dc4) FAIL: gdb.base/complex.exp: print complex_double_on_stackprint armv7l-unknown-linux-gnueabi: four SIGSEGV FAIL: gdb.base/complex.exp: print find_max_float_real(4, fc1, fc2, f3, f4) FAIL: gdb.base/complex.exp: print find_max_double_real(4, dc1, dc2, dc3, dc4) FAIL: gdb.base/complex.exp: print complex_float_on_stackprint FAIL: gdb.base/complex.exp: print complex_double_on_stackprint x86_64-unknown-linux-gnu: FAIL: gdb.base/complex.exp: print find_max_float_real(4, fc1, fc2, f3, f4) FAIL: gdb.base/complex.exp: print find_max_double_real(4, dc1, dc2, dc3, dc4) FAIL: gdb.base/complex.exp: print complex_float_on_stackprint FAIL: gdb.base/complex.exp: print complex_double_on_stackprint This case causes new fails, so shall I kfail it? Comments are welcome. -- Yao (齐尧) --------------090907090307050301050708 Content-Type: text/x-patch; name="0003-complex-test-case.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0003-complex-test-case.patch" Content-length: 3885 gdb/testsuite/ 2011-05-06 Yao Qi * gdb.base/complex.c (find_max_float_real): New. (find_max_double_real, complex_double_on_stack): New. (complex_float_on_stack): New. * gdb.base/complex.exp: Call these new functions in complex.c. --- gdb/testsuite/gdb.base/complex.c | 78 ++++++++++++++++++++++++++++++++++++ gdb/testsuite/gdb.base/complex.exp | 19 +++++++++ 2 files changed, 97 insertions(+), 0 deletions(-) diff --git a/gdb/testsuite/gdb.base/complex.c b/gdb/testsuite/gdb.base/complex.c index 9b890c9..7623b6d 100644 --- a/gdb/testsuite/gdb.base/complex.c +++ b/gdb/testsuite/gdb.base/complex.c @@ -20,6 +20,7 @@ Free Software Foundation, Inc. a complex number. */ #include +#include typedef __complex__ float cf; struct x { char c; cf f; } __attribute__ ((__packed__)); @@ -28,11 +29,14 @@ extern void f4 (struct unpacked_x*); extern void f3 (void); extern void f2 (struct x*); extern void f1 (void); +extern void marker (void); int main (void) { f1 (); f3 (); + marker (); + exit (0); } @@ -67,3 +71,77 @@ f4 (struct unpacked_x *y) if (y->f != 1 || y->c != 42) abort (); } + + +extern float crealf (float _Complex); + +float _Complex fc1 = 1.0F + 1.0iF; +float _Complex fc2 = 2.0F + 2.0iF; +float _Complex fc3 = 3.0F + 3.0iF; +float _Complex fc4 = 4.0F + 4.0iF; + +float _Complex +find_max_float_real (int num_vals, ...) +{ + float _Complex max = 0.0F + 0.0iF; + float _Complex x; + va_list argp; + int i; + + va_start(argp, num_vals); + for (i = 0; i < num_vals; i++) + { + x = va_arg (argp, float _Complex); + if (crealf (max) < crealf (x)) max = x; + } + + return max; +} + +extern double creal (double _Complex); +double _Complex dc1 = 1.0 + 1.0i; +double _Complex dc2 = 2.0 + 2.0i; +double _Complex dc3 = 3.0 + 3.0i; +double _Complex dc4 = 4.0 + 4.0i; + +double _Complex +find_max_double_real (int num_vals, ...) +{ + double _Complex max = 0.0F + 0.0iF; + double _Complex x; + va_list argp; + int i; + + va_start(argp, num_vals); + for (i = 0; i < num_vals; i++) + { + x = va_arg (argp, double _Complex); + if (creal (max) < creal (x)) max = x; + } + + return max; +} + +/* Force DC is passed on stack. */ +_Complex double +complex_double_on_stack (double f1, double f2, double f3, double f4, double f5, + double f6, double f7, double f8, double f9, double f10, + double f11, double f12, double f13, double f14, + double f15, _Complex double dc) +{ + return dc; +}; + +/* Force FC is passed on stack. */ +_Complex float +complex_float_on_stack (double f1, double f2, double f3, double f4, double f5, + double f6, double f7, double f8, double f9, double f10, + double f11, double f12, double f13, double f14, + double f15, _Complex float fc) +{ + return fc; +}; + +void marker () +{ +} diff --git a/gdb/testsuite/gdb.base/complex.exp b/gdb/testsuite/gdb.base/complex.exp index 27af703..cb16fa5 100644 --- a/gdb/testsuite/gdb.base/complex.exp +++ b/gdb/testsuite/gdb.base/complex.exp @@ -55,4 +55,23 @@ if [runto f4] then { "print complex value in C" } +if [runto marker] then { + gdb_test "print find_max_float_real(4, fc1, fc2, fc3, fc4)" \ + ".*= 4 \\+ 4 \\* I" \ + "print find_max_float_real(4, fc1, fc2, f3, f4)" + + gdb_test "print find_max_double_real(4, dc1, dc2, dc3, dc4)" \ + ".*= 4 \\+ 4 \\* I" \ + "print find_max_double_real(4, dc1, dc2, dc3, dc4)" + + gdb_test "print complex_float_on_stack (1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, fc1)" \ + ".*= 1 \\+ 1 \\* I" \ + "print complex_float_on_stackprint" + + gdb_test "print complex_double_on_stack (1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, dc1)" \ + ".*= 1 \\+ 1 \\* I" \ + "print complex_double_on_stackprint" + +} + return 0 -- 1.7.0.4 --------------090907090307050301050708--