diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2025-01-20 20:01:03 +0100 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gdcproject.org> | 2025-01-20 20:20:37 +0100 |
commit | 9ab38952a2033d6d4a8e31c3c4d2ab1a25a406c6 (patch) | |
tree | c0254cfafe747468b06d473c1b2449a878229597 /gcc | |
parent | 0d1e62b83561baa185bf080515750a89dd3ac410 (diff) | |
download | gcc-9ab38952a2033d6d4a8e31c3c4d2ab1a25a406c6.zip gcc-9ab38952a2033d6d4a8e31c3c4d2ab1a25a406c6.tar.gz gcc-9ab38952a2033d6d4a8e31c3c4d2ab1a25a406c6.tar.bz2 |
d: Fix failing test with 32-bit compiler [PR114434]
Since the introduction of gdc.test/runnable/test23514.d, it's exposed an
incorrect compilation when adding a 64-bit constant to a link-time
address. The current cast to size_t causes a loss of precision, which
can result in incorrect compilation.
PR d/114434
gcc/d/ChangeLog:
* expr.cc (ExprVisitor::visit (PtrExp *)): Get the offset as a
dinteger_t rather than a size_t.
(ExprVisitor::visit (SymOffExp *)): Likewise.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/d/expr.cc | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/d/expr.cc b/gcc/d/expr.cc index 304d6bd..f04ec33 100644 --- a/gcc/d/expr.cc +++ b/gcc/d/expr.cc @@ -1499,7 +1499,7 @@ public: void visit (PtrExp *e) final override { Type *tnext = NULL; - size_t offset; + dinteger_t offset; tree result; if (e->e1->op == EXP::add) @@ -2074,7 +2074,7 @@ public: void visit (SymOffExp *e) final override { /* Build the address and offset of the symbol. */ - size_t soffset = e->isSymOffExp ()->offset; + dinteger_t soffset = e->isSymOffExp ()->offset; tree result = get_decl_tree (e->var); TREE_USED (result) = 1; |