Skip to content

Commit 301a669

Browse files
committed
Fix name clash between anon enums across TU (#171)
`return std::format("anon_enum_{}", GetLineNumber(enum_decl));` results in name clashes between enums declared in different files at the same line, I replaced that with `return GetNamedDeclAsString(enum_decl);`
1 parent cd5ba7e commit 301a669

2 files changed

Lines changed: 72 additions & 74 deletions

File tree

tests/unit/out/refcount/anonymous_enum_c.rs

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,37 @@ use std::io::{Read, Seek, Write};
77
use std::os::fd::AsFd;
88
use std::rc::{Rc, Weak};
99
#[derive(Clone, Copy, PartialEq, Debug, Default)]
10-
enum anon_enum_3 {
10+
enum anon_0 {
1111
#[default]
1212
FIRST_A = 0,
1313
FIRST_B = 1,
1414
}
15-
impl From<i32> for anon_enum_3 {
16-
fn from(n: i32) -> anon_enum_3 {
15+
impl From<i32> for anon_0 {
16+
fn from(n: i32) -> anon_0 {
1717
match n {
18-
0 => anon_enum_3::FIRST_A,
19-
1 => anon_enum_3::FIRST_B,
20-
_ => panic!("invalid anon_enum_3 value: {}", n),
18+
0 => anon_0::FIRST_A,
19+
1 => anon_0::FIRST_B,
20+
_ => panic!("invalid anon_0 value: {}", n),
2121
}
2222
}
2323
}
24-
libcc2rs::impl_enum_inc_dec!(anon_enum_3);
24+
libcc2rs::impl_enum_inc_dec!(anon_0);
2525
#[derive(Clone, Copy, PartialEq, Debug, Default)]
26-
enum anon_enum_11 {
26+
enum anon_1 {
2727
#[default]
2828
SECOND_A = 0,
2929
SECOND_B = 1,
3030
}
31-
impl From<i32> for anon_enum_11 {
32-
fn from(n: i32) -> anon_enum_11 {
31+
impl From<i32> for anon_1 {
32+
fn from(n: i32) -> anon_1 {
3333
match n {
34-
0 => anon_enum_11::SECOND_A,
35-
1 => anon_enum_11::SECOND_B,
36-
_ => panic!("invalid anon_enum_11 value: {}", n),
34+
0 => anon_1::SECOND_A,
35+
1 => anon_1::SECOND_B,
36+
_ => panic!("invalid anon_1 value: {}", n),
3737
}
3838
}
3939
}
40-
libcc2rs::impl_enum_inc_dec!(anon_enum_11);
40+
libcc2rs::impl_enum_inc_dec!(anon_1);
4141
#[derive(Default)]
4242
pub struct S {
4343
pub a: Value<i32>,
@@ -69,65 +69,63 @@ impl From<i32> for TdEnum_enum {
6969
}
7070
libcc2rs::impl_enum_inc_dec!(TdEnum_enum);
7171
#[derive(Clone, Copy, PartialEq, Debug, Default)]
72-
enum anon_enum_24 {
72+
enum anon_2 {
7373
#[default]
7474
FIELD_A = 0,
7575
FIELD_B = 1,
7676
}
77-
impl From<i32> for anon_enum_24 {
78-
fn from(n: i32) -> anon_enum_24 {
77+
impl From<i32> for anon_2 {
78+
fn from(n: i32) -> anon_2 {
7979
match n {
80-
0 => anon_enum_24::FIELD_A,
81-
1 => anon_enum_24::FIELD_B,
82-
_ => panic!("invalid anon_enum_24 value: {}", n),
80+
0 => anon_2::FIELD_A,
81+
1 => anon_2::FIELD_B,
82+
_ => panic!("invalid anon_2 value: {}", n),
8383
}
8484
}
8585
}
86-
libcc2rs::impl_enum_inc_dec!(anon_enum_24);
86+
libcc2rs::impl_enum_inc_dec!(anon_2);
8787
#[derive(Default)]
8888
pub struct WithAnonField {
8989
pub a: Value<i32>,
90-
pub field: Value<anon_enum_24>,
90+
pub field: Value<anon_2>,
9191
}
9292
impl ByteRepr for WithAnonField {}
9393
pub fn main() {
9494
std::process::exit(main_0());
9595
}
9696
fn main_0() -> i32 {
9797
#[derive(Clone, Copy, PartialEq, Debug, Default)]
98-
enum anon_enum_31 {
98+
enum anon_3 {
9999
#[default]
100100
THIRD_A = 0,
101101
THIRD_B = 1,
102102
}
103-
impl From<i32> for anon_enum_31 {
104-
fn from(n: i32) -> anon_enum_31 {
103+
impl From<i32> for anon_3 {
104+
fn from(n: i32) -> anon_3 {
105105
match n {
106-
0 => anon_enum_31::THIRD_A,
107-
1 => anon_enum_31::THIRD_B,
108-
_ => panic!("invalid anon_enum_31 value: {}", n),
106+
0 => anon_3::THIRD_A,
107+
1 => anon_3::THIRD_B,
108+
_ => panic!("invalid anon_3 value: {}", n),
109109
}
110110
}
111111
}
112-
libcc2rs::impl_enum_inc_dec!(anon_enum_31);
113-
assert!(((((anon_enum_3::FIRST_A as i32) != (anon_enum_3::FIRST_B as i32)) as i32) != 0));
114-
assert!(((((anon_enum_11::SECOND_A as i32) != (anon_enum_11::SECOND_B as i32)) as i32) != 0));
115-
assert!(((((anon_enum_31::THIRD_A as i32) != (anon_enum_31::THIRD_B as i32)) as i32) != 0));
112+
libcc2rs::impl_enum_inc_dec!(anon_3);
113+
assert!(((((anon_0::FIRST_A as i32) != (anon_0::FIRST_B as i32)) as i32) != 0));
114+
assert!(((((anon_1::SECOND_A as i32) != (anon_1::SECOND_B as i32)) as i32) != 0));
115+
assert!(((((anon_3::THIRD_A as i32) != (anon_3::THIRD_B as i32)) as i32) != 0));
116116
let td: Value<TdEnum_enum> = Rc::new(RefCell::new(TdEnum_enum::TD_A));
117117
assert!((((((*td.borrow()) as u32) == ((TdEnum_enum::TD_A as i32) as u32)) as i32) != 0));
118118
(*td.borrow_mut()) = TdEnum_enum::TD_B;
119119
assert!((((((*td.borrow()) as u32) == ((TdEnum_enum::TD_B as i32) as u32)) as i32) != 0));
120120
let w: Value<WithAnonField> = <Value<WithAnonField>>::default();
121-
(*(*w.borrow()).field.borrow_mut()) = anon_enum_24::FIELD_A;
121+
(*(*w.borrow()).field.borrow_mut()) = anon_2::FIELD_A;
122122
assert!(
123-
(((((*(*w.borrow()).field.borrow()) as u32) == ((anon_enum_24::FIELD_A as i32) as u32))
124-
as i32)
123+
(((((*(*w.borrow()).field.borrow()) as u32) == ((anon_2::FIELD_A as i32) as u32)) as i32)
125124
!= 0)
126125
);
127-
(*(*w.borrow()).field.borrow_mut()) = anon_enum_24::FIELD_B;
126+
(*(*w.borrow()).field.borrow_mut()) = anon_2::FIELD_B;
128127
assert!(
129-
(((((*(*w.borrow()).field.borrow()) as u32) == ((anon_enum_24::FIELD_B as i32) as u32))
130-
as i32)
128+
(((((*(*w.borrow()).field.borrow()) as u32) == ((anon_2::FIELD_B as i32) as u32)) as i32)
131129
!= 0)
132130
);
133131
return 0;

tests/unit/out/unsafe/anonymous_enum_c.rs

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,37 @@ use std::io::{Read, Seek, Write};
77
use std::os::fd::{AsFd, FromRawFd, IntoRawFd};
88
use std::rc::Rc;
99
#[derive(Clone, Copy, PartialEq, Debug, Default)]
10-
enum anon_enum_3 {
10+
enum anon_0 {
1111
#[default]
1212
FIRST_A = 0,
1313
FIRST_B = 1,
1414
}
15-
impl From<i32> for anon_enum_3 {
16-
fn from(n: i32) -> anon_enum_3 {
15+
impl From<i32> for anon_0 {
16+
fn from(n: i32) -> anon_0 {
1717
match n {
18-
0 => anon_enum_3::FIRST_A,
19-
1 => anon_enum_3::FIRST_B,
20-
_ => panic!("invalid anon_enum_3 value: {}", n),
18+
0 => anon_0::FIRST_A,
19+
1 => anon_0::FIRST_B,
20+
_ => panic!("invalid anon_0 value: {}", n),
2121
}
2222
}
2323
}
24-
libcc2rs::impl_enum_inc_dec!(anon_enum_3);
24+
libcc2rs::impl_enum_inc_dec!(anon_0);
2525
#[derive(Clone, Copy, PartialEq, Debug, Default)]
26-
enum anon_enum_11 {
26+
enum anon_1 {
2727
#[default]
2828
SECOND_A = 0,
2929
SECOND_B = 1,
3030
}
31-
impl From<i32> for anon_enum_11 {
32-
fn from(n: i32) -> anon_enum_11 {
31+
impl From<i32> for anon_1 {
32+
fn from(n: i32) -> anon_1 {
3333
match n {
34-
0 => anon_enum_11::SECOND_A,
35-
1 => anon_enum_11::SECOND_B,
36-
_ => panic!("invalid anon_enum_11 value: {}", n),
34+
0 => anon_1::SECOND_A,
35+
1 => anon_1::SECOND_B,
36+
_ => panic!("invalid anon_1 value: {}", n),
3737
}
3838
}
3939
}
40-
libcc2rs::impl_enum_inc_dec!(anon_enum_11);
40+
libcc2rs::impl_enum_inc_dec!(anon_1);
4141
#[repr(C)]
4242
#[derive(Copy, Clone, Default)]
4343
pub struct S {
@@ -60,26 +60,26 @@ impl From<i32> for TdEnum_enum {
6060
}
6161
libcc2rs::impl_enum_inc_dec!(TdEnum_enum);
6262
#[derive(Clone, Copy, PartialEq, Debug, Default)]
63-
enum anon_enum_24 {
63+
enum anon_2 {
6464
#[default]
6565
FIELD_A = 0,
6666
FIELD_B = 1,
6767
}
68-
impl From<i32> for anon_enum_24 {
69-
fn from(n: i32) -> anon_enum_24 {
68+
impl From<i32> for anon_2 {
69+
fn from(n: i32) -> anon_2 {
7070
match n {
71-
0 => anon_enum_24::FIELD_A,
72-
1 => anon_enum_24::FIELD_B,
73-
_ => panic!("invalid anon_enum_24 value: {}", n),
71+
0 => anon_2::FIELD_A,
72+
1 => anon_2::FIELD_B,
73+
_ => panic!("invalid anon_2 value: {}", n),
7474
}
7575
}
7676
}
77-
libcc2rs::impl_enum_inc_dec!(anon_enum_24);
77+
libcc2rs::impl_enum_inc_dec!(anon_2);
7878
#[repr(C)]
7979
#[derive(Copy, Clone, Default)]
8080
pub struct WithAnonField {
8181
pub a: i32,
82-
pub field: anon_enum_24,
82+
pub field: anon_2,
8383
}
8484
pub fn main() {
8585
unsafe {
@@ -88,32 +88,32 @@ pub fn main() {
8888
}
8989
unsafe fn main_0() -> i32 {
9090
#[derive(Clone, Copy, PartialEq, Debug, Default)]
91-
enum anon_enum_31 {
91+
enum anon_3 {
9292
#[default]
9393
THIRD_A = 0,
9494
THIRD_B = 1,
9595
}
96-
impl From<i32> for anon_enum_31 {
97-
fn from(n: i32) -> anon_enum_31 {
96+
impl From<i32> for anon_3 {
97+
fn from(n: i32) -> anon_3 {
9898
match n {
99-
0 => anon_enum_31::THIRD_A,
100-
1 => anon_enum_31::THIRD_B,
101-
_ => panic!("invalid anon_enum_31 value: {}", n),
99+
0 => anon_3::THIRD_A,
100+
1 => anon_3::THIRD_B,
101+
_ => panic!("invalid anon_3 value: {}", n),
102102
}
103103
}
104104
}
105-
libcc2rs::impl_enum_inc_dec!(anon_enum_31);
106-
assert!(((((anon_enum_3::FIRST_A as i32) != (anon_enum_3::FIRST_B as i32)) as i32) != 0));
107-
assert!(((((anon_enum_11::SECOND_A as i32) != (anon_enum_11::SECOND_B as i32)) as i32) != 0));
108-
assert!(((((anon_enum_31::THIRD_A as i32) != (anon_enum_31::THIRD_B as i32)) as i32) != 0));
105+
libcc2rs::impl_enum_inc_dec!(anon_3);
106+
assert!(((((anon_0::FIRST_A as i32) != (anon_0::FIRST_B as i32)) as i32) != 0));
107+
assert!(((((anon_1::SECOND_A as i32) != (anon_1::SECOND_B as i32)) as i32) != 0));
108+
assert!(((((anon_3::THIRD_A as i32) != (anon_3::THIRD_B as i32)) as i32) != 0));
109109
let mut td: TdEnum_enum = TdEnum_enum::TD_A;
110110
assert!(((((td as u32) == ((TdEnum_enum::TD_A as i32) as u32)) as i32) != 0));
111111
td = (TdEnum_enum::TD_B).clone();
112112
assert!(((((td as u32) == ((TdEnum_enum::TD_B as i32) as u32)) as i32) != 0));
113113
let mut w: WithAnonField = <WithAnonField>::default();
114-
w.field = anon_enum_24::FIELD_A;
115-
assert!(((((w.field as u32) == ((anon_enum_24::FIELD_A as i32) as u32)) as i32) != 0));
116-
w.field = (anon_enum_24::FIELD_B).clone();
117-
assert!(((((w.field as u32) == ((anon_enum_24::FIELD_B as i32) as u32)) as i32) != 0));
114+
w.field = anon_2::FIELD_A;
115+
assert!(((((w.field as u32) == ((anon_2::FIELD_A as i32) as u32)) as i32) != 0));
116+
w.field = (anon_2::FIELD_B).clone();
117+
assert!(((((w.field as u32) == ((anon_2::FIELD_B as i32) as u32)) as i32) != 0));
118118
return 0;
119119
}

0 commit comments

Comments
 (0)