[vala/staging] codegen: Strip all nested occurances of CCodeCastExpression



commit 8a23e6588493bbbd07ee439b3775a89c0f000ff9
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Sun Feb 7 19:04:56 2021 +0100

    codegen: Strip all nested occurances of CCodeCastExpression
    
    Triggered by 63551acaf0d83fac8b50904c2759c1098fbfaa71
    
    See https://gitlab.gnome.org/GNOME/vala/issues/1134

 codegen/valaccodebasemodule.vala             |  5 +++--
 tests/Makefile.am                            |  1 +
 tests/generics/integer-type-cast-return.vala | 14 ++++++++++++++
 3 files changed, 18 insertions(+), 2 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 10ebb4d5f..d12e038f2 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -3768,9 +3768,10 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                        }
 
                        // FIXME this breaks in our macro, so this should not happen
-                       if (cvar is CCodeCastExpression) {
+                       while (cvar is CCodeCastExpression) {
                                cvar = ((CCodeCastExpression) cvar).inner;
-                       } else if (cvar is CCodeFunctionCall) {
+                       }
+                       if (cvar is CCodeFunctionCall) {
                                cvar = ((CCodeFunctionCall) cvar).get_arguments ()[0];
                        }
 
diff --git a/tests/Makefile.am b/tests/Makefile.am
index b8b15b2cf..15d82e086 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -658,6 +658,7 @@ TESTS = \
        generics/inference-argument-may-fail.vala \
        generics/inference-static-function.vala \
        generics/integer-type-cast.vala \
+       generics/integer-type-cast-return.vala \
        generics/parameter-invalid-initializer.test \
        generics/parameter-sizeof-initializer.vala \
        generics/member-dup-destroy.vala \
diff --git a/tests/generics/integer-type-cast-return.vala b/tests/generics/integer-type-cast-return.vala
new file mode 100644
index 000000000..b7c74d66e
--- /dev/null
+++ b/tests/generics/integer-type-cast-return.vala
@@ -0,0 +1,14 @@
+T manam <T> (int i) {
+       return (int?) i;
+}
+
+T minim <T> (uint i) {
+       return (uint?) i;
+}
+
+void main () {
+       assert (manam<int?> (int.MIN) == int.MIN);
+       assert (minim<uint?> (uint.MAX) == uint.MAX);
+       assert ((int) ((int?) manam<int?> (int.MIN)) == int.MIN);
+       assert ((uint) ((uint?) minim<uint?> (uint.MAX)) == uint.MAX);
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]