From patchwork Thu Aug 6 19:30:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Van Oostenryck X-Patchwork-Id: 11704221 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C1B83722 for ; Thu, 6 Aug 2020 19:30:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E0632221E2 for ; Thu, 6 Aug 2020 19:30:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GQh3dD/5" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726149AbgHFTaS (ORCPT ); Thu, 6 Aug 2020 15:30:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39930 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726094AbgHFTaO (ORCPT ); Thu, 6 Aug 2020 15:30:14 -0400 Received: from mail-ej1-x643.google.com (mail-ej1-x643.google.com [IPv6:2a00:1450:4864:20::643]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 77663C061575 for ; Thu, 6 Aug 2020 12:30:14 -0700 (PDT) Received: by mail-ej1-x643.google.com with SMTP id bo3so28929544ejb.11 for ; Thu, 06 Aug 2020 12:30:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wZslePevwSmioJ7GTGkmCwPvlwBj/kAAW6kWIRI8ZTk=; b=GQh3dD/5LqmaYzs6lkapESGRmMJJ5KVVz23noeqy/W31PIy1/C62ByH2zXDCGakYVe kzQNhT7EZHqdAXCZSwu30Za/zp0rQgckgWGLdpVFy4XAiXroswYlqKCz5UzU7xGlCth3 bgl9KuJardK7ysu0/EfTfpvk2fbb9UgRBwgct6JI0sdsddg4BgXw7U63cNkO9oDweWLp q8lZvTf71cp5uITSTd/p9hfm9tkyzODCrlY1KbUMsa0dpavp2elwEAbSWvHbsOc2OEPr tyolKoD5n9vgYy53BCr7jaRcKStQ2FkF3Fd53GKTlOrnCVfGw6qtRQwShXK45dy6THN3 3zsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wZslePevwSmioJ7GTGkmCwPvlwBj/kAAW6kWIRI8ZTk=; b=P61yiXFprRrAdu4ePjn21W2j0Juf59zgA7ziD3jc3qqg0Xow1wTzNw7g4oj424YwqO l+wFH1fpZWwAujCANgE8Nv98lZNV+qolBaZPtHPQA9S6jRFJBMUM2fKaMjB580sTF7ZR mGimOdcDysT4NqPdaZOQv9bqtfZDHteGCAL4bapD3TT83h9Lqtmic/Xnnk7/cOMYQmGm t3dE5UjIKszvhyRb/tPqV9Km4XjTbOY/WDgKI8r31TZJZyCyLJhPkYLIGeR2hhvDPbDf gfdh/ocXrZY7lpkMyGzw/VqfF0AUBZRg/FUdqtVhN+abhYpHokMx/JypJs+eYhda7mNq JQVg== X-Gm-Message-State: AOAM530zxvosQCUBZvD+me9soLJrjWFhdbzbAvt0++/X+sbT/OiUlNZC hA0aGUwbylfbiWMSSgcZMz7DS6W9 X-Google-Smtp-Source: ABdhPJwubURbdx6vHtU86xAb8D76vAJsZYwZka9XE3M3VZd+VC4YigTdeZgBs2cG8mgTZgFS+TWNuw== X-Received: by 2002:a17:907:94ce:: with SMTP id dn14mr5738581ejc.351.1596742212687; Thu, 06 Aug 2020 12:30:12 -0700 (PDT) Received: from localhost.localdomain ([2a02:a03f:a7fb:e200:d567:ec52:e0a5:f485]) by smtp.gmail.com with ESMTPSA id t19sm4055972edw.63.2020.08.06.12.30.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Aug 2020 12:30:12 -0700 (PDT) From: Luc Van Oostenryck To: linux-sparse@vger.kernel.org Cc: Stafford Horne , Luc Van Oostenryck Subject: [PATCH 1/4] shift-assign: add more testcases for bogus linearization Date: Thu, 6 Aug 2020 21:30:00 +0200 Message-Id: <20200806193003.10144-2-luc.vanoostenryck@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200806193003.10144-1-luc.vanoostenryck@gmail.com> References: <20200806193003.10144-1-luc.vanoostenryck@gmail.com> MIME-Version: 1.0 Sender: linux-sparse-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sparse@vger.kernel.org The usual conversions must not be applied to shifts. This causes problems for shift-assigns. So, add testcases for all combinations of size and signedness. Signed-off-by: Luc Van Oostenryck --- validation/linear/shift-assign1.c | 320 ++++++++++++++++++++++++++++++ validation/linear/shift-assign2.c | 54 +++++ 2 files changed, 374 insertions(+) diff --git a/validation/linear/shift-assign1.c b/validation/linear/shift-assign1.c new file mode 100644 index 000000000000..9b3137bb2d04 --- /dev/null +++ b/validation/linear/shift-assign1.c @@ -0,0 +1,320 @@ +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-known-to-fail + * + * check-output-start +s16s16: +.L0: + + 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: + + sext.32 %r11 <- (16) %arg1 + asr.32 %r12 <- %r11, %arg2 + trunc.16 %r13 <- (32) %r12 + ret.16 %r13 + + +s16s64: +.L4: + + 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: + + 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: + + sext.32 %r34 <- (16) %arg1 + asr.32 %r35 <- %r34, %arg2 + trunc.16 %r36 <- (32) %r35 + ret.16 %r36 + + +s16u64: +.L10: + + 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: + + sext.32 %r48 <- (16) %arg2 + asr.32 %r50 <- %arg1, %r48 + ret.32 %r50 + + +s32s32: +.L14: + + asr.32 %r55 <- %arg1, %arg2 + ret.32 %r55 + + +s32s64: +.L16: + + trunc.32 %r59 <- (64) %arg2 + asr.32 %r61 <- %arg1, %r59 + ret.32 %r61 + + +s32u16: +.L18: + + zext.32 %r65 <- (16) %arg2 + asr.32 %r67 <- %arg1, %r65 + ret.32 %r67 + + +s32u32: +.L20: + + asr.32 %r72 <- %arg1, %arg2 + ret.32 %r72 + + +s32u64: +.L22: + + trunc.32 %r76 <- (64) %arg2 + asr.32 %r78 <- %arg1, %r76 + ret.32 %r78 + + +s64s64: +.L24: + + asr.64 %r83 <- %arg1, %arg2 + ret.64 %r83 + + +s64u16: +.L26: + + zext.64 %r88 <- (16) %arg2 + asr.64 %r90 <- %arg1, %r88 + ret.64 %r90 + + +s64u32: +.L28: + + zext.64 %r94 <- (32) %arg2 + asr.64 %r96 <- %arg1, %r94 + ret.64 %r96 + + +s64u64: +.L30: + + asr.64 %r101 <- %arg1, %arg2 + ret.64 %r101 + + +u16s16: +.L32: + + 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: + + zext.32 %r114 <- (16) %arg1 + asr.32 %r115 <- %r114, %arg2 + trunc.16 %r116 <- (32) %r115 + ret.16 %r116 + + +u16s64: +.L36: + + 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: + + 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: + + zext.32 %r137 <- (16) %arg1 + asr.32 %r138 <- %r137, %arg2 + trunc.16 %r139 <- (32) %r138 + ret.16 %r139 + + +u16u64: +.L42: + + 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: + + sext.32 %r151 <- (16) %arg2 + lsr.32 %r153 <- %arg1, %r151 + ret.32 %r153 + + +u32s32: +.L46: + + lsr.32 %r158 <- %arg1, %arg2 + ret.32 %r158 + + +u32s64: +.L48: + + trunc.32 %r162 <- (64) %arg2 + lsr.32 %r164 <- %arg1, %r162 + ret.32 %r164 + + +u32u16: +.L50: + + zext.32 %r168 <- (16) %arg2 + lsr.32 %r170 <- %arg1, %r168 + ret.32 %r170 + + +u32u32: +.L52: + + lsr.32 %r175 <- %arg1, %arg2 + ret.32 %r175 + + +u32u64: +.L54: + + trunc.32 %r179 <- (64) %arg2 + lsr.32 %r181 <- %arg1, %r179 + ret.32 %r181 + + +u64s64: +.L56: + + lsr.64 %r186 <- %arg1, %arg2 + ret.64 %r186 + + +u64u16: +.L58: + + zext.64 %r191 <- (16) %arg2 + lsr.64 %r193 <- %arg1, %r191 + ret.64 %r193 + + +u64u32: +.L60: + + zext.64 %r197 <- (32) %arg2 + lsr.64 %r199 <- %arg1, %r197 + ret.64 %r199 + + +u64u64: +.L62: + + 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 000000000000..30d74376478e --- /dev/null +++ b/validation/linear/shift-assign2.c @@ -0,0 +1,54 @@ +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-known-to-fail + * + * check-output-start +s64s16: +.L0: + + sext.32 %r2 <- (16) %arg2 + zext.64 %r3 <- (32) %r2 + asr.64 %r5 <- %arg1, %r3 + ret.64 %r5 + + +s64s32: +.L2: + + zext.64 %r9 <- (32) %arg2 + asr.64 %r11 <- %arg1, %r9 + ret.64 %r11 + + +u64s16: +.L4: + + sext.32 %r15 <- (16) %arg2 + zext.64 %r16 <- (32) %r15 + lsr.64 %r18 <- %arg1, %r16 + ret.64 %r18 + + +u64s32: +.L6: + + zext.64 %r22 <- (32) %arg2 + lsr.64 %r24 <- %arg1, %r22 + ret.64 %r24 + + + * check-output-end + */ From patchwork Thu Aug 6 19:30:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Van Oostenryck X-Patchwork-Id: 11704223 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A5878722 for ; Thu, 6 Aug 2020 19:30:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CC49B221E2 for ; Thu, 6 Aug 2020 19:30:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Zt3B+GwP" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726150AbgHFTaT (ORCPT ); Thu, 6 Aug 2020 15:30:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39938 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725947AbgHFTaQ (ORCPT ); Thu, 6 Aug 2020 15:30:16 -0400 Received: from mail-ej1-x644.google.com (mail-ej1-x644.google.com [IPv6:2a00:1450:4864:20::644]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 44EC6C061574 for ; Thu, 6 Aug 2020 12:30:15 -0700 (PDT) Received: by mail-ej1-x644.google.com with SMTP id qc22so36764125ejb.4 for ; Thu, 06 Aug 2020 12:30:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GUZCXYhBI7nSEt0QAVwDSenAQwrjEfDyuqtcIQc46tg=; b=Zt3B+GwPxpilChZbuRyUK54KbnCIl3l5m0qiOXx0KuzJ3/YRoVgBPbcdTbU7scf19z HrICWlmv+vWXmpKvv3waSE8G+TM5e35Ie5p41jXWP2no2C0BLdbtRWmS2SkHaI5Lb/NL Olrk/uRaqNWdCdPwo1KrPqFRqUR16pnkSO2l3b2vTgXKk4adRepvqwkN09RE5eY4dSwJ qEhjPgiUnkmj/s+1oJnOLgGEQR3vS/54wyTGUeI3YRNyEHE6ZyTNH6SVUWTqhNZvwcMF VySspu2s01WXBYwI6tmxeTFiolJZFCJA3Zia8vXAmeMeciyt3R1J9lqd0C4wwpZMf59l QoOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GUZCXYhBI7nSEt0QAVwDSenAQwrjEfDyuqtcIQc46tg=; b=EzEUoue8DzelVl+q+o8lMsYkqf/agsG9fjnyg3kRKP2RlB7KB61KLD3t8NOLixS9W6 N2uOeACcvK2ow5f46X0LrhcHU2b77cc12uYWfK9Cpd9kd/UmOtIV2L4vHposlVNt1ECT lhHbVgJyXfte5kIn+LCef6XgsxanrFLi8Tg8PcQ00SgTrjJimUDrhVSo9hXQeALUs09K LlCyPwFV1jBsDpvHPELhmbjU57W9BqTMfUFYnalcwBJRBQW+dt5ptsJgeGGjHry3hNi3 P2ie5CVJ1pSakWizaUDfwneSFUu5QJf/yHnjXcgZrt1L+qKQjD8ewGYjFLpVyk98Zi0P aMrg== X-Gm-Message-State: AOAM5302uCK1NXw5yJlIvz4tKOocaZs38NJfBz9Fb4jrZqMDroz60oyM nzgMXeoaf1urWomn854yUcrdJTGa X-Google-Smtp-Source: ABdhPJzntug+v3kwQfxIWKVChZJVvTxRPQFMBu7e4mWYjUQGMizSwl8cBS7MISJ+X0wDrs+fyNq1eA== X-Received: by 2002:a17:906:aac6:: with SMTP id kt6mr5727730ejb.475.1596742213703; Thu, 06 Aug 2020 12:30:13 -0700 (PDT) Received: from localhost.localdomain ([2a02:a03f:a7fb:e200:d567:ec52:e0a5:f485]) by smtp.gmail.com with ESMTPSA id t19sm4055972edw.63.2020.08.06.12.30.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Aug 2020 12:30:13 -0700 (PDT) From: Luc Van Oostenryck To: linux-sparse@vger.kernel.org Cc: Stafford Horne , Luc Van Oostenryck Subject: [PATCH 2/4] shift-assign: fix linearization of shift-assign Date: Thu, 6 Aug 2020 21:30:01 +0200 Message-Id: <20200806193003.10144-3-luc.vanoostenryck@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200806193003.10144-1-luc.vanoostenryck@gmail.com> References: <20200806193003.10144-1-luc.vanoostenryck@gmail.com> MIME-Version: 1.0 Sender: linux-sparse-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sparse@vger.kernel.org The result of a shift-assigns has the same type as the left operand but the shift itself must be done on the promoted type. The usual conversions are not done for shifts. The problem is that this promoted type is not stored explicitly in the data structure. This is specific to shift-assigns because for other operations, for example add-assign, the usual conversions must be done and the resulting type can be found on the RHS. Since at linearization, the LHS and the RHS must have the same type, the solution is to cast the RHS to LHS's promoted type during evaluation. This solve a bunch of problems with shift-assigns, like doing logical shift when an arithmetic shift was needed. Fixes: efdefb100d086aaabf20d475c3d1a65cbceeb534 Signed-off-by: Luc Van Oostenryck --- evaluate.c | 6 +++++- validation/linear/bug-assign-op0.c | 1 - validation/linear/shift-assign1.c | 1 - validation/shift-undef.c | 16 ++++++++-------- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/evaluate.c b/evaluate.c index dddea76182ad..6d8ecd7f6c25 100644 --- a/evaluate.c +++ b/evaluate.c @@ -1342,8 +1342,12 @@ 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); goto Cast; } else if (!(sclass & TYPE_RESTRICT)) goto usual; diff --git a/validation/linear/bug-assign-op0.c b/validation/linear/bug-assign-op0.c index 0cabc6222b8a..b351bb5149be 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 index 9b3137bb2d04..4c96fc283121 100644 --- a/validation/linear/shift-assign1.c +++ b/validation/linear/shift-assign1.c @@ -45,7 +45,6 @@ u64 u64u64(u64 a, u64 b) { a >>= b; return a; } /* * check-name: shift-assign1 * check-command: test-linearize -Wno-decl $file - * check-known-to-fail * * check-output-start s16s16: diff --git a/validation/shift-undef.c b/validation/shift-undef.c index 4e94fa23d122..613c6b95b113 100644 --- a/validation/shift-undef.c +++ b/validation/shift-undef.c @@ -140,23 +140,23 @@ 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:36:11: warning: shift too big (4294967294) for type unsigned int +shift-undef.c:37:11: warning: shift too big (4294967293) for type unsigned int 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:42:25: warning: shift too big (4294967291) for type unsigned int +shift-undef.c:43:25: warning: shift too big (4294967290) for type unsigned int 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:48:30: warning: shift too big (4294967288) for type unsigned int +shift-undef.c:49:30: warning: shift too big (4294967287) for type unsigned int 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) From patchwork Thu Aug 6 19:30:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Van Oostenryck X-Patchwork-Id: 11704225 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 360171392 for ; Thu, 6 Aug 2020 19:30:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5E7682177B for ; Thu, 6 Aug 2020 19:30:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="c+4qFtbn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726166AbgHFTaU (ORCPT ); Thu, 6 Aug 2020 15:30:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39930 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726131AbgHFTaS (ORCPT ); Thu, 6 Aug 2020 15:30:18 -0400 Received: from mail-ej1-x642.google.com (mail-ej1-x642.google.com [IPv6:2a00:1450:4864:20::642]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 42135C061756 for ; Thu, 6 Aug 2020 12:30:17 -0700 (PDT) Received: by mail-ej1-x642.google.com with SMTP id kq25so38597822ejb.3 for ; Thu, 06 Aug 2020 12:30:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n5gINhC93RtqUZgvecGvrwdyhe1McBasM8u/as0xh30=; b=c+4qFtbniE2HzJ/QujMP1QQXvPaKY+cyBHvoAbEmh3e8UK5xdqPgMF11VUJPNlHTxv 9vsfuyrPvwWKMqpPRjTXF3DuPA5ya0cw+b5ivDE2+9by21cvTawM2eek4bRhIKdJJXEr 6HX4jNNtdMjF0NCh3U1NZQ34H/yags+JMfr95whXHJ+gRx9562UZ/LSyPp2VVSxrbvj1 rx2EFeYspFrLWwFiJHArdA0TiU83NnPaDxCDv05DXeyqjldB5wrs4yv3l+AxhzR3bk8G oCrMBoapEDSXoL08+8pLNvil0482RAhWXquSBGwH5dzW2HG3sIWM5S6cV7oNwwdKBq/F Pxig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=n5gINhC93RtqUZgvecGvrwdyhe1McBasM8u/as0xh30=; b=BkexlQ9O0Uzu3hewoTbqJr/DGAvoitSX++HNkTBxwDjRkW5WAUYEevc7EMwgyadr26 +VWrVzHtJcC4ANyHXhOa1BM7UHVpVjLAMZDUv/VSbAFcpbszxQ5GAbinKzQvkX+5hM1L wogsWp9fXnkpgERXDpkSkYZ2LMNMbo1ssnflwqrtQyvFT+UTZA01X4TJP+wmj1ejCAmG pdK4yg1sIpNzb6yJ1ZQiZBDG6RBQ7+RVHa/R4sNvYU1tNxIYJsRNdvABnRrIhV9NMi4x iy4T0hxQcrGMigW7kb4zUoZ9SU92I7ha9wIQqy6rtE4P59U0zmKKp7VI04EEQnG36d73 ttTQ== X-Gm-Message-State: AOAM532l+A/lEMYJFm/lwPiN233SmDnKnQbPJzk/PxNFyJ0AqiFHfzcB 9O2quSYe6SrGbQC/wIa7ZFGSjaGk X-Google-Smtp-Source: ABdhPJz5JUt2lHa7oURVgvMrLx5byd2NXWNCTNhJYgBYwe2KMrLo6WLE5G4y1DN5G0lAF+u0+6jgzw== X-Received: by 2002:a17:906:269a:: with SMTP id t26mr5888328ejc.286.1596742215725; Thu, 06 Aug 2020 12:30:15 -0700 (PDT) Received: from localhost.localdomain ([2a02:a03f:a7fb:e200:d567:ec52:e0a5:f485]) by smtp.gmail.com with ESMTPSA id t19sm4055972edw.63.2020.08.06.12.30.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Aug 2020 12:30:14 -0700 (PDT) From: Luc Van Oostenryck To: linux-sparse@vger.kernel.org Cc: Stafford Horne , Luc Van Oostenryck Subject: [PATCH 3/4] shift-assign: restrict shift count to unsigned int Date: Thu, 6 Aug 2020 21:30:02 +0200 Message-Id: <20200806193003.10144-4-luc.vanoostenryck@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200806193003.10144-1-luc.vanoostenryck@gmail.com> References: <20200806193003.10144-1-luc.vanoostenryck@gmail.com> MIME-Version: 1.0 Sender: linux-sparse-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sparse@vger.kernel.org After the RHS of shift-assigns had been integer-promoted, both gcc & clang seems to restrict it to an unsigned int. This only make a difference when the shift count is negative and would it make it UB. Better to have the same generated code, so make the same here. Signed-off-by: Luc Van Oostenryck --- evaluate.c | 5 +++++ validation/linear/shift-assign2.c | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/evaluate.c b/evaluate.c index 6d8ecd7f6c25..a9adc72f6b57 100644 --- a/evaluate.c +++ b/evaluate.c @@ -1348,6 +1348,11 @@ static int evaluate_assign_op(struct expression *expr) unrestrict(expr->right, sclass, &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/validation/linear/shift-assign2.c b/validation/linear/shift-assign2.c index 30d74376478e..9990ac38e800 100644 --- a/validation/linear/shift-assign2.c +++ b/validation/linear/shift-assign2.c @@ -13,7 +13,6 @@ u64 u64s32(u64 a, s32 b) { a >>= b; return a; } /* * check-name: shift-assign2 * check-command: test-linearize -Wno-decl $file - * check-known-to-fail * * check-output-start s64s16: From patchwork Thu Aug 6 19:30:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Van Oostenryck X-Patchwork-Id: 11704227 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 65C45722 for ; Thu, 6 Aug 2020 19:30:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 886DD221E2 for ; Thu, 6 Aug 2020 19:30:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="k+4V5bGO" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726186AbgHFTaV (ORCPT ); Thu, 6 Aug 2020 15:30:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39938 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726094AbgHFTaT (ORCPT ); Thu, 6 Aug 2020 15:30:19 -0400 Received: from mail-ej1-x641.google.com (mail-ej1-x641.google.com [IPv6:2a00:1450:4864:20::641]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 75865C061575 for ; Thu, 6 Aug 2020 12:30:18 -0700 (PDT) Received: by mail-ej1-x641.google.com with SMTP id qc22so36764289ejb.4 for ; Thu, 06 Aug 2020 12:30:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=P3toaiAXWSRg1V40XEAMY9VoV+SxBbxF4Ent4O1/qEE=; b=k+4V5bGOT9HV+FUhzk4Ldi9Z7lS/T51lOO7qbwrwStU1PzT7z0pb/P0XOZtfGUHiza vEl85U1JgtgPGNzHHbrjUIT8MMEHZZgUQhOmecu79943qVE97GWfteGwKPI4Ev0uoH16 DAUtJeC5S9hYI6u4ppcANk7JMjsk5jVgUva1jV/mZtKHczMPy3Q450aIAtO+GJouoUxM j8C0Dfx8qDpSP+ATTUhpaVitNCqdcECHS4Pnas5+0ifmn4s3jRUy8VbVNto29ROqlgIk y6i3aGkhFiymTyVy3qsyIgzAZCFh8sSxITgw2YU3QDT0d5NfwRvYQJb9C9EC/e3ZXkGi 7Tuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=P3toaiAXWSRg1V40XEAMY9VoV+SxBbxF4Ent4O1/qEE=; b=L+pyVUmyZ0I9grfQcUCkddCm3dsGWuCnBBP1xWkInJnioW6PRZ5JvYdxppLCxOp7xO 43E2vbkeJqWG0zg1IWKgPoyVFzGQcnKKGP17SIcr4XaJCKm+1xnrvoFuIni+AtNhG9CW rdW958NilyXjO6ZGb8Mlx7r9J7GESjD5hMG8Z8KrKy6bVrVqaALrUGLvCkpyLsao5NPx fpA4V844S26CAyPAAOvRdHOTZxcK8mS5BNgcicnJ6rqUrApx2XFGsszWxlcQwZ5blCwI R2LIsUGdlNJnPIIdSGh+X7oRg9d9CsMofkfIKB1Znjx8Q5j0ryY63X++wIy6KTJCtyaI 5d3w== X-Gm-Message-State: AOAM5315/P7IAiuT1OnWDfLdTZtqNV5LSF1TzlJE6wh46QRRbhYTxPF4 BqF+XPNDZfABfjPLTGCnk+w1+Dkh X-Google-Smtp-Source: ABdhPJxQ2YqfQEgxtzbjOA2hgMhQuZhtodti/U1LkSUUfRTrMpajTPaJXFpOPD/HiI1yRhjV9dmo6g== X-Received: by 2002:a17:906:1911:: with SMTP id a17mr5508484eje.431.1596742216588; Thu, 06 Aug 2020 12:30:16 -0700 (PDT) Received: from localhost.localdomain ([2a02:a03f:a7fb:e200:d567:ec52:e0a5:f485]) by smtp.gmail.com with ESMTPSA id t19sm4055972edw.63.2020.08.06.12.30.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Aug 2020 12:30:16 -0700 (PDT) From: Luc Van Oostenryck To: linux-sparse@vger.kernel.org Cc: Stafford Horne , Luc Van Oostenryck Subject: [PATCH 4/4] bad-shift: wait dead code elimination to warn about bad shifts Date: Thu, 6 Aug 2020 21:30:03 +0200 Message-Id: <20200806193003.10144-5-luc.vanoostenryck@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200806193003.10144-1-luc.vanoostenryck@gmail.com> References: <20200806193003.10144-1-luc.vanoostenryck@gmail.com> MIME-Version: 1.0 Sender: linux-sparse-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sparse@vger.kernel.org Sparse complains when a shift amount is too big for the size of its operand or if it's negative. However, it does this even for expressions that are never evaluated. It's especially annoying in the kernel for type generic macros, for example the ones in arch/*/include/asm/cmpxchg.h So, remove all warnings done at expansion time and avoid any simplifications of such expressions. Same, at linearization and optimization time but in this case mark the instructions as 'tainted' to inhibit any further simplifications. Finally, at the end of the optimization phase, warn for the tainted instructions. Signed-off-by: Luc Van Oostenryck --- expand.c | 18 ------------- linearize.c | 44 ++++++++++++++++++++++++++++++++ simplify.c | 20 ++++----------- validation/expand/bad-shift.c | 8 +++--- validation/optim/shift-big.c | 12 ++++++--- validation/shift-negative.c | 4 +-- validation/shift-undef-long.c | 7 +++-- validation/shift-undef.c | 48 +++++++++-------------------------- 8 files changed, 78 insertions(+), 83 deletions(-) diff --git a/expand.c b/expand.c index b07893318382..623b180025ad 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 4927468183b0..5a8e74970d98 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 7850bcdc6069..f6b79685f439 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 22c4341f1680..b68866c2b048 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/optim/shift-big.c b/validation/optim/shift-big.c index 84bcd2ce01a3..e7bf22fe36ff 100644 --- a/validation/optim/shift-big.c +++ b/validation/optim/shift-big.c @@ -50,13 +50,15 @@ lsr31: lsr32: .L8: - ret.32 $0 + lsr.32 %r14 <- %arg1, $32 + ret.32 %r14 lsr33: .L10: - ret.32 $0 + lsr.32 %r17 <- %arg1, $33 + ret.32 %r17 shl31: @@ -69,13 +71,15 @@ shl31: shl32: .L14: - ret.32 $0 + shl.32 %r23 <- %arg1, $32 + ret.32 %r23 shl33: .L16: - 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 fff5cf123dd6..6df02b18468f 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 326267436ec7..985fe4c4c595 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 613c6b95b113..0c7541e9ffd9 100644 --- a/validation/shift-undef.c +++ b/validation/shift-undef.c @@ -112,48 +112,24 @@ 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 too big (4294967294) for type unsigned int -shift-undef.c:37:11: warning: shift too big (4294967293) for type unsigned int -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 too big (4294967291) for type unsigned int -shift-undef.c:43:25: warning: shift too big (4294967290) for type unsigned int -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 too big (4294967288) for type unsigned int -shift-undef.c:49:30: warning: shift too big (4294967287) for type unsigned int +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 unsigned int shift-undef.c:52:26: warning: shift too big (111) for type unsigned int