diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2021-09-14 23:28:43 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2021-09-14 23:30:48 +0200 |
commit | 8ac0970f22a1ba41a9a0ac47f86c97e99a44e113 (patch) | |
tree | 8ac2892f063796a0454e93bae6e55ba591f142f7 | |
parent | 6ad11279231bb819b286451e2116d8202e13af92 (diff) | |
download | vala-8ac0970f22a1ba41a9a0ac47f86c97e99a44e113.tar.gz |
vala: Warn about unsupported cast to void and drop it
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1070
-rw-r--r-- | tests/Makefile.am | 2 | ||||
-rw-r--r-- | tests/semantic/cast-void-not-allowed.vala | 11 | ||||
-rw-r--r-- | tests/semantic/localvariable-void-initializer.test | 5 | ||||
-rw-r--r-- | vala/valacastexpression.vala | 7 |
4 files changed, 19 insertions, 6 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index ec9c97b13..d84703e65 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -948,6 +948,7 @@ TESTS = \ semantic/assignment-signal-incompatible-type.test \ semantic/cast-gvalue-unsupported.test \ semantic/cast-gvariant-unsupported.test \ + semantic/cast-void-not-allowed.vala \ semantic/chainup-gobject-incompatible-type-property.test \ semantic/chainup-gobject-unknown-property.test \ semantic/chainup-gobject-unsupported-type-property.test \ @@ -1043,7 +1044,6 @@ TESTS = \ semantic/localvariable-var-static-access-instance-property.test \ semantic/localvariable-var-without-initializer.test \ semantic/localvariable-void.test \ - semantic/localvariable-void-initializer.test \ semantic/member-access-async-callback-invalid.test \ semantic/member-access-capture-out.test \ semantic/member-access-capture-valist-parameter.test \ diff --git a/tests/semantic/cast-void-not-allowed.vala b/tests/semantic/cast-void-not-allowed.vala new file mode 100644 index 000000000..dee3801de --- /dev/null +++ b/tests/semantic/cast-void-not-allowed.vala @@ -0,0 +1,11 @@ +bool success = false; + +bool foo () { + success = true; + return true; +} + +void main () { + (void) foo (); + assert (success); +} diff --git a/tests/semantic/localvariable-void-initializer.test b/tests/semantic/localvariable-void-initializer.test deleted file mode 100644 index fbfbbff95..000000000 --- a/tests/semantic/localvariable-void-initializer.test +++ /dev/null @@ -1,5 +0,0 @@ -Invalid Code - -void main () { - var foo = (void) "foo"; -} diff --git a/vala/valacastexpression.vala b/vala/valacastexpression.vala index 9aff511fa..1d1dbb0f2 100644 --- a/vala/valacastexpression.vala +++ b/vala/valacastexpression.vala @@ -164,6 +164,13 @@ public class Vala.CastExpression : Expression { // FIXME: check whether cast is allowed + if (type_reference is VoidType) { + Report.warning (source_reference, "Casting to `void' is not supported"); + context.analyzer.replaced_nodes.add (this); + parent_node.replace_expression (this, inner); + return inner.check (context); + } + if (type_reference is DelegateType && inner.value_type is MethodType) { if (target_type != null) { inner.value_type.value_owned = target_type.value_owned; |