From: Rico Tzschichholz Date: Tue, 24 Jan 2017 13:33:31 +0000 (+0100) Subject: vala: Non-null initializers are not allowed for owned namespace fields X-Git-Tag: 0.35.4~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=20a1536f9911c1aadbfbe046bc01afc57bb724a5;p=thirdparty%2Fvala.git vala: Non-null initializers are not allowed for owned namespace fields https://bugzilla.gnome.org/show_bug.cgi?id=777697 --- diff --git a/tests/Makefile.am b/tests/Makefile.am index cd8aa0859..76fb108b7 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -43,6 +43,7 @@ TESTS = \ basic-types/bug756376.vala \ basic-types/bug761307.vala \ basic-types/bug771626.test \ + basic-types/bug777697.test \ pointers/bug590641.vala \ namespaces.vala \ methods/lambda.vala \ diff --git a/tests/basic-types/bug777697.test b/tests/basic-types/bug777697.test new file mode 100644 index 000000000..0b528ed63 --- /dev/null +++ b/tests/basic-types/bug777697.test @@ -0,0 +1,8 @@ +Invalid Code + +namespace Foo { + string bar = "bar"; +} + +void main () { +} diff --git a/vala/valafield.vala b/vala/valafield.vala index 8a6166582..3af9433d6 100644 --- a/vala/valafield.vala +++ b/vala/valafield.vala @@ -151,6 +151,14 @@ public class Vala.Field : Variable, Lockable { return false; } + if (parent_symbol is Namespace && initializer.is_constant ()) { + if ((variable_type.nullable || nitializer.is_non_null ()) && (variable_type.value_owned || variable_type.is_disposable ())) { + error = true; + Report.error (source_reference, "Owned namespace fields can only be initialized in a function or method"); + return false; + } + } + if (binding == MemberBinding.STATIC && parent_symbol is Class && ((Class)parent_symbol).is_compact && !initializer.is_constant ()) { error = true; Report.error (source_reference, "Static fields in compact classes cannot have non-constant initializers");