Found by -fsanitize=address
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) {
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 \
--- /dev/null
+[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);
+ }
+}