OSDN Git Service

PR c++/45983
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 15 Oct 2010 21:15:13 +0000 (21:15 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 15 Oct 2010 21:15:13 +0000 (21:15 +0000)
* tree.c (cp_build_qualified_type_real): Don't reuse a variant
with a different typedef variant of the element type.

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

gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/lto/pr45983_0.C [new file with mode: 0644]

index 20ca6a6..16b9307 100644 (file)
@@ -1,3 +1,9 @@
+2010-10-15  Jason Merrill  <jason@redhat.com>
+
+       PR c++/45983
+       * tree.c (cp_build_qualified_type_real): Don't reuse a variant
+       with a different typedef variant of the element type.
+
 2010-10-14  Iain Sandoe  <iains@gcc.gnu.org>
 
        merge from FSF apple 'trunk' branch. 
index 93d13a1..b8f76b0 100644 (file)
@@ -810,7 +810,7 @@ cp_build_qualified_type_real (tree type,
       /* See if we already have an identically qualified type.  Tests
         should be equivalent to those in check_qualified_type.  */
       for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
-       if (cp_type_quals (t) == type_quals
+       if (TREE_TYPE (t) == element_type
            && TYPE_NAME (t) == TYPE_NAME (type)
            && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
            && attribute_list_equal (TYPE_ATTRIBUTES (t),
index c615802..deec8b8 100644 (file)
@@ -1,3 +1,7 @@
+2010-10-15  Jason Merrill  <jason@redhat.com>
+
+       * g++.dg/lto/pr45983_0.C: New.
+
 2010-10-14  Michael Meissner  <meissner@linux.vnet.ibm.com>
 
        * gcc.target/powerpc/ppc-fma-1.c: New tests for powerpc FMA
diff --git a/gcc/testsuite/g++.dg/lto/pr45983_0.C b/gcc/testsuite/g++.dg/lto/pr45983_0.C
new file mode 100644 (file)
index 0000000..a2c9ba6
--- /dev/null
@@ -0,0 +1,20 @@
+// PR c++/45983
+
+template <int N>
+class T1 {
+    int m[N];
+    typedef float scalar_type_t;
+    typedef scalar_type_t scalar_array_t[1];
+    const scalar_array_t &decay(void) const;
+};
+class T2 {
+public:
+    float vals[1];
+    float get_value(void) const { return vals[0]; }
+};
+T2 channel_params;
+float output_audio(void) {
+    return channel_params.get_value();
+}
+
+int main(){}