From: Jakub Jelinek Date: Tue, 30 May 2017 08:20:45 +0000 (+0200) Subject: backport: re PR sanitizer/80168 (ICE in make_decl_rtl, at varasm.c:1311 w/ VLA and... X-Git-Tag: releases/gcc-5.5.0~248 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c919f41bddee9bfd4669fddefc16570dc60cc76f;p=thirdparty%2Fgcc.git backport: re PR sanitizer/80168 (ICE in make_decl_rtl, at varasm.c:1311 w/ VLA and -fsanitize=address) Backported from mainline 2017-03-27 Jakub Jelinek PR sanitizer/80168 * asan.c (instrument_derefs): Copy over last operand from original COMPONENT_REF to the new COMPONENT_REF with DECL_BIT_FIELD_REPRESENTATIVE. * ubsan.c (instrument_object_size): Likewise. * gcc.dg/asan/pr80168.c: New test. From-SVN: r248665 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 106c41c05014..aa1439a102ac 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,14 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2017-03-27 Jakub Jelinek + + PR sanitizer/80168 + * asan.c (instrument_derefs): Copy over last operand from + original COMPONENT_REF to the new COMPONENT_REF with + DECL_BIT_FIELD_REPRESENTATIVE. + * ubsan.c (instrument_object_size): Likewise. + 2017-03-24 Jakub Jelinek PR rtl-optimization/80112 diff --git a/gcc/asan.c b/gcc/asan.c index dbf392edd366..8e359681fc43 100644 --- a/gcc/asan.c +++ b/gcc/asan.c @@ -1793,7 +1793,8 @@ instrument_derefs (gimple_stmt_iterator *iter, tree t, tree repr = DECL_BIT_FIELD_REPRESENTATIVE (TREE_OPERAND (t, 1)); instrument_derefs (iter, build3 (COMPONENT_REF, TREE_TYPE (repr), TREE_OPERAND (t, 0), repr, - NULL_TREE), location, is_store); + TREE_OPERAND (t, 2)), + location, is_store); return; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 44a06cdd1f9b..90df00b48ca7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2017-03-27 Jakub Jelinek + + PR sanitizer/80168 + * gcc.dg/asan/pr80168.c: New test. + 2017-03-24 Jakub Jelinek PR rtl-optimization/80112 diff --git a/gcc/testsuite/gcc.dg/asan/pr80168.c b/gcc/testsuite/gcc.dg/asan/pr80168.c new file mode 100644 index 000000000000..de2334551bb8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/asan/pr80168.c @@ -0,0 +1,12 @@ +/* PR sanitizer/80168 */ +/* { dg-do compile } */ + +int a; + +int +foo (void) +{ + struct S { int c[a]; int q : 8; int e : 4; } f; + f.e = 4; + return f.e; +} diff --git a/gcc/ubsan.c b/gcc/ubsan.c index d471afc0334d..570d1b4b5f6c 100644 --- a/gcc/ubsan.c +++ b/gcc/ubsan.c @@ -1774,7 +1774,7 @@ instrument_object_size (gimple_stmt_iterator *gsi, bool is_lhs) { tree repr = DECL_BIT_FIELD_REPRESENTATIVE (TREE_OPERAND (t, 1)); t = build3 (COMPONENT_REF, TREE_TYPE (repr), TREE_OPERAND (t, 0), - repr, NULL_TREE); + repr, TREE_OPERAND (t, 2)); } break; case ARRAY_REF: