Respect -Z proc-macro-backtrace flag for panics inside libproc_macro

Fixes #76270

Previously, any panic occuring during a call to a libproc_macro method
(e.g. calling `Ident::new` with an invalid identifier) would always
cause an ICE message to be printed.
This commit is contained in:
Aaron Hill 2020-09-03 12:11:18 -04:00
parent 08deb863bd
commit 53cce257ae
No known key found for this signature in database
GPG Key ID: B4087E510E98B164
4 changed files with 42 additions and 3 deletions

View File

@ -305,6 +305,7 @@ impl Bridge<'_> {
}
fn enter<R>(self, f: impl FnOnce() -> R) -> R {
let force_show_panics = self.force_show_panics;
// Hide the default panic output within `proc_macro` expansions.
// NB. the server can't do this because it may use a different libstd.
static HIDE_PANICS_DURING_EXPANSION: Once = Once::new();
@ -313,9 +314,7 @@ impl Bridge<'_> {
panic::set_hook(Box::new(move |info| {
let show = BridgeState::with(|state| match state {
BridgeState::NotConnected => true,
// Something weird is going on, so don't suppress any backtraces
BridgeState::InUse => true,
BridgeState::Connected(bridge) => bridge.force_show_panics,
BridgeState::Connected(_) | BridgeState::InUse => force_show_panics,
});
if show {
prev(info)

View File

@ -0,0 +1,13 @@
// force-host
// no-prefer-dynamic
#![crate_type = "proc-macro"]
extern crate proc_macro;
use proc_macro::{TokenStream, Ident, Span};
#[proc_macro]
pub fn panic_in_libproc_macro(_: TokenStream) -> TokenStream {
Ident::new("", Span::call_site());
TokenStream::new()
}

View File

@ -0,0 +1,17 @@
// aux-build:proc-macro-panic.rs
// edition:2018
// ignore-stage1
// only-linux
//
// FIXME: This should be a normal (stage1, all platforms) test in
// src/test/ui/proc-macro once issue #59998 is fixed.
// Regression test for issue #76270
// Tests that we don't print an ICE message when a panic
// occurs in libproc-macro (when `-Z proc-macro-backtrace` is not specified)
extern crate proc_macro_panic;
proc_macro_panic::panic_in_libproc_macro!(); //~ ERROR proc macro panicked
fn main() {}

View File

@ -0,0 +1,10 @@
error: proc macro panicked
--> $DIR/issue-76270-panic-in-libproc-macro.rs:15:1
|
LL | proc_macro_panic::panic_in_libproc_macro!();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: message: `""` is not a valid identifier
error: aborting due to previous error