From 7323b6643e2f929f49b68582217e9a9b2182df57 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Wed, 12 Sep 2007 08:07:12 +0000 Subject: [PATCH] re PR middle-end/33382 (internal compiler error: in get_constraint_for_component_ref, at tree-ssa-structalias.c:2454) 2007-09-12 Richard Guenther PR middle-end/33382 * gcc.c-torture/compile/pr33382.c: New testcase. * gcc.c-torture/execute/pr33382.c: Likewise. From-SVN: r128419 --- gcc/testsuite/ChangeLog | 6 ++ gcc/testsuite/gcc.c-torture/compile/pr33382.c | 95 +++++++++++++++++++ gcc/testsuite/gcc.c-torture/execute/pr33382.c | 21 ++++ 3 files changed, 122 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr33382.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr33382.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dc18e62e9f7..621d8bd0213 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2007-09-12 Richard Guenther + + PR middle-end/33382 + * gcc.c-torture/compile/pr33382.c: New testcase. + * gcc.c-torture/execute/pr33382.c: Likewise. + 2007-09-12 Christopher D. Rickett PR fortran/33395 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr33382.c b/gcc/testsuite/gcc.c-torture/compile/pr33382.c new file mode 100644 index 00000000000..d83f74e42cc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr33382.c @@ -0,0 +1,95 @@ +typedef unsigned int size_t; +typedef struct { + int disable; + char *searchconfig[]; +} config_t; +typedef struct { + void *lng; +} arglist_t; +config_t config = { + .searchconfig = { + ((void *) 0)} +}; + +arglist_t arglist[] = { + { + &config.searchconfig[0]} +}; +const int arglistsize = ((int) (sizeof(arglist) / sizeof(arglist_t))); +void show_configuration(char *arg) +{ + int i; + + if (!__extension__( { + size_t + __s1_len, + __s2_len; (__builtin_constant_p(arglist[i].lng) + && (__s1_len = (!((size_t) + (const void *) + 1) + || __s2_len >= 4)) + ? : (__builtin_constant_p(arglist[i].lng) + && ((size_t) + (const void *) + 4) + ? (__builtin_constant_p(arg) + && ((size_t) (const void *) 1) ? + : (__extension__( { + __const * __s2 = + (__const *) + (arg); + register + __result = + (((__const + *) (arglist + [i]. + lng))[0] + - __s2[0]); + if (__s1_len == + 0) { + if (__s1_len == + 0) { + __result = + (((__const + unsigned char + *) (__const + char + *) + (arglist[i]. + lng))[3] - + __s2[3]);} + } + __result;} + ))): + (__builtin_constant_p(arg) + ? + (__builtin_constant_p + (arglist[i].lng) + ? : (__extension__( { + char + __result + = + ((__const + unsigned *) + (arg))[0]; + if + (__s2_len + > 0 + && __result == + 0) { + if (__s2_len > + 1 + && __result + == 0) { + } + } + __result;} + ))): + + + + __builtin_strcmp(arglist[i].lng, + arg))));} + )) + return; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr33382.c b/gcc/testsuite/gcc.c-torture/execute/pr33382.c new file mode 100644 index 00000000000..ee539643ae6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr33382.c @@ -0,0 +1,21 @@ +struct Foo { + int i; + int j[]; +}; + +struct Foo x = { 1, { 2, 0, 2, 3 } }; + +int foo(void) +{ + x.j[0] = 1; + return x.j[1]; +} + +extern void abort(void); + +int main() +{ + if (foo() != 0) + abort(); + return 0; +}