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-Tag: 0.56.18~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=34e2c6c5dcf5e89a7bec017bf440bb5e64aa4a77;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 5bde146b3..6186afc50 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1104,6 +1104,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 cf2943e4d..c71e540c8 100644 --- a/vala/valaclass.vala +++ b/vala/valaclass.vala @@ -610,6 +610,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);