OSDN Git Service

* mangle.c (write_type): Don't use TYPE_MAIN_VARIANT when writing
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 25 Apr 2002 01:05:25 +0000 (01:05 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 25 Apr 2002 01:05:25 +0000 (01:05 +0000)
out an array type.
(write_CV_qualifiers_for_type): Use TYPE_QUALS, not cp_type_quals,
to determine qualifiers.

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

gcc/cp/mangle.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/abi/mangle7.C [new file with mode: 0644]

index 88461e2..322769c 100644 (file)
@@ -1358,6 +1358,11 @@ write_type (type)
        since both the qualified and uqualified types are substitution
        candidates.  */
     write_type (TYPE_MAIN_VARIANT (type));
+  else if (TREE_CODE (type) == ARRAY_TYPE)
+    /* It is important not to use the TYPE_MAIN_VARIANT of TYPE here
+       so that the cv-qualification of the element type is available
+       in write_array_type.  */
+    write_array_type (type);
   else
     {
       /* See through any typedefs.  */
@@ -1404,10 +1409,6 @@ write_type (type)
          write_nested_name (TYPE_STUB_DECL (type));
          break;
 
-       case ARRAY_TYPE:
-         write_array_type (type);
-         break;
-
        case POINTER_TYPE:
          /* A pointer-to-member variable is represented by a POINTER_TYPE
             to an OFFSET_TYPE, so check for this first.  */
@@ -1474,19 +1475,23 @@ write_CV_qualifiers_for_type (type)
 
        "In cases where multiple order-insensitive qualifiers are
        present, they should be ordered 'K' (closest to the base type),
-       'V', 'r', and 'U' (farthest from the base type) ..."  */
+       'V', 'r', and 'U' (farthest from the base type) ..."  
+
+     Note that we do not use cp_type_quals below; given "const
+     int[3]", the "const" is emitted with the "int", not with the
+     array.  */
 
-  if (CP_TYPE_RESTRICT_P (type))
+  if (TYPE_QUALS (type) & TYPE_QUAL_RESTRICT)
     {
       write_char ('r');
       ++num_qualifiers;
     }
-  if (CP_TYPE_VOLATILE_P (type))
+  if (TYPE_QUALS (type) & TYPE_QUAL_VOLATILE)
     {
       write_char ('V');
       ++num_qualifiers;
     }
-  if (CP_TYPE_CONST_P (type))
+  if (TYPE_QUALS (type) & TYPE_QUAL_CONST)
     {
       write_char ('K');
       ++num_qualifiers;
index a99b232..4f30310 100644 (file)
@@ -1,5 +1,7 @@
 2002-04-24  Mark Mitchell  <mark@codesourcery.com>
 
+       * g++.dg/abi/mange7.C: New test.
+
        PR c++/6438.
        * g++.dg/parse/stmtexpr2.C: New test.
 
diff --git a/gcc/testsuite/g++.dg/abi/mangle7.C b/gcc/testsuite/g++.dg/abi/mangle7.C
new file mode 100644 (file)
index 0000000..af178d3
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+
+typedef void *const t1[2];
+float const f1(t1 (&)[79], ...) {}
+
+/* { dg-final { scan-assembler _Z2f1RA79_A2_KPvz } } */