Skip to content

Commit

Permalink
Merge pull request #5416 from hannes-steffenhagen-diffblue/fix/human-…
Browse files Browse the repository at this point in the history
…readable-error-on-wrong-main-signature

Add human readable error message for invalid main signatures
  • Loading branch information
NlightNFotis authored Jul 9, 2020
2 parents 695a360 + 3b9b155 commit 354b2c1
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#include <assert.h>
#include <stddef.h>

struct foo
{
int x;
int y;
};

int main(struct foo *p)
{
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
CORE
main.c

'main' with signature .* found
^EXIT=6$
^SIGNAL=0$
--
Invariant check failed
--
This is just to check that CBMC doesn’t crash when we see a ‘main’ function
with an unexpected signature, see https://github.com/diffblue/cbmc/issues/5415
15 changes: 14 additions & 1 deletion src/ansi-c/ansi_c_entry_point.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Author: Daniel Kroening, [email protected]
#include <linking/static_lifetime_init.h>

#include "c_nondet_symbol_factory.h"
#include "expr2c.h"

exprt::operandst build_function_environment(
const code_typet::parameterst &parameters,
Expand Down Expand Up @@ -473,7 +474,19 @@ bool generate_ansi_c_start_function(
}
}
else
UNREACHABLE;
{
const namespacet ns{symbol_table};
const std::string main_signature = type2c(symbol.type, ns);
throw invalid_source_file_exceptiont{
"'main' with signature '" + main_signature +
"' found,"
" but expecting one of:\n"
" int main(void)\n"
" int main(int argc, char *argv[])\n"
" int main(int argc, char *argv[], char *envp[])\n"
"If this is a non-standard main entry point please provide a custom\n"
"entry function and point to it via cbmc --function instead"};
}
}
else
{
Expand Down

0 comments on commit 354b2c1

Please sign in to comment.