]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix bad interaction between GTY((user)) and incomplete declarations
authordmalcolm <dmalcolm@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Aug 2013 14:59:02 +0000 (14:59 +0000)
committerdmalcolm <dmalcolm@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Aug 2013 14:59:02 +0000 (14:59 +0000)
gcc/
* gengtype.c (create_user_defined_type): Ensure that the kind
is set to TYPE_USER_STRUCT, fixing a bug seen when an incomplete
declaration is seen before the GTY((user)) marking.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@201791 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/gengtype.c

index cc512075d070150efe386ce0988502ad646acbfc..e71ae3edbf7438a58c17e73a42e654ecbfc6589e 100644 (file)
@@ -1,3 +1,9 @@
+2013-08-16  David Malcolm  <dmalcolm@redhat.com>
+
+       * gengtype.c (create_user_defined_type): Ensure that the kind
+       is set to TYPE_USER_STRUCT, fixing a bug seen when an incomplete
+       declaration is seen before the GTY((user)) marking.
+
 2013-08-16  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
        PR target/58105
index 20854966facfbd975c93415a1767909212f4eb7d..9c127522733163bfb58974ba42925a21b516ef7b 100644 (file)
@@ -559,6 +559,12 @@ type_p
 create_user_defined_type (const char *type_name, struct fileloc *pos)
 {
   type_p ty = find_structure (type_name, TYPE_USER_STRUCT);
+
+  /* We might have already seen an incomplete decl of the given type,
+     in which case we won't have yet seen a GTY((user)), and the type will
+     only have kind "TYPE_STRUCT".  Mark it as a user struct.  */
+  ty->kind = TYPE_USER_STRUCT;
+
   ty->u.s.line = *pos;
   ty->u.s.bitmap = get_lang_bitmap (pos->file);
   do_typedef (type_name, ty, pos);