]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Don't allow casting to void
authorColin Kiama <colinkiama@gmail.com>
Sun, 12 Sep 2021 18:11:00 +0000 (19:11 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Mon, 8 Nov 2021 11:50:17 +0000 (12:50 +0100)
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1070

tests/Makefile.am
tests/semantic/cast-void-not-allowed.test [moved from tests/semantic/cast-void-not-allowed.vala with 52% similarity]
vala/valacastexpression.vala

index 9b917dea2dce283d8e3a07f89122ec6ff353a876..9a6c4b3f2d7225c827aac2993fb16a1d256fc38e 100644 (file)
@@ -980,7 +980,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/cast-void-not-allowed.test \
        semantic/chainup-gobject-incompatible-type-property.test \
        semantic/chainup-gobject-unknown-property.test \
        semantic/chainup-gobject-unsupported-type-property.test \
similarity index 52%
rename from tests/semantic/cast-void-not-allowed.vala
rename to tests/semantic/cast-void-not-allowed.test
index dee3801de82470c5947e3c9c3bcd5ce568b95d26..965ef235cdd90bef1a8ec751f86e2185a5fcc328 100644 (file)
@@ -1,11 +1,9 @@
-bool success = false;
+Invalid Code
 
 bool foo () {
-       success = true;
        return true;
 }
 
 void main () {
        (void) foo ();
-       assert (success);
 }
index 1d1dbb0f2a3aa1841843b400f5d76504585f1b4f..732b99a716d8c2e9e6df593c8e0b357d98719d0e 100644 (file)
@@ -165,10 +165,9 @@ 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);
+                       Report.error (source_reference, "Casting to `void' is not allowed");
+                       error = true;
+                       return false;
                }
 
                if (type_reference is DelegateType && inner.value_type is MethodType) {