• Michal Marek's avatar
    genksyms: Track changes to enum constants · e37ddb82
    Michal Marek authored
    Enum constants can be used as array sizes; if the enum itself does not
    appear in the symbol expansion, a change in the enum constant will go
    unnoticed. Example patch that changes the ABI but does not change the
    checksum with current genksyms:
    | enum e {
    |	E1,
    |	E2,
    |+	E3,
    |	E_MAX
    | };
    | struct s {
    |	int a[E_MAX];
    | }
    | int f(struct s *s) { ... }
    Therefore, remember the value of each enum constant and
    expand each occurence to <constant> <value>. The value is not actually
    computed, but instead an expression in the form
    (last explicitly assigned value) + N
    is used. This avoids having to parse and semantically understand whole
    of C.
    Note: The changes won't take effect until the lexer and parser are
    rebuilt by the next patch.
    Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
    Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
genksyms.c 22.4 KB