Skip to content

Commit 4dc9b4c

Browse files
committed
Avoid shadowing of static variables
1 parent 943b97c commit 4dc9b4c

37 files changed

Lines changed: 403 additions & 298 deletions

cpp2rust/converter/converter.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,10 @@ void Converter::ConvertVaListVarDecl(clang::VarDecl *decl) {
393393
StrCat(keyword_mut_, GetNamedDeclAsString(decl), token::kColon, "VaList");
394394
}
395395

396+
static std::string StaticVarName(const clang::NamedDecl *decl) {
397+
return "s_" + ReplaceAll(Mapper::ToString(decl), "::", "_");
398+
}
399+
396400
bool Converter::ConvertVarDeclSkipInit(clang::VarDecl *decl) {
397401
auto qual_type = decl->getType();
398402
auto name = GetNamedDeclAsString(decl);
@@ -403,7 +407,7 @@ bool Converter::ConvertVarDeclSkipInit(clang::VarDecl *decl) {
403407
}
404408

405409
if (decl->isFileVarDecl()) {
406-
name = ReplaceAll(Mapper::ToString(decl), "::", "_");
410+
name = StaticVarName(decl);
407411
if ((decl->isThisDeclarationADefinition() ==
408412
clang::VarDecl::DeclarationOnly &&
409413
!decl->hasInit()) ||
@@ -414,6 +418,7 @@ bool Converter::ConvertVarDeclSkipInit(clang::VarDecl *decl) {
414418
keyword_mut_);
415419
ENSURE(decl_ids_.insert(GetID(decl)).second);
416420
} else if (decl->isStaticLocal()) {
421+
name = StaticVarName(decl);
417422
StrCat(keyword::kStatic, keyword_mut_);
418423
} else if (decl->isLocalVarDecl()) {
419424
StrCat(keyword::kLet);
@@ -2378,7 +2383,7 @@ std::string Converter::ConvertDeclRefExpr(clang::DeclRefExpr *expr) {
23782383
}
23792384

23802385
if (IsGlobalVar(expr)) {
2381-
return ReplaceAll(Mapper::ToString(expr->getDecl()), "::", "_");
2386+
return StaticVarName(expr->getDecl());
23822387
}
23832388

23842389
return GetNamedDeclAsString(decl);

tests/unit/out/refcount/addr_of_global.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,75 +42,75 @@ impl Clone for Outer {
4242
}
4343
impl ByteRepr for Outer {}
4444
thread_local!(
45-
pub static alpha: Value<Inner> = Rc::new(RefCell::new(Inner {
45+
pub static s_alpha: Value<Inner> = Rc::new(RefCell::new(Inner {
4646
value: Rc::new(RefCell::new(1)),
4747
}));
4848
);
4949
thread_local!(
50-
pub static beta: Value<Inner> = Rc::new(RefCell::new(Inner {
50+
pub static s_beta: Value<Inner> = Rc::new(RefCell::new(Inner {
5151
value: Rc::new(RefCell::new(2)),
5252
}));
5353
);
5454
thread_local!(
55-
pub static shared: Value<Inner> = Rc::new(RefCell::new(Inner {
55+
pub static s_shared: Value<Inner> = Rc::new(RefCell::new(Inner {
5656
value: Rc::new(RefCell::new(42)),
5757
}));
5858
);
5959
thread_local!(
60-
pub static items: Value<Box<[Ptr<Inner>]>> = Rc::new(RefCell::new(Box::new([
61-
(alpha.with(Value::clone).as_pointer()),
62-
(beta.with(Value::clone).as_pointer()),
60+
pub static s_items: Value<Box<[Ptr<Inner>]>> = Rc::new(RefCell::new(Box::new([
61+
(s_alpha.with(Value::clone).as_pointer()),
62+
(s_beta.with(Value::clone).as_pointer()),
6363
])));
6464
);
6565
thread_local!(
66-
pub static obj: Value<Outer> = Rc::new(RefCell::new(Outer {
67-
p: Rc::new(RefCell::new((shared.with(Value::clone).as_pointer()))),
66+
pub static s_obj: Value<Outer> = Rc::new(RefCell::new(Outer {
67+
p: Rc::new(RefCell::new((s_shared.with(Value::clone).as_pointer()))),
6868
}));
6969
);
7070
pub fn main() {
7171
std::process::exit(main_0());
7272
}
7373
fn main_0() -> i32 {
7474
assert!(
75-
((*(*(*items.with(Value::clone).borrow())[(0) as usize]
75+
((*(*(*s_items.with(Value::clone).borrow())[(0) as usize]
7676
.upgrade()
7777
.deref())
7878
.value
7979
.borrow())
8080
== 1)
8181
);
8282
assert!(
83-
((*(*(*items.with(Value::clone).borrow())[(1) as usize]
83+
((*(*(*s_items.with(Value::clone).borrow())[(1) as usize]
8484
.upgrade()
8585
.deref())
8686
.value
8787
.borrow())
8888
== 2)
8989
);
9090
assert!(
91-
((*(*(*(*obj.with(Value::clone).borrow()).p.borrow())
91+
((*(*(*(*s_obj.with(Value::clone).borrow()).p.borrow())
9292
.upgrade()
9393
.deref())
9494
.value
9595
.borrow())
9696
== 42)
9797
);
9898
thread_local!(
99-
static cache: Value<Box<[Ptr<Inner>]>> = Rc::new(RefCell::new(Box::new([
100-
(alpha.with(Value::clone).as_pointer()),
101-
(beta.with(Value::clone).as_pointer()),
99+
static s_cache: Value<Box<[Ptr<Inner>]>> = Rc::new(RefCell::new(Box::new([
100+
(s_alpha.with(Value::clone).as_pointer()),
101+
(s_beta.with(Value::clone).as_pointer()),
102102
])));
103103
);
104104
assert!(
105-
((*(*(*cache.with(Value::clone).borrow())[(0) as usize]
105+
((*(*(*s_cache.with(Value::clone).borrow())[(0) as usize]
106106
.upgrade()
107107
.deref())
108108
.value
109109
.borrow())
110110
== 1)
111111
);
112112
assert!(
113-
((*(*(*cache.with(Value::clone).borrow())[(1) as usize]
113+
((*(*(*s_cache.with(Value::clone).borrow())[(1) as usize]
114114
.upgrade()
115115
.deref())
116116
.value

tests/unit/out/refcount/bool_condition_logical.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ impl From<i32> for Code {
2525
}
2626
libcc2rs::impl_enum_inc_dec!(Code);
2727
thread_local!(
28-
pub static side_effect: Value<i32> = Rc::new(RefCell::new(0));
28+
pub static s_side_effect: Value<i32> = Rc::new(RefCell::new(0));
2929
);
3030
pub fn observe_0(v: i32) -> i32 {
3131
let v: Value<i32> = Rc::new(RefCell::new(v));
32-
(*side_effect.with(Value::clone).borrow_mut()).prefix_inc();
32+
(*s_side_effect.with(Value::clone).borrow_mut()).prefix_inc();
3333
return (*v.borrow());
3434
}
3535
pub fn returns_one_1() -> i32 {
@@ -66,7 +66,7 @@ fn main_0() -> i32 {
6666
{
6767
assert!(true);
6868
}
69-
(*side_effect.with(Value::clone).borrow_mut()) = 0;
69+
(*s_side_effect.with(Value::clone).borrow_mut()) = 0;
7070
if ((*zero.borrow()) != 0)
7171
&& (({
7272
let _v: i32 = 1;
@@ -75,7 +75,7 @@ fn main_0() -> i32 {
7575
{
7676
assert!(false);
7777
}
78-
assert!(((*side_effect.with(Value::clone).borrow()) == 0));
78+
assert!(((*s_side_effect.with(Value::clone).borrow()) == 0));
7979
if ((*n.borrow()) != 0)
8080
|| (({
8181
let _v: i32 = 1;
@@ -84,7 +84,7 @@ fn main_0() -> i32 {
8484
{
8585
assert!(true);
8686
}
87-
assert!(((*side_effect.with(Value::clone).borrow()) == 0));
87+
assert!(((*s_side_effect.with(Value::clone).borrow()) == 0));
8888
let x: Value<i32> = Rc::new(RefCell::new(5));
8989
let y: Value<i32> = Rc::new(RefCell::new(3));
9090
let flags: Value<u32> = Rc::new(RefCell::new(2_u32));

tests/unit/out/refcount/bool_condition_logical_c.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ impl From<i32> for Code {
2525
}
2626
libcc2rs::impl_enum_inc_dec!(Code);
2727
thread_local!(
28-
pub static side_effect: Value<i32> = Rc::new(RefCell::new(0));
28+
pub static s_side_effect: Value<i32> = Rc::new(RefCell::new(0));
2929
);
3030
pub fn observe_0(v: i32) -> i32 {
3131
let v: Value<i32> = Rc::new(RefCell::new(v));
32-
(*side_effect.with(Value::clone).borrow_mut()).prefix_inc();
32+
(*s_side_effect.with(Value::clone).borrow_mut()).prefix_inc();
3333
return (*v.borrow());
3434
}
3535
pub fn returns_one_1() -> i32 {
@@ -70,7 +70,7 @@ fn main_0() -> i32 {
7070
{
7171
assert!((1 != 0));
7272
}
73-
(*side_effect.with(Value::clone).borrow_mut()) = 0;
73+
(*s_side_effect.with(Value::clone).borrow_mut()) = 0;
7474
if (((((*zero.borrow()) != 0)
7575
&& (({
7676
let _v: i32 = 1;
@@ -80,7 +80,7 @@ fn main_0() -> i32 {
8080
{
8181
assert!((0 != 0));
8282
}
83-
assert!(((((*side_effect.with(Value::clone).borrow()) == 0) as i32) != 0));
83+
assert!(((((*s_side_effect.with(Value::clone).borrow()) == 0) as i32) != 0));
8484
if (((((*n.borrow()) != 0)
8585
|| (({
8686
let _v: i32 = 1;
@@ -90,7 +90,7 @@ fn main_0() -> i32 {
9090
{
9191
assert!((1 != 0));
9292
}
93-
assert!(((((*side_effect.with(Value::clone).borrow()) == 0) as i32) != 0));
93+
assert!(((((*s_side_effect.with(Value::clone).borrow()) == 0) as i32) != 0));
9494
let x: Value<i32> = Rc::new(RefCell::new(5));
9595
let y: Value<i32> = Rc::new(RefCell::new(3));
9696
let flags: Value<u32> = Rc::new(RefCell::new(2_u32));

tests/unit/out/refcount/default_in_statics.rs

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -99,18 +99,18 @@ impl Default for Foo {
9999
}
100100
impl ByteRepr for Foo {}
101101
thread_local!(
102-
pub static static_fn: Value<FnPtr<fn(i32) -> i32>> = Rc::new(RefCell::new(FnPtr::null()));
102+
pub static s_static_fn: Value<FnPtr<fn(i32) -> i32>> = Rc::new(RefCell::new(FnPtr::null()));
103103
);
104104
thread_local!(
105-
pub static static_outer: Value<Outer> = Rc::new(RefCell::new(<Outer>::default()));
105+
pub static s_static_outer: Value<Outer> = Rc::new(RefCell::new(<Outer>::default()));
106106
);
107107
thread_local!(
108-
pub static static_inner_array: Value<Box<[Inner]>> = Rc::new(RefCell::new(
108+
pub static s_static_inner_array: Value<Box<[Inner]>> = Rc::new(RefCell::new(
109109
(0..2).map(|_| <Inner>::default()).collect::<Box<[Inner]>>(),
110110
));
111111
);
112112
thread_local!(
113-
pub static static_foo: Value<Foo> = Rc::new(RefCell::new(Foo {
113+
pub static s_static_foo: Value<Foo> = Rc::new(RefCell::new(Foo {
114114
s1: Rc::new(RefCell::new(Ptr::from_string_literal("hello"))),
115115
s2: Rc::new(RefCell::new(Ptr::<u8>::null())),
116116
fn1: Rc::new(RefCell::new(FnPtr::null())),
@@ -119,7 +119,7 @@ thread_local!(
119119
}));
120120
);
121121
thread_local!(
122-
pub static static_foo_array: Value<Box<[Foo]>> = Rc::new(RefCell::new(Box::new([
122+
pub static s_static_foo_array: Value<Box<[Foo]>> = Rc::new(RefCell::new(Box::new([
123123
Foo {
124124
s1: Rc::new(RefCell::new(Ptr::from_string_literal("first"))),
125125
s2: Rc::new(RefCell::new(Ptr::<u8>::null())),
@@ -138,72 +138,73 @@ thread_local!(
138138
);
139139
pub fn check_local_static_0() {
140140
thread_local!(
141-
static local_outer: Value<Outer> = Rc::new(RefCell::new(<Outer>::default()));
141+
static s_local_outer: Value<Outer> = Rc::new(RefCell::new(<Outer>::default()));
142142
);
143143
thread_local!(
144-
static local_fn: Value<FnPtr<fn(i32) -> i32>> = Rc::new(RefCell::new(FnPtr::null()));
144+
static s_local_fn: Value<FnPtr<fn(i32) -> i32>> = Rc::new(RefCell::new(FnPtr::null()));
145145
);
146146
thread_local!(
147-
static local_p: Value<Ptr<i32>> = Rc::new(RefCell::new(Ptr::<i32>::null()));
147+
static s_local_p: Value<Ptr<i32>> = Rc::new(RefCell::new(Ptr::<i32>::null()));
148148
);
149-
assert!((*(*local_outer.with(Value::clone).borrow()).p1.borrow()).is_null());
150-
assert!((*(*local_outer.with(Value::clone).borrow()).fn_.borrow()).is_null());
151-
assert!((*local_fn.with(Value::clone).borrow()).is_null());
152-
assert!((*local_p.with(Value::clone).borrow()).is_null());
149+
assert!((*(*s_local_outer.with(Value::clone).borrow()).p1.borrow()).is_null());
150+
assert!((*(*s_local_outer.with(Value::clone).borrow()).fn_.borrow()).is_null());
151+
assert!((*s_local_fn.with(Value::clone).borrow()).is_null());
152+
assert!((*s_local_p.with(Value::clone).borrow()).is_null());
153153
}
154154
pub fn main() {
155155
std::process::exit(main_0());
156156
}
157157
fn main_0() -> i32 {
158-
assert!((*static_fn.with(Value::clone).borrow()).is_null());
159-
assert!((*(*static_outer.with(Value::clone).borrow()).p1.borrow()).is_null());
160-
assert!((*(*static_outer.with(Value::clone).borrow()).p2.borrow()).is_null());
161-
assert!((*(*static_outer.with(Value::clone).borrow()).cp.borrow()).is_null());
162-
assert!((*(*static_outer.with(Value::clone).borrow()).pp.borrow()).is_null());
163-
assert!((*(*static_outer.with(Value::clone).borrow()).fn_.borrow()).is_null());
158+
assert!((*s_static_fn.with(Value::clone).borrow()).is_null());
159+
assert!((*(*s_static_outer.with(Value::clone).borrow()).p1.borrow()).is_null());
160+
assert!((*(*s_static_outer.with(Value::clone).borrow()).p2.borrow()).is_null());
161+
assert!((*(*s_static_outer.with(Value::clone).borrow()).cp.borrow()).is_null());
162+
assert!((*(*s_static_outer.with(Value::clone).borrow()).pp.borrow()).is_null());
163+
assert!((*(*s_static_outer.with(Value::clone).borrow()).fn_.borrow()).is_null());
164164
let i: Value<i32> = Rc::new(RefCell::new(0));
165165
'loop_: while ((*i.borrow()) < 3) {
166-
assert!(((*(*static_outer.with(Value::clone).borrow()).arr.borrow())
167-
[(*i.borrow()) as usize])
168-
.is_null());
166+
assert!(
167+
((*(*s_static_outer.with(Value::clone).borrow()).arr.borrow())[(*i.borrow()) as usize])
168+
.is_null()
169+
);
169170
(*i.borrow_mut()).prefix_inc();
170171
}
171172
assert!(
172-
(*(*(*static_outer.with(Value::clone).borrow()).inner.borrow())
173+
(*(*(*s_static_outer.with(Value::clone).borrow()).inner.borrow())
173174
.name
174175
.borrow())
175176
.is_null()
176177
);
177178
let i: Value<i32> = Rc::new(RefCell::new(0));
178179
'loop_: while ((*i.borrow()) < 2) {
179180
assert!(
180-
(*(*static_inner_array.with(Value::clone).borrow())[(*i.borrow()) as usize]
181+
(*(*s_static_inner_array.with(Value::clone).borrow())[(*i.borrow()) as usize]
181182
.name
182183
.borrow())
183184
.is_null()
184185
);
185186
(*i.borrow_mut()).prefix_inc();
186187
}
187-
assert!((*(*static_foo.with(Value::clone).borrow()).s2.borrow()).is_null());
188-
assert!((*(*static_foo.with(Value::clone).borrow()).fn1.borrow()).is_null());
189-
assert!((*(*static_foo.with(Value::clone).borrow()).fn2.borrow()).is_null());
190-
assert!(((*(*static_foo.with(Value::clone).borrow()).n.borrow()) == 42));
188+
assert!((*(*s_static_foo.with(Value::clone).borrow()).s2.borrow()).is_null());
189+
assert!((*(*s_static_foo.with(Value::clone).borrow()).fn1.borrow()).is_null());
190+
assert!((*(*s_static_foo.with(Value::clone).borrow()).fn2.borrow()).is_null());
191+
assert!(((*(*s_static_foo.with(Value::clone).borrow()).n.borrow()) == 42));
191192
let i: Value<i32> = Rc::new(RefCell::new(0));
192193
'loop_: while ((*i.borrow()) < 2) {
193194
assert!(
194-
(*(*static_foo_array.with(Value::clone).borrow())[(*i.borrow()) as usize]
195+
(*(*s_static_foo_array.with(Value::clone).borrow())[(*i.borrow()) as usize]
195196
.s2
196197
.borrow())
197198
.is_null()
198199
);
199200
assert!(
200-
(*(*static_foo_array.with(Value::clone).borrow())[(*i.borrow()) as usize]
201+
(*(*s_static_foo_array.with(Value::clone).borrow())[(*i.borrow()) as usize]
201202
.fn1
202203
.borrow())
203204
.is_null()
204205
);
205206
assert!(
206-
(*(*static_foo_array.with(Value::clone).borrow())[(*i.borrow()) as usize]
207+
(*(*s_static_foo_array.with(Value::clone).borrow())[(*i.borrow()) as usize]
207208
.fn2
208209
.borrow())
209210
.is_null()

0 commit comments

Comments
 (0)