mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-02 16:11:08 +03:00
Run semantic on Type::tvalist.
This is required to resolve the type for AAPCS/AAPCS64. Up to now it was not necessary because only char* was used. AAPCS/AAPCS64 use a special extern(C++) struct __va_list.
This commit is contained in:
parent
2dc7145e93
commit
815b13be38
4 changed files with 7 additions and 4 deletions
|
@ -1497,7 +1497,11 @@ void FuncDeclaration::semantic3(Scope *sc)
|
||||||
if (f->linkage == LINKd || (f->parameters && Parameter::dim(f->parameters)))
|
if (f->linkage == LINKd || (f->parameters && Parameter::dim(f->parameters)))
|
||||||
{
|
{
|
||||||
// Declare _argptr
|
// Declare _argptr
|
||||||
|
#if IN_LVVM
|
||||||
|
Type *t = Type::tvalist->semantic(loc, sc);
|
||||||
|
#else
|
||||||
Type *t = Type::tvalist;
|
Type *t = Type::tvalist;
|
||||||
|
#endif
|
||||||
argptr = new VarDeclaration(Loc(), t, Id::_argptr, NULL);
|
argptr = new VarDeclaration(Loc(), t, Id::_argptr, NULL);
|
||||||
argptr->storage_class |= STCtemp;
|
argptr->storage_class |= STCtemp;
|
||||||
argptr->semantic(sc2);
|
argptr->semantic(sc2);
|
||||||
|
|
|
@ -111,8 +111,7 @@ struct AArch64TargetABI : TargetABI {
|
||||||
// using TypeIdentifier here is a bit wonky but works, as long as the name
|
// using TypeIdentifier here is a bit wonky but works, as long as the name
|
||||||
// is actually available in the scope (this is what DMD does, so if a better
|
// is actually available in the scope (this is what DMD does, so if a better
|
||||||
// solution is found there, this should be adapted).
|
// solution is found there, this should be adapted).
|
||||||
return (new TypeIdentifier(Loc(), Identifier::idPool("__va_list_tag")))
|
return (new TypeIdentifier(Loc(), Identifier::idPool("__va_list")));
|
||||||
->pointerTo();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -882,7 +882,7 @@ void DtoDefineFunction(FuncDeclaration *fd) {
|
||||||
// D varargs: prepare _argptr and _arguments
|
// D varargs: prepare _argptr and _arguments
|
||||||
if (f->linkage == LINKd && f->varargs == 1) {
|
if (f->linkage == LINKd && f->varargs == 1) {
|
||||||
// allocate _argptr (of type core.stdc.stdarg.va_list)
|
// allocate _argptr (of type core.stdc.stdarg.va_list)
|
||||||
LLValue *argptrmem = DtoAlloca(Type::tvalist, "_argptr_mem");
|
LLValue *argptrmem = DtoAlloca(Type::tvalist->semantic(fd->loc, fd->scope), "_argptr_mem");
|
||||||
irFunc->_argptr = argptrmem;
|
irFunc->_argptr = argptrmem;
|
||||||
|
|
||||||
// initialize _argptr with a call to the va_start intrinsic
|
// initialize _argptr with a call to the va_start intrinsic
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit dac245a567b0b70ce9b7f1055831ddd2118784ea
|
Subproject commit c3a9601c157da388d37249038da1c9d95c32ed03
|
Loading…
Add table
Add a link
Reference in a new issue