Уровень области видимости переменных с плагином GCC

Я пытаюсь написать простой плагин GCC, который идентифицирует все объявления переменных (глобальные и локальные) и их область действия, до сих пор я смог определить только локальные / глобальные.

Я бы хотел сделать что-то вроде:

int a = 3; /* Scope 0. */

int main()
{
    int a; /* Scope 1. */
    a = 5;
    {
        int a;  /* Scope 2 and so on... */
        a = 9;
    }
}

и мой реальный код выглядит так:

static void handle_finish_type (void *gcc_data, void *user_data)
{
    (void) user_data;
    tree t = (tree) gcc_data;

    /* Skip everything that is not var decl.  */
    if (TREE_CODE (t) == VAR_DECL)
        printf("scope: %d\n", TREE_PUBLIC(t));
}

int plugin_init (struct plugin_name_args *plugin_info,
    struct plugin_gcc_version *version)
{
    (void) version;

    const char *plugin_name = plugin_info->base_name;
    struct plugin_info pi = { "0.1", "Variable scope test" };
    register_callback (plugin_name, PLUGIN_INFO, NULL, &pi);

    register_callback (plugin_name, PLUGIN_FINISH_DECL,
        &handle_finish_type, NULL);

    return 0;
}

Я не знаю, возможно ли это с помощью плагинов, и если да, то какой проход следует искать и / или какую функцию / макрос следует использовать для этого?

0 ответов

Другие вопросы по тегам