On Wed, 30 Aug 2023 at 04:21, David Malcolm <dmalc...@redhat.com> wrote: > > On Tue, 2023-08-29 at 11:01 +0530, Prathamesh Kulkarni wrote: > > On Fri, 25 Aug 2023 at 18:15, David Malcolm via Gcc-patches > > <gcc-patches@gcc.gnu.org> wrote: > > > > > > Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. > > > Pushed to trunk as r14-3481-g99a3fcb8ff0bf2. > > Hi David, > > It seems the new tests FAIL on arm for LTO bootstrap config: > > https://ci.linaro.org/job/tcwg_bootstrap_check--master-arm-check_bootstrap_lto-build/263/artifact/artifacts/06-check_regression/fails.sum/*view*/ > > Sorry about this. > > Looking at e.g. the console.log.xz, I just see the status of the > failing tests. > > Is there an easy way to get at the stderr from the tests without > rerunning this? > > Otherwise, I'd appreciate help with reproducing this. Hi David, I have attached make check log for the failing tests. To reproduce, I configured and built gcc with following options on armv8 machine: ../gcc/configure --enable-languages=c,c++,fortran --with-float=hard --with-fpu=neon-fp-armv8 --with-mode=thumb --with-arch=armv8-a --disable-werror --with-build-config=bootstrap-lto make -j$(nproc)
Thanks, Prathamesh > > Thanks > Dave > > > Please let me know if you need any help in reproducing these > > failures. > > > > Thanks, > > Prathamesh > > > > > > gcc/analyzer/ChangeLog: > > > * access-diagram.cc (class string_region_spatial_item): > > > Remove > > > assumption that the string is written to the start of the > > > cluster. > > > > > > gcc/testsuite/ChangeLog: > > > * gcc.dg/analyzer/out-of-bounds-diagram-17.c: New test. > > > * gcc.dg/analyzer/out-of-bounds-diagram-18.c: New test. > > > * gcc.dg/analyzer/out-of-bounds-diagram-19.c: New test. > > > --- > > > gcc/analyzer/access-diagram.cc | 57 ++++++++++++--- > > > ---- > > > .../analyzer/out-of-bounds-diagram-17.c | 34 +++++++++++ > > > .../analyzer/out-of-bounds-diagram-18.c | 38 +++++++++++++ > > > .../analyzer/out-of-bounds-diagram-19.c | 45 +++++++++++++++ > > > 4 files changed, 155 insertions(+), 19 deletions(-) > > > create mode 100644 gcc/testsuite/gcc.dg/analyzer/out-of-bounds- > > > diagram-17.c > > > create mode 100644 gcc/testsuite/gcc.dg/analyzer/out-of-bounds- > > > diagram-18.c > > > create mode 100644 gcc/testsuite/gcc.dg/analyzer/out-of-bounds- > > > diagram-19.c > > > > > > diff --git a/gcc/analyzer/access-diagram.cc b/gcc/analyzer/access- > > > diagram.cc > > > index d7b669a4e38e..a51d594b5b2c 100644 > > > --- a/gcc/analyzer/access-diagram.cc > > > +++ b/gcc/analyzer/access-diagram.cc > > > @@ -1509,10 +1509,16 @@ public: > > > out.add_all_bytes_in_range (m_actual_bits); > > > else > > > { > > > - byte_range head_of_string (0, m_ellipsis_head_len); > > > + byte_range bytes (0, 0); > > > + bool valid = m_actual_bits.as_concrete_byte_range (&bytes); > > > + gcc_assert (valid); > > > + byte_range head_of_string (bytes.get_start_byte_offset (), > > > + m_ellipsis_head_len); > > > out.add_all_bytes_in_range (head_of_string); > > > byte_range tail_of_string > > > - (TREE_STRING_LENGTH (string_cst) - m_ellipsis_tail_len, > > > + ((bytes.get_start_byte_offset () > > > + + TREE_STRING_LENGTH (string_cst) > > > + - m_ellipsis_tail_len), > > > m_ellipsis_tail_len); > > > out.add_all_bytes_in_range (tail_of_string); > > > /* Adding the above pair of ranges will also effectively > > > add > > > @@ -1535,11 +1541,14 @@ public: > > > tree string_cst = get_string_cst (); > > > if (m_show_full_string) > > > { > > > - for (byte_offset_t byte_idx = bytes.get_start_byte_offset > > > (); > > > - byte_idx < bytes.get_next_byte_offset (); > > > - byte_idx = byte_idx + 1) > > > - add_column_for_byte (t, btm, sm, byte_idx, > > > - byte_idx_table_y, byte_val_table_y); > > > + for (byte_offset_t byte_idx_within_cluster > > > + = bytes.get_start_byte_offset (); > > > + byte_idx_within_cluster < bytes.get_next_byte_offset > > > (); > > > + byte_idx_within_cluster = byte_idx_within_cluster + 1) > > > + add_column_for_byte > > > + (t, btm, sm, byte_idx_within_cluster, > > > + byte_idx_within_cluster - bytes.get_start_byte_offset > > > (), > > > + byte_idx_table_y, byte_val_table_y); > > > > > > if (m_show_utf8) > > > { > > > @@ -1566,10 +1575,13 @@ public: > > > = decoded_char.m_start_byte - TREE_STRING_POINTER > > > (string_cst); > > > byte_size_t size_in_bytes > > > = decoded_char.m_next_byte - > > > decoded_char.m_start_byte; > > > - byte_range bytes (start_byte_idx, size_in_bytes); > > > + byte_range cluster_bytes_for_codepoint > > > + (start_byte_idx + bytes.get_start_byte_offset (), > > > + size_in_bytes); > > > > > > const table::rect_t code_point_table_rect > > > - = btm.get_table_rect (&m_string_reg, bytes, > > > + = btm.get_table_rect (&m_string_reg, > > > + cluster_bytes_for_codepoint, > > > utf8_code_point_table_y, 1); > > > char buf[100]; > > > sprintf (buf, "U+%04x", decoded_char.m_ch); > > > @@ -1579,7 +1591,8 @@ public: > > > if (show_unichars) > > > { > > > const table::rect_t character_table_rect > > > - = btm.get_table_rect (&m_string_reg, bytes, > > > + = btm.get_table_rect (&m_string_reg, > > > + > > > cluster_bytes_for_codepoint, > > > utf8_character_table_y, > > > 1); > > > if (cpp_is_printable_char (decoded_char.m_ch)) > > > t.set_cell_span (character_table_rect, > > > @@ -1598,12 +1611,14 @@ public: > > > { > > > /* Head of string. */ > > > for (int byte_idx = 0; byte_idx < m_ellipsis_head_len; > > > byte_idx++) > > > - add_column_for_byte (t, btm, sm, byte_idx, > > > + add_column_for_byte (t, btm, sm, > > > + byte_idx + > > > bytes.get_start_byte_offset (), > > > + byte_idx, > > > byte_idx_table_y, byte_val_table_y); > > > > > > /* Ellipsis (two rows high). */ > > > const byte_range ellipsis_bytes > > > - (m_ellipsis_head_len, > > > + (m_ellipsis_head_len + bytes.get_start_byte_offset (), > > > TREE_STRING_LENGTH (string_cst) > > > - (m_ellipsis_head_len + m_ellipsis_tail_len)); > > > const table::rect_t table_rect > > > @@ -1616,7 +1631,9 @@ public: > > > = (TREE_STRING_LENGTH (string_cst) - > > > m_ellipsis_tail_len); > > > byte_idx < TREE_STRING_LENGTH (string_cst); > > > byte_idx++) > > > - add_column_for_byte (t, btm, sm, byte_idx, > > > + add_column_for_byte (t, btm, sm, > > > + byte_idx + > > > bytes.get_start_byte_offset (), > > > + byte_idx, > > > byte_idx_table_y, byte_val_table_y); > > > } > > > > > > @@ -1660,25 +1677,27 @@ private: > > > > > > void add_column_for_byte (table &t, const bit_to_table_map &btm, > > > style_manager &sm, > > > - const byte_offset_t byte_idx, > > > + const byte_offset_t > > > byte_idx_within_cluster, > > > + const byte_offset_t > > > byte_idx_within_string, > > > const int byte_idx_table_y, > > > const int byte_val_table_y) const > > > { > > > tree string_cst = get_string_cst (); > > > - gcc_assert (byte_idx >= 0); > > > - gcc_assert (byte_idx < TREE_STRING_LENGTH (string_cst)); > > > + gcc_assert (byte_idx_within_string >= 0); > > > + gcc_assert (byte_idx_within_string < TREE_STRING_LENGTH > > > (string_cst)); > > > > > > - const byte_range bytes (byte_idx, 1); > > > + const byte_range bytes (byte_idx_within_cluster, 1); > > > if (1) // show_byte_indices > > > { > > > const table::rect_t idx_table_rect > > > = btm.get_table_rect (&m_string_reg, bytes, > > > byte_idx_table_y, 1); > > > t.set_cell_span (idx_table_rect, > > > fmt_styled_string (sm, "[%li]", > > > - byte_idx.ulow ())); > > > + > > > byte_idx_within_string.ulow ())); > > > } > > > > > > - char byte_val = TREE_STRING_POINTER (string_cst)[byte_idx.ulow > > > ()]; > > > + char byte_val > > > + = TREE_STRING_POINTER > > > (string_cst)[byte_idx_within_string.ulow ()]; > > > const table::rect_t val_table_rect > > > = btm.get_table_rect (&m_string_reg, bytes, > > > byte_val_table_y, 1); > > > table_cell_content content (make_cell_content_for_byte (sm, > > > byte_val)); > > > diff --git a/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram- > > > 17.c b/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-17.c > > > new file mode 100644 > > > index 000000000000..6920e8c776fc > > > --- /dev/null > > > +++ b/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-17.c > > > @@ -0,0 +1,34 @@ > > > +/* { dg-additional-options "-fdiagnostics-text-art- > > > charset=unicode" } */ > > > + > > > +#include <string.h> > > > + > > > +void test (void) > > > +{ > > > + char buf[10]; > > > + strcpy (buf, "hello"); > > > + strcat (buf, " world!"); /* { dg-warning "stack-based buffer > > > overflow" } */ > > > + /* { dg-message "write of 3 bytes to beyond the end of 'buf'" "" > > > { target *-*-* } .-1 } */ > > > +} > > > + > > > +/* { dg-begin-multiline-output "" } > > > + > > > ┌─────┬─────┬────┬────┬────┐┌─────┬─────┬─────┐ > > > + │ [0] │ [1] │[2] │[3] │[4] ││ [5] │ [6] > > > │ [7] │ > > > + > > > ├─────┼─────┼────┼────┼────┤├─────┼─────┼─────┤ > > > + │ ' ' │ 'w' │'o' │'r' │'l' ││ 'd' │ '!' > > > │ NUL │ > > > + > > > ├─────┴─────┴────┴────┴────┴┴─────┴─────┴─────┤ > > > + │ string literal (type: > > > 'char[8]') │ > > > + > > > └─────────────────────────────────────────────┘ > > > + │ │ │ │ │ │ > > > │ │ > > > + │ │ │ │ │ │ > > > │ │ > > > + v v v v v v > > > v v > > > + > > > ┌─────┬────────────────────────────────────────┬────┐┌───────────── > > > ────┐ > > > + │ [0] │ ... │[9] > > > ││ │ > > > + ├─────┴────────────────────────────────────────┴────┤│after > > > valid range│ > > > + │ 'buf' (type: 'char[10]') > > > ││ │ > > > + > > > └───────────────────────────────────────────────────┘└───────────── > > > ────┘ > > > + > > > ├─────────────────────────┬─────────────────────────┤├────────┬──── > > > ────┤ > > > + │ │ > > > + ╭─────────┴────────╮ > > > ╭─────────┴─────────╮ > > > + │capacity: 10 bytes│ │overflow of > > > 3 bytes│ > > > + ╰──────────────────╯ > > > ╰───────────────────╯ > > > + { dg-end-multiline-output "" } */ > > > diff --git a/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram- > > > 18.c b/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-18.c > > > new file mode 100644 > > > index 000000000000..ea0b88019cd9 > > > --- /dev/null > > > +++ b/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-18.c > > > @@ -0,0 +1,38 @@ > > > +/* { dg-additional-options "-fdiagnostics-text-art- > > > charset=unicode" } */ > > > + > > > +#include <string.h> > > > + > > > +void test (void) > > > +{ > > > + char buf[11]; > > > + strcpy (buf, "サツキ"); > > > + strcat (buf, "メイ"); /* { dg-warning "stack-based buffer > > > overflow" } */ > > > + /* { dg-message "write of 5 bytes to beyond the end of 'buf'" "" > > > { target *-*-* } .-1 } */ > > > +} > > > + > > > +/* { dg-begin-multiline-output "" } > > > + > > > ┌─────┬─────────┐┌────┬────┬────┬────┬──────┐ > > > + │ [0] │ [1] ││[2] │[3] │[4] │[5] > > > │ [6] │ > > > + > > > ├─────┼─────────┤├────┼────┼────┼────┼──────┤ > > > + │0xe3 │ 0x83 > > > ││0xa1│0xe3│0x82│0xa4│ 0x00 │ > > > + > > > ├─────┴─────────┴┴────┼────┴────┴────┼──────┤ > > > + │ U+30e1 │ U+30a4 > > > │U+0000│ > > > + > > > ├─────────────────────┼──────────────┼──────┤ > > > + │ メ │ イ │ > > > NUL │ > > > + > > > ├─────────────────────┴──────────────┴──────┤ > > > + │ string literal (type: > > > 'char[7]') │ > > > + > > > └───────────────────────────────────────────┘ > > > + │ │ │ │ │ > > > │ │ > > > + │ │ │ │ │ > > > │ │ > > > + v v v v v > > > v v > > > + > > > ┌────┬───────────────────────────┬─────────┐┌────────────────────── > > > ────┐ > > > + │[0] │ ... │ [10] > > > ││ │ > > > + ├────┴───────────────────────────┴─────────┤│ after valid > > > range │ > > > + │ 'buf' (type: 'char[11]') > > > ││ │ > > > + > > > └──────────────────────────────────────────┘└────────────────────── > > > ────┘ > > > + > > > ├────────────────────┬─────────────────────┤├────────────┬───────── > > > ────┤ > > > + │ │ > > > + ╭─────────┴────────╮ > > > ╭─────────┴─────────╮ > > > + │capacity: 11 bytes│ │overflow of 5 > > > bytes│ > > > + ╰──────────────────╯ > > > ╰───────────────────╯ > > > + { dg-end-multiline-output "" } */ > > > diff --git a/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram- > > > 19.c b/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-19.c > > > new file mode 100644 > > > index 000000000000..35ab72b6efc2 > > > --- /dev/null > > > +++ b/gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-19.c > > > @@ -0,0 +1,45 @@ > > > +/* { dg-additional-options "-fdiagnostics-text-art-charset=unicode > > > -Wno-stringop-overflow" } */ > > > +/* { dg-skip-if "" { powerpc-ibm-aix* } } */ > > > + > > > +#include <string.h> > > > + > > > +#define LOREM_IPSUM \ > > > + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do > > > eiusmod" \ > > > + " tempor incididunt ut labore et dolore magna aliqua. Ut enim ad > > > minim" \ > > > + " veniam, quis nostrud exercitation ullamco laboris nisi ut > > > aliquip ex ea" \ > > > + " commodo consequat. Duis aute irure dolor in reprehenderit in > > > voluptate" \ > > > + " velit esse cillum dolore eu fugiat nulla pariatur. Excepteur > > > sint" \ > > > + " occaecat cupidatat non proident, sunt in culpa qui officia > > > deserunt" \ > > > + " mollit anim id est laborum." > > > + > > > +void > > > +test_long_string () > > > +{ > > > + char buf[100]; > > > + strcpy (buf, "abc "); > > > + strcat (buf, LOREM_IPSUM); /* { dg-warning "stack-based buffer > > > overflow" } */ > > > + /* { dg-message "write of 350 bytes to beyond the end of 'buf'" > > > "" { target *-*-* } .-1 } */ > > > +} > > > + > > > +/* { dg-begin-multiline-output "" } > > > + > > > ┌───┬───┬───┬───┬───┬───┬───────┬─────┬─────┬─────┬─────┬─────┬──── > > > ─┐ > > > + │[0]│[1]│[2]│[3]│[4]│[5]│ > > > │[440]│[441]│[442]│[443]│[444]│[445]│ > > > + ├───┼───┼───┼───┼───┼───┤ ... > > > ├─────┼─────┼─────┼─────┼─────┼─────┤ > > > + │'L'│'o'│'r'│'e'│'m'│' '│ │ 'o' │ 'r' │ 'u' │ 'm' │ > > > '.' │ NUL │ > > > + > > > ├───┴───┴───┴───┴───┴───┴───────┴─────┴─────┴─────┴─────┴─────┴──── > > > ─┤ > > > + │ string literal (type: > > > 'char[446]') │ > > > + > > > └────────────────────────────────────────────────────────────────── > > > ─┘ > > > + │ │ │ │ │ │ │ │ │ │ │ │ │ > > > │ │ > > > + │ │ │ │ │ │ │ │ │ │ │ │ │ > > > │ │ > > > + v v v v v v v v v v v v v > > > v v > > > + > > > ┌───┬──────────────────────────┬────┐┌───────────────────────────── > > > ───────┐ > > > + │[0]│ ... > > > │[99]││ │ > > > + ├───┴──────────────────────────┴────┤│ after valid > > > range │ > > > + │ 'buf' (type: 'char[100]') > > > ││ │ > > > + > > > └───────────────────────────────────┘└───────────────────────────── > > > ───────┘ > > > + > > > ├─────────────────┬─────────────────┤├─────────────────┬─────────── > > > ───────┤ > > > + │ │ > > > + ╭─────────┴─────────╮ > > > ╭──────────┴──────────╮ > > > + │capacity: 100 bytes│ │overflow of 350 > > > bytes│ > > > + ╰───────────────────╯ > > > ╰─────────────────────╯ > > > + { dg-end-multiline-output "" } */ > > > -- > > > 2.26.3 > > > >
gcc.log
Description: Binary data