From 040646d6fb955739428cce457d12469c0ded2976 Mon Sep 17 00:00:00 2001 From: Rico Tzschichholz Date: Mon, 22 Apr 2024 19:53:14 +0200 Subject: [PATCH] vala: Don't allow inheritance of compact class from non-compact class --- tests/Makefile.am | 1 + tests/semantic/class-compact-inheritance.test | 11 +++++++++++ vala/valaclass.vala | 6 ++++++ 3 files changed, 18 insertions(+) create mode 100644 tests/semantic/class-compact-inheritance.test diff --git a/tests/Makefile.am b/tests/Makefile.am index 32fa57abe..dc493c990 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1142,6 +1142,7 @@ TESTS = \ semantic/class-compact-field-lock.test \ semantic/class-compact-field-private.test \ semantic/class-compact-derived-instance-field.test \ + semantic/class-compact-inheritance.test \ semantic/class-compact-interface.test \ semantic/class-compact-method-baseaccess.test \ semantic/class-compact-property-baseaccess.test \ diff --git a/tests/semantic/class-compact-inheritance.test b/tests/semantic/class-compact-inheritance.test new file mode 100644 index 000000000..3daed3c47 --- /dev/null +++ b/tests/semantic/class-compact-inheritance.test @@ -0,0 +1,11 @@ +Invalid Code + +class Foo { +} + +[Compact] +class Bar : Foo { +} + +void main () { +} diff --git a/vala/valaclass.vala b/vala/valaclass.vala index f8bf6f785..5198d0dc8 100644 --- a/vala/valaclass.vala +++ b/vala/valaclass.vala @@ -606,6 +606,12 @@ public class Vala.Class : ObjectTypeSymbol { } } + if (base_class != null && !base_class.is_compact && has_attribute ("Compact")) { + error = true; + Report.error (source_reference, "Compact class `%s' cannot inherit from non-compact class `%s'", get_full_name (), base_class.get_full_name ()); + return false; + } + /* process enums first to avoid order problems in C code */ foreach (Enum en in get_enums ()) { en.check (context); -- 2.47.2