From 1bc5aee63eb72b341f506ad058502cd0361f0d10 Mon Sep 17 00:00:00 2001 From: Ben Cheng Date: Tue, 25 Mar 2014 22:37:19 -0700 Subject: Initial checkin of GCC 4.9.0 from trunk (r208799). Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba --- gcc-4.9/gcc/testsuite/gcc.target/i386/pr59644.c | 42 +++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 gcc-4.9/gcc/testsuite/gcc.target/i386/pr59644.c (limited to 'gcc-4.9/gcc/testsuite/gcc.target/i386/pr59644.c') diff --git a/gcc-4.9/gcc/testsuite/gcc.target/i386/pr59644.c b/gcc-4.9/gcc/testsuite/gcc.target/i386/pr59644.c new file mode 100644 index 000000000..96006b3e3 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.target/i386/pr59644.c @@ -0,0 +1,42 @@ +/* PR target/59644 */ +/* { dg-do run { target lp64 } } */ +/* { dg-options "-O2 -ffreestanding -mno-sse -mpreferred-stack-boundary=3 -maccumulate-outgoing-args -mno-red-zone" } */ + +/* This test uses __builtin_trap () instead of e.g. abort, + because due to -mpreferred-stack-boundary=3 it should not call + any library function from within main (). */ + +#include + +__attribute__((noinline, noclone)) +int +bar (int x, int y, int z, int w, const char *fmt, va_list ap) +{ + if (x != 1 || y != 2 || z != 3 || w != 4) + __builtin_trap (); + if (fmt[0] != 'f' || fmt[1] != 'o' || fmt[2] != 'o' || fmt[3]) + __builtin_trap (); + if (va_arg (ap, int) != 5 || va_arg (ap, int) != 6 + || va_arg (ap, long long) != 7LL) + __builtin_trap (); + return 9; +} + +__attribute__((noinline, noclone, optimize ("Os"))) +int +foo (const char *fmt, ...) +{ + va_list ap; + va_start (ap, fmt); + int r = bar (1, 2, 3, 4, fmt, ap); + va_end (ap); + return r; +} + +int +main () +{ + if (foo ("foo", 5, 6, 7LL) != 9) + __builtin_trap (); + return 0; +} -- cgit v1.2.3