* cp-tree.h (DECL_DISCRIMINATOR_SET_P): New.
* mangle.c (discriminator_for_local_entity): Check it.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155007
138bc75d-0d04-0410-961f-
82ee72b054a4
2009-12-04 Jason Merrill <jason@redhat.com>
2009-12-04 Jason Merrill <jason@redhat.com>
+ PR c++/42010
+ * cp-tree.h (DECL_DISCRIMINATOR_SET_P): New.
+ * mangle.c (discriminator_for_local_entity): Check it.
+
PR c++/42277
* semantics.c (finish_decltype_type): Defer handling of decltype
of a non-dependent COMPONENT_REF in a template.
PR c++/42277
* semantics.c (finish_decltype_type): Defer handling of decltype
of a non-dependent COMPONENT_REF in a template.
/* Discriminator for name mangling. */
#define DECL_DISCRIMINATOR(NODE) (LANG_DECL_U2_CHECK (NODE, 1)->discriminator)
/* Discriminator for name mangling. */
#define DECL_DISCRIMINATOR(NODE) (LANG_DECL_U2_CHECK (NODE, 1)->discriminator)
+/* True iff DECL_DISCRIMINATOR is set for a DECL_DISCRIMINATOR_P decl. */
+#define DECL_DISCRIMINATOR_SET_P(NODE) \
+ (DECL_LANG_SPECIFIC (NODE) && DECL_LANG_SPECIFIC (NODE)->u.base.u2sel == 1)
+
/* The index of a user-declared parameter in its function, starting at 1.
All artificial parameters will have index 0. */
#define DECL_PARM_INDEX(NODE) \
/* The index of a user-declared parameter in its function, starting at 1.
All artificial parameters will have index 0. */
#define DECL_PARM_INDEX(NODE) \
{
if (DECL_DISCRIMINATOR_P (entity))
{
{
if (DECL_DISCRIMINATOR_P (entity))
{
- if (DECL_LANG_SPECIFIC (entity))
+ if (DECL_DISCRIMINATOR_SET_P (entity))
return DECL_DISCRIMINATOR (entity);
else
/* The first entity with a particular name doesn't get
return DECL_DISCRIMINATOR (entity);
else
/* The first entity with a particular name doesn't get
- DECL_LANG_SPECIFIC/DECL_DISCRIMINATOR. */
+ DECL_DISCRIMINATOR set up. */
return 0;
}
else if (TREE_CODE (entity) == TYPE_DECL)
return 0;
}
else if (TREE_CODE (entity) == TYPE_DECL)
2009-12-04 Jason Merrill <jason@redhat.com>
2009-12-04 Jason Merrill <jason@redhat.com>
+ PR c++/42010
+ * g++.dg/abi/local2.C: New.
+
PR c++/42277
* g++.dg/cpp0x/decltype20.C: New.
PR c++/42277
* g++.dg/cpp0x/decltype20.C: New.
--- /dev/null
+// PR c++/42010
+// { dg-final { scan-assembler "ZZN1A1fEvE1s" } }
+
+struct A {
+ static int f()
+ {
+ static struct {
+ int i;
+ } s;
+ return s.i;
+ }
+};
+
+int main()
+{
+ return A::f();
+}