On Wed, 2021-06-09 at 16:17 +0200, Christophe Lyon wrote: > On Tue, 8 Jun 2021 at 21:34, David Malcolm via Gcc-patches > <gcc-patches@gcc.gnu.org> wrote: > > > > This patch verifies the previous fix for bitfield sizes by > > implementing > > enough support for bitfields in the analyzer to get the test cases > > to pass. > > > > The patch implements support in the analyzer for reading from a > > BIT_FIELD_REF, and support for folding BIT_AND_EXPR of a mask, to > > handle > > the cases generated in tests. > > > > The existing bitfields tests in data-model-1.c turned out to rely > > on > > undefined behavior, in that they were assigning values to a signed > > bitfield that were outside of the valid range of values. I believe > > that > > that's why we were seeing target-specific differences in the test > > results (PR analyzer/99212). The patch updates the test to remove > > the > > undefined behaviors. > > > > Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. > > Lightly tested with cris-elf. > > > > Pushed to trunk as r12-1303- > > gd3b1ef7a83c0c0cd5b20a1dd1714b868f3d2b442. > > > > gcc/analyzer/ChangeLog: > > PR analyzer/99212 > > * region-model-manager.cc > > (region_model_manager::maybe_fold_binop): Add support for > > folding > > BIT_AND_EXPR of compound_svalue and a mask constant. > > * region-model.cc (region_model::get_rvalue_1): Implement > > BIT_FIELD_REF in terms of... > > (region_model::get_rvalue_for_bits): New function. > > * region-model.h (region_model::get_rvalue_for_bits): New > > decl. > > * store.cc (bit_range::from_mask): New function. > > (selftest::test_bit_range_intersects_p): New selftest. > > (selftest::assert_bit_range_from_mask_eq): New. > > (ASSERT_BIT_RANGE_FROM_MASK_EQ): New macro. > > (selftest::assert_no_bit_range_from_mask_eq): New. > > (ASSERT_NO_BIT_RANGE_FROM_MASK): New macro. > > (selftest::test_bit_range_from_mask): New selftest. > > (selftest::analyzer_store_cc_tests): Call the new > > selftests. > > * store.h (bit_range::intersects_p): New. > > (bit_range::from_mask): New decl. > > (concrete_binding::get_bit_range): New accessor. > > (store_manager::get_concrete_binding): New overload taking > > const bit_range &. > > > > gcc/testsuite/ChangeLog: > > PR analyzer/99212 > > * gcc.dg/analyzer/bitfields-1.c: New test. > > * gcc.dg/analyzer/data-model-1.c (struct sbits): Make > > bitfields > > explicitly signed. > > (test_44): Update test values assigned to the bits to ones > > that > > fit in the range of the bitfield type. Remove xfails. > > (test_45): Remove xfails. > > > > Hi, > > This patch is causing regressions / new failures on armeb (and other > targets according to gcc-testresults): > > FAIL: gcc.dg/analyzer/bitfields-1.c (test for excess errors) > Excess errors: > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:24:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:26:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:29:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:31:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:36:3: warning: FALSE > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:41:3: warning: FALSE > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:81:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:83:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:85:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:87:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:92:3: warning: FALSE > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:94:3: warning: FALSE > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:96:3: warning: FALSE > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:113:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:115:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:117:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:119:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:121:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:123:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:125:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/bitfields-1.c:127:3: warning: UNKNOWN > > FAIL: gcc.dg/analyzer/data-model-1.c (test for excess errors) > Excess errors: > /gcc/testsuite/gcc.dg/analyzer/data-model-1.c:947:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/data-model-1.c:950:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/data-model-1.c:965:3: warning: UNKNOWN > /gcc/testsuite/gcc.dg/analyzer/data-model-1.c:968:3: warning: UNKNOWN > > For instance with target armeb-none-linux-gnueabihf > > Can you check?
Sorry about this; I can reproduce the behavior and am investigating. Dave