[Bug d/103578] New: d21 doesn't link on Darwin/i386

ro at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Dec 6 10:23:45 GMT 2021


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103578

            Bug ID: 103578
           Summary: d21 doesn't link on Darwin/i386
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: d
          Assignee: ibuclaw at gdcproject dot org
          Reporter: ro at gcc dot gnu.org
  Target Milestone: ---
              Host: i386-apple-darwin11.4.2
            Target: i386-apple-darwin11.4.2
             Build: i386-apple-darwin11.4.2

Trying to build a 32-bit-default gdc on current master in the same way as
described
in PR d/103577 (gcc 11.1.0 with --enable-libphobos) fails linking the stage1
d21:

Undefined symbols for architecture i386:
  "__ZN4Port6valcpyEPvyj", referenced from:
     
__D3dmd9constfold3CatFKxSQw7globals3LocCQBl5mtype4TypeCQCa10expression10ExpressionQBcZSQDgQBg8UnionExp
in constfold.o
     
__D3dmd8ctfeexpr7ctfeCatFKxSQz7globals3LocCQBo5mtype4TypeCQCd10expression10ExpressionQBcZSQDjQBg8UnionExp
in ctfeexpr.o
  "__ZN4Port7memicmpEPKcS1_j", referenced from:
      __D3dmd3doc7isDittoFPxaZb in doc.o
     
__D3dmd3doc10emitAnchorFKSQx4root9outbuffer9OutBufferCQBz7dsymbol7DsymbolPSQCu6dscope5ScopebZv
in doc.o
      __D3dmd3doc11skippastURLFKSQy4root9outbuffer9OutBufferkZk in doc.o
      __ZN11emitComment11EmitComment4emitEP5ScopeP7DsymbolPKc in doc.o
      __ZN11emitComment11EmitComment5visitEP11Declaration in doc.o
      __ZN11emitComment11EmitComment5visitEP20AggregateDeclaration in doc.o
  "__ZN9StringExp6createE3LocPvm", referenced from:
      __Z26d_eval_constant_expressionRK3LocP9tree_node in d-builtins.o
ld: symbol(s) not found for architecture i386
collect2: error: ld returned 1 exit status
make[3]: *** [d21] Error 1

The missing symbols are

  __ZN4Port6valcpyEPvyj
  __ZN4Port7memicmpEPKcS1_j
  __ZN9StringExp6createE3LocPvm

all of them C++ symbols:

  Port::valcpy(void*, unsigned long long, unsigned int)
  Port::memicmp(char const*, char const*, unsigned int)

  defined in gcc/d/d-port.cc
  declared as extern (C++) in gcc/d/dmd/root/port.d

  void valcpy(scope void *dst, uint64_t val, size_t size) pure;
  int memicmp(scope const char* s1, scope const char* s2, size_t n) pure;

  StringExp::create(Loc, void*, unsigned long)

  declared in gcc/d/dmd/expression.h, gcc/d/dmd/expression.d (as extern (C++))

  which has StringExp create(Loc loc, void* string, size_t len)

It seems gdc has a wrong idea about size_t with -m32:
<i386/_types.h> uses unsigned long, gcc's __SIZE_TYPE__ likewise.


More information about the Gcc-bugs mailing list