[pacman-dev] Clang warnings

Rikard Falkeborn rikard.falkeborn at gmail.com
Fri Jan 1 14:19:19 UTC 2016


Den 1 jan 2016 15:06 skrev "Olivier Brunel" <jjk at jjacky.com>:
>
> On Fri, 1 Jan 2016 23:03:22 +1000
> Allan McRae <allan at archlinux.org> wrote:
>
> > On 01/01/16 22:01, Olivier Brunel wrote:
> > > On Thu, 31 Dec 2015 14:32:45 +0100
> > > Rikard Falkeborn <rikard.falkeborn at gmail.com> wrote:
> > >
> > >> There are some warnings recently introduced when compiling with
> > >> Clang (with --enable-warningflags) for x86_64. The warnings are
> > >> related to casting of specific alpm_event-types to alpm_event_t
> > >> where the required alignment differs between the types. On x86, it
> > >> shouldn't be a problem, but maybe there are other architectures
> > >> pacman should work on where this is a real issue?
> > >> Either way, I think it would be good if pacman built cleanly with
> > >> Clang. Any suggestions on how to fix this?
> > >
> > > I think the only way is not to use a specific event type but the
> > > generic one, to ensure the size is correct. I don't have clang so I
> > > didn't test this, but I think there are two ways to solve this.
> > >
> > > Basically the issue is when using code such as:
> > >
> > > alpm_event_hook_run_t event;
> > > event.type = ALPM_EVENT_HOOK_RUN_START;
> > > event.name = name;
> > > event.desc = desc;
> > > EVENT(handle, &event);
> > >
> > > So we could either use the alpm_event_t and always go into the right
> > > union member, e.g:
> > >
> > > alpm_event_t event;
> > > event.hook_run.type = ALPM_EVENT_HOOK_RUN_START;
> > > event.hook_run.name = name;
> > > event.hook_run.desc = desc;
> > > EVENT(handle, &event);
> > >
> >
> > I'd prefer this way but...
> >
> > What is different with these events than all the others? Why do the
> > old ones not give warnings? We should be consistent here. I have a
> > feeling we have had this conversation before...
> >
> > Allan
>
> I picked hook_run as an example, but it might affect older ones as
> well. The point is that alpm_event_t and alpm_event_hook_run_t differ
> in size. Now since the former is a union of all the specific events, it
> can hold them all, but when creating/using only a specific one, it
> might be of a different size.
> (Or maybe this is the first one to grow over the generic event?)
>
> As for having had this conversation before, I'm not sure, but there
> probaly have been a similar one in the other way around: how to use the
> generic event to get specific values, e.g. in pacman callback handler:
> typecast, of through the union.
>
> For the record, though sometimes we just go through the union (e.g.
> event->scriptlet_info.line) most times (or, whenever more than one or
> two values are needed, or used more than once) we just use a
> specific pointer, e.g: alpm_event_hook_run_t *e = &event->hook_run;
>
> -j

The types clang warns about do not contain pointers, I think every other
type does, that's why the required alignment differs. Adding a dummy
pointer to them makes the warnings go away.

The warning has nothing to do with the actual size of the types but where
in memory they are stored (is the adress guaranteed to be an even multiple
of four or eight).

Rikard


More information about the pacman-dev mailing list