[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