diff options
author | Zack Weinberg <zack@gcc.gnu.org> | 2001-09-10 16:21:29 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 2001-09-10 16:21:29 +0000 |
commit | 428a1c1c9a3950daccf49cc789983217d3731b89 (patch) | |
tree | 499b185eac194c04b01441ccf60ef614080695b7 /gcc | |
parent | 402209ff48d3e1984111c536033aa638f4271531 (diff) | |
download | gcc-428a1c1c9a3950daccf49cc789983217d3731b89.zip gcc-428a1c1c9a3950daccf49cc789983217d3731b89.tar.gz gcc-428a1c1c9a3950daccf49cc789983217d3731b89.tar.bz2 |
New test case (2.95.2 miscompilation)
From-SVN: r45505
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20010910-1.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/20010910-1.c b/gcc/testsuite/gcc.c-torture/execute/20010910-1.c new file mode 100644 index 0000000..185e29d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20010910-1.c @@ -0,0 +1,59 @@ +/* Test case contributed by Ingo Rohloff <rohloff@in.tum.de>. + Code distilled from Linux kernel. */ + +/* Compile this program with a gcc-2.95.2 using + "gcc -O2" and run it. The result will be that + rx_ring[1].next == 0 (it should be == 14) + and + ep.skbuff[4] == 5 (it should be 0) +*/ + +extern void abort(void); + +struct epic_rx_desc +{ + unsigned int next; +}; + +struct epic_private +{ + struct epic_rx_desc *rx_ring; + unsigned int rx_skbuff[5]; +}; + +static void epic_init_ring(struct epic_private *ep) +{ + int i; + + for (i = 0; i < 5; i++) + { + ep->rx_ring[i].next = 10 + (i+1)*2; + ep->rx_skbuff[i] = 0; + } + ep->rx_ring[i-1].next = 10; +} + +static int check_rx_ring[5] = { 12,14,16,18,10 }; + +int main(void) +{ + struct epic_private ep; + struct epic_rx_desc rx_ring[5]; + int i; + + for (i=0;i<5;i++) + { + rx_ring[i].next=0; + ep.rx_skbuff[i]=5; + } + + ep.rx_ring=rx_ring; + epic_init_ring(&ep); + + for (i=0;i<5;i++) + { + if ( rx_ring[i].next != check_rx_ring[i] ) abort(); + if ( ep.rx_skbuff[i] != 0 ) abort(); + } + return 0; +} |