@@ -85,20 +85,22 @@ bool model_argc_argv(
8585 std::ostringstream oss;
8686 oss << " int ARGC;\n "
8787 << " char *ARGV[1];\n "
88+ << " extern char " CPROVER_PREFIX " arg_string[4096];\n "
8889 << " void " << goto_model.goto_functions .entry_point () << " ()\n "
8990 << " {\n "
9091 << " unsigned next=0u;\n "
9192 << " " CPROVER_PREFIX " assume(ARGC>=1);\n "
9293 << " " CPROVER_PREFIX " assume(ARGC<=" << max_argc << " );\n "
93- << " char arg_string[4096]; \n "
94- << " " CPROVER_PREFIX " input( \" arg_string \" , & arg_string[0]);\n "
94+ << " " CPROVER_PREFIX " input( \" arg_string\" , \n "
95+ << " & " CPROVER_PREFIX " arg_string[0]);\n "
9596 << " for(int i=0; i<ARGC && i<" << max_argc << " ; ++i)\n "
9697 << " {\n "
9798 << " unsigned len;\n "
9899 << " " CPROVER_PREFIX " assume(len<4096);\n "
99100 << " " CPROVER_PREFIX " assume(next+len<4096);\n "
100- << " " CPROVER_PREFIX " assume(arg_string[next+len]==0);\n "
101- << " ARGV[i]=&(arg_string[next]);\n "
101+ << " " CPROVER_PREFIX " assume(\n "
102+ << " " CPROVER_PREFIX " arg_string[next+len]==0);\n "
103+ << " ARGV[i]=&(" CPROVER_PREFIX " arg_string[next]);\n "
102104 << " next+=len+1;\n "
103105 << " }\n "
104106 << " }" ;
@@ -124,8 +126,11 @@ bool model_argc_argv(
124126 // add __CPROVER_assume if necessary (it might exist already)
125127 if (
126128 symbol_pair.first == CPROVER_PREFIX " assume" ||
127- symbol_pair.first == CPROVER_PREFIX " input" )
129+ symbol_pair.first == CPROVER_PREFIX " input" ||
130+ symbol_pair.first == CPROVER_PREFIX " arg_string" )
131+ {
128132 goto_model.symbol_table .add (symbol_pair.second );
133+ }
129134 else if (symbol_pair.first == goto_model.goto_functions .entry_point ())
130135 {
131136 value = symbol_pair.second .value ;
0 commit comments