|
@@ -272,6 +272,20 @@ fn CompoundAssignmentHeterogeneousI64Long() {
|
|
|
a += (1 as i64);
|
|
a += (1 as i64);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// --- increment_decrement_long.carbon
|
|
|
|
|
+
|
|
|
|
|
+library "[[@TEST_NAME]]";
|
|
|
|
|
+
|
|
|
|
|
+import Cpp;
|
|
|
|
|
+
|
|
|
|
|
+fn IncrementDecrementLong() {
|
|
|
|
|
+ //@dump-sem-ir-begin
|
|
|
|
|
+ var a: Cpp.long = 1;
|
|
|
|
|
+ ++a;
|
|
|
|
|
+ --a;
|
|
|
|
|
+ //@dump-sem-ir-end
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// --- unsigned_long.carbon
|
|
// --- unsigned_long.carbon
|
|
|
|
|
|
|
|
library "[[@TEST_NAME]]";
|
|
library "[[@TEST_NAME]]";
|
|
@@ -1858,6 +1872,86 @@ fn F() {
|
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT:
|
|
|
// CHECK:STDOUT: fn @DestroyOp(%self.param: %Cpp.long) = "no_op";
|
|
// CHECK:STDOUT: fn @DestroyOp(%self.param: %Cpp.long) = "no_op";
|
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT:
|
|
|
|
|
+// CHECK:STDOUT: --- increment_decrement_long.carbon
|
|
|
|
|
+// CHECK:STDOUT:
|
|
|
|
|
+// CHECK:STDOUT: constants {
|
|
|
|
|
+// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Cpp.long: type = class_type @Long32 [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %pattern_type.68c: type = pattern_type %Cpp.long [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %ImplicitAs.type.819: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %ImplicitAs.Convert.type.4c2: type = fn_type @ImplicitAs.Convert, @ImplicitAs(%Cpp.long) [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %ImplicitAs.impl_witness.2ce: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.903 [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.2ce) [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %.dad: type = fn_type_with_self_type %ImplicitAs.Convert.type.4c2, %ImplicitAs.facet [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = struct_value () [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %int_1.5a4: %Cpp.long = int_value 1 [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Inc.type: type = facet_type <@Inc> [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Inc.Op.type: type = fn_type @Inc.Op [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Inc.impl_witness: <witness> = impl_witness imports.%Inc.impl_witness_table [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Inc.facet: %Inc.type = facet_value %Cpp.long, (%Inc.impl_witness) [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %.153: type = fn_type_with_self_type %Inc.Op.type, %Inc.facet [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Cpp.long.as.Inc.impl.Op.type: type = fn_type @Cpp.long.as.Inc.impl.Op [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Cpp.long.as.Inc.impl.Op: %Cpp.long.as.Inc.impl.Op.type = struct_value () [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Dec.type: type = facet_type <@Dec> [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Dec.Op.type: type = fn_type @Dec.Op [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Dec.impl_witness: <witness> = impl_witness imports.%Dec.impl_witness_table [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Dec.facet: %Dec.type = facet_value %Cpp.long, (%Dec.impl_witness) [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %.fff: type = fn_type_with_self_type %Dec.Op.type, %Dec.facet [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Cpp.long.as.Dec.impl.Op.type: type = fn_type @Cpp.long.as.Dec.impl.Op [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Cpp.long.as.Dec.impl.Op: %Cpp.long.as.Dec.impl.Op.type = struct_value () [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %DestroyOp: %DestroyOp.type = struct_value () [concrete]
|
|
|
|
|
+// CHECK:STDOUT: }
|
|
|
|
|
+// CHECK:STDOUT:
|
|
|
|
|
+// CHECK:STDOUT: imports {
|
|
|
|
|
+// CHECK:STDOUT: %Cpp: <namespace> = namespace file.%Cpp.import_cpp, [concrete] {
|
|
|
|
|
+// CHECK:STDOUT: .long = constants.%Cpp.long
|
|
|
|
|
+// CHECK:STDOUT: import Cpp//...
|
|
|
|
|
+// CHECK:STDOUT: }
|
|
|
|
|
+// CHECK:STDOUT: %Core.import_ref.b8a: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert]
|
|
|
|
|
+// CHECK:STDOUT: %ImplicitAs.impl_witness_table.903 = impl_witness_table (%Core.import_ref.b8a), @Core.IntLiteral.as.ImplicitAs.impl.052 [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Core.import_ref.9d7: %Cpp.long.as.Inc.impl.Op.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.Inc.impl.Op]
|
|
|
|
|
+// CHECK:STDOUT: %Inc.impl_witness_table = impl_witness_table (%Core.import_ref.9d7), @Cpp.long.as.Inc.impl [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %Core.import_ref.d5d: %Cpp.long.as.Dec.impl.Op.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.Dec.impl.Op]
|
|
|
|
|
+// CHECK:STDOUT: %Dec.impl_witness_table = impl_witness_table (%Core.import_ref.d5d), @Cpp.long.as.Dec.impl [concrete]
|
|
|
|
|
+// CHECK:STDOUT: }
|
|
|
|
|
+// CHECK:STDOUT:
|
|
|
|
|
+// CHECK:STDOUT: fn @IncrementDecrementLong() {
|
|
|
|
|
+// CHECK:STDOUT: !entry:
|
|
|
|
|
+// CHECK:STDOUT: name_binding_decl {
|
|
|
|
|
+// CHECK:STDOUT: %a.patt: %pattern_type.68c = ref_binding_pattern a [concrete]
|
|
|
|
|
+// CHECK:STDOUT: %a.var_patt: %pattern_type.68c = var_pattern %a.patt [concrete]
|
|
|
|
|
+// CHECK:STDOUT: }
|
|
|
|
|
+// CHECK:STDOUT: %a.var: ref %Cpp.long = var %a.var_patt
|
|
|
|
|
+// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
|
|
|
|
|
+// CHECK:STDOUT: %impl.elem0.loc8: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert]
|
|
|
|
|
+// CHECK:STDOUT: %bound_method.loc8: <bound method> = bound_method %int_1, %impl.elem0.loc8 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound]
|
|
|
|
|
+// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %Cpp.long = call %bound_method.loc8(%int_1) [concrete = constants.%int_1.5a4]
|
|
|
|
|
+// CHECK:STDOUT: %.loc8_3: init %Cpp.long = converted %int_1, %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_1.5a4]
|
|
|
|
|
+// CHECK:STDOUT: assign %a.var, %.loc8_3
|
|
|
|
|
+// CHECK:STDOUT: %.loc8_13: type = splice_block %long.ref [concrete = constants.%Cpp.long] {
|
|
|
|
|
+// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
|
|
|
|
+// CHECK:STDOUT: %long.ref: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long]
|
|
|
|
|
+// CHECK:STDOUT: }
|
|
|
|
|
+// CHECK:STDOUT: %a: ref %Cpp.long = ref_binding a, %a.var
|
|
|
|
|
+// CHECK:STDOUT: %a.ref.loc9: ref %Cpp.long = name_ref a, %a
|
|
|
|
|
+// CHECK:STDOUT: %impl.elem0.loc9: %.153 = impl_witness_access constants.%Inc.impl_witness, element0 [concrete = constants.%Cpp.long.as.Inc.impl.Op]
|
|
|
|
|
+// CHECK:STDOUT: %bound_method.loc9: <bound method> = bound_method %a.ref.loc9, %impl.elem0.loc9
|
|
|
|
|
+// CHECK:STDOUT: %Cpp.long.as.Inc.impl.Op.call: init %empty_tuple.type = call %bound_method.loc9(%a.ref.loc9)
|
|
|
|
|
+// CHECK:STDOUT: %a.ref.loc10: ref %Cpp.long = name_ref a, %a
|
|
|
|
|
+// CHECK:STDOUT: %impl.elem0.loc10: %.fff = impl_witness_access constants.%Dec.impl_witness, element0 [concrete = constants.%Cpp.long.as.Dec.impl.Op]
|
|
|
|
|
+// CHECK:STDOUT: %bound_method.loc10: <bound method> = bound_method %a.ref.loc10, %impl.elem0.loc10
|
|
|
|
|
+// CHECK:STDOUT: %Cpp.long.as.Dec.impl.Op.call: init %empty_tuple.type = call %bound_method.loc10(%a.ref.loc10)
|
|
|
|
|
+// CHECK:STDOUT: %DestroyOp.bound: <bound method> = bound_method %a.var, constants.%DestroyOp
|
|
|
|
|
+// CHECK:STDOUT: %DestroyOp.call: init %empty_tuple.type = call %DestroyOp.bound(%a.var)
|
|
|
|
|
+// CHECK:STDOUT: <elided>
|
|
|
|
|
+// CHECK:STDOUT: }
|
|
|
|
|
+// CHECK:STDOUT:
|
|
|
|
|
+// CHECK:STDOUT: fn @DestroyOp(%self.param: %Cpp.long) = "no_op";
|
|
|
|
|
+// CHECK:STDOUT:
|
|
|
// CHECK:STDOUT: --- unsigned_long.carbon
|
|
// CHECK:STDOUT: --- unsigned_long.carbon
|
|
|
// CHECK:STDOUT:
|
|
// CHECK:STDOUT:
|
|
|
// CHECK:STDOUT: constants {
|
|
// CHECK:STDOUT: constants {
|