diff --git a/src/clang.zig b/src/clang.zig index 75c7e00c68..7c0b43740f 100644 --- a/src/clang.zig +++ b/src/clang.zig @@ -110,9 +110,11 @@ pub const APFloatBaseSemantics = enum(c_int) { BFloat, IEEEsingle, IEEEdouble, - x86DoubleExtended, IEEEquad, PPCDoubleDouble, + Float8E5M2, + Float8E4M3FN, + x87DoubleExtended, }; pub const APInt = opaque { diff --git a/test/translate_c.zig b/test/translate_c.zig index be93cc4c6c..3a453b9aa8 100644 --- a/test/translate_c.zig +++ b/test/translate_c.zig @@ -1205,7 +1205,10 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\#define baz 1e1 \\#define BAZ 42e-3f \\#define foobar -73.L - , &[_][]const u8{ + \\extern const float my_float = 1.0f; + \\extern const double my_double = 1.0; + \\extern const long double my_longdouble = 1.0l; + , &([_][]const u8{ "pub const foo = @as(f32, 3.14);", "pub const bar = @as(c_longdouble, 16.0e-2);", "pub const FOO = @as(f64, 0.12345);", @@ -1213,7 +1216,16 @@ pub fn addCases(cases: *tests.TranslateCContext) void { "pub const baz = @as(f64, 1e1);", "pub const BAZ = @as(f32, 42e-3);", "pub const foobar = -@as(c_longdouble, 73.0);", - }); + "pub export const my_float: f32 = 1.0;", + "pub export const my_double: f64 = 1.0;", + } ++ if (@bitSizeOf(c_longdouble) != 64) .{ + // TODO properly translate non-64-bit long doubles + "source.h:10:42: warning: unsupported floating point constant format", + "source.h:10:26: warning: unable to translate variable initializer, demoted to extern", + "pub extern const my_longdouble: c_longdouble;", + } else .{ + "pub export const my_longdouble: c_longdouble = 1.0;", + })); cases.add("macro defines hexadecimal float", \\#define FOO 0xf7p38