------- Comment #10 from rguenth at gcc dot gnu dot org 2008-01-03 15:54
-------
"Fixed" only in the sense that we now create
<pointer_plus_expr 0x2b6e7ed3b1c0
type <pointer_type 0x2b6e7eda3000
type <integer_type 0x2b6e7ed8c300 char public string-flag QI
size <integer_cst 0x2b6e7ed7c7e0 constant invariant 8>
unit size <integer_cst 0x2b6e7ed7c810 constant invariant 1>
align 8 symtab 0 alias set -1 canonical type 0x2b6e7ed8c300
precision 8 min <integer_cst 0x2b6e7ed7c780 -128> max <integer_cst
0x2b6e7ed7c8d0 127>
pointer_to_this <pointer_type 0x2b6e7eda3000>>
unsigned DI
size <integer_cst 0x2b6e7ed7cb70 constant invariant 64>
unit size <integer_cst 0x2b6e7ed7cba0 constant invariant 8>
align 64 symtab 0 alias set -1 canonical type 0x2b6e7eda3000>
arg 0 <parm_decl 0x2b6e7ed82240 p type <pointer_type 0x2b6e7eda3000>
used unsigned DI file t.i line 1 col 17 size <integer_cst
0x2b6e7ed7cb70 64> unit size <integer_cst 0x2b6e7ed7cba0 8>
align 64 context <function_decl 0x2b6e7ee72b60 foo> initial
<pointer_type 0x2b6e7eda3000> arg-type <pointer_type 0x2b6e7eda3000>>
arg 1 <integer_cst 0x2b6e7f709600 type <integer_type 0x2b6e7ed8c000 long
unsigned int> constant invariant public overflow -4>>
but I consider the 'overflow' bit set on the -4 a bug. Also POINTER_PLUS_EXPR
does not in any way change the issues we raised with undefinedness of
overflow in pointer + offset expressions.
Now, Joseph says
> This bug is about the interpretation of GCC's internal representation, not
> that of the standard.
where yes, we seem to agreed to having an unsigned offset argument to
POINTER_PLUS_EXPR which we need to interpret as a signed quantity. And
in a different place we sort-of agreed to limit the maximum object size
gcc handles to half of SIZE_T_MAX.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27214