Skip to content

Commit febda72

Browse files
authored
Merge pull request #4212 from diffblue/undeclared_function
added test for undeclared functions
2 parents 7e5bf13 + 7b72db5 commit febda72

File tree

13 files changed

+48
-0
lines changed

13 files changed

+48
-0
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// There is no #include <stdlib.h> here, deliberately,
2+
// to trigger automatic generation of a signature below.
3+
4+
int main(void)
5+
{
6+
malloc(4);
7+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#include <stdlib.h>
2+
3+
int f()
4+
{
5+
malloc(4);
6+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
KNOWNBUG
2+
fileA.c
3+
fileB.c --validate-goto-model
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
--
7+
^warning: ignoring
8+
^CONVERSION ERROR$

src/goto-cc/armcc_mode.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ int armcc_modet::doit()
5151

5252
debug() << "ARM mode" << eom;
5353

54+
// model validation
55+
compiler.validate_goto_model = cmdline.isset("validate-goto-model");
56+
5457
// get configuration
5558
config.set(cmdline);
5659

src/goto-cc/compile.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,12 @@ bool compilet::write_bin_object_file(
542542
const std::string &file_name,
543543
const goto_modelt &src_goto_model)
544544
{
545+
if(validate_goto_model)
546+
{
547+
status() << "Validating goto model" << eom;
548+
src_goto_model.validate(validation_modet::INVARIANT);
549+
}
550+
545551
statistics() << "Writing binary format object `"
546552
<< file_name << "'" << eom;
547553

src/goto-cc/compile.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class compilet : public messaget
3434
bool echo_file_name;
3535
std::string working_directory;
3636
std::string override_language;
37+
bool validate_goto_model = false;
3738

3839
enum { PREPROCESS_ONLY, // gcc -E
3940
COMPILE_ONLY, // gcc -c

src/goto-cc/cw_mode.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ int cw_modet::doit()
5151

5252
debug() << "CodeWarrior mode" << eom;
5353

54+
// model validation
55+
compiler.validate_goto_model = cmdline.isset("validate-goto-model");
56+
5457
// get configuration
5558
config.set(cmdline);
5659

src/goto-cc/gcc_cmdline.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ const char *goto_cc_options_without_argument[]=
4949
"--big-endian",
5050
"--no-arch",
5151
"--partial-inlining",
52+
"--validate-goto-model",
5253
"-?",
5354
nullptr
5455
};

src/goto-cc/gcc_mode.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,9 @@ int gcc_modet::doit()
423423
debug() << "GCC mode" << eom;
424424
}
425425

426+
// model validation
427+
compiler.validate_goto_model = cmdline.isset("validate-goto-model");
428+
426429
// determine actions to be undertaken
427430
if(cmdline.isset('S'))
428431
compiler.mode=compilet::ASSEMBLE_ONLY;

src/goto-cc/ld_cmdline.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ const char *goto_ld_options_with_argument[]=
2222
"--verbosity",
2323
"--native-compiler",
2424
"--native-linker",
25+
"--validate-goto-model",
2526
nullptr
2627
};
2728

src/goto-cc/ld_mode.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ int ld_modet::doit()
9696
// determine actions to be undertaken
9797
compiler.mode = compilet::LINK_LIBRARY;
9898

99+
// model validation
100+
compiler.validate_goto_model = cmdline.isset("validate-goto-model");
101+
99102
// get configuration
100103
config.set(cmdline);
101104

src/goto-cc/ms_cl_cmdline.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Author: Daniel Kroening
2222
/// parses the command line options into a cmdlinet
2323
/// \par parameters: argument count, argument strings
2424
/// \return none
25+
// clang-format off
2526
const char *non_ms_cl_options[]=
2627
{
2728
"--show-symbol-table",
@@ -44,8 +45,10 @@ const char *non_ms_cl_options[]=
4445
"--partial-inlining",
4546
"--verbosity",
4647
"--function",
48+
"--validate-goto-model",
4749
nullptr
4850
};
51+
// clang-format on
4952

5053
bool ms_cl_cmdlinet::parse(const std::vector<std::string> &arguments)
5154
{

src/goto-cc/ms_cl_mode.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ int ms_cl_modet::doit()
6565

6666
debug() << "Visual Studio mode " << ms_cl_version << eom;
6767

68+
// model validation
69+
compiler.validate_goto_model = cmdline.isset("validate-goto-model");
70+
6871
// get configuration
6972
config.set(cmdline);
7073

0 commit comments

Comments
 (0)