https://gcc.gnu.org/g:76d660277e5cd61055c3838bf59c90321d4686fb

commit r13-9336-g76d660277e5cd61055c3838bf59c90321d4686fb
Author: Iain Buclaw <ibuc...@gdcproject.org>
Date:   Mon Jan 20 20:01:03 2025 +0100

    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.
    
    (cherry picked from commit 9ab38952a2033d6d4a8e31c3c4d2ab1a25a406c6)

Diff:
---
 gcc/d/expr.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gcc/d/expr.cc b/gcc/d/expr.cc
index 2bbb2ebd22be..5d91349bf5b5 100644
--- a/gcc/d/expr.cc
+++ b/gcc/d/expr.cc
@@ -1513,7 +1513,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)
@@ -2091,7 +2091,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;

Reply via email to