rustc --pretty extended использует всю мою оперативную память при разборе макроса расширения внутри внешнего блока - PullRequest
0 голосов
/ 21 сентября 2018

Я пишу реализацию Lua в Rust, и я пришел к тому, что у меня было множество определений функций, которые снова и снова были более или менее одинаковыми.Я решил попытать счастья в написании макроса, чтобы сделать работу за меня:

#![feature(macros_in_extern)]
#![feature(concat_idents)]

macro_rules! lua_func {
    ($name: ident, $ret: ty, $var: ident, $type: ty) => {
        let fn_name = concat_idents!(lua_, $name);
        pub fn fn_name (L: *mut lua_State, $var: $type) -> $ret
    };
}

extern "C" {
    lua_func!(toboolean, bool, idx, int);
}

Когда я сделаю это

lua_func!(toboolean, bool, idx, int);

Я ожидаю, что он расширится до

pub fn lua_toboolean (L: *mut lua_State, idx: int) -> bool;

, но при запуске rustc --pretty expanded для проверки он очищает оперативную память моего компьютера через несколько секунд, если я не выполняю немедленно ^C.

Я говорю, что этот макрос является причиной проблемы, потому чтокогда я удалил использование макроса, команда успешно запустилась и вывела текст со всеми развернутыми макросами.

Что я делаю не так?

rustc --version --verbose вывод:

rustc 1.30.0-nightly (3bc2ca7e4 2018-09-20)
binary: rustc
commit-hash: 3bc2ca7e4f8507f82a4c357ee19300166bcd8099
commit-date: 2018-09-20
host: x86_64-unknown-linux-gnu
release: 1.30.0-nightly
LLVM version: 8.0

В этой версии команда rustc --pretty expanded -Z unstable-options с файлом MCVE воспроизводит проблему на моем компьютере.

1 Ответ

0 голосов
/ 07 октября 2018

Это была ошибка компилятора: rust-lang / rust # 54441 .Он установлен по состоянию на Rust 1.31 и в ночных версиях новее, чем 1.31.0-nightly 4efdc04a5 2018-10-06.

...