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