> >>
> >> This patch avoids calling varpool_node::finalize_decl on error_mark_node
> >> type decls.  Does it make sense?

Yep, i guess this is fine.  I wonder why error_mark_node needs to be in local
decl list? :)

honza
> >>
> >>
> >> H.J.
> >> --
> >> gcc/
> >>
> >>         PR target/66810
> >>         * cgraphbuild.c (pass_build_cgraph_edges::execute): Skip
> >>         error_mark_node type decls.
> >>
> >> gcc/testsuite/
> >>
> >>         PR target/66810
> >>         * gcc.target/i386/pr66810.c: New test.
> >> ---
> >>  gcc/cgraphbuild.c                       |  3 ++-
> >>  gcc/testsuite/gcc.target/i386/pr66810.c | 10 ++++++++++
> >>  2 files changed, 12 insertions(+), 1 deletion(-)
> >>  create mode 100644 gcc/testsuite/gcc.target/i386/pr66810.c
> >>
> >> diff --git a/gcc/cgraphbuild.c b/gcc/cgraphbuild.c
> >> index 7d2d096..4d679d9 100644
> >> --- a/gcc/cgraphbuild.c
> >> +++ b/gcc/cgraphbuild.c
> >> @@ -381,7 +381,8 @@ pass_build_cgraph_edges::execute (function *fun)
> >>    FOR_EACH_LOCAL_DECL (fun, ix, decl)
> >>      if (TREE_CODE (decl) == VAR_DECL
> >>         && (TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
> >> -       && !DECL_HAS_VALUE_EXPR_P (decl))
> >> +       && !DECL_HAS_VALUE_EXPR_P (decl)
> >> +       && TREE_TYPE (decl) != error_mark_node)
> >>        varpool_node::finalize_decl (decl);
> >>    record_eh_tables (node, fun);
> >>
> >> diff --git a/gcc/testsuite/gcc.target/i386/pr66810.c 
> >> b/gcc/testsuite/gcc.target/i386/pr66810.c
> >> new file mode 100644
> >> index 0000000..4778b37
> >> --- /dev/null
> >> +++ b/gcc/testsuite/gcc.target/i386/pr66810.c
> >> @@ -0,0 +1,10 @@
> >> +/* { dg-do compile { target ia32 } } */
> >> +/* { dg-options "-mno-sse -mno-mmx -miamcu" } */
> >> +
> >> +int vv;
> >> +
> >> +void
> >> +i (void)
> >> +{
> >> +  static int a[vv]; /* { dg-error "storage size" } */
> >> +}
> >> --
> >> 2.4.3
> >>
> >
> >
> >
> > --
> > H.J.
> 
> 
> 
> -- 
> H.J.

Reply via email to