summaryrefslogtreecommitdiff
path: root/src/basic/macro.h
diff options
context:
space:
mode:
authorMichal Schmidt <mschmidt@redhat.com>2015-07-22 17:50:44 +0200
committerMichal Schmidt <mschmidt@redhat.com>2015-07-22 19:31:17 +0200
commit77247cba3e8f94a3f58d16ec338ae030eb9145af (patch)
treecfefdbb4f31662df3c2b2b31d3ca68fe2c5dc566 /src/basic/macro.h
parent249a2737ba5d0a22f09f077b361d01d514eaf672 (diff)
basic: more optimizable IN_SET macro
Making the array static allows gcc -O2 to generate smaller code: "size systemd" before: text data bss dec hex filename 1377286 128608 2632 1508526 1704ae systemd After: text data bss dec hex filename 1374326 128572 2664 1505562 16f91a systemd (IN_SET still results in worse generated code than using "x == FOO || x == BAR || ...". I don't think we'll be able to match that with the C preprocessor.) This change limits the use of IN_SET to sets with constant elements. All present callers use constants. The compiler would report an "initializer element is not constant" error otherwise.
Diffstat (limited to 'src/basic/macro.h')
-rw-r--r--src/basic/macro.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/basic/macro.h b/src/basic/macro.h
index 8fae4d0ede..ea01d701d2 100644
--- a/src/basic/macro.h
+++ b/src/basic/macro.h
@@ -406,7 +406,7 @@ do { \
#define IN_SET(x, y, ...) \
({ \
- const typeof(y) _array[] = { (y), __VA_ARGS__ }; \
+ static const typeof(y) _array[] = { (y), __VA_ARGS__ }; \
const typeof(y) _x = (x); \
unsigned _i; \
bool _found = false; \