VirtualBox

vbox的更動 69091 路徑 trunk/src/bldprogs


忽略:
時間撮記:
2017-10-14 上午02:41:12 (7 年 以前)
作者:
vboxsync
訊息:

gccplugin: va_arg workaround

位置:
trunk/src/bldprogs
檔案:
修改 2 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/bldprogs/VBoxCompilerPlugInsGcc.cpp

    r69076 r69091  
    642642                tree const hFn = gimple_call_fn(hStmt);
    643643                dprintf("     hFn    =%p %s(%d); args=%d\n",
    644                         hFn, get_tree_code_name(TREE_CODE(hFn)), TREE_CODE(hFn), gimple_call_num_args(hStmt));
     644                        hFn, hFn ? get_tree_code_name(TREE_CODE(hFn)) : NULL, hFn ? TREE_CODE(hFn) : - 1,
     645                        gimple_call_num_args(hStmt));
    645646#ifdef DEBUG
    646                 if (DECL_P(hFn))
     647                if (hFn && DECL_P(hFn))
    647648                    dprintf("     hFn is decl: %s %s:%d\n",
    648649                            DECL_NAME(hFn) ? IDENTIFIER_POINTER(DECL_NAME(hFn)) : "<unamed>",
     
    657658                tree const hFnType = gimple_call_fntype(hStmt);
    658659                if (hFnType == NULL_TREE)
    659                     error_at(gimple_location(hStmt), "Failed to resolve function type [fn=%s]\n",
    660                              get_tree_code_name(TREE_CODE(hFn)));
     660                {
     661                    if (   hFnDecl == NULL_TREE
     662                        && gimple_call_internal_p(hStmt) /* va_arg() kludge */)
     663                        continue;
     664                    error_at(gimple_location(hStmt), "Failed to resolve function type [fn=%s fndecl=%s]\n",
     665                             hFn ? get_tree_code_name(TREE_CODE(hFn)) : "<null>",
     666                             hFnDecl ? get_tree_code_name(TREE_CODE(hFnDecl)) : "<null>");
     667                }
    661668                else if (POINTER_TYPE_P(hFnType))
    662669                    error_at(gimple_location(hStmt), "Got a POINTER_TYPE when expecting a function type [fn=%s]\n",
  • trunk/src/bldprogs/test-gccplugin-2.c

    r57072 r69091  
    1111extern PRTGCPHYS  g_pGCPhys;
    1212
    13 void foo(void)
     13#include <stdarg.h>
     14
     15void foo(const char *pszFormat, ...)
    1416{
    1517    MyIprtPrintf("%s %RX64 %RGp %p %RGp", "foobar", g_ull, g_GCPhys, g_pGCPhys, *g_pGCPhys);
    1618    MyIprtPrintf("%RX32 %d %s\n", 10, 42, "string");
     19    MyIprtPrintf("%u %.8Rhxs %d\n", 10, &g_ull, 42);
     20    MyIprtPrintf("%u %.8RhxD %d\n", 10, &g_ull, 42);
     21    {
     22        va_list va;
     23        int iValue;
     24        va_start(va, pszFormat);
     25        iValue = va_arg(va, int);
     26        va_end(va);
     27        MyIprtPrintf("%u\n", iValue);
     28    }
    1729}
    1830
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette