Skip to content

Commit 942d599

Browse files
committed
disallow return statements in rules' bodies
1 parent 94423cf commit 942d599

4 files changed

Lines changed: 25 additions & 32 deletions

File tree

rule-preprocessor/src/syntactic.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -391,15 +391,8 @@ impl<'a> FnIrBuilder<'a> {
391391
}
392392
Some(Access::Unknown)
393393
},
394-
ast::ReturnExpr(ret) => {
395-
if self.returns_mut_ref()
396-
&& ret.expr().is_some_and(|e|
397-
e.syntax().text_range() == name_ref.syntax().text_range())
398-
{
399-
Some(Access::Write)
400-
} else {
401-
Some(Access::Read)
402-
}
394+
ast::ReturnExpr(_) => {
395+
panic!("return statements are not supported in rule bodies");
403396
},
404397
ast::StmtList(sl) => {
405398
if self.returns_mut_ref()

rules/algorithm/ir_refcount.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@
9898
}
9999
},
100100
{
101-
"text": ";\n if count <= 1 {\n return "
101+
"text": ";\n if count <= 1 {\n "
102102
},
103103
{
104104
"placeholder": {
@@ -107,7 +107,7 @@
107107
}
108108
},
109109
{
110-
"text": ";\n }\n\n let mut write_ptr = "
110+
"text": "\n } else {\n let mut write_ptr = "
111111
},
112112
{
113113
"method_call": {
@@ -127,7 +127,7 @@
127127
}
128128
},
129129
{
130-
"text": ";\n let mut iter = PtrValueIter::new("
130+
"text": ";\n let mut iter = PtrValueIter::new("
131131
},
132132
{
133133
"placeholder": {
@@ -136,7 +136,7 @@
136136
}
137137
},
138138
{
139-
"text": ", count);\n let mut last_unique = "
139+
"text": ", count);\n let mut last_unique = "
140140
},
141141
{
142142
"method_call": {
@@ -164,7 +164,7 @@
164164
}
165165
},
166166
{
167-
"text": ";\n\n // the first unique value is already in place\n write_ptr += 1;\n\n for current_val in iter {\n if current_val != last_unique {\n "
167+
"text": ";\n\n // the first unique value is already in place\n write_ptr += 1;\n\n for current_val in iter {\n if current_val != last_unique {\n "
168168
},
169169
{
170170
"method_call": {
@@ -198,7 +198,7 @@
198198
}
199199
},
200200
{
201-
"text": ";\n last_unique = current_val;\n write_ptr += 1;\n }\n }\n write_ptr"
201+
"text": ";\n last_unique = current_val;\n write_ptr += 1;\n }\n }\n write_ptr\n }"
202202
}
203203
],
204204
"generics": {

rules/algorithm/tgt_refcount.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -73,24 +73,24 @@ fn f9<T1: Clone + ByteRepr>(a0: Ptr<T1>, a1: Ptr<T1>) {
7373
fn f10<T1: PartialEq + Clone + ByteRepr>(a0: Ptr<T1>, a1: Ptr<T1>) -> Ptr<T1> {
7474
let count = a1.get_offset() - a0.get_offset();
7575
if count <= 1 {
76-
return a1;
77-
}
78-
79-
let mut write_ptr = a0.clone();
80-
let mut iter = PtrValueIter::new(a0, count);
81-
let mut last_unique = iter.next().unwrap();
82-
83-
// the first unique value is already in place
84-
write_ptr += 1;
85-
86-
for current_val in iter {
87-
if current_val != last_unique {
88-
write_ptr.write(current_val.clone());
89-
last_unique = current_val;
90-
write_ptr += 1;
76+
a1
77+
} else {
78+
let mut write_ptr = a0.clone();
79+
let mut iter = PtrValueIter::new(a0, count);
80+
let mut last_unique = iter.next().unwrap();
81+
82+
// the first unique value is already in place
83+
write_ptr += 1;
84+
85+
for current_val in iter {
86+
if current_val != last_unique {
87+
write_ptr.write(current_val.clone());
88+
last_unique = current_val;
89+
write_ptr += 1;
90+
}
9191
}
92+
write_ptr
9293
}
93-
write_ptr
9494
}
9595

9696
fn f12<T1: Clone + ByteRepr>(a0: Ptr<T1>, a1: Ptr<T1>, a2: T1) {

tests/unit/out/unsafe/libc_struct_without_default.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ impl Default for UserDefined {
1616
fn default() -> Self {
1717
UserDefined {
1818
a: std::array::from_fn::<_, 1, _>(|_| Default::default()).to_vec(),
19-
v: <Vec<i32>>::default(),
19+
v: Default::default(),
2020
}
2121
}
2222
}

0 commit comments

Comments
 (0)