aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-01-28 17:52:36 -0500
committerJason Merrill <jason@gcc.gnu.org>2010-01-28 17:52:36 -0500
commitcd9241442943f1c74800669f4b8a23cee2f7d261 (patch)
treee37846e09e6f5d0a027f06c6fbbeadfb8d8bbd0e /gcc
parenta2fe92030ce71454f728bc2e102a320b462b3bbc (diff)
downloadgcc-cd9241442943f1c74800669f4b8a23cee2f7d261.zip
gcc-cd9241442943f1c74800669f4b8a23cee2f7d261.tar.gz
gcc-cd9241442943f1c74800669f4b8a23cee2f7d261.tar.bz2
re PR c++/42880 (trunk does not compile boost MPL)
PR c++/42880 * semantics.c (begin_class_definition): Don't use type_as_string. From-SVN: r156336
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/semantics.c19
2 files changed, 18 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a3b9755..c104e86 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2010-01-28 Jason Merrill <jason@redhat.com>
+
+ PR c++/42880
+ * semantics.c (begin_class_definition): Don't use type_as_string.
+
2010-01-28 Dodji Seketeli <dodji@redhat.com>
PR c++/42713
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index d9ba591..441081c 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -2371,13 +2371,20 @@ begin_class_definition (tree t, tree attributes)
/* According to the C++ ABI, decimal classes defined in ISO/IEC TR 24733
are passed the same as decimal scalar types. */
- if (TREE_CODE (t) == RECORD_TYPE)
+ if (TREE_CODE (t) == RECORD_TYPE
+ && !processing_template_decl)
{
- const char *n = type_as_string (t, TFF_CLASS_KEY_OR_ENUM);
- if ((strcmp (n, "class std::decimal::decimal32") == 0)
- || (strcmp (n, "class std::decimal::decimal64") == 0)
- || (strcmp (n, "class std::decimal::decimal128") == 0))
- TYPE_TRANSPARENT_AGGR (t) = 1;
+ tree ns = TYPE_CONTEXT (t);
+ if (ns && TREE_CODE (ns) == NAMESPACE_DECL
+ && DECL_CONTEXT (ns) == std_node
+ && !strcmp (IDENTIFIER_POINTER (DECL_NAME (ns)), "decimal"))
+ {
+ const char *n = TYPE_NAME_STRING (t);
+ if ((strcmp (n, "decimal32") == 0)
+ || (strcmp (n, "decimal64") == 0)
+ || (strcmp (n, "decimal128") == 0))
+ TYPE_TRANSPARENT_AGGR (t) = 1;
+ }
}
/* A non-implicit typename comes from code like: