mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 15:01:03 +01:00
Add support for f16, f64, f128. (#5952)
Generalize the f64 support to support other sizes. Also provide interop support for `float`, `_Float16`, and `__float128`. Also lay some groundwork for non-standard floating-point types, though we don't have any syntax to name them yet.
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
|
||||
// --- unsupported_primitive_type.h
|
||||
|
||||
auto foo(float a) -> void;
|
||||
auto foo(_BitInt(23) a) -> void;
|
||||
|
||||
// --- fail_todo_import_unsupported_primitive_type.carbon
|
||||
|
||||
@@ -26,14 +26,14 @@ import Cpp library "unsupported_primitive_type.h";
|
||||
|
||||
fn F() {
|
||||
//@dump-sem-ir-begin
|
||||
// CHECK:STDERR: fail_todo_import_unsupported_primitive_type.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: parameter type: float` [SemanticsTodo]
|
||||
// CHECK:STDERR: Cpp.foo(1.1);
|
||||
// CHECK:STDERR: fail_todo_import_unsupported_primitive_type.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: parameter type: _BitInt(23)` [SemanticsTodo]
|
||||
// CHECK:STDERR: Cpp.foo(11);
|
||||
// CHECK:STDERR: ^~~~~~~
|
||||
// CHECK:STDERR: fail_todo_import_unsupported_primitive_type.carbon:[[@LINE+4]]:3: note: in `Cpp` name lookup for `foo` [InCppNameLookup]
|
||||
// CHECK:STDERR: Cpp.foo(1.1);
|
||||
// CHECK:STDERR: Cpp.foo(11);
|
||||
// CHECK:STDERR: ^~~~~~~
|
||||
// CHECK:STDERR:
|
||||
Cpp.foo(1.1);
|
||||
Cpp.foo(11);
|
||||
//@dump-sem-ir-end
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ fn F() {
|
||||
|
||||
// --- unsupported_primitive_type_among_params.h
|
||||
|
||||
auto foo(int a, float b) -> void;
|
||||
auto foo(int a, _BitInt(23) b) -> void;
|
||||
|
||||
// --- fail_todo_import_unsupported_primitive_type_among_params.carbon
|
||||
|
||||
@@ -53,21 +53,21 @@ import Cpp library "unsupported_primitive_type_among_params.h";
|
||||
|
||||
fn F() {
|
||||
//@dump-sem-ir-begin
|
||||
// CHECK:STDERR: fail_todo_import_unsupported_primitive_type_among_params.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: parameter type: float` [SemanticsTodo]
|
||||
// CHECK:STDERR: Cpp.foo(1, 2.0);
|
||||
// CHECK:STDERR: fail_todo_import_unsupported_primitive_type_among_params.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: parameter type: _BitInt(23)` [SemanticsTodo]
|
||||
// CHECK:STDERR: Cpp.foo(1, 20);
|
||||
// CHECK:STDERR: ^~~~~~~
|
||||
// CHECK:STDERR: fail_todo_import_unsupported_primitive_type_among_params.carbon:[[@LINE+4]]:3: note: in `Cpp` name lookup for `foo` [InCppNameLookup]
|
||||
// CHECK:STDERR: Cpp.foo(1, 2.0);
|
||||
// CHECK:STDERR: Cpp.foo(1, 20);
|
||||
// CHECK:STDERR: ^~~~~~~
|
||||
// CHECK:STDERR:
|
||||
Cpp.foo(1, 2.0);
|
||||
Cpp.foo(1, 20);
|
||||
//@dump-sem-ir-end
|
||||
}
|
||||
|
||||
// CHECK:STDOUT: --- fail_todo_import_unsupported_primitive_type.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 11e-1 [concrete]
|
||||
// CHECK:STDOUT: %int_11: Core.IntLiteral = int_value 11 [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -81,7 +81,7 @@ fn F() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %foo.ref: <error> = name_ref foo, <error> [concrete = <error>]
|
||||
// CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 11e-1 [concrete = constants.%float]
|
||||
// CHECK:STDOUT: %int_11: Core.IntLiteral = int_value 11 [concrete = constants.%int_11]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -89,7 +89,7 @@ fn F() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete]
|
||||
// CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 20e-1 [concrete]
|
||||
// CHECK:STDOUT: %int_20: Core.IntLiteral = int_value 20 [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -104,7 +104,7 @@ fn F() {
|
||||
// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %foo.ref: <error> = name_ref foo, <error> [concrete = <error>]
|
||||
// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1]
|
||||
// CHECK:STDOUT: %float: Core.FloatLiteral = float_literal_value 20e-1 [concrete = constants.%float]
|
||||
// CHECK:STDOUT: %int_20: Core.IntLiteral = int_value 20 [concrete = constants.%int_20]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
Reference in New Issue
Block a user