static initialization must do framework variables first
This ensures, among others, that the rounding mode is set before any initializers are evaluated. Fixes #3708.
This commit is contained in:
parent
b93a666813
commit
958a61f6dc
|
@ -1,4 +1,4 @@
|
|||
KNOWNBUG
|
||||
CORE
|
||||
compile_time_rounding.c
|
||||
|
||||
^EXIT=0$
|
||||
|
|
|
@ -127,14 +127,25 @@ void static_lifetime_init(
|
|||
symbols.insert(id2string(symbol_pair.first));
|
||||
}
|
||||
|
||||
// first do framework variables
|
||||
for(const std::string &id : symbols)
|
||||
{
|
||||
auto code = static_lifetime_init(id, symbol_table);
|
||||
if(code.has_value())
|
||||
dest.add(std::move(*code));
|
||||
}
|
||||
if(has_prefix(id, CPROVER_PREFIX))
|
||||
{
|
||||
auto code = static_lifetime_init(id, symbol_table);
|
||||
if(code.has_value())
|
||||
dest.add(std::move(*code));
|
||||
}
|
||||
|
||||
// call designated "initialization" functions
|
||||
// now all other variables
|
||||
for(const std::string &id : symbols)
|
||||
if(!has_prefix(id, CPROVER_PREFIX))
|
||||
{
|
||||
auto code = static_lifetime_init(id, symbol_table);
|
||||
if(code.has_value())
|
||||
dest.add(std::move(*code));
|
||||
}
|
||||
|
||||
// now call designated "initialization" functions
|
||||
|
||||
for(const std::string &id : symbols)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue