re PR c++/53848 (ICE in decl_linkage at ../../gcc-trunk/gcc/cp/tree.c:3215)

PR c++/53848
	* decl.c (build_enumerator): Don't use build_lang_decl_loc.

From-SVN: r189267
This commit is contained in:
Jason Merrill 2012-07-04 17:34:07 -04:00 committed by Jason Merrill
parent 3f1ae7424c
commit fece06368c
4 changed files with 22 additions and 8 deletions

View File

@ -1,3 +1,9 @@
2012-07-04 Jason Merrill <jason@redhat.com>
PR c++/53848
PR c++/53524
* decl.c (build_enumerator): Don't use build_lang_decl_loc.
2012-07-03 Jakub Jelinek <jakub@redhat.com>
PR c++/53812

View File

@ -12561,14 +12561,7 @@ incremented enumerator value is too large for %<long%>");
course, if we're processing a template, there may be no value. */
type = value ? TREE_TYPE (value) : NULL_TREE;
if (context && context == current_class_type)
/* This enum declaration is local to the class. We need the full
lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
decl = build_lang_decl_loc (loc, CONST_DECL, name, type);
else
/* It's a global enum, or it's local to a function. (Note local to
a function could mean local to a class method. */
decl = build_decl (loc, CONST_DECL, name, type);
decl = build_decl (loc, CONST_DECL, name, type);
DECL_CONTEXT (decl) = enumtype;
TREE_CONSTANT (decl) = 1;

View File

@ -1,3 +1,8 @@
2012-07-04 Jason Merrill <jason@redhat.com>
PR c++/53848
* g++.dg/other/enum3.C: New.
2012-07-04 Uros Bizjak <ubizjak@gmail.com>
PR middle-end/53321

View File

@ -0,0 +1,10 @@
// PR c++/53848
extern "C"
{
struct s {
enum {
e = 0
} f;
};
}