var innercexpr = get_cvalue (expr.inner);
if (expr.type_reference is ValueType && !expr.type_reference.nullable &&
expr.inner.value_type is ValueType && expr.inner.value_type.nullable) {
- if (!(expr.inner.symbol_reference is Variable)) {
+ // handle nested cast expressions
+ unowned Expression? inner_expr = expr.inner;
+ while (inner_expr is CastExpression) {
+ inner_expr = ((CastExpression) inner_expr).inner;
+ }
+ if (!(inner_expr.symbol_reference is Variable)) {
// heap allocated struct leaked, destroy it
var value = new GLibValue (new PointerType (new VoidType ()), innercexpr);
temp_ref_values.insert (0, value);
assert ((uint64?) t == uint64.MAX);
}
+void bar<G,T> (G g, T t) {
+ assert ((int?) g == int.MIN);
+ assert ((uint?) t == uint.MAX);
+ assert ((int) ((int?) g) == int.MIN);
+ assert ((uint) ((uint?) t) == uint.MAX);
+}
+
void main () {
foo ((int64?) int64.MIN, (uint64?) uint64.MAX);
foo<int64?,uint64?> ((int64?) int64.MIN, (uint64?) uint64.MAX);
+ bar ((int?) int.MIN, (uint?) uint.MAX);
+ bar<int?,uint?> ((int?) int.MIN, (uint?) uint.MAX);
}