https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96993
--- Comment #3 from Jan Smets ---
The testcase has a sign-compare warning that we've traditionally been ignoring
given the ancient codebase.
warning: operand of ‘?:’ changes signedness from ‘int’ to ‘long unsigned int’
due to unsignedness of other operand [-Wsign-compare]
Changing the testcase From:
((address_ != (0L)) ? (tUint8 *)(address_) - (tUint8 *)(&((struct
tmm_blk_free_head_t *)0)->ql.column_list) : (uintptr_t)(0L));
To:
((address_ != (0L)) ? (uintptr_t)(tUint8 *)(address_) - (uintptr_t)(tUint8
*)(&((struct tmm_blk_free_head_t *)0)->ql.column_list) : (uintptr_t)(0L));
will generate different code in GCC 10, whereas it generates the same code in
GCC 9 for both forms.
(with the added casts the generated GCC 10 code is good),
commit 810c42c38d37317c80b57db0a8b6d8991e78ef50
Author: Richard Biener
Date: Mon May 20 12:02:35 2019 +
tree-ssa-structalias.c (find_func_aliases): POINTER_DIFF_EXPR doesn't
produce pointers.
2019-05-20 Richard Biener
* tree-ssa-structalias.c (find_func_aliases): POINTER_DIFF_EXPR
doesn't produce pointers.
{TRUNC,CEIL,FLOOR,ROUND,EXACT}_{DIV,MOD}_EXPR points to what
the first operand points to.
From-SVN: r271414
I've been trying to get a working/crashing testcase for you, but finding the
right 'input data' to trigger the behavior for my testcase seems a bit
problematic.