Skip to content

multiline cfg_attr in a doctest outputs a corrupted snippet #55713

Closed
@scampi

Description

@scampi

With following doctest, where the cfg attribute spans multiple lines, the final program is invalid: the wrapping main method doesn't take into account the dangling stdsimd))] line that closes the attribute.

/// ```rust
/// # #![cfg_attr(not(dox), feature(cfg_target_feature, target_feature,
/// # stdsimd))]
///
/// fn foo() {
///     let mut dst = [0];
///     add_quickly(&[1], &[2], &mut dst);
///     assert_eq!(dst[0], 3);
/// }
/// ```
 INFO 2018-11-06T10:25:21Z: rustdoc::test: final test program: #![allow(unused)]
#![cfg_attr(not(dox), feature(cfg_target_feature, target_feature,
extern crate stdsimd;
fn main() {
stdsimd))]

fn foo() {
    let mut dst = [0];
    add_quickly(&[1], &[2], &mut dst);
    assert_eq!(dst[0], 3);
}
}

Meta

$ rustc --version --verbose
rustc 1.32.0-nightly (13dab66a6 2018-11-05)
binary: rustc
commit-hash: 13dab66a6f6403f4eee092456f7f8f46199c5859
commit-date: 2018-11-05
host: x86_64-unknown-linux-gnu
release: 1.32.0-nightly
LLVM version: 8.0
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
             at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1: std::sys_common::backtrace::_print
             at libstd/sys_common/backtrace.rs:71
   2: std::panicking::default_hook::{{closure}}
             at libstd/sys_common/backtrace.rs:59
             at libstd/panicking.rs:211
   3: std::panicking::default_hook
             at libstd/panicking.rs:221
   4: std::panicking::rust_panic_with_hook
             at libstd/panicking.rs:476
   5: std::panicking::begin_panic
             at /rustc/13dab66a6f6403f4eee092456f7f8f46199c5859/src/libstd/panicking.rs:410
   6: rustdoc::test::run_test
             at librustdoc/test.rs:323
   7: <scoped_tls::ScopedKey<T>>::set
             at librustdoc/test.rs:654
             at /cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-0.1.2/src/lib.rs:155
             at /rustc/13dab66a6f6403f4eee092456f7f8f46199c5859/src/libsyntax/lib.rs:123
             at /cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-0.1.2/src/lib.rs:155
   8: syntax::with_globals
             at /rustc/13dab66a6f6403f4eee092456f7f8f46199c5859/src/libsyntax/lib.rs:122
   9: std::panicking::try::do_call
             at librustdoc/test.rs:651
             at /rustc/13dab66a6f6403f4eee092456f7f8f46199c5859/src/libstd/panic.rs:319
             at /rustc/13dab66a6f6403f4eee092456f7f8f46199c5859/src/libstd/panicking.rs:310
  10: __rust_maybe_catch_panic
             at libpanic_unwind/lib.rs:102
  11: rustc_driver::in_named_rustc_thread
             at /rustc/13dab66a6f6403f4eee092456f7f8f46199c5859/src/libstd/panicking.rs:289
             at /rustc/13dab66a6f6403f4eee092456f7f8f46199c5859/src/libstd/panic.rs:398
             at /rustc/13dab66a6f6403f4eee092456f7f8f46199c5859/src/librustc_driver/lib.rs:1554
  12: <F as alloc::boxed::FnBox<A>>::call_box
             at librustdoc/test.rs:651
             at /rustc/13dab66a6f6403f4eee092456f7f8f46199c5859/src/liballoc/boxed.rs:672
  13: <F as alloc::boxed::FnBox<A>>::call_box
             at libtest/lib.rs:1464
             at /rustc/13dab66a6f6403f4eee092456f7f8f46199c5859/src/liballoc/boxed.rs:672
  14: __rust_maybe_catch_panic
             at libpanic_unwind/lib.rs:102

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-doctestsArea: Documentation tests, run by rustdocT-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions