Am 13.12.2013 02:36, schrieb Edgar E. Iglesias: > On Wed, Nov 27, 2013 at 08:27:33PM -0800, Peter Crosthwaite wrote: >> The object-cast and class-cast caches cannot be shared because class >> caching is conditional on the target type not being an interface and >> object caching is unconditional. Leads to a bug when a class cast >> to an interface follows an object cast to the same interface type: >> >> FooObject = FOO(obj); >> FooClass = FOO_GET_CLASS(obj); >> >> Where TYPE_FOO is an interface. The first (object) cast will be >> successful and cache the casting result (i.e. TYPE_FOO will be cached). >> The second (class) cast will then check the shared cast cache >> and register a hit. The issue is, when a class cast hits in the cache >> it just returns a pointer cast of the input class (i.e. the concrete >> class). >> >> When casting to an interface, the cast itself must return the >> interface class, not the concrete class. The implementation of class >> cast caching already ensures that the returned cast result is only >> a pointer cast before caching. The object cast logic however does >> not have this check. >> >> Resolve by just splitting the object and class caches. >> >> Signed-off-by: Peter Crosthwaite <peter.crosthwa...@xilinx.com> > > Reviewed-by: Edgar E. Iglesias <edgar.igles...@gmail.com>
Thanks, applied to qom-next: https://github.com/afaerber/qemu-cpu/commits/qom-next Andreas -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg