aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-08-08 18:42:21 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-08-08 18:42:21 +0200
commited14a50f8ff71d1b6c0ddaab9465b689482fff4d (patch)
treebf2a73e97267232ab1056cd94348889e8c9a45aa
parent77b4fdcada5f3cefdad3d5b6553763a504f06283 (diff)
parent9aa1c8656be5fee7394cb242a80d7ea8eed32385 (diff)
downloadsparse-ed14a50f8ff71d1b6c0ddaab9465b689482fff4d.tar.gz
Merge branch 'bad-shift-equal' into next
* fix type evaluation of shifts-assigns * don't warn for UB shifts in dead code
-rw-r--r--evaluate.c11
-rw-r--r--expand.c18
-rw-r--r--linearize.c44
-rw-r--r--simplify.c20
-rw-r--r--validation/expand/bad-shift.c8
-rw-r--r--validation/linear/bug-assign-op0.c1
-rw-r--r--validation/linear/shift-assign1.c319
-rw-r--r--validation/linear/shift-assign2.c53
-rw-r--r--validation/optim/shift-big.c12
-rw-r--r--validation/shift-negative.c4
-rw-r--r--validation/shift-undef-long.c7
-rw-r--r--validation/shift-undef.c52
12 files changed, 462 insertions, 87 deletions
diff --git a/evaluate.c b/evaluate.c
index dddea761..a9adc72f 100644
--- a/evaluate.c
+++ b/evaluate.c
@@ -1342,8 +1342,17 @@ static int evaluate_assign_op(struct expression *expr)
return 1;
} else if (op == SPECIAL_SHR_ASSIGN || op == SPECIAL_SHL_ASSIGN) {
// shifts do integer promotions, but that's it.
+ unrestrict(expr->left, tclass, &t);
+ target = integer_promotion(t);
+
unrestrict(expr->right, sclass, &s);
- target = integer_promotion(s);
+ source = integer_promotion(s);
+ expr->right = cast_to(expr->right, source);
+
+ // both gcc & clang seems to do this, so ...
+ if (target->bit_size > source->bit_size)
+ expr->right = cast_to(expr->right, &uint_ctype);
+
goto Cast;
} else if (!(sclass & TYPE_RESTRICT))
goto usual;
diff --git a/expand.c b/expand.c
index b0789331..623b1800 100644
--- a/expand.c
+++ b/expand.c
@@ -170,22 +170,6 @@ Float:
expr->type = EXPR_FVALUE;
}
-static void warn_shift_count(struct expression *expr, struct symbol *ctype, long long count)
-{
- if (count < 0) {
- if (!Wshift_count_negative)
- return;
- warning(expr->pos, "shift count is negative (%lld)", count);
- return;
- }
- if (ctype->type == SYM_NODE)
- ctype = ctype->ctype.base_type;
-
- if (!Wshift_count_overflow)
- return;
- warning(expr->pos, "shift too big (%llu) for type %s", count, show_typename(ctype));
-}
-
/* Return true if constant shift size is valid */
static bool check_shift_count(struct expression *expr, struct expression *right)
{
@@ -194,8 +178,6 @@ static bool check_shift_count(struct expression *expr, struct expression *right)
if (count >= 0 && count < ctype->bit_size)
return true;
- if (!conservative)
- warn_shift_count(expr, ctype, count);
return false;
}
diff --git a/linearize.c b/linearize.c
index 49274681..5a8e7497 100644
--- a/linearize.c
+++ b/linearize.c
@@ -2468,6 +2468,49 @@ static pseudo_t linearize_statement(struct entrypoint *ep, struct statement *stm
return VOID;
}
+static void check_tainted_insn(struct instruction *insn)
+{
+ unsigned long long uval;
+ long long sval;
+ pseudo_t src2;
+
+ switch (insn->opcode) {
+ case OP_DIVU: case OP_DIVS:
+ case OP_MODU: case OP_MODS:
+ if (insn->src2 == value_pseudo(0))
+ warning(insn->pos, "divide by zero");
+ break;
+ case OP_SHL: case OP_LSR: case OP_ASR:
+ src2 = insn->src2;
+ if (src2->type != PSEUDO_VAL)
+ break;
+ uval = src2->value;
+ if (uval < insn->size)
+ break;
+ sval = sign_extend(uval, insn->size);
+ if (Wshift_count_negative && sval < 0)
+ warning(insn->pos, "shift count is negative (%lld)", sval);
+ else if (Wshift_count_overflow)
+ warning(insn->pos, "shift too big (%llu) for type %s", uval, show_typename(insn->type));
+ }
+}
+
+///
+// issue warnings after all possible DCE
+static void late_warnings(struct entrypoint *ep)
+{
+ struct basic_block *bb;
+ FOR_EACH_PTR(ep->bbs, bb) {
+ struct instruction *insn;
+ FOR_EACH_PTR(bb->insns, insn) {
+ if (!insn->bb)
+ continue;
+ if (insn->tainted)
+ check_tainted_insn(insn);
+ } END_FOR_EACH_PTR(insn);
+ } END_FOR_EACH_PTR(bb);
+}
+
static struct entrypoint *linearize_fn(struct symbol *sym, struct symbol *base_type)
{
struct statement *stmt = base_type->stmt;
@@ -2514,6 +2557,7 @@ static struct entrypoint *linearize_fn(struct symbol *sym, struct symbol *base_t
add_one_insn(ep, ret);
optimize(ep);
+ late_warnings(ep);
return ep;
}
diff --git a/simplify.c b/simplify.c
index 7850bcdc..f6b79685 100644
--- a/simplify.c
+++ b/simplify.c
@@ -754,28 +754,18 @@ static long long check_shift_count(struct instruction *insn, unsigned long long
unsigned int size = insn->size;
long long sval = uval;
+ if (insn->tainted)
+ return -1;
+
if (uval < size)
return uval;
+ insn->tainted = 1;
sval = sign_extend_safe(sval, size);
sval = sign_extend_safe(sval, bits_in_int);
if (sval < 0)
insn->src2 = value_pseudo(sval);
- if (insn->tainted)
- return sval;
-
- if (sval < 0 && Wshift_count_negative)
- warning(insn->pos, "shift count is negative (%lld)", sval);
- if (sval > 0 && Wshift_count_overflow) {
- struct symbol *ctype = insn->type;
- const char *tname;
- if (ctype->type == SYM_NODE)
- ctype = ctype->ctype.base_type;
- tname = show_typename(ctype);
- warning(insn->pos, "shift too big (%llu) for type %s", sval, tname);
- }
- insn->tainted = 1;
- return sval;
+ return -1;
}
static int simplify_shift(struct instruction *insn, pseudo_t pseudo, long long value)
diff --git a/validation/expand/bad-shift.c b/validation/expand/bad-shift.c
index 22c4341f..b68866c2 100644
--- a/validation/expand/bad-shift.c
+++ b/validation/expand/bad-shift.c
@@ -56,9 +56,9 @@ rneg:
* check-output-end
*
* check-error-start
-expand/bad-shift.c:5:18: warning: shift too big (32) for type int
-expand/bad-shift.c:10:18: warning: shift count is negative (-1)
-expand/bad-shift.c:15:18: warning: shift too big (32) for type int
-expand/bad-shift.c:20:18: warning: shift count is negative (-1)
+expand/bad-shift.c:5:21: warning: shift too big (32) for type int
+expand/bad-shift.c:10:21: warning: shift count is negative (-1)
+expand/bad-shift.c:15:21: warning: shift too big (32) for type int
+expand/bad-shift.c:20:21: warning: shift count is negative (-1)
* check-error-end
*/
diff --git a/validation/linear/bug-assign-op0.c b/validation/linear/bug-assign-op0.c
index 0cabc622..b351bb51 100644
--- a/validation/linear/bug-assign-op0.c
+++ b/validation/linear/bug-assign-op0.c
@@ -46,7 +46,6 @@ unsigned int sldivu(unsigned int u, long s)
/*
* check-name: bug-assign-op0
* check-command: test-linearize -Wno-decl $file
- * check-known-to-fail
*
* check-output-start
asr:
diff --git a/validation/linear/shift-assign1.c b/validation/linear/shift-assign1.c
new file mode 100644
index 00000000..4c96fc28
--- /dev/null
+++ b/validation/linear/shift-assign1.c
@@ -0,0 +1,319 @@
+typedef __INT16_TYPE__ s16;
+typedef __INT32_TYPE__ s32;
+typedef __INT64_TYPE__ s64;
+typedef __UINT16_TYPE__ u16;
+typedef __UINT32_TYPE__ u32;
+typedef __UINT64_TYPE__ u64;
+
+s16 s16s16(s16 a, s16 b) { a >>= b; return a; }
+s16 s16s32(s16 a, s32 b) { a >>= b; return a; }
+s16 s16s64(s16 a, s64 b) { a >>= b; return a; }
+s16 s16u16(s16 a, u16 b) { a >>= b; return a; }
+s16 s16u32(s16 a, u32 b) { a >>= b; return a; }
+s16 s16u64(s16 a, u64 b) { a >>= b; return a; }
+s32 s32s16(s32 a, s16 b) { a >>= b; return a; }
+s32 s32s32(s32 a, s32 b) { a >>= b; return a; }
+s32 s32s64(s32 a, s64 b) { a >>= b; return a; }
+s32 s32u16(s32 a, u16 b) { a >>= b; return a; }
+s32 s32u32(s32 a, u32 b) { a >>= b; return a; }
+s32 s32u64(s32 a, u64 b) { a >>= b; return a; }
+s64 s64s16(s64 a, s16 b);
+s64 s64s32(s64 a, s32 b);
+s64 s64s64(s64 a, s64 b) { a >>= b; return a; }
+s64 s64u16(s64 a, u16 b) { a >>= b; return a; }
+s64 s64u32(s64 a, u32 b) { a >>= b; return a; }
+s64 s64u64(s64 a, u64 b) { a >>= b; return a; }
+u16 u16s16(u16 a, s16 b) { a >>= b; return a; }
+u16 u16s32(u16 a, s32 b) { a >>= b; return a; }
+u16 u16s64(u16 a, s64 b) { a >>= b; return a; }
+u16 u16u16(u16 a, u16 b) { a >>= b; return a; }
+u16 u16u32(u16 a, u32 b) { a >>= b; return a; }
+u16 u16u64(u16 a, u64 b) { a >>= b; return a; }
+u32 u32s16(u32 a, s16 b) { a >>= b; return a; }
+u32 u32s32(u32 a, s32 b) { a >>= b; return a; }
+u32 u32s64(u32 a, s64 b) { a >>= b; return a; }
+u32 u32u16(u32 a, u16 b) { a >>= b; return a; }
+u32 u32u32(u32 a, u32 b) { a >>= b; return a; }
+u32 u32u64(u32 a, u64 b) { a >>= b; return a; }
+u64 u64s16(u64 a, s16 b);
+u64 u64s32(u64 a, s32 b);
+u64 u64s64(u64 a, s64 b) { a >>= b; return a; }
+u64 u64u16(u64 a, u16 b) { a >>= b; return a; }
+u64 u64u32(u64 a, u32 b) { a >>= b; return a; }
+u64 u64u64(u64 a, u64 b) { a >>= b; return a; }
+
+/*
+ * check-name: shift-assign1
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-output-start
+s16s16:
+.L0:
+ <entry-point>
+ sext.32 %r2 <- (16) %arg2
+ sext.32 %r4 <- (16) %arg1
+ asr.32 %r5 <- %r4, %r2
+ trunc.16 %r6 <- (32) %r5
+ ret.16 %r6
+
+
+s16s32:
+.L2:
+ <entry-point>
+ sext.32 %r11 <- (16) %arg1
+ asr.32 %r12 <- %r11, %arg2
+ trunc.16 %r13 <- (32) %r12
+ ret.16 %r13
+
+
+s16s64:
+.L4:
+ <entry-point>
+ trunc.32 %r17 <- (64) %arg2
+ sext.32 %r19 <- (16) %arg1
+ asr.32 %r20 <- %r19, %r17
+ trunc.16 %r21 <- (32) %r20
+ ret.16 %r21
+
+
+s16u16:
+.L6:
+ <entry-point>
+ zext.32 %r25 <- (16) %arg2
+ sext.32 %r27 <- (16) %arg1
+ asr.32 %r28 <- %r27, %r25
+ trunc.16 %r29 <- (32) %r28
+ ret.16 %r29
+
+
+s16u32:
+.L8:
+ <entry-point>
+ sext.32 %r34 <- (16) %arg1
+ asr.32 %r35 <- %r34, %arg2
+ trunc.16 %r36 <- (32) %r35
+ ret.16 %r36
+
+
+s16u64:
+.L10:
+ <entry-point>
+ trunc.32 %r40 <- (64) %arg2
+ sext.32 %r42 <- (16) %arg1
+ asr.32 %r43 <- %r42, %r40
+ trunc.16 %r44 <- (32) %r43
+ ret.16 %r44
+
+
+s32s16:
+.L12:
+ <entry-point>
+ sext.32 %r48 <- (16) %arg2
+ asr.32 %r50 <- %arg1, %r48
+ ret.32 %r50
+
+
+s32s32:
+.L14:
+ <entry-point>
+ asr.32 %r55 <- %arg1, %arg2
+ ret.32 %r55
+
+
+s32s64:
+.L16:
+ <entry-point>
+ trunc.32 %r59 <- (64) %arg2
+ asr.32 %r61 <- %arg1, %r59
+ ret.32 %r61
+
+
+s32u16:
+.L18:
+ <entry-point>
+ zext.32 %r65 <- (16) %arg2
+ asr.32 %r67 <- %arg1, %r65
+ ret.32 %r67
+
+
+s32u32:
+.L20:
+ <entry-point>
+ asr.32 %r72 <- %arg1, %arg2
+ ret.32 %r72
+
+
+s32u64:
+.L22:
+ <entry-point>
+ trunc.32 %r76 <- (64) %arg2
+ asr.32 %r78 <- %arg1, %r76
+ ret.32 %r78
+
+
+s64s64:
+.L24:
+ <entry-point>
+ asr.64 %r83 <- %arg1, %arg2
+ ret.64 %r83
+
+
+s64u16:
+.L26:
+ <entry-point>
+ zext.64 %r88 <- (16) %arg2
+ asr.64 %r90 <- %arg1, %r88
+ ret.64 %r90
+
+
+s64u32:
+.L28:
+ <entry-point>
+ zext.64 %r94 <- (32) %arg2
+ asr.64 %r96 <- %arg1, %r94
+ ret.64 %r96
+
+
+s64u64:
+.L30:
+ <entry-point>
+ asr.64 %r101 <- %arg1, %arg2
+ ret.64 %r101
+
+
+u16s16:
+.L32:
+ <entry-point>
+ sext.32 %r105 <- (16) %arg2
+ zext.32 %r107 <- (16) %arg1
+ asr.32 %r108 <- %r107, %r105
+ trunc.16 %r109 <- (32) %r108
+ ret.16 %r109
+
+
+u16s32:
+.L34:
+ <entry-point>
+ zext.32 %r114 <- (16) %arg1
+ asr.32 %r115 <- %r114, %arg2
+ trunc.16 %r116 <- (32) %r115
+ ret.16 %r116
+
+
+u16s64:
+.L36:
+ <entry-point>
+ trunc.32 %r120 <- (64) %arg2
+ zext.32 %r122 <- (16) %arg1
+ asr.32 %r123 <- %r122, %r120
+ trunc.16 %r124 <- (32) %r123
+ ret.16 %r124
+
+
+u16u16:
+.L38:
+ <entry-point>
+ zext.32 %r128 <- (16) %arg2
+ zext.32 %r130 <- (16) %arg1
+ asr.32 %r131 <- %r130, %r128
+ trunc.16 %r132 <- (32) %r131
+ ret.16 %r132
+
+
+u16u32:
+.L40:
+ <entry-point>
+ zext.32 %r137 <- (16) %arg1
+ asr.32 %r138 <- %r137, %arg2
+ trunc.16 %r139 <- (32) %r138
+ ret.16 %r139
+
+
+u16u64:
+.L42:
+ <entry-point>
+ trunc.32 %r143 <- (64) %arg2
+ zext.32 %r145 <- (16) %arg1
+ asr.32 %r146 <- %r145, %r143
+ trunc.16 %r147 <- (32) %r146
+ ret.16 %r147
+
+
+u32s16:
+.L44:
+ <entry-point>
+ sext.32 %r151 <- (16) %arg2
+ lsr.32 %r153 <- %arg1, %r151
+ ret.32 %r153
+
+
+u32s32:
+.L46:
+ <entry-point>
+ lsr.32 %r158 <- %arg1, %arg2
+ ret.32 %r158
+
+
+u32s64:
+.L48:
+ <entry-point>
+ trunc.32 %r162 <- (64) %arg2
+ lsr.32 %r164 <- %arg1, %r162
+ ret.32 %r164
+
+
+u32u16:
+.L50:
+ <entry-point>
+ zext.32 %r168 <- (16) %arg2
+ lsr.32 %r170 <- %arg1, %r168
+ ret.32 %r170
+
+
+u32u32:
+.L52:
+ <entry-point>
+ lsr.32 %r175 <- %arg1, %arg2
+ ret.32 %r175
+
+
+u32u64:
+.L54:
+ <entry-point>
+ trunc.32 %r179 <- (64) %arg2
+ lsr.32 %r181 <- %arg1, %r179
+ ret.32 %r181
+
+
+u64s64:
+.L56:
+ <entry-point>
+ lsr.64 %r186 <- %arg1, %arg2
+ ret.64 %r186
+
+
+u64u16:
+.L58:
+ <entry-point>
+ zext.64 %r191 <- (16) %arg2
+ lsr.64 %r193 <- %arg1, %r191
+ ret.64 %r193
+
+
+u64u32:
+.L60:
+ <entry-point>
+ zext.64 %r197 <- (32) %arg2
+ lsr.64 %r199 <- %arg1, %r197
+ ret.64 %r199
+
+
+u64u64:
+.L62:
+ <entry-point>
+ lsr.64 %r204 <- %arg1, %arg2
+ ret.64 %r204
+
+
+ * check-output-end
+ */
diff --git a/validation/linear/shift-assign2.c b/validation/linear/shift-assign2.c
new file mode 100644
index 00000000..9990ac38
--- /dev/null
+++ b/validation/linear/shift-assign2.c
@@ -0,0 +1,53 @@
+typedef __INT16_TYPE__ s16;
+typedef __INT32_TYPE__ s32;
+typedef __INT64_TYPE__ s64;
+typedef __UINT16_TYPE__ u16;
+typedef __UINT32_TYPE__ u32;
+typedef __UINT64_TYPE__ u64;
+
+s64 s64s16(s64 a, s16 b) { a >>= b; return a; }
+s64 s64s32(s64 a, s32 b) { a >>= b; return a; }
+u64 u64s16(u64 a, s16 b) { a >>= b; return a; }
+u64 u64s32(u64 a, s32 b) { a >>= b; return a; }
+
+/*
+ * check-name: shift-assign2
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-output-start
+s64s16:
+.L0:
+ <entry-point>
+ sext.32 %r2 <- (16) %arg2
+ zext.64 %r3 <- (32) %r2
+ asr.64 %r5 <- %arg1, %r3
+ ret.64 %r5
+
+
+s64s32:
+.L2:
+ <entry-point>
+ zext.64 %r9 <- (32) %arg2
+ asr.64 %r11 <- %arg1, %r9
+ ret.64 %r11
+
+
+u64s16:
+.L4:
+ <entry-point>
+ sext.32 %r15 <- (16) %arg2
+ zext.64 %r16 <- (32) %r15
+ lsr.64 %r18 <- %arg1, %r16
+ ret.64 %r18
+
+
+u64s32:
+.L6:
+ <entry-point>
+ zext.64 %r22 <- (32) %arg2
+ lsr.64 %r24 <- %arg1, %r22
+ ret.64 %r24
+
+
+ * check-output-end
+ */
diff --git a/validation/optim/shift-big.c b/validation/optim/shift-big.c
index 84bcd2ce..e7bf22fe 100644
--- a/validation/optim/shift-big.c
+++ b/validation/optim/shift-big.c
@@ -50,13 +50,15 @@ lsr31:
lsr32:
.L8:
<entry-point>
- ret.32 $0
+ lsr.32 %r14 <- %arg1, $32
+ ret.32 %r14
lsr33:
.L10:
<entry-point>
- ret.32 $0
+ lsr.32 %r17 <- %arg1, $33
+ ret.32 %r17
shl31:
@@ -69,13 +71,15 @@ shl31:
shl32:
.L14:
<entry-point>
- ret.32 $0
+ shl.32 %r23 <- %arg1, $32
+ ret.32 %r23
shl33:
.L16:
<entry-point>
- ret.32 $0
+ shl.32 %r26 <- %arg1, $33
+ ret.32 %r26
* check-output-end
diff --git a/validation/shift-negative.c b/validation/shift-negative.c
index fff5cf12..6df02b18 100644
--- a/validation/shift-negative.c
+++ b/validation/shift-negative.c
@@ -9,8 +9,8 @@ unsigned int fo2(unsigned int a) { return a >> ((a & 0) ^ ~0); }
* check-command: sparse -Wno-decl $file
*
* check-error-start
-shift-negative.c:1:45: warning: shift count is negative (-1)
-shift-negative.c:2:45: warning: shift count is negative (-1)
+shift-negative.c:1:48: warning: shift count is negative (-1)
+shift-negative.c:2:48: warning: shift count is negative (-1)
shift-negative.c:4:59: warning: shift count is negative (-1)
shift-negative.c:5:59: warning: shift count is negative (-1)
* check-error-end
diff --git a/validation/shift-undef-long.c b/validation/shift-undef-long.c
index 32626743..985fe4c4 100644
--- a/validation/shift-undef-long.c
+++ b/validation/shift-undef-long.c
@@ -13,9 +13,8 @@ static unsigned very_big_shift(unsigned int a)
* check-command: sparse -m64 $file
*
* check-error-start
-shift-undef-long.c:4:16: warning: shift too big (4294967295) for type unsigned int
-shift-undef-long.c:5:16: warning: shift too big (4294967296) for type unsigned int
-shift-undef-long.c:6:16: warning: shift too big (4294967296) for type unsigned int
-shift-undef-long.c:7:16: warning: shift count is negative (-4294967296)
+shift-undef-long.c:4:25: warning: shift count is negative (-1)
+shift-undef-long.c:5:47: warning: shift too big (4294967296) for type unsigned int
+shift-undef-long.c:7:20: warning: shift count is negative (-4294967296)
* check-error-end
*/
diff --git a/validation/shift-undef.c b/validation/shift-undef.c
index 4e94fa23..0c7541e9 100644
--- a/validation/shift-undef.c
+++ b/validation/shift-undef.c
@@ -112,51 +112,27 @@ void hw_write(u32 val)
* check-command: sparse -Wno-decl $file
*
* check-error-start
-shift-undef.c:3:15: warning: shift too big (100) for type int
-shift-undef.c:4:15: warning: shift too big (101) for type unsigned int
-shift-undef.c:5:15: warning: shift too big (102) for type unsigned int
-shift-undef.c:6:15: warning: shift count is negative (-1)
-shift-undef.c:7:15: warning: shift count is negative (-2)
-shift-undef.c:8:15: warning: shift count is negative (-3)
-shift-undef.c:9:25: warning: shift too big (103) for type int
-shift-undef.c:10:25: warning: shift too big (104) for type unsigned int
-shift-undef.c:11:25: warning: shift too big (105) for type unsigned int
-shift-undef.c:12:25: warning: shift count is negative (-4)
-shift-undef.c:13:25: warning: shift count is negative (-5)
-shift-undef.c:14:25: warning: shift count is negative (-6)
-shift-undef.c:15:30: warning: shift too big (106) for type int
-shift-undef.c:16:30: warning: shift too big (107) for type unsigned int
-shift-undef.c:17:30: warning: shift too big (108) for type unsigned int
-shift-undef.c:18:30: warning: shift count is negative (-7)
-shift-undef.c:19:30: warning: shift count is negative (-8)
-shift-undef.c:20:30: warning: shift count is negative (-9)
+shift-undef.c:3:18: warning: shift too big (100) for type int
+shift-undef.c:4:18: warning: shift too big (101) for type unsigned int
+shift-undef.c:5:18: warning: shift too big (102) for type unsigned int
+shift-undef.c:6:19: warning: shift count is negative (-1)
+shift-undef.c:7:19: warning: shift count is negative (-2)
+shift-undef.c:8:19: warning: shift count is negative (-3)
shift-undef.c:21:29: warning: shift too big (109) for type int
shift-undef.c:22:29: warning: shift too big (110) for type unsigned int
shift-undef.c:23:29: warning: shift too big (111) for type unsigned int
shift-undef.c:24:29: warning: shift count is negative (-10)
shift-undef.c:25:29: warning: shift count is negative (-11)
shift-undef.c:26:29: warning: shift count is negative (-12)
-shift-undef.c:32:11: warning: shift too big (100) for type int
-shift-undef.c:33:11: warning: shift too big (101) for type unsigned int
-shift-undef.c:34:11: warning: shift too big (102) for type unsigned int
-shift-undef.c:35:11: warning: shift count is negative (-1)
-shift-undef.c:36:11: warning: shift count is negative (-2)
-shift-undef.c:37:11: warning: shift count is negative (-3)
-shift-undef.c:38:25: warning: shift too big (103) for type int
-shift-undef.c:39:25: warning: shift too big (104) for type unsigned int
-shift-undef.c:40:25: warning: shift too big (105) for type unsigned int
-shift-undef.c:41:25: warning: shift count is negative (-4)
-shift-undef.c:42:25: warning: shift count is negative (-5)
-shift-undef.c:43:25: warning: shift count is negative (-6)
-shift-undef.c:44:30: warning: shift too big (106) for type int
-shift-undef.c:45:30: warning: shift too big (107) for type unsigned int
-shift-undef.c:46:30: warning: shift too big (108) for type unsigned int
-shift-undef.c:47:30: warning: shift count is negative (-7)
-shift-undef.c:48:30: warning: shift count is negative (-8)
-shift-undef.c:49:30: warning: shift count is negative (-9)
+shift-undef.c:32:15: warning: shift too big (100) for type int
+shift-undef.c:33:15: warning: shift too big (101) for type unsigned int
+shift-undef.c:34:15: warning: shift too big (102) for type unsigned int
+shift-undef.c:35:16: warning: shift count is negative (-1)
+shift-undef.c:36:16: warning: shift count is negative (-2)
+shift-undef.c:37:16: warning: shift count is negative (-3)
shift-undef.c:50:26: warning: shift too big (109) for type int
-shift-undef.c:51:26: warning: shift too big (110) for type int
-shift-undef.c:52:26: warning: shift too big (111) for type int
+shift-undef.c:51:26: warning: shift too big (110) for type unsigned int
+shift-undef.c:52:26: warning: shift too big (111) for type unsigned int
shift-undef.c:53:26: warning: shift count is negative (-10)
shift-undef.c:54:26: warning: shift count is negative (-11)
shift-undef.c:55:26: warning: shift count is negative (-12)