zero-initialize largest union member

git-svn-id: svn+ssh://svn.cprover.org/srv/svn/cbmc/trunk@4555 6afb6bc1-c8e4-404c-8f48-9ae832c5b171
This commit is contained in:
kroening 2014-08-27 13:46:11 +00:00
parent 9dc31ba8fa
commit c7d2e8523b
1 changed files with 9 additions and 6 deletions

View File

@ -11,6 +11,7 @@ Author: Daniel Kroening, kroening@kroening.com
#include <util/expr_util.h>
#include <util/std_types.h>
#include <util/std_expr.h>
#include <util/pointer_offset_size.h>
#include <ansi-c/c_types.h>
#include <ansi-c/expr2c.h>
@ -219,8 +220,9 @@ exprt zero_initializert::zero_initializer_rec(
union_typet::componentt component;
bool found=false;
mp_integer component_size=0;
// get the first non-method member
// we need to find the largest member
for(struct_typet::componentst::const_iterator
it=components.begin();
@ -228,14 +230,15 @@ exprt zero_initializert::zero_initializer_rec(
it++)
{
// skip methods
if(it->type().id()==ID_code)
{
}
else
if(it->type().id()==ID_code) continue;
mp_integer size=pointer_offset_size(ns, it->type());
if(size>component_size)
{
component=*it;
found=true;
break;
component_size=size;
}
}