From 70724679e349298ee399b49a9157f07c4d323c79 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Wed, 6 Aug 2008 10:45:00 +0000 Subject: [PATCH] more tests [r21010] --- parsetest/constexpr2.c | 2 +- parsetest/{ => gnu99}/attributes.c | 0 parsetest/gnu99/attributes2.c | 5 +++++ parsetest/gnu99/transparent_union.c | 22 ++++++++++++++++++++++ parsetest/shouldfail/transparent_union2.c | 23 +++++++++++++++++++++++ 5 files changed, 51 insertions(+), 1 deletion(-) rename parsetest/{ => gnu99}/attributes.c (100%) create mode 100644 parsetest/gnu99/attributes2.c create mode 100644 parsetest/gnu99/transparent_union.c create mode 100644 parsetest/shouldfail/transparent_union2.c diff --git a/parsetest/constexpr2.c b/parsetest/constexpr2.c index 7633e0a..35a66a6 100644 --- a/parsetest/constexpr2.c +++ b/parsetest/constexpr2.c @@ -2,7 +2,7 @@ struct foo { int a; int b; }; -int glob = (int) &((struct foo*)0)->b; +struct foo bar = { (int) &((struct foo*)0)->b, 0 }; int main(void) { return 0; diff --git a/parsetest/attributes.c b/parsetest/gnu99/attributes.c similarity index 100% rename from parsetest/attributes.c rename to parsetest/gnu99/attributes.c diff --git a/parsetest/gnu99/attributes2.c b/parsetest/gnu99/attributes2.c new file mode 100644 index 0000000..36a3c3b --- /dev/null +++ b/parsetest/gnu99/attributes2.c @@ -0,0 +1,5 @@ +__attribute__((noreturn)) void d0(void), __attribute__((format(printf,1,2))) d1(const char*, ...), d2(void); + +int main(void) { + return 0; +} diff --git a/parsetest/gnu99/transparent_union.c b/parsetest/gnu99/transparent_union.c new file mode 100644 index 0000000..cb4e15d --- /dev/null +++ b/parsetest/gnu99/transparent_union.c @@ -0,0 +1,22 @@ +struct sockaddr { + int bla; +}; + +struct sockaddr_at { + int blo, blup; +}; + +typedef union bla { + struct sockaddr *__restrict__ sockaddr_ptr; + struct sockaddr_at *__restrict__ sockaddr_at_ptr; +} sockaddr_arg __attribute__((__transparent_union__)); + +void *t_recvfrom(sockaddr_arg arg) { + return arg.sockaddr_at_ptr; +} + +int main(void) { + struct sockaddr_at at; + int r = (t_recvfrom(&at) != &at); + return r; +} diff --git a/parsetest/shouldfail/transparent_union2.c b/parsetest/shouldfail/transparent_union2.c new file mode 100644 index 0000000..a71b46b --- /dev/null +++ b/parsetest/shouldfail/transparent_union2.c @@ -0,0 +1,23 @@ +struct sockaddr { + int bla; +}; + +struct sockaddr_at { + int blo, blup; +}; + +typedef union bla { + struct sockaddr *__restrict__ sockaddr_ptr; + struct sockaddr_at *__restrict__ sockaddr_at_ptr; +} sockaddr_arg __attribute__((__transparent_union__)); + +void *t_recvfrom(sockaddr_arg arg) { + return arg.sockaddr_at_ptr; +} + +int main(void) { + struct sockaddr at; + union bla bla = { &at }; + int r = (t_recvfrom(bla) != &at); + return r; +} -- 2.20.1