# HG changeset patch # User Tomas Lindquist Olsen # Date 1216837278 -7200 # Node ID 3f98d46e05a4b33eb8f91d6f0f07754d1d4cdd7e # Parent c028fd91b3b0f09d8dbb408e9f318a7e2966a3de Fixed segfault when using va_arg. Fixed segfault when accessing function symbols from inline asm. diff -r c028fd91b3b0 -r 3f98d46e05a4 gen/d-asm-i386.h --- a/gen/d-asm-i386.h Wed Jul 23 18:53:44 2008 +0200 +++ b/gen/d-asm-i386.h Wed Jul 23 20:21:18 2008 +0200 @@ -2036,7 +2036,9 @@ } } else if (exp->op == TOKvar) { VarDeclaration * v = ((VarExp *) exp)->var->isVarDeclaration(); - v->needsStorage = true; + if (v) { + v->needsStorage = true; + } if (v && v->storage_class & STCfield) { operand->constDisplacement += v->offset; diff -r c028fd91b3b0 -r 3f98d46e05a4 gen/toir.cpp --- a/gen/toir.cpp Wed Jul 23 18:53:44 2008 +0200 +++ b/gen/toir.cpp Wed Jul 23 20:21:18 2008 +0200 @@ -254,10 +254,12 @@ else if (FuncDeclaration* fdecl = var->isFuncDeclaration()) { Logger::println("FuncDeclaration"); - if (fdecl->llvmInternal != LLVMva_arg) {// && fdecl->llvmValue == 0) + LLValue* func = 0; + if (fdecl->llvmInternal != LLVMva_arg) { DtoForceDeclareDsymbol(fdecl); + func = fdecl->ir.irFunc->func; } - return new DFuncValue(fdecl, fdecl->ir.irFunc->func); + return new DFuncValue(fdecl, func); } else if (SymbolDeclaration* sdecl = var->isSymbolDeclaration()) {