diff --git a/0001-codegen-Add-missing-cast-to-access-base-class-member.patch b/0001-codegen-Add-missing-cast-to-access-base-class-member.patch new file mode 100644 index 0000000..425d111 --- /dev/null +++ b/0001-codegen-Add-missing-cast-to-access-base-class-member.patch @@ -0,0 +1,137 @@ +From c0121583cee85656862516e689f8b63555a0ff20 Mon Sep 17 00:00:00 2001 +From: Rico Tzschichholz +Date: Tue, 31 Aug 2021 16:28:05 +0200 +Subject: [PATCH] codegen: Add missing cast to access base-class members in + class/static ctor + +Regression of 9cbd53b8d79aa4c394ddf49e766f2c15fc476906 + +Fixes https://gitlab.gnome.org/GNOME/vala/issues/1221 +--- + codegen/valaccodebasemodule.vala | 8 +++++++- + tests/objects/fields.c-expected | 16 ++++++++++++++++ + tests/objects/fields.vala | 20 ++++++++++++++++++++ + 3 files changed, 43 insertions(+), 1 deletion(-) + +diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala +index 54fc3e184..f7321b72a 100644 +--- a/codegen/valaccodebasemodule.vala ++++ b/codegen/valaccodebasemodule.vala +@@ -2622,7 +2622,13 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { + cast = call; + } else { + // Accessing the member from a static or class constructor +- cast = new CCodeIdentifier ("klass"); ++ if (current_class == cl) { ++ cast = new CCodeIdentifier ("klass"); ++ } else { ++ call = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_class_type_function (cl))); ++ call.add_argument (new CCodeIdentifier ("klass")); ++ cast = call; ++ } + } + return cast; + } +diff --git a/tests/objects/fields.c-expected b/tests/objects/fields.c-expected +index 6d7391968..03828580c 100644 +--- a/tests/objects/fields.c-expected ++++ b/tests/objects/fields.c-expected +@@ -701,6 +701,10 @@ faz_base_init (FazClass * klass) + _vala_assert (FAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 42, "private_class_field == 42"); + FAZ_GET_CLASS_PRIVATE (klass)->private_class_field = 24; + _vala_assert (FAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 24, "private_class_field == 24"); ++ _vala_assert (FOO_CLASS (klass)->public_base_class_field == 42, "public_base_class_field == 42"); ++ FOO_CLASS (klass)->public_base_class_field = 24; ++ _vala_assert (FOO_CLASS (klass)->public_base_class_field == 24, "public_base_class_field == 24"); ++ FOO_CLASS (klass)->public_base_class_field = 42; + } + + static void +@@ -722,6 +726,10 @@ faz_class_init (FazClass * klass, + _vala_assert (FAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 42, "private_class_field == 42"); + FAZ_GET_CLASS_PRIVATE (klass)->private_class_field = 24; + _vala_assert (FAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 24, "private_class_field == 24"); ++ _vala_assert (FOO_CLASS (klass)->public_base_class_field == 42, "public_base_class_field == 42"); ++ FOO_CLASS (klass)->public_base_class_field = 24; ++ _vala_assert (FOO_CLASS (klass)->public_base_class_field == 24, "public_base_class_field == 24"); ++ FOO_CLASS (klass)->public_base_class_field = 42; + } + + static void +@@ -1000,6 +1008,10 @@ baz_base_init (BazClass * klass) + _vala_assert (BAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 42, "private_class_field == 42"); + BAZ_GET_CLASS_PRIVATE (klass)->private_class_field = 24; + _vala_assert (BAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 24, "private_class_field == 24"); ++ _vala_assert (BAR_CLASS (klass)->public_base_class_field == 42, "public_base_class_field == 42"); ++ BAR_CLASS (klass)->public_base_class_field = 24; ++ _vala_assert (BAR_CLASS (klass)->public_base_class_field == 24, "public_base_class_field == 24"); ++ BAR_CLASS (klass)->public_base_class_field = 42; + } + + static void +@@ -1021,6 +1033,10 @@ baz_class_init (BazClass * klass, + _vala_assert (BAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 42, "private_class_field == 42"); + BAZ_GET_CLASS_PRIVATE (klass)->private_class_field = 24; + _vala_assert (BAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 24, "private_class_field == 24"); ++ _vala_assert (BAR_CLASS (klass)->public_base_class_field == 42, "public_base_class_field == 42"); ++ BAR_CLASS (klass)->public_base_class_field = 24; ++ _vala_assert (BAR_CLASS (klass)->public_base_class_field == 24, "public_base_class_field == 24"); ++ BAR_CLASS (klass)->public_base_class_field = 42; + } + + static void +diff --git a/tests/objects/fields.vala b/tests/objects/fields.vala +index 0872045bb..e14572bd9 100644 +--- a/tests/objects/fields.vala ++++ b/tests/objects/fields.vala +@@ -32,6 +32,11 @@ class Faz : Foo { + assert (private_class_field == 42); + private_class_field = 24; + assert (private_class_field == 24); ++ ++ assert (public_base_class_field == 42); ++ public_base_class_field = 24; ++ assert (public_base_class_field == 24); ++ public_base_class_field = 42; + } + + static construct { +@@ -42,6 +47,11 @@ class Faz : Foo { + assert (private_class_field == 42); + private_class_field = 24; + assert (private_class_field == 24); ++ ++ assert (public_base_class_field == 42); ++ public_base_class_field = 24; ++ assert (public_base_class_field == 24); ++ public_base_class_field = 42; + } + + public void action () { +@@ -132,6 +142,11 @@ class Baz : Bar { + assert (private_class_field == 42); + private_class_field = 24; + assert (private_class_field == 24); ++ ++ assert (public_base_class_field == 42); ++ public_base_class_field = 24; ++ assert (public_base_class_field == 24); ++ public_base_class_field = 42; + } + + static construct { +@@ -142,6 +157,11 @@ class Baz : Bar { + assert (private_class_field == 42); + private_class_field = 24; + assert (private_class_field == 24); ++ ++ assert (public_base_class_field == 42); ++ public_base_class_field = 24; ++ assert (public_base_class_field == 24); ++ public_base_class_field = 42; + } + + public void action () { +-- +2.33.0.113.g6c40894d24 + diff --git a/vala.spec b/vala.spec index 6c35734..af4d97f 100644 --- a/vala.spec +++ b/vala.spec @@ -3,13 +3,14 @@ Name: vala Version: 0.53.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A modern programming language for GNOME # Most files are LGPLv2.1+, curses.vapi is 2-clause BSD License: LGPLv2+ and BSD URL: https://wiki.gnome.org/Projects/Vala Source0: https://download.gnome.org/sources/vala/0.53/vala-%{version}.tar.xz +Patch0001: 0001-codegen-Add-missing-cast-to-access-base-class-member.patch BuildRequires: bison BuildRequires: flex @@ -191,6 +192,9 @@ make check %changelog +* Tue Aug 31 2021 Marc-André Lureau - 0.53.1-2 +- Fix regression with class members access. Resolves: rhbz#1999471 + * Mon Aug 23 2021 Kalev Lember - 0.53.1-1 - Update to 0.53.1 - Drop obsolete vala-tools virtual provide