Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for gnu extension flexible array initializer #264

Open
ubitux opened this issue Jan 23, 2019 · 2 comments
Open

Support for gnu extension flexible array initializer #264

ubitux opened this issue Jan 23, 2019 · 2 comments

Comments

@ubitux
Copy link

ubitux commented Jan 23, 2019

Example code:

#include <stdio.h>

struct int_def {
    const char *s;
    const int ints[];
};

static const struct int_def my_ints = {
    .s = "my ints",
    .ints = {0, 3, 7, 2, -1},
};

int main() {
    const struct int_def *def = &my_ints;
    const int *v = def->ints;

    printf("%s\n", def->s);
    while (*v != -1) {
        printf("%d\n", *v);
        v++;
    }
    return 0;
}

This is a common idiom used at the end of structures, making their size variable. This is the expected output on GCC or Clang:

my ints
0
3
7
2

With CompCert 3.4, it doesn't compile: error: initializer element is not a compile-time constant (wrong number of elements in array initializer)

@bschommer
Copy link
Member

This is actually not standard C99 but rather a gnu extension. You also get a warning if you compile it with -pedantic and -std=c99 for both gcc and clang.

@bschommer bschommer changed the title Support for extensible structures ending with empty-length arrays Support for gnu extension flexible array initializer Jan 28, 2019
@bschommer
Copy link
Member

I changed the title to reflect the real problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants