Skip to content

Commit b2b2734

Browse files
committed
Set GCC version in all tools possibly parsing C code
The GCC version configures how our C lexer operates. Not setting it before running the C parser may cause spurious syntax errors, for example when parsing the system math headers. Tools that potentially link the built-in library will need to be able to parse those headers successfully.
1 parent 1a4c66e commit b2b2734

File tree

5 files changed

+63
-25
lines changed

5 files changed

+63
-25
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#include <math.h>
2+
3+
int main()
4+
{
5+
float f;
6+
__CPROVER_assume(isnormal(f));
7+
__CPROVER_assert(ceilf(f) >= f, "ceil rounds upwards");
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
main.c
3+
--add-library --generate-function-body-options assert-false --generate-function-body '([^_]*)'
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
VERIFICATION SUCCESSFUL
7+
--
8+
^warning: ignoring

src/goto-analyzer/goto_analyzer_parse_options.cpp

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,11 @@ Author: Daniel Kroening, [email protected]
1111

1212
#include "goto_analyzer_parse_options.h"
1313

14-
#include <cstdlib> // exit()
15-
#include <fstream>
16-
#include <iostream>
17-
#include <memory>
18-
19-
#include <ansi-c/cprover_library.h>
20-
21-
#include <assembler/remove_asm.h>
22-
23-
#include <cpp/cprover_library.h>
14+
#include <util/config.h>
15+
#include <util/exception_utils.h>
16+
#include <util/exit_codes.h>
17+
#include <util/options.h>
18+
#include <util/version.h>
2419

2520
#include <goto-programs/initialize_goto_model.h>
2621
#include <goto-programs/link_to_library.h>
@@ -32,12 +27,10 @@ Author: Daniel Kroening, [email protected]
3227

3328
#include <analyses/ai.h>
3429
#include <analyses/local_may_alias.h>
35-
36-
#include <util/config.h>
37-
#include <util/exception_utils.h>
38-
#include <util/exit_codes.h>
39-
#include <util/options.h>
40-
#include <util/version.h>
30+
#include <ansi-c/cprover_library.h>
31+
#include <ansi-c/gcc_version.h>
32+
#include <assembler/remove_asm.h>
33+
#include <cpp/cprover_library.h>
4134

4235
#include "build_analyzer.h"
4336
#include "show_on_source.h"
@@ -47,6 +40,11 @@ Author: Daniel Kroening, [email protected]
4740
#include "taint_analysis.h"
4841
#include "unreachable_instructions.h"
4942

43+
#include <cstdlib> // exit()
44+
#include <fstream>
45+
#include <iostream>
46+
#include <memory>
47+
5048
goto_analyzer_parse_optionst::goto_analyzer_parse_optionst(
5149
int argc,
5250
const char **argv)
@@ -383,6 +381,14 @@ int goto_analyzer_parse_optionst::doit()
383381

384382
register_languages();
385383

384+
// configure gcc, if required
385+
if(config.ansi_c.preprocessor == configt::ansi_ct::preprocessort::GCC)
386+
{
387+
gcc_versiont gcc_version;
388+
gcc_version.get("gcc");
389+
configure_gcc(gcc_version);
390+
}
391+
386392
goto_model = initialize_goto_model(cmdline.args, ui_message_handler, options);
387393

388394
// Preserve backwards compatibility in processing

src/goto-diff/goto_diff_parse_options.cpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@ Author: Peter Schrammel
1111

1212
#include "goto_diff_parse_options.h"
1313

14-
#include <cstdlib> // exit()
15-
#include <fstream>
16-
#include <iostream>
17-
1814
#include <util/config.h>
1915
#include <util/exit_codes.h>
2016
#include <util/options.h>
@@ -28,17 +24,19 @@ Author: Peter Schrammel
2824
#include <goto-programs/set_properties.h>
2925
#include <goto-programs/show_properties.h>
3026

31-
#include <goto-instrument/cover.h>
32-
3327
#include <ansi-c/cprover_library.h>
34-
28+
#include <ansi-c/gcc_version.h>
3529
#include <assembler/remove_asm.h>
36-
3730
#include <cpp/cprover_library.h>
31+
#include <goto-instrument/cover.h>
3832

33+
#include "change_impact.h"
3934
#include "syntactic_diff.h"
4035
#include "unified_diff.h"
41-
#include "change_impact.h"
36+
37+
#include <cstdlib> // exit()
38+
#include <fstream>
39+
#include <iostream>
4240

4341
goto_diff_parse_optionst::goto_diff_parse_optionst(int argc, const char **argv)
4442
: parse_options_baset(
@@ -99,6 +97,15 @@ int goto_diff_parse_optionst::doit()
9997

10098
goto_modelt goto_model1 =
10199
initialize_goto_model({cmdline.args[0]}, ui_message_handler, options);
100+
101+
// configure gcc, if required -- initialize_goto_model will have set config
102+
if(config.ansi_c.preprocessor == configt::ansi_ct::preprocessort::GCC)
103+
{
104+
gcc_versiont gcc_version;
105+
gcc_version.get("gcc");
106+
configure_gcc(gcc_version);
107+
}
108+
102109
if(process_goto_program(options, goto_model1))
103110
return CPROVER_EXIT_INTERNAL_ERROR;
104111
goto_modelt goto_model2 =

src/goto-instrument/goto_instrument_parse_options.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ Author: Daniel Kroening, [email protected]
6969
#include <ansi-c/ansi_c_language.h>
7070
#include <ansi-c/c_object_factory_parameters.h>
7171
#include <ansi-c/cprover_library.h>
72+
#include <ansi-c/gcc_version.h>
7273
#include <assembler/remove_asm.h>
7374
#include <cpp/cprover_library.h>
7475
#include <pointer-analysis/add_failed_symbols.h>
@@ -130,6 +131,14 @@ int goto_instrument_parse_optionst::doit()
130131

131132
get_goto_program();
132133

134+
// configure gcc, if required -- get_goto_program will have set the config
135+
if(config.ansi_c.preprocessor == configt::ansi_ct::preprocessort::GCC)
136+
{
137+
gcc_versiont gcc_version;
138+
gcc_version.get("gcc");
139+
configure_gcc(gcc_version);
140+
}
141+
133142
{
134143
const bool validate_only = cmdline.isset("validate-goto-binary");
135144

0 commit comments

Comments
 (0)