https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68810
--- Comment #7 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Error is emitted here in potential_constant_expression_1, in cp/constexpr.c:
4306 error_at (EXPR_LOC_OR_LOC (t, input_location),
4307 "reinterpret_cast from integer to pointer");
With -m32 we have a CONVERT_EXPR with a location on line 20:
(gdb) call debug_tree (t)
<convert_expr 0x7ffff19f4640
type <pointer_type 0x7ffff19fa0a8
type <record_type 0x7ffff19e57e0 Inner type_5 type_6 BLK
size <integer_cst 0x7ffff19f2d50 constant 224>
unit size <integer_cst 0x7ffff19f2d80 constant 28>
align 32 symtab 0 alias set -1 canonical type 0x7ffff19e57e0 fields
<field_decl 0x7ffff19f8390 m_Class> context <record_type 0x7ffff19e5690 B>
full-name "class B::Inner"
X() X(constX&) this=(X&) n_parents=0 use_template=0
interface-unknown
pointer_to_this <pointer_type 0x7ffff19fa0a8> reference_to_this
<reference_type 0x7ffff19e5f18> chain <type_decl 0x7ffff19e4ed8 Inner>>
unsigned SI
size <integer_cst 0x7ffff1891e58 constant 32>
unit size <integer_cst 0x7ffff1891e70 constant 4>
align 32 symtab 0 alias set -1 canonical type 0x7ffff19fa0a8>
constant
arg 0 <integer_cst 0x7ffff18b25b8 type <integer_type 0x7ffff18957e0 int>
constant 4>
../../src/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C:20:14 start:
../../src/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C:20:13 finish:
../../src/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C:20:24>
Without -m32, we're dealing with a NOP_EXPR with unknown location, hence the
use of input_location, which is at line 21:
(gdb) call debug_tree (t)
<nop_expr 0x7ffff19f8900
type <reference_type 0x7ffff19e9bd0
type <record_type 0x7ffff19e9498 Inner type_5 type_6 BLK
size <integer_cst 0x7ffff19f6ee8 constant 224>
unit size <integer_cst 0x7ffff19f6f30 constant 28>
align 32 symtab 0 alias set -1 canonical type 0x7ffff19e9498 fields
<field_decl 0x7ffff19ea980 m_Class> context <record_type 0x7ffff19e9348 B>
full-name "class B::Inner"
X() X(constX&) this=(X&) n_parents=0 use_template=0
interface-unknown
pointer_to_this <pointer_type 0x7ffff19e9e70> reference_to_this
<reference_type 0x7ffff19e9bd0> chain <type_decl 0x7ffff19ea558 Inner>>
unsigned DI
size <integer_cst 0x7ffff1891e58 constant 64>
unit size <integer_cst 0x7ffff1891e70 constant 8>
align 64 symtab 0 alias set -1 canonical type 0x7ffff19e9bd0>
constant
arg 0 <integer_cst 0x7ffff19d6540 type <pointer_type 0x7ffff19e9e70>
constant 4>>
so this may well be fallout from my C++ expression ranges patch (r231293);
perhaps they both had unknown location previously?