21 if(parameters.empty())
24 if(parameters.size()!=2 &&
28 error() <<
"main expected to have no or two or three parameters" <<
eom;
34 const exprt &op0=static_cast<const exprt &>(parameters[0]);
35 const exprt &op1=static_cast<const exprt &>(parameters[1]);
41 argc_symbol.
name=
"argc'";
46 if(argc_symbol.
type.
id()!=ID_signedbv &&
47 argc_symbol.
type.
id()!=ID_unsignedbv)
50 error() <<
"argc argument expected to be integer type, but got `"
59 if(op1.
type().
id()!=ID_pointer ||
63 error() <<
"argv argument expected to be pointer-to-pointer type, "
80 argv_symbol.name=
"argv'";
81 argv_symbol.type=argv_type;
82 argv_symbol.is_static_lifetime=
true;
83 argv_symbol.is_lvalue=
true;
89 if(parameters.size()==3)
93 envp_symbol.
name=
"envp'";
94 envp_symbol.
type=(static_cast<const exprt&>(parameters[2])).type();
97 symbolt envp_size_symbol, *envp_new_size_symbol;
99 envp_size_symbol.
name=
"envp_size'";
102 move_symbol(envp_size_symbol, envp_new_size_symbol);
104 if(envp_symbol.
type.
id()!=ID_pointer)
107 error() <<
"envp argument expected to be pointer type, but got `"
114 envp_symbol.
type.
id(ID_array);