Skip to content

Commit 19471f8

Browse files
authored
Merge pull request #7593 from tautschnig/bugfixes/avx
C front-end: declare further GCC built-ins
2 parents 216e96c + 02da10e commit 19471f8

12 files changed

+893
-3
lines changed

src/ansi-c/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,15 @@ make_inc(compiler_headers/gcc_builtin_headers_ia32-2)
6565
make_inc(compiler_headers/gcc_builtin_headers_ia32-3)
6666
make_inc(compiler_headers/gcc_builtin_headers_ia32-4)
6767
make_inc(compiler_headers/gcc_builtin_headers_ia32-5)
68+
make_inc(compiler_headers/gcc_builtin_headers_ia32-6)
6869
make_inc(compiler_headers/gcc_builtin_headers_math)
6970
make_inc(compiler_headers/gcc_builtin_headers_mem_string)
7071
make_inc(compiler_headers/gcc_builtin_headers_mips)
7172
make_inc(compiler_headers/gcc_builtin_headers_omp)
7273
make_inc(compiler_headers/gcc_builtin_headers_power)
7374
make_inc(compiler_headers/gcc_builtin_headers_tm)
7475
make_inc(compiler_headers/gcc_builtin_headers_types)
76+
make_inc(compiler_headers/gcc_builtin_headers_types_gcc7plus)
7577
make_inc(compiler_headers/gcc_builtin_headers_ubsan)
7678
make_inc(compiler_headers/windows_builtin_headers)
7779
make_inc(cprover_builtin_headers)
@@ -87,6 +89,7 @@ set(extra_dependencies
8789
${CMAKE_CURRENT_BINARY_DIR}/compiler_headers/gcc_builtin_headers_ia32-3.inc
8890
${CMAKE_CURRENT_BINARY_DIR}/compiler_headers/gcc_builtin_headers_ia32-4.inc
8991
${CMAKE_CURRENT_BINARY_DIR}/compiler_headers/gcc_builtin_headers_ia32-5.inc
92+
${CMAKE_CURRENT_BINARY_DIR}/compiler_headers/gcc_builtin_headers_ia32-6.inc
9093
${CMAKE_CURRENT_BINARY_DIR}/compiler_headers/gcc_builtin_headers_ia32.inc
9194
${CMAKE_CURRENT_BINARY_DIR}/compiler_headers/gcc_builtin_headers_math.inc
9295
${CMAKE_CURRENT_BINARY_DIR}/compiler_headers/gcc_builtin_headers_mem_string.inc
@@ -95,6 +98,7 @@ set(extra_dependencies
9598
${CMAKE_CURRENT_BINARY_DIR}/compiler_headers/gcc_builtin_headers_power.inc
9699
${CMAKE_CURRENT_BINARY_DIR}/compiler_headers/gcc_builtin_headers_tm.inc
97100
${CMAKE_CURRENT_BINARY_DIR}/compiler_headers/gcc_builtin_headers_types.inc
101+
${CMAKE_CURRENT_BINARY_DIR}/compiler_headers/gcc_builtin_headers_types_gcc7plus.inc
98102
${CMAKE_CURRENT_BINARY_DIR}/compiler_headers/gcc_builtin_headers_ubsan.inc
99103
${CMAKE_CURRENT_BINARY_DIR}/compiler_headers/windows_builtin_headers.inc
100104
${CMAKE_CURRENT_BINARY_DIR}/cprover_library.inc

src/ansi-c/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ BUILTIN_FILES = \
6060
compiler_headers/gcc_builtin_headers_ia32-3.inc \
6161
compiler_headers/gcc_builtin_headers_ia32-4.inc \
6262
compiler_headers/gcc_builtin_headers_ia32-5.inc \
63+
compiler_headers/gcc_builtin_headers_ia32-6.inc \
6364
compiler_headers/gcc_builtin_headers_ia32.inc \
6465
compiler_headers/gcc_builtin_headers_math.inc \
6566
compiler_headers/gcc_builtin_headers_mem_string.inc \
@@ -68,6 +69,7 @@ BUILTIN_FILES = \
6869
compiler_headers/gcc_builtin_headers_power.inc \
6970
compiler_headers/gcc_builtin_headers_tm.inc \
7071
compiler_headers/gcc_builtin_headers_types.inc \
72+
compiler_headers/gcc_builtin_headers_types_gcc7plus.inc \
7173
compiler_headers/gcc_builtin_headers_ubsan.inc \
7274
compiler_headers/windows_builtin_headers.inc
7375

src/ansi-c/ansi_c_internal_additions.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,23 @@ Author: Daniel Kroening, [email protected]
1111
#include <util/c_types.h>
1212
#include <util/config.h>
1313

14+
#include <goto-programs/adjust_float_expressions.h>
15+
1416
#include <linking/static_lifetime_init.h>
1517

16-
#include <goto-programs/adjust_float_expressions.h>
18+
#include "ansi_c_parser.h"
1719

1820
const char gcc_builtin_headers_types[] =
1921
"#line 1 \"gcc_builtin_headers_types.h\"\n"
2022
#include "compiler_headers/gcc_builtin_headers_types.inc" // IWYU pragma: keep
2123
; // NOLINT(whitespace/semicolon)
2224

25+
const char gcc_builtin_headers_types_gcc7plus[] =
26+
"#line 1 \"gcc_builtin_headers_types_gcc7plus.h\"\n"
27+
// NOLINTNEXTLINE(whitespace/line_length)
28+
#include "compiler_headers/gcc_builtin_headers_types_gcc7plus.inc" // IWYU pragma: keep
29+
; // NOLINT(whitespace/semicolon)
30+
2331
const char gcc_builtin_headers_generic[] =
2432
"#line 1 \"gcc_builtin_headers_generic.h\"\n"
2533
#include "compiler_headers/gcc_builtin_headers_generic.inc" // IWYU pragma: keep
@@ -65,6 +73,9 @@ const char gcc_builtin_headers_ia32_4[] =
6573
const char gcc_builtin_headers_ia32_5[] =
6674
#include "compiler_headers/gcc_builtin_headers_ia32-5.inc" // IWYU pragma: keep
6775
; // NOLINT(whitespace/semicolon)
76+
const char gcc_builtin_headers_ia32_6[] =
77+
#include "compiler_headers/gcc_builtin_headers_ia32-6.inc" // IWYU pragma: keep
78+
; // NOLINT(whitespace/semicolon)
6879

6980
const char gcc_builtin_headers_alpha[] =
7081
"#line 1 \"gcc_builtin_headers_alpha.h\"\n"
@@ -229,6 +240,10 @@ void ansi_c_internal_additions(std::string &code)
229240
config.ansi_c.mode == configt::ansi_ct::flavourt::ARM)
230241
{
231242
code+=gcc_builtin_headers_types;
243+
// check the parser and not config.ansi_c.ts_18661_3_Floatn_types to adjust
244+
// behaviour depending on C or C++ context
245+
if(ansi_c_parser.ts_18661_3_Floatn_types)
246+
code += gcc_builtin_headers_types_gcc7plus;
232247

233248
// there are many more, e.g., look at
234249
// https://developer.apple.com/library/mac/#documentation/developertools/gcc-4.0.1/gcc/Target-Builtins.html

src/ansi-c/ansi_c_internal_additions.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ void ansi_c_architecture_strings(std::string &code);
1818
extern const char clang_builtin_headers[];
1919
extern const char cprover_builtin_headers[];
2020
extern const char gcc_builtin_headers_types[];
21+
extern const char gcc_builtin_headers_types_gcc7plus[];
2122
extern const char gcc_builtin_headers_generic[];
2223
extern const char gcc_builtin_headers_math[];
2324
extern const char gcc_builtin_headers_mem_string[];
@@ -29,6 +30,7 @@ extern const char gcc_builtin_headers_ia32_2[];
2930
extern const char gcc_builtin_headers_ia32_3[];
3031
extern const char gcc_builtin_headers_ia32_4[];
3132
extern const char gcc_builtin_headers_ia32_5[];
33+
extern const char gcc_builtin_headers_ia32_6[];
3234
extern const char gcc_builtin_headers_alpha[];
3335
extern const char gcc_builtin_headers_arm[];
3436
extern const char gcc_builtin_headers_mips[];

src/ansi-c/builtin_factory.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,9 @@ bool builtin_factory(
179179

180180
if(find_pattern(pattern, gcc_builtin_headers_ia32_5, s))
181181
return convert(identifier, s, symbol_table, mh);
182+
183+
if(find_pattern(pattern, gcc_builtin_headers_ia32_6, s))
184+
return convert(identifier, s, symbol_table, mh);
182185
}
183186
else if(config.ansi_c.arch=="arm64" ||
184187
config.ansi_c.arch=="armel" ||

src/ansi-c/compiler_headers/clang_builtin_headers.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,8 @@ unsigned int __builtin_rotateright32(unsigned int, unsigned int);
9393
unsigned long long __builtin_rotateright64(unsigned long long, unsigned long long);
9494

9595
void __builtin_assume(__CPROVER_bool);
96+
97+
void __builtin_cpu_init(void);
98+
_Bool __builtin_cpu_is(const char *);
99+
_Bool __builtin_cpu_supports(const char *);
96100
// clang-format on

src/ansi-c/compiler_headers/clang_builtins.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
'v': 'void',
4444
'w': 'wchar_t',
4545
'x': '_Float16',
46-
'y': '__bf16',
46+
'y': '_Float16', # would be '__bf16', but we don't support that yet
4747
'z': '__CPROVER_size_t'
4848
}
4949

@@ -209,7 +209,7 @@ def process_line(name, types, attributes):
209209
i = 0
210210
while i < len(types):
211211
(t, i_updated) = build_type(types, i)
212-
assert i_updated > i, ('failed to parse type spec of' + name + ': ' +
212+
assert i_updated > i, ('failed to parse type spec of ' + name + ': ' +
213213
types[i:])
214214
i = i_updated
215215
type_specs.append(t)

0 commit comments

Comments
 (0)