On 12/07/2018 19:09, Peter Maydell wrote: >> That's the same what object_initialize() is doing (see above). Otherwise >> all the callers have to cast their pointers with OBJECT() first. > Casting with OBJECT() would not work, because it does a typecheck. > At the point where something is calling object_initialize() or > object_initialize_with_child(), the memory at 'childobj' has not > been initialized, so a typecheck is impossible. > > It's only once the object has actually been initialized that > the memory is a valid Object* that you can put through OBJECT().
OBJECT is special and just does a cast, because every pointer to a QOM object would pass. However, your reasoning still applies: you should not put through OBJECT() an object that hasn't been initialized yet, just like you should not put it through DEVICE() or any of the macros that _do_ perform the typecheck. Paolo