* gcc.c-torture/execute/frame-address.c: New test.
authorMaciej W. Rozycki <macro@linux-mips.org>
Thu, 25 Aug 2005 11:30:19 +0000 (11:30 +0000)
committerMaciej W. Rozycki <macro@gcc.gnu.org>
Thu, 25 Aug 2005 11:30:19 +0000 (11:30 +0000)
From-SVN: r103485

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/frame-address.c [new file with mode: 0644]

index dc238f754c6085db37abb8914486b8cd7f4873d3..9ec423454c666b0c6bc44b476a9631eb4739d056 100644 (file)
@@ -1,3 +1,7 @@
+2005-08-26  Maciej W. Rozycki  <macro@linux-mips.org>
+
+       * gcc.c-torture/execute/frame-address.c: New test.
+
 2005-08-25  Nathan Sidwell  <nathan@codesourcery.com>
 
        PR c++/20817
diff --git a/gcc/testsuite/gcc.c-torture/execute/frame-address.c b/gcc/testsuite/gcc.c-torture/execute/frame-address.c
new file mode 100644 (file)
index 0000000..bf9443c
--- /dev/null
@@ -0,0 +1,42 @@
+int check_fa_work (const char *, const char *) __attribute__((noinline));
+int check_fa_mid (const char *) __attribute__((noinline));
+int check_fa (char *) __attribute__((noinline));
+int how_much (void) __attribute__((noinline));
+
+int check_fa_work (const char *c, const char *f)
+{
+  const char d = 0;
+
+  if (c >= &d)
+    return c >= f && f >= &d;
+  else
+    return c <= f && f <= &d;
+}
+
+int check_fa_mid (const char *c)
+{
+  const char *f = __builtin_frame_address (0);
+
+  return check_fa_work (c, f);
+}
+
+int check_fa (char *unused)
+{
+  const char c = 0;
+
+  return check_fa_mid (&c);
+}
+
+int how_much (void)
+{
+       return 8;
+}
+
+int main (void)
+{
+  char *unused = __builtin_alloca (how_much ());
+
+  if (!check_fa(unused))
+    abort();
+  return 0;
+}