Skip to content

Commit 69603ab

Browse files
authored
fix: when generating debug info, only consider dependencies (#1450)
* fix: only consider dependant datatypes when building debug info
1 parent 502d8d5 commit 69603ab

File tree

8 files changed

+74
-23
lines changed

8 files changed

+74
-23
lines changed

src/codegen/generators/data_type_generator.rs

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ pub fn generate_data_types<'ink>(
118118
}
119119

120120
// Now generate debug information for all types
121-
generator.generate_debug_types()?;
121+
generator.generate_debug_types(&types_to_init)?;
122122

123123
let mut tries = 0;
124124
let mut errors = FxHashMap::default();
@@ -465,24 +465,8 @@ impl<'ink> DataTypeGenerator<'ink, '_> {
465465
Ok(result)
466466
}
467467

468-
fn generate_debug_types(&mut self) -> Result<(), Diagnostic> {
469-
for data_type in self
470-
.index
471-
.get_types()
472-
.entries()
473-
.flat_map(|(_, data_type)| data_type.first())
474-
.filter(|data_type| !data_type.is_generic(self.index))
475-
{
476-
self.debug.register_debug_type(data_type.get_name(), data_type, self.index, &self.types_index)?;
477-
}
478-
for data_type in self
479-
.index
480-
.get_pou_types()
481-
.entries()
482-
.flat_map(|(_, data_type)| data_type.first())
483-
.filter(|data_type| !data_type.is_generic(self.index))
484-
.filter(|data_type| data_type.is_backed_by_struct())
485-
{
468+
fn generate_debug_types(&mut self, types: &VecDeque<(&str, &DataType)>) -> Result<(), Diagnostic> {
469+
for (_, data_type) in types.iter().filter(|(_, data_type)| data_type.is_backed_by_struct()) {
486470
self.debug.register_debug_type(data_type.get_name(), data_type, self.index, &self.types_index)?;
487471
}
488472

src/typesystem.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,10 +272,6 @@ impl DataType {
272272
self.information.get_enum_variants()
273273
}
274274

275-
pub(crate) fn is_generic(&self, index: &Index) -> bool {
276-
self.information.is_generic(index)
277-
}
278-
279275
pub(crate) fn is_backed_by_struct(&self) -> bool {
280276
if let DataTypeInformation::Struct { source: StructSource::Pou(pou_type), .. } =
281277
self.get_type_information()

tests/integration/build_description_tests.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,38 @@ fn build_with_clang_linker_windows() {
156156

157157
assert!(dir.path().join("clang_proj.so").is_file());
158158
}
159+
160+
#[test]
161+
#[serial]
162+
fn build_empty_project() {
163+
let dir = tempfile::tempdir().unwrap();
164+
let parameters = &[
165+
"plc",
166+
"build",
167+
&get_test_file("empty_proj/conf/plc.json"),
168+
"--target",
169+
"x86_64-linux-gnu",
170+
"--build-location",
171+
dir.path().to_str().unwrap(),
172+
];
173+
compile(parameters).unwrap();
174+
assert!(dir.path().join("x86_64-linux-gnu").join("prog.so").is_file());
175+
}
176+
177+
#[test]
178+
#[serial]
179+
fn build_empty_project_debug() {
180+
let dir = tempfile::tempdir().unwrap();
181+
let parameters = &[
182+
"plc",
183+
"build",
184+
&get_test_file("empty_proj/conf/plc.json"),
185+
"--target",
186+
"x86_64-linux-gnu",
187+
"--debug",
188+
"--build-location",
189+
dir.path().to_str().unwrap(),
190+
];
191+
compile(parameters).unwrap();
192+
assert!(dbg!(dir.path().join("x86_64-linux-gnu").join("prog.so")).is_file());
193+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"name" : "EmptyProject",
3+
"files" : [
4+
"../src/**/*.st",
5+
"../src/**/*.gvl",
6+
"../conf/tasks/*.st"
7+
],
8+
"compile_type" : "Shared",
9+
"output" : "prog.so",
10+
"libraries" : [
11+
]
12+
}
13+
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FUNCTION mainTask : DINT
2+
mainProg();
3+
END_FUNCTION
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
VAR_GLOBAL
2+
END_VAR
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
PROGRAM mainProg
2+
VAR
3+
4+
END_VAR
5+
6+
;
7+
END_PROGRAM
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"name": "proj",
3+
"files": [
4+
"mainProg.st",
5+
"globals.st"
6+
],
7+
"compile_type": "Shared",
8+
"libraries": [
9+
],
10+
"output": "proj.so"
11+
}

0 commit comments

Comments
 (0)