diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 1c1936245d86ef0388a0df413c0991ecc9edf2bb..68abca4dfb1ef9eebf6e5f5d4d08b1feaced4448 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,9 @@
+2014-07-02  Jan Hubicka  <hubicka@ucw.cz>
+	    Chen Gang <gang.chen.5i5j@gmail.com>
+
+	* c-decl.c (duplicate_decls): CLear DECL_STRUCT_FUNCTION before
+	releasing symbol.
+
 2014-07-01  Marek Polacek  <polacek@redhat.com>
 
 	* c-typeck.c (convert_for_assignment): Pass OPT_Wint_conversion
diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c
index 7c37edfd3728c95abd398bca0d7c8937ebffb930..3dec90b23ed52edfdbbafd156b38cec4234ebbe3 100644
--- a/gcc/c/c-decl.c
+++ b/gcc/c/c-decl.c
@@ -2575,7 +2575,14 @@ duplicate_decls (tree newdecl, tree olddecl)
 
   merge_decls (newdecl, olddecl, newtype, oldtype);
 
-  /* The NEWDECL will no longer be needed.  */
+  /* The NEWDECL will no longer be needed.
+
+     Before releasing the node, be sure to remove function from symbol
+     table that might have been inserted there to record comdat group.
+     Be sure to however do not free DECL_STRUCT_FUNCTION because this
+     structure is shared in between NEWDECL and OLDECL.  */
+  if (TREE_CODE (newdecl) == FUNCTION_DECL)
+    DECL_STRUCT_FUNCTION (newdecl) = NULL;
   if (TREE_CODE (newdecl) == FUNCTION_DECL
       || TREE_CODE (newdecl) == VAR_DECL)
     {
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1195959ff2d180b49833d6bdc45fda567bc327cd..286898309fa25d3588d99c4c7b8de563398c4c82 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-07-02  Jan Hubicka  <hubicka@ucw.cz>
+	    Chen Gang <gang.chen.5i5j@gmail.com>
+
+	* gcc.c-torture/compile/section.c: New testcase.
+ 
 2014-07-02  Christian Bruel  <christian.bruel@st.com>
 
 	PR target/29349
diff --git a/gcc/testsuite/gcc.c-torture/compile/section.c b/gcc/testsuite/gcc.c-torture/compile/section.c
new file mode 100644
index 0000000000000000000000000000000000000000..1e8d094068c61444b003e5d2e61e92af6fb63863
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/section.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+
+/* { dg-require-effective-target named_sections } */
+extern int __attribute__ ((__section__(".init.text"))) elv_register(void)
+{
+ return 0;
+}
+extern typeof(elv_register) elv_register;