[vala/0.50] codegen: Don't call *_instance_init() in compact class chainup



commit 9c44ed8cd132ca931014195d9edc88389418097d
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Wed Apr 7 18:14:16 2021 +0200

    codegen: Don't call *_instance_init() in compact class chainup
    
    Found by -fsanitize=address

 codegen/valaccodemethodmodule.vala    |  2 +-
 tests/Makefile.am                     |  1 +
 tests/chainup/class-compact-this.vala | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 36 insertions(+), 1 deletion(-)
---
diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
index 3c26c198e..3dbc02b52 100644
--- a/codegen/valaccodemethodmodule.vala
+++ b/codegen/valaccodemethodmodule.vala
@@ -645,7 +645,7 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
                                                        ccode.add_assignment (get_this_cexpression (), ccall);
                                                }
 
-                                               if (cl.base_class == null) {
+                                               if (cl.base_class == null && !(((CreationMethod) m).chain_up 
&& cl.is_compact)) {
                                                        var cinitcall = new CCodeFunctionCall (new 
CCodeIdentifier ("%s_instance_init".printf (get_ccode_lower_case_name (cl, null))));
                                                        cinitcall.add_argument (get_this_cexpression ());
                                                        if (!cl.is_compact) {
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 78e287572..f0823d83e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -142,6 +142,7 @@ TESTS = \
        chainup/class-base.vala \
        chainup/class-base-foo.vala \
        chainup/class-compact-base.vala \
+       chainup/class-compact-this.vala \
        chainup/class-object.vala \
        chainup/class-this.vala \
        chainup/class-this-foo.vala \
diff --git a/tests/chainup/class-compact-this.vala b/tests/chainup/class-compact-this.vala
new file mode 100644
index 000000000..3ace7a7eb
--- /dev/null
+++ b/tests/chainup/class-compact-this.vala
@@ -0,0 +1,34 @@
+[Compact]
+class Foo {
+       public string s = "foo";
+       public int i = 42;
+       public int j;
+
+       public Foo () {
+               assert (s == "foo");
+               assert (i == 42);
+               j = 23;
+       }
+
+       public Foo.bar () {
+               this ();
+               assert (s == "foo");
+               assert (i == 42);
+               assert (j == 23);
+       }
+}
+
+void main () {
+       {
+               var foo = new Foo ();
+               assert (foo.s == "foo");
+               assert (foo.i == 42);
+               assert (foo.j == 23);
+       }
+       {
+               var foo = new Foo.bar ();
+               assert (foo.s == "foo");
+               assert (foo.i == 42);
+               assert (foo.j == 23);
+       }
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]