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