Index: source/uno/EnvStack.cxx =================================================================== RCS file: /cvs/udk/cppu/source/uno/EnvStack.cxx,v retrieving revision 1.3 diff -p -u -r1.3 EnvStack.cxx --- source/uno/EnvStack.cxx 16 May 2007 15:21:55 -0000 1.3 +++ source/uno/EnvStack.cxx 18 May 2007 15:07:54 -0000 @@ -228,16 +228,19 @@ static int s_getNextEnv(uno_Environment extern "C" { static void s_pull(va_list param) { uno_EnvCallee * pCallee = va_arg(param, uno_EnvCallee *); - va_list * xparam = va_arg(param, va_list *); - - pCallee(*xparam); +#if defined(__GNUC__) && defined(X86_64) + typeof(param[0]) * xparam = va_arg(param, typeof(param[0]) *); +#else + va_list xparam = va_arg(param, va_list); +#endif + pCallee(xparam); }} static void s_callInto_v(uno_Environment * pEnv, uno_EnvCallee * pCallee, va_list param) { cppu::Enterable * pEnterable = reinterpret_cast(pEnv->pReserved); if (pEnterable) - pEnterable->callInto(s_pull, pCallee, ¶m); + pEnterable->callInto(s_pull, pCallee, param); else pCallee(param); @@ -278,9 +281,13 @@ extern "C" { static void s_environment_i uno_Environment * pCurrEnv = va_arg(param, uno_Environment *); uno_Environment * pTargetEnv = va_arg(param, uno_Environment *); uno_EnvCallee * pCallee = va_arg(param, uno_EnvCallee *); - va_list * xparam = va_arg(param, va_list *); +#if defined(__GNUC__) && defined(X86_64) + typeof(param[0]) * xparam = va_arg(param, typeof(param[0]) *); +#else + va_list xparam = va_arg(param, va_list); +#endif - s_environment_invoke_v(pCurrEnv, pTargetEnv, pCallee, *xparam); + s_environment_invoke_v(pCurrEnv, pTargetEnv, pCallee, xparam); }} static void s_environment_invoke_v(uno_Environment * pCurrEnv, uno_Environment * pTargetEnv, uno_EnvCallee * pCallee, va_list param) @@ -290,7 +297,7 @@ static void s_environment_invoke_v(uno_E { case -1: s_setCurrent(pNextEnv); - s_callOut(pCurrEnv, s_environment_invoke_vv, pNextEnv, pTargetEnv, pCallee, ¶m); + s_callOut(pCurrEnv, s_environment_invoke_vv, pNextEnv, pTargetEnv, pCallee, param); s_setCurrent(pCurrEnv); break; @@ -304,7 +311,7 @@ static void s_environment_invoke_v(uno_E case 1: s_setCurrent(pNextEnv); - s_callInto(pNextEnv, s_environment_invoke_vv, pNextEnv, pTargetEnv, pCallee, ¶m); + s_callInto(pNextEnv, s_environment_invoke_vv, pNextEnv, pTargetEnv, pCallee, param); s_setCurrent(pCurrEnv); break; }