]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Don't allow inheritance of compact class from non-compact class master
authorRico Tzschichholz <ricotz@ubuntu.com>
Mon, 22 Apr 2024 17:53:14 +0000 (19:53 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Mon, 22 Apr 2024 17:53:14 +0000 (19:53 +0200)
tests/Makefile.am
tests/semantic/class-compact-inheritance.test [new file with mode: 0644]
vala/valaclass.vala

index 32fa57abe08285a6699fe0ccde166317ba12d716..dc493c990a4ebd2028b01a222be7579755fb3fc9 100644 (file)
@@ -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 (file)
index 0000000..3daed3c
--- /dev/null
@@ -0,0 +1,11 @@
+Invalid Code
+
+class Foo {
+}
+
+[Compact]
+class Bar : Foo {
+}
+
+void main () {
+}
index f8bf6f785e6f3ddaab1c69ee82807a3c6b53c5c1..5198d0dc8f21dd36c4a5e01cd794fa3891b2a116 100644 (file)
@@ -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);