On 31.08.2017 16:36, David Hildenbrand wrote: > On 31.08.2017 16:31, Thomas Huth wrote: >> On 31.08.2017 16:23, David Hildenbrand wrote: >>> >>>>> +struct S390CPU; >>>> >>>> You define a "struct S390CPU" here ... >>>> >>>>> typedef struct S390CcwMachineState { >>>>> /*< private >*/ >>>>> MachineState parent_obj; >>>>> >>>>> /*< public >*/ >>>>> + S390CPU **cpus; >>>> >>>> ... but use the typedef'ed S390CPU here ... looks somewhat suspicious, I >>>> wonder whether the typedef is really in the right place? >>> >>> General question: how much do we care about headers that are not consistent? >>> >>> E.g. shall I forward declare or simply ignore if compilers don't bite me? >> >> My remark was not so much about your patch, but about the original >> definition instead: "struct S390CPU" is declared in target/s390x/cpu.h, >> but "typedef struct S390CPU S390CPU" is in target/s390x/cpu-qom.h. I >> think they should rather be declared in the same header file instead. Or > > I agree, will have a look. > >> your "struct S390CPU;" forward declaration should go into cpu-qom.h >> instead, right in front of the typedef. >> > > Let me rephrase my question: > > include/hw/s390x/s390-virtio-ccw.h does not include cpu.h/cpu-qom.h > > If compilers don't complain, do we have to forward declare at all? (I > think it is cleaner, but I would like to know what is suggested)
Well, doing a forward declaration with "struct S390CPU;" and then using the typedef'd "S390CPU" without "struct" does not make much sense - these are two "different" types. If you can use "S390CPU" here without the "struct S390CPU;" declaration, that means the cpu-qom.h header got included indirectly already - so I'd suggest to simply remove the "struct S390CPU;" forward declaration from your patch. Thomas