summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/compile/20100915-1.c
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gcc.c-torture/compile/20100915-1.c
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/compile/20100915-1.c')
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20100915-1.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/compile/20100915-1.c b/gcc/testsuite/gcc.c-torture/compile/20100915-1.c
new file mode 100644
index 000000000..04f6ab0fd
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20100915-1.c
@@ -0,0 +1,82 @@
+/* PR rtl-optimization/45593 */
+/* Testcase by Arnaud Lacombe <lacombar@gmail.com> */
+
+typedef unsigned int __u32;
+typedef __u32 __be32;
+static inline __attribute__((always_inline)) int __attribute__((__cold__)) printk(const char *s, ...) { return 0; }
+typedef struct journal_s journal_t;
+typedef struct journal_header_s
+{
+ __be32 h_magic;
+ __be32 h_blocktype;
+ __be32 h_sequence;
+} journal_header_t;
+typedef struct journal_superblock_s
+{
+ journal_header_t s_header;
+ __be32 s_blocksize;
+ __be32 s_maxlen;
+} journal_superblock_t;
+struct journal_s
+{
+ struct buffer_head *j_sb_buffer;
+ journal_superblock_t *j_superblock;
+ int j_format_version;
+ int j_blocksize;
+ unsigned int j_maxlen;
+};
+static void journal_fail_superblock (journal_t *journal)
+{
+ journal->j_sb_buffer = ((void *)0);
+}
+static int journal_get_superblock(journal_t *journal)
+{
+ struct buffer_head *bh;
+ journal_superblock_t *sb;
+ int err = -100;
+ bh = journal->j_sb_buffer;
+ if (!buffer_uptodate(bh)) {
+ if (!buffer_uptodate(bh)) {
+ printk ("JBD: IO error reading journal superblock\n");
+ goto out;
+ }
+ }
+ err = -101;
+ if (sb->s_header.h_magic != (( __be32)(__u32)(0)) ||
+ sb->s_blocksize != (( __be32)(__u32)(journal->j_blocksize))) {
+ printk("JBD: no valid journal superblock found\n");
+ goto out;
+ }
+ switch((( __u32)(__be32)(sb->s_header.h_blocktype))) {
+ case 0:
+ case 1:
+ break;
+ default:
+ goto out;
+ }
+ if ((( __u32)(__be32)(sb->s_maxlen)) < journal->j_maxlen)
+ journal->j_maxlen = (( __u32)(__be32)(sb->s_maxlen));
+ else if ((( __u32)(__be32)(sb->s_maxlen)) > journal->j_maxlen) {
+ printk ("JBD: journal file too short\n");
+ goto out;
+ }
+ return 0;
+out:
+ journal_fail_superblock(journal);
+ return err;
+}
+static int load_superblock(journal_t *journal)
+{
+ journal_get_superblock(journal);
+ return 0;
+}
+int jbd2_journal_update_format (journal_t *journal)
+{
+ journal_get_superblock(journal);
+ return 0;
+}
+int jbd2_journal_wipe(journal_t *journal, int write)
+{
+ load_superblock(journal);
+ return 0;
+}