repo.or.cz
/
smatch.git
/
blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
log
|
graphiclog1
|
graphiclog2
|
commit
|
commitdiff
|
tree
|
refs
|
edit
|
fork
blame
|
history
|
raw
|
HEAD
Label the output: error, warn, or info
[smatch.git]
/
validation
/
builtin_safe1.c
blob
8a8b9794f7f4a2f076736178080fb34059b9ab30
1
#define MY_MACRO(a) do { \
2
__builtin_warning(!__builtin_safe_p(a),
"Macro argument with side effects: "
#a); \
3
a; \
4
} while (0)
5
6
int
g
(
int
);
7
int
h
(
int
)
__attribute__
((
pure
));
8
int
i
(
int
)
__attribute__
((
const
));
9
10
static int
foo
(
int
x
,
int
y
)
11
{
12
/* unsafe: */
13
MY_MACRO
(
x
++);
14
MY_MACRO
(
x
+=
1
);
15
MY_MACRO
(
x
=
x
+
1
);
16
MY_MACRO
(
x
%=
y
);
17
MY_MACRO
(
x
=
y
);
18
MY_MACRO
(
g
(
x
));
19
MY_MACRO
((
y
,
g
(
x
)));
20
/* safe: */
21
MY_MACRO
(
x
+
1
);
22
MY_MACRO
(
h
(
x
));
23
MY_MACRO
(
i
(
x
));
24
return
x
;
25
}
26