Committed: fix MMIX LTO gcc.dg/torture/stackalign/builtin-return-1.c
Hans-Peter Nilsson
hp@bitrange.com
Sat Jun 7 00:04:00 GMT 2014
Apparently LTO improved or at least changed between r210000 and
r211121, such that memory outside the defined space was wrongly read
as "expected" for this test-case, corresponding to the wrongly
presumed stacked parameters. For a "normal" target this would
correspond to a SEGV. You'd need the memory-strictness change file (a
sort-of CWEB patch) from
<http://gcc.gnu.org/ml/gcc-patches/2012-10/msg01871.html> to see this
when testing with the mmixware mmix simulator:
Running /home/hp/gcctop/tmp/mbase1/gcc/gcc/testsuite/gcc.dg/torture/stackalign/stackalign.exp ...
FAIL: gcc.dg/torture/stackalign/builtin-return-1.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test
and in gcc.log:
spawn mmix ./builtin-return-1.exe
1. 00000000000003ec: 8d10fd20 (LDOI) $16=l[25] = M8[#16809fffffffffe0+32] = 0
198 instructions, 49 mems, 236 oops; 4 good guesses, 7 bad
(now at location #00000000000003f0)
(for the default Knuth ABI; but the error for the GNU ABI is similar)
This also annotates as fixed an age-old PR, though test has actually
been passing for some time after "Tue Nov 9 00:36:20 UTC 2004" (yes,
this was CVS time) and up-to-and-including at least r210000. I wrote
this fix when investigating fallout from the memory-strictness feature
mentioned above, but as this test didn't fail at that time, I didn't
apply it.
Committed.
PR target/18343
* gcc.dg/torture/stackalign/builtin-return-1.c (STACK_ARGUMENTS_SIZE):
New macro, 0 for __MMIX__, default 64.
(bar): Pass it to __builtin_apply instead of literal 64.
Index: gcc/testsuite/gcc.dg/torture/stackalign/builtin-return-1.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/stackalign/builtin-return-1.c (revision 211328)
+++ gcc/testsuite/gcc.dg/torture/stackalign/builtin-return-1.c (working copy)
@@ -5,6 +5,13 @@
/* This used to fail on SPARC because the (undefined) return
value of 'bar' was overwriting that of 'foo'. */
+#ifdef __MMIX__
+/* No parameters on stack for bar. */
+#define STACK_ARGUMENTS_SIZE 0
+#else
+#define STACK_ARGUMENTS_SIZE 64
+#endif
+
extern void abort(void);
int foo(int n)
@@ -14,7 +21,8 @@ int foo(int n)
int bar(int n)
{
- __builtin_return(__builtin_apply((void (*)(void))foo, __builtin_apply_args(), 64));
+ __builtin_return(__builtin_apply((void (*)(void))foo, __builtin_apply_args(),
+ STACK_ARGUMENTS_SIZE));
}
char *g;
brgds, H-P
More information about the Gcc-patches
mailing list