From: Jason Merrill Date: Thu, 30 May 2013 19:20:19 +0000 (-0400) Subject: re PR c++/57404 ([C++11] ICE: SIGSEGV in cp_classify_record with -g) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cc059bdd149ced1b66f912c54c8f435379abb4ad;p=gcc.git re PR c++/57404 ([C++11] ICE: SIGSEGV in cp_classify_record with -g) PR c++/57404 * cp-lang.c (cp_classify_record): Handle structs without TYPE_LANG_SPECIFIC. From-SVN: r199456 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6ccc776580f..ae2c174754e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2013-05-30 Jason Merrill + PR c++/57404 + * cp-lang.c (cp_classify_record): Handle structs without + TYPE_LANG_SPECIFIC. + PR c++/52377 * class.c (common_enclosing_class): New. * cp-tree.h: Declare it. diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c index 47a6004258b..a7fa8e4b1e9 100644 --- a/gcc/cp/cp-lang.c +++ b/gcc/cp/cp-lang.c @@ -127,7 +127,8 @@ cxx_dwarf_name (tree t, int verbosity) static enum classify_record cp_classify_record (tree type) { - if (CLASSTYPE_DECLARED_CLASS (type)) + if (TYPE_LANG_SPECIFIC (type) + && CLASSTYPE_DECLARED_CLASS (type)) return RECORD_IS_CLASS; return RECORD_IS_STRUCT; diff --git a/gcc/testsuite/g++.dg/cpp1y/vla6.C b/gcc/testsuite/g++.dg/cpp1y/vla6.C new file mode 100644 index 00000000000..b725e7b6f9c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/vla6.C @@ -0,0 +1,14 @@ +// PR c++/57404 +// { dg-options "-std=c++11 -g" } + +void f (int i) +{ + int a[i]; + [&a] {}; +} + +void g (int i) +{ + int a[i]; + [&a] {} (); +}