From: Rico Tzschichholz Date: Mon, 22 Apr 2024 17:53:14 +0000 (+0200) Subject: vala: Don't allow inheritance of compact class from non-compact class X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Fmaster;p=thirdparty%2Fvala.git vala: Don't allow inheritance of compact class from non-compact class --- 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);