No, it's a compilation error (error: field expected), and I can't reproduce it in a small program. The original file has hundreds of thousands of loc.
I'll investigate and send you a small self-contained example. On Sun, Jul 21, 2019 at 9:20 PM Michael Matz <matz....@frakked.de> wrote: > Hi, > > On Sun, 21 Jul 2019, Ivan Medoedov wrote: > > > Typo: > > > > Foo* foo = ALLOC_INIT(Foo, { .field = 123, .field2 = 456 }); > > Next time, please be specific in your bug reports, it should contain a > self-contained example of the problem you're seeing. With the info > available I constructed the example below, and it works just fine. > > Then I realized that maybe you indeed mean GNU designated initializers and > the runtime behaviour instead of not being able to compile something. I > was able to generate a segfault at runtime when using the GNU form (i.e. > '{ foo: val }'). That's now fixed in mob. > > % cat alloc-init.c > typedef __SIZE_TYPE__ size_t; > struct S { > int a, b; > }; > > extern void * malloc(size_t); > extern void * memcpy(void *, const void *, size_t); > extern int printf(const char *, ...); > void *memdup(const void *src, size_t sz); > #define ALLOC_INIT(type, ...) \ > (type *)memdup((type[]){ __VA_ARGS__ }, sizeof(type)) > > int main() > { > struct S *ps = ALLOC_INIT(struct S, {.a = 3, .b = 4}); > printf("%d %d\n", ps->a, ps->b); > return 0; > } > > void *memdup(const void *src, size_t sz) { > void *mem = malloc(sz); > return mem ? memcpy(mem, src, sz) : 0; > } > > Ciao, > Michael. > > > > > > > On Sun, Jul 21, 2019 at 7:56 PM Ivan Medoedov <ivan.medoe...@gmail.com> > > wrote: > > Indeed. Sorry, my bad. > > Looks like the error is caused by __VA_ARGS__ > > > > I'm using the following macro: > > > > #define ALLOC_INIT(type, ...) (type *)memdup((type[]){ __VA_ARGS__ }, > > sizeof(type)) > > > > > https://tia.mat.br/posts/2015/05/01/initializing_a_heap_allocated_structure > > _in_c.html > > > > Foo* foo = ALLOC_INIT(Foo, { field: 123, field2: 456 }); > > > > error: field expected > > > > This macro works fine with GCC and Clang. > > > > > > On Sun, Jul 21, 2019 at 6:50 PM Michael Matz <matz....@frakked.de> > > wrote: > > Hi, > > > > On Sun, 21 Jul 2019, Ivan Medoedov wrote: > > > > > Hello, > > > { .field = value } syntax is not supported by TCC. > > > > Why do you think so? > > > > % cat designated-init.c > > struct S { > > int a, b; > > }; > > > > struct S s = {.a = 2, .b = 3}; > > % ./tcc -c designated-init.c && echo ok > > ok > > % > > > > > > Ciao, > > Michael. > > > > _______________________________________________ > > Tinycc-devel mailing list > > Tinycc-devel@nongnu.org > > https://lists.nongnu.org/mailman/listinfo/tinycc-devel > > > > > >_______________________________________________ > Tinycc-devel mailing list > Tinycc-devel@nongnu.org > https://lists.nongnu.org/mailman/listinfo/tinycc-devel >
_______________________________________________ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel