aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2005-03-22 03:43:39 +0000
committerHans-Peter Nilsson <hp@gcc.gnu.org>2005-03-22 03:43:39 +0000
commit9d7cb254255ee037f4b0852c661a5a5212353d1c (patch)
tree67bf2cc693e579dfcdba6f8f2928513b6d973993
parentfd8e4663196023cae674def241981b83a3faf612 (diff)
downloadgcc-9d7cb254255ee037f4b0852c661a5a5212353d1c.zip
gcc-9d7cb254255ee037f4b0852c661a5a5212353d1c.tar.gz
gcc-9d7cb254255ee037f4b0852c661a5a5212353d1c.tar.bz2
re PR rtl-optimization/20527 (Mishandling of postincrement causes bzip2 miscompilation.)
PR rtl-optimization/20527 * gcc.c-torture/execute/pr20527-1.c: New test. From-SVN: r96852
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr20527-1.c81
2 files changed, 86 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4c5939e..0a73ba3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-03-22 Hans-Peter Nilsson <hp@axis.com>
+
+ PR rtl-optimization/20527
+ * gcc.c-torture/execute/pr20527-1.c: New test.
+
2005-03-22 Ben Elliston <bje@au.ibm.com>
* gcc.misc-tests/options.exp (check_for_options): Create a real C
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr20527-1.c b/gcc/testsuite/gcc.c-torture/execute/pr20527-1.c
new file mode 100644
index 0000000..81162df
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr20527-1.c
@@ -0,0 +1,81 @@
+/* PR rtl-optimization/20527
+ Mishandled postincrement. This test-case is derived from the
+ function BZ2_hbCreateDecodeTables in the file huffman.c from
+ bzip2-1.0.2, hence requiring the following disclaimer copied here: */
+
+/*--
+ This file is a part of bzip2 and/or libbzip2, a program and
+ library for lossless, block-sorting data compression.
+
+ Copyright (C) 1996-2002 Julian R Seward. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. The origin of this software must not be misrepresented; you must
+ not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product
+ documentation would be appreciated but is not required.
+
+ 3. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+ 4. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ Julian Seward, Cambridge, UK.
+ jseward@acm.org
+ bzip2/libbzip2 version 1.0 of 21 March 2000
+
+ This program is based on (at least) the work of:
+ Mike Burrows
+ David Wheeler
+ Peter Fenwick
+ Alistair Moffat
+ Radford Neal
+ Ian H. Witten
+ Robert Sedgewick
+ Jon L. Bentley
+
+ For more information on these sources, see the manual.
+--*/
+
+void f (long *limit, long *base, long minLen, long maxLen) __attribute__ ((__noinline__));
+void f (long *limit, long *base, long minLen, long maxLen)
+{
+ long i;
+ long vec;
+ vec = 0;
+ for (i = minLen; i <= maxLen; i++) {
+ vec += (base[i+1] - base[i]);
+ limit[i] = vec-1;
+ }
+}
+extern void abort (void);
+extern void exit (int);
+long b[] = {1, 5, 11, 23};
+int main (void)
+{
+ long l[3];
+ f (l, b, 0, 2);
+ if (l[0] != 3 || l[1] != 9 || l[2] != 21)
+ abort ();
+ exit (0);
+}