From 0eb64d9f10c994383e4ebfec27f1c47996fc3690 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Thu, 9 May 2024 18:16:16 -0500 Subject: [PATCH] Brought back compound-literals in inline functions Compound-literals weren't the culprit after all! It was... RVO interactions with inlined function arguments? To be honest I still don't quite understand what's going on, but I present to you this madness: code stack before: 33664 2624 after: 33664 (+0.0%) 2624 (+0.0%) --- lfs.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/lfs.c b/lfs.c index 218ed846..4bef31c1 100644 --- a/lfs.c +++ b/lfs.c @@ -1463,10 +1463,9 @@ static inline lfsr_cat_t lfsr_data_cat(lfsr_data_t data) { // only simple data can be converted directly to cats LFS_ASSERT(lfsr_data_isbuf(data)); LFS_ASSERT(lfsr_data_size(data) <= 0x7fff); - lfsr_cat_t cat; - cat.u.buf.size = data.u.buf.size; - cat.u.buf.buffer = data.u.buf.buffer; - return cat; + return (lfsr_cat_t){ + .u.buf.size=data.u.buf.size, + .u.buf.buffer=data.u.buf.buffer}; } // cat helpers @@ -1595,13 +1594,11 @@ typedef struct lfsr_attr { static inline lfsr_attr_t lfsr_attr( lfsr_tag_t tag, lfsr_srid_t delta, lfsr_cat_t cat) { - // don't use a compound literal here, GCC hates it - lfsr_attr_t attr; - attr.tag = tag; - attr.size = cat.u.cat.size; - attr.delta = delta; - attr.u.datas = cat.u.cat.datas; - return attr; + return (lfsr_attr_t){ + .tag=tag, + .size=cat.u.cat.size, + .delta=delta, + .u.datas=cat.u.cat.datas}; } #define LFSR_ATTR_NOOP() \