File: cfg_stmt_expr.rs

package info (click to toggle)
rustc 1.85.0%2Bdfsg3-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, sid, trixie
  • size: 893,396 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,051; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (92 lines) | stat: -rw-r--r-- 1,739 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//@ run-pass
#![allow(dead_code)]
#![allow(unused_mut)]
#![allow(unused_variables)]
#![deny(non_snake_case)]
#![feature(stmt_expr_attributes)]

fn main() {
    let a = 413;
    #[cfg(FALSE)]
    let a = ();
    assert_eq!(a, 413);

    let mut b = 612;
    #[cfg(FALSE)]
    {
        b = 1111;
    }
    assert_eq!(b, 612);

    #[cfg(FALSE)]
    undefined_fn();

    #[cfg(FALSE)]
    undefined_macro!();
    #[cfg(FALSE)]
    undefined_macro![];
    #[cfg(FALSE)]
    undefined_macro!{};

    // pretty printer bug...
    // #[cfg(FALSE)]
    // undefined_macro!{}

    let () = (#[cfg(FALSE)] 341,); // Should this also work on parens?
    let t = (1, #[cfg(FALSE)] 3, 4);
    assert_eq!(t, (1, 4));

    let f = |_: u32, _: u32| ();
    f(2, 1, #[cfg(FALSE)] 6);

    let _: u32 = a.clone(#[cfg(FALSE)] undefined);

    let _: [(); 0] = [#[cfg(FALSE)] 126];
    let t = [#[cfg(FALSE)] 1, 2, 6];
    assert_eq!(t, [2, 6]);

    {
        let r;
        #[cfg(FALSE)]
        (r = 5);
        #[cfg(not(FALSE))]
        (r = 10);
        assert_eq!(r, 10);
    }

    // check that macro expanded code works

    macro_rules! if_cfg {
        ($cfg:meta? $ib:block else $eb:block) => {
            {
                let r;
                #[cfg($cfg)]
                (r = $ib);
                #[cfg(not($cfg))]
                (r = $eb);
                r
            }
        }
    }

    let n = if_cfg!(FALSE? {
        413
    } else {
        612
    });

    assert_eq!((#[cfg(FALSE)] 1, #[cfg(not(FALSE))] 2), (2,));
    assert_eq!(n, 612);

    // check that lints work

    #[allow(non_snake_case)]
    let FOOBAR: () = {
        fn SYLADEX() {}
    };

    #[allow(non_snake_case)]
    {
        fn CRUXTRUDER() {}
    }
}