From: Rico Tzschichholz Date: Mon, 27 Nov 2017 14:25:02 +0000 (+0100) Subject: codegen: Discover invalid member access to instance field X-Git-Tag: 0.38.4~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5cf2d46678036ce59525925e72798ae4756cb039;p=thirdparty%2Fvala.git codegen: Discover invalid member access to instance field https://bugzilla.gnome.org/show_bug.cgi?id=790903 --- diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala index 6bb5cb22a..3efcc3445 100644 --- a/codegen/valaccodememberaccessmodule.vala +++ b/codegen/valaccodememberaccessmodule.vala @@ -571,6 +571,14 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { } inst = pub_inst; } + + if (inst == null) { + // FIXME Report this with proper source-reference on the vala side! + Report.error (field.source_reference, "Invalid access to instance member `%s'".printf (field.get_full_name ())); + result.cvalue = new CCodeInvalidExpression (); + return result; + } + if (instance_target_type.data_type.is_reference_type () || (instance != null && instance.value_type is PointerType)) { result.cvalue = new CCodeMemberAccess.pointer (inst, get_ccode_name (field)); } else { diff --git a/tests/Makefile.am b/tests/Makefile.am index c82aca139..554a519ab 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -116,6 +116,7 @@ TESTS = \ control-flow/bug691514.vala \ control-flow/bug736774-1.vala \ control-flow/bug736774-2.vala \ + control-flow/bug790903.test \ enums/enum_only.vala \ enums/enums.vala \ enums/flags.vala \ diff --git a/tests/control-flow/bug790903.test b/tests/control-flow/bug790903.test new file mode 100644 index 000000000..5d088aa2c --- /dev/null +++ b/tests/control-flow/bug790903.test @@ -0,0 +1,9 @@ +Invalid Code + +class Foo { + public string field; +} + +void main () { + var foo = (string) Foo.field; +}