From c02cdc25dc7f5970b33cbe38f2c15ebb7e0fa58c Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 8 Nov 2007 19:50:38 +0000 Subject: [PATCH] re PR c++/30297 (ICE with extern "C" and inheritance) gcc/cp 2007-11-08 Andrew Pinski PR c++/30297: * tree.c (decl_linkage): Fields have no linkage. gcc/testsuite PR c++/30297: * g++.dg/inherit/pr30297.C: New file. From-SVN: r130018 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/tree.c | 4 ++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/inherit/pr30297.C | 11 +++++++++++ 4 files changed, 25 insertions(+) create mode 100644 gcc/testsuite/g++.dg/inherit/pr30297.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e28f582..3a99fba 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2007-11-08 Andrew Pinski + + PR c++/30297: + * tree.c (decl_linkage): Fields have no linkage. + 2007-11-08 Daniel Jacobowitz * class.c (build_ctor_vtbl_group): Lay out the new type and decl. diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index c2b4af0..2a7cd3a 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -2493,6 +2493,10 @@ decl_linkage (tree decl) if (!DECL_NAME (decl)) return lk_none; + /* Fields have no linkage. */ + if (TREE_CODE (decl) == FIELD_DECL) + return lk_none; + /* Things that are TREE_PUBLIC have external linkage. */ if (TREE_PUBLIC (decl)) return lk_external; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e04e5e1..ede1c09 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-11-08 Tom Tromey + + PR c++/30297: + * g++.dg/inherit/pr30297.C: New file. + 2007-11-08 Danny Smith * gcc.dg/compat/struct-layout-1_generate.c (dg-options) Add diff --git a/gcc/testsuite/g++.dg/inherit/pr30297.C b/gcc/testsuite/g++.dg/inherit/pr30297.C new file mode 100644 index 0000000..222d9ab --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/pr30297.C @@ -0,0 +1,11 @@ +// Regression test for ICE from PR c++/30297. + +struct A +{ + int i; +}; + +extern "C" struct B : A +{ + A::i; +}; -- 2.7.4