Skip to content

Commit cf9b9da

Browse files
author
Daniel Kroening
committed
bugfix: __float80 is a typedef, not a keyword
1 parent f33459f commit cf9b9da

File tree

3 files changed

+22
-7
lines changed

3 files changed

+22
-7
lines changed

src/ansi-c/ansi_c_internal_additions.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,17 @@ void ansi_c_internal_additions(std::string &code)
199199
code+="typedef double __float128;\n"; // clang doesn't do __float128
200200
}
201201

202+
if(config.ansi_c.arch=="i386" ||
203+
config.ansi_c.arch=="x86_64" ||
204+
config.ansi_c.arch=="x32" ||
205+
config.ansi_c.arch=="ia64")
206+
{
207+
// clang doesn't do __float80
208+
// Note that __float80 is a typedef, and not a keyword.
209+
if(config.ansi_c.mode==configt::ansi_ct::flavourt::APPLE)
210+
code+="typedef _Float64x __float80;\n";
211+
}
212+
202213
// On 64-bit systems, gcc has typedefs
203214
// __int128_t und __uint128_t -- but not on 32 bit!
204215
if(config.ansi_c.long_int_width>=64)

src/ansi-c/scanner.l

-7
Original file line numberDiff line numberDiff line change
@@ -489,13 +489,6 @@ void ansi_c_scanner_init()
489489
return make_identifier();
490490
}
491491

492-
"__float80" { // clang doesn't have it
493-
if(PARSER.mode==configt::ansi_ct::flavourt::GCC)
494-
{ loc(); return TOK_GCC_FLOAT80; }
495-
else
496-
return make_identifier();
497-
}
498-
499492
"__float128" { // clang doesn't have it
500493
if(PARSER.mode==configt::ansi_ct::flavourt::GCC)
501494
{ loc(); return TOK_GCC_FLOAT128; }

src/cpp/cpp_internal_additions.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,17 @@ void cpp_internal_additions(std::ostream &out)
130130
out << "typedef double __float128;" << '\n';
131131
}
132132

133+
if(config.ansi_c.arch=="i386" ||
134+
config.ansi_c.arch=="x86_64" ||
135+
config.ansi_c.arch=="x32" ||
136+
config.ansi_c.arch=="ia64")
137+
{
138+
// clang doesn't do __float80
139+
// Note that __float80 is a typedef, and not a keyword.
140+
if(config.ansi_c.mode==configt::ansi_ct::flavourt::APPLE)
141+
out << "typedef _Float64x __float80;" << '\n';
142+
}
143+
133144
// On 64-bit systems, gcc has typedefs
134145
// __int128_t und __uint128_t -- but not on 32 bit!
135146
if(config.ansi_c.long_int_width >= 64)

0 commit comments

Comments
 (0)