@@ -358,6 +358,26 @@ fn F() {
358
358
// @dump-sem-ir-end
359
359
}
360
360
361
+ // ============================================================================
362
+ // double param
363
+ // ============================================================================
364
+
365
+ // --- double_param.h
366
+
367
+ auto foo (double a) - > void;
368
+
369
+ // --- import_double_param.carbon
370
+
371
+ library "[[@TEST_NAME]]" ;
372
+
373
+ import Cpp library "double_param.h" ;
374
+
375
+ fn F () {
376
+ // @dump-sem-ir-begin
377
+ Cpp.foo (0.8 as f64 );
378
+ // @dump-sem-ir-end
379
+ }
380
+
361
381
// ============================================================================
362
382
// bool return
363
383
// ============================================================================
@@ -399,29 +419,22 @@ fn F() {
399
419
}
400
420
401
421
// ============================================================================
402
- // float return
422
+ // double return
403
423
// ============================================================================
404
424
405
- // --- float_return .h
425
+ // --- double_return .h
406
426
407
- auto foo_float () - > float ;
427
+ auto foo_double () - > double ;
408
428
409
- // --- fail_todo_import_float_return .carbon
429
+ // --- import_double_return .carbon
410
430
411
431
library "[[@TEST_NAME]]" ;
412
432
413
- import Cpp library "float_return .h" ;
433
+ import Cpp library "double_return .h" ;
414
434
415
435
fn F () {
416
436
// @dump-sem-ir-begin
417
- // CHECK:STDERR: fail_todo_import_float_return.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: return type: float` [SemanticsTodo]
418
- // CHECK:STDERR: Cpp.foo_float();
419
- // CHECK:STDERR: ^~~~~~~~~~~~~
420
- // CHECK:STDERR: fail_todo_import_float_return.carbon:[[@LINE+4]]:3: note: in `Cpp` name lookup for `foo_float` [InCppNameLookup]
421
- // CHECK:STDERR: Cpp.foo_float();
422
- // CHECK:STDERR: ^~~~~~~~~~~~~
423
- // CHECK:STDERR:
424
- Cpp.foo_float ();
437
+ let x: f64 = Cpp.foo_double ();
425
438
// @dump-sem-ir-end
426
439
}
427
440
@@ -1074,6 +1087,43 @@ fn F() {
1074
1087
// CHECK:STDOUT: <elided>
1075
1088
// CHECK:STDOUT: }
1076
1089
// CHECK:STDOUT:
1090
+ // CHECK:STDOUT: --- import_double_param.carbon
1091
+ // CHECK:STDOUT:
1092
+ // CHECK:STDOUT: constants {
1093
+ // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
1094
+ // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete]
1095
+ // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete]
1096
+ // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete]
1097
+ // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete]
1098
+ // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete]
1099
+ // CHECK:STDOUT: %float: f64 = float_literal 0.80000000000000004 [concrete]
1100
+ // CHECK:STDOUT: }
1101
+ // CHECK:STDOUT:
1102
+ // CHECK:STDOUT: imports {
1103
+ // CHECK:STDOUT: %Cpp: <namespace> = namespace file.%Cpp.import_cpp, [concrete] {
1104
+ // CHECK:STDOUT: .foo = %foo.decl
1105
+ // CHECK:STDOUT: import Cpp//...
1106
+ // CHECK:STDOUT: }
1107
+ // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {
1108
+ // CHECK:STDOUT: <elided>
1109
+ // CHECK:STDOUT: } {
1110
+ // CHECK:STDOUT: <elided>
1111
+ // CHECK:STDOUT: }
1112
+ // CHECK:STDOUT: }
1113
+ // CHECK:STDOUT:
1114
+ // CHECK:STDOUT: fn @F() {
1115
+ // CHECK:STDOUT: !entry:
1116
+ // CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
1117
+ // CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo]
1118
+ // CHECK:STDOUT: %float: f64 = float_literal 0.80000000000000004 [concrete = constants.%float]
1119
+ // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete = constants.%int_64]
1120
+ // CHECK:STDOUT: %Float.call: init type = call constants.%Float(%int_64) [concrete = f64]
1121
+ // CHECK:STDOUT: %.loc8_18.1: type = value_of_initializer %Float.call [concrete = f64]
1122
+ // CHECK:STDOUT: %.loc8_18.2: type = converted %Float.call, %.loc8_18.1 [concrete = f64]
1123
+ // CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref(%float)
1124
+ // CHECK:STDOUT: <elided>
1125
+ // CHECK:STDOUT: }
1126
+ // CHECK:STDOUT:
1077
1127
// CHECK:STDOUT: --- import_bool_return.carbon
1078
1128
// CHECK:STDOUT:
1079
1129
// CHECK:STDOUT: constants {
@@ -1155,22 +1205,46 @@ fn F() {
1155
1205
// CHECK:STDOUT: <elided>
1156
1206
// CHECK:STDOUT: }
1157
1207
// CHECK:STDOUT:
1158
- // CHECK:STDOUT: --- fail_todo_import_float_return .carbon
1208
+ // CHECK:STDOUT: --- import_double_return .carbon
1159
1209
// CHECK:STDOUT:
1160
1210
// CHECK:STDOUT: constants {
1211
+ // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete]
1212
+ // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete]
1213
+ // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete]
1214
+ // CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete]
1215
+ // CHECK:STDOUT: %foo_double.type: type = fn_type @foo_double [concrete]
1216
+ // CHECK:STDOUT: %foo_double: %foo_double.type = struct_value () [concrete]
1161
1217
// CHECK:STDOUT: }
1162
1218
// CHECK:STDOUT:
1163
1219
// CHECK:STDOUT: imports {
1164
1220
// CHECK:STDOUT: %Cpp: <namespace> = namespace file.%Cpp.import_cpp, [concrete] {
1165
- // CHECK:STDOUT: .foo_float = <error>
1221
+ // CHECK:STDOUT: .foo_double = %foo_double.decl
1166
1222
// CHECK:STDOUT: import Cpp//...
1167
1223
// CHECK:STDOUT: }
1224
+ // CHECK:STDOUT: %foo_double.decl: %foo_double.type = fn_decl @foo_double [concrete = constants.%foo_double] {
1225
+ // CHECK:STDOUT: <elided>
1226
+ // CHECK:STDOUT: } {
1227
+ // CHECK:STDOUT: <elided>
1228
+ // CHECK:STDOUT: }
1168
1229
// CHECK:STDOUT: }
1169
1230
// CHECK:STDOUT:
1170
1231
// CHECK:STDOUT: fn @F() {
1171
1232
// CHECK:STDOUT: !entry:
1233
+ // CHECK:STDOUT: name_binding_decl {
1234
+ // CHECK:STDOUT: %x.patt: %pattern_type.3de = binding_pattern x [concrete]
1235
+ // CHECK:STDOUT: }
1172
1236
// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
1173
- // CHECK:STDOUT: %foo_float.ref: <error> = name_ref foo_float, <error> [concrete = <error>]
1237
+ // CHECK:STDOUT: %foo_double.ref: %foo_double.type = name_ref foo_double, imports.%foo_double.decl [concrete = constants.%foo_double]
1238
+ // CHECK:STDOUT: %foo_double.call: init f64 = call %foo_double.ref()
1239
+ // CHECK:STDOUT: %.loc8_10.1: type = splice_block %.loc8_10.3 [concrete = f64] {
1240
+ // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete = constants.%int_64]
1241
+ // CHECK:STDOUT: %Float.call: init type = call constants.%Float(%int_64) [concrete = f64]
1242
+ // CHECK:STDOUT: %.loc8_10.2: type = value_of_initializer %Float.call [concrete = f64]
1243
+ // CHECK:STDOUT: %.loc8_10.3: type = converted %Float.call, %.loc8_10.2 [concrete = f64]
1244
+ // CHECK:STDOUT: }
1245
+ // CHECK:STDOUT: %.loc8_31.1: f64 = value_of_initializer %foo_double.call
1246
+ // CHECK:STDOUT: %.loc8_31.2: f64 = converted %foo_double.call, %.loc8_31.1
1247
+ // CHECK:STDOUT: %x: f64 = bind_name x, %.loc8_31.2
1174
1248
// CHECK:STDOUT: <elided>
1175
1249
// CHECK:STDOUT: }
1176
1250
// CHECK:STDOUT:
0 commit comments