| Summary: | [8 Regression] UBSAN: yet another false positive | ||
|---|---|---|---|
| Product: | gcc | Reporter: | Dmitry Babokin <babokin> |
| Component: | middle-end | Assignee: | Richard Biener <rguenth> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | Keywords: | wrong-code |
| Priority: | P1 | ||
| Version: | 8.0 | ||
| Target Milestone: | 8.0 | ||
| Host: | Target: | ||
| Build: | Known to work: | 7.1.1 | |
| Known to fail: | 8.0 | Last reconfirmed: | 2017-08-04 00:00:00 |
| Bug Depends on: | |||
| Bug Blocks: | 103035 | ||
|
Description
Dmitry Babokin
2017-08-03 19:11:23 UTC
Confirmed. I don't see this with g++-7 which has (void) (a = (-516151698 - NON_LVALUE_EXPR <var_4>) - -NON_LVALUE_EXPR <var_14>) trunks produces (void) (a = -516151698 - (-NON_LVALUE_EXPR <var_14> + NON_LVALUE_EXPR <var_4>)) Created by associate, thus mine. Oops. Simple mistake in my recent patch.
Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c (revision 250865)
+++ gcc/fold-const.c (working copy)
@@ -9629,7 +9629,9 @@ fold_binary_loc (location_t loc,
else if ((var0 && minus_var1
&& ! operand_equal_p (var0, minus_var1, 0))
|| (minus_var0 && var1
- && ! operand_equal_p (minus_var0, var1, 0)))
+ && ! operand_equal_p (minus_var0, var1, 0))
+ || (minus_var0 && minus_var1
+ && ! operand_equal_p (minus_var0, minus_var1, 0)))
ok = false;
}
Fixed. Author: rguenth Date: Fri Aug 4 10:33:39 2017 New Revision: 250866 URL: https://gcc.gnu.org/viewcvs?rev=250866&root=gcc&view=rev Log: 2017-08-04 Richard Biener <rguenther@suse.de> PR middle-end/81705 * fold-const.c (fold_binary_loc): Properly restrict minus_var0 && minus_var1 case when associating undefined overflow entities. * c-c++-common/ubsan/pr81705.c: New testcase. Added: trunk/gcc/testsuite/c-c++-common/ubsan/pr81705.c Modified: trunk/gcc/ChangeLog trunk/gcc/fold-const.c trunk/gcc/testsuite/ChangeLog That's an excellent new! This means UBSAN becomes finally fully functional in GCC. No known false positives anymore (on quite large test base). Great job and thank you! On August 5, 2017 12:01:06 AM GMT+02:00, babokin at gmail dot com <gcc-bugzilla@gcc.gnu.org> wrote: >https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81705 > >--- Comment #7 from Dmitry Babokin <babokin at gmail dot com> --- >That's an excellent new! This means UBSAN becomes finally fully >functional in >GCC. No known false positives anymore (on quite large test base). Great >job and >thank you! Thank you for reporting the issues! Author: aldyh Date: Wed Sep 13 16:27:46 2017 New Revision: 252286 URL: https://gcc.gnu.org/viewcvs?rev=252286&root=gcc&view=rev Log: 2017-08-04 Richard Biener <rguenther@suse.de> PR middle-end/81705 * fold-const.c (fold_binary_loc): Properly restrict minus_var0 && minus_var1 case when associating undefined overflow entities. * c-c++-common/ubsan/pr81705.c: New testcase. Added: branches/range-gen2/gcc/testsuite/c-c++-common/ubsan/pr81705.c Modified: branches/range-gen2/gcc/ChangeLog branches/range-gen2/gcc/fold-const.c branches/range-gen2/gcc/testsuite/ChangeLog |