diff --git a/dmd2/func.c b/dmd2/func.c index f0903e48bf..2579c9aabf 100644 --- a/dmd2/func.c +++ b/dmd2/func.c @@ -1497,7 +1497,11 @@ void FuncDeclaration::semantic3(Scope *sc) if (f->linkage == LINKd || (f->parameters && Parameter::dim(f->parameters))) { // Declare _argptr +#if IN_LVVM + Type *t = Type::tvalist->semantic(loc, sc); +#else Type *t = Type::tvalist; +#endif argptr = new VarDeclaration(Loc(), t, Id::_argptr, NULL); argptr->storage_class |= STCtemp; argptr->semantic(sc2); diff --git a/gen/abi-aarch64.cpp b/gen/abi-aarch64.cpp index 123c702944..4c23198b91 100644 --- a/gen/abi-aarch64.cpp +++ b/gen/abi-aarch64.cpp @@ -111,8 +111,7 @@ struct AArch64TargetABI : TargetABI { // 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 // solution is found there, this should be adapted). - return (new TypeIdentifier(Loc(), Identifier::idPool("__va_list_tag"))) - ->pointerTo(); + return (new TypeIdentifier(Loc(), Identifier::idPool("__va_list"))); } }; diff --git a/gen/functions.cpp b/gen/functions.cpp index 897c2709e9..571511a5d5 100644 --- a/gen/functions.cpp +++ b/gen/functions.cpp @@ -882,7 +882,7 @@ void DtoDefineFunction(FuncDeclaration *fd) { // D varargs: prepare _argptr and _arguments if (f->linkage == LINKd && f->varargs == 1) { // 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; // initialize _argptr with a call to the va_start intrinsic diff --git a/runtime/druntime b/runtime/druntime index dac245a567..c3a9601c15 160000 --- a/runtime/druntime +++ b/runtime/druntime @@ -1 +1 @@ -Subproject commit dac245a567b0b70ce9b7f1055831ddd2118784ea +Subproject commit c3a9601c157da388d37249038da1c9d95c32ed03