Don't generate faulty c-code with results in segmentation faults.
Fixes https://gitlab.gnome.org/GNOME/vala/issues/992
TESTS = \
basic-types/integers.vala \
+ basic-types/integers-boxed-cast.vala \
basic-types/escape-chars.vala \
basic-types/floats.vala \
basic-types/floats-boxed-cast.vala \
generics/floating-type-cast.vala \
generics/inference-argument-may-fail.vala \
generics/inference-static-function.vala \
+ generics/integer-type-cast.vala \
generics/parameter-sizeof-initializer.vala \
generics/member-dup-destroy.vala \
generics/type-parameter-properties.vala \
--- /dev/null
+void main () {
+ var i = (int?) int.MIN;
+ assert (i == int.MIN);
+
+ var u = (uint?) uint.MAX;
+ assert (u == uint.MAX);
+
+ var i64 = (int64?) int64.MIN;
+ assert (i64 == int64.MIN);
+
+ var u64 = (uint64?) uint64.MAX;
+ assert (u64 == uint64.MAX);
+}
--- /dev/null
+void foo<G,T> (G g, T t) {
+ assert ((int64?) g == int64.MIN);
+ assert ((uint64?) t == uint64.MAX);
+}
+
+void main () {
+ foo ((int64?) int64.MIN, (uint64?) uint64.MAX);
+ foo<int64?,uint64?> ((int64?) int64.MIN, (uint64?) uint64.MAX);
+}
// Implicit transformation of stack-allocated value to heap-allocated boxed-type
if (!(is_silent_cast || is_non_null_cast)
&& (type_reference is ValueType && type_reference.nullable)
- && !inner.value_type.nullable
- && inner.value_type is FloatingType) {
+ && inner.value_type.is_non_null_simple_type ()) {
var local = new LocalVariable (type_reference, get_temp_name (), null, inner.source_reference);
var decl = new DeclarationStatement (local, source_reference);