Re: [cocci] Adjusting attributes for variables with SmPL?

Pierrick Philippe <[email protected]> Wed, 27 May 2026 10:06:36 +0200
Newsgroups fr.inria.cocci
Message-ID <[email protected]>
Hi Markus and Julia,

I hope you are doing well.

I am now trying to work with structures and basically here is the patch
I'd like to generate:

```diff
struct foo {
    int x;
    int y;
};
int main(void) {
-   struct foo f = { 42, 42 };
+  struct foo __attribute__((myattr (("x")))) f = { 42, 42 };
    int b;
    int *c = &b;
    int z = memcmp(&f.x, c, sizeof(int));
    return z;
}
```

I used the following semantic patch which is successfully parsed, but
not generating any diff:

```cocci
@attribute_struct_scalar_type@
expression E, E1, E2;
type T;
identifier F, X;
@@
-T F = E;
+T __attribute__((myattr(("X")))) F = E;
...
memcmp(&F.X, E1, E2)
```

The idea is essentially the same than in my previous email, although
here I'm working with field access.
The semantic patch is clearly inspired from a previous version for
integer or float which was successfully parsed and spatch was generating
the expected diff.

Also, from what I understand from the docs, metavariables of type
`field` target field declaration (meaning within the structure type
definition specifically).
And I could not wrap my head around a way to use it to achieve my goal here.
I also tried to used a quite simple semantic patch, which was still not
generating any diff and raising a warning ("should f be a metavariable?").
And I do not understand why this one is not working since there are
basically no metavariables outside the three expressions.
Here is the semantic patch in question:

```cocci
@attribute_struct_scalar_type_dummy@
expression E, E1, E2;
@@
-struct foo f = E;
+struct foo __attribute__((myattr(("x")))) f = E;
...
memcmp(&f.x, E1, E2)
```

In any case, thank you for your time and your previous answers.

Pierrick