aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2007-03-10 19:35:03 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2007-03-10 19:35:03 +0000
commit222725d08ca78dd64283f9df2ac43d4fc661b2c5 (patch)
treef6e878e3b43babf76962c20ef1fc4e81865839f4 /gcc
parent89132ebc4c9e2bd960520dbbd8469d956794a7dd (diff)
downloadgcc-222725d08ca78dd64283f9df2ac43d4fc661b2c5.zip
gcc-222725d08ca78dd64283f9df2ac43d4fc661b2c5.tar.gz
gcc-222725d08ca78dd64283f9df2ac43d4fc661b2c5.tar.bz2
re PR target/20924 (inline float divide does not set correct fpu status flags)
PR c++/20924 * tree.c (walk_type_fields): Recurse into the element type of ARRAY_TYPEs if there is a pointer set. PR c++/20924 * g++.dg/template/array18.C: New test. From-SVN: r122801
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/array18.C13
-rw-r--r--gcc/tree.c10
4 files changed, 30 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 82f2a5a..3b1184b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-03-10 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20924
+ * tree.c (walk_type_fields): Recurse into the element type of
+ ARRAY_TYPEs if there is a pointer set.
+
2007-03-10 Dirk Mueller <dmueller@suse.de>
* c-common.c (warn_logical_operator): Fix condition.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2c85175..cd7f311 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-03-10 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/20924
+ * g++.dg/template/array18.C: New test.
+
2007-03-10 Dirk Mueller <dmueller@suse.de>
PR c++/17946
diff --git a/gcc/testsuite/g++.dg/template/array18.C b/gcc/testsuite/g++.dg/template/array18.C
new file mode 100644
index 0000000..8987bce
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/array18.C
@@ -0,0 +1,13 @@
+// PR c++/20924
+
+template<typename T>
+struct x {};
+
+template<typename T, unsigned N>
+struct x<T*[N]> {};
+
+int main() {
+ x<int> a;
+ x<int*[10]> b;
+ return 0;
+}
diff --git a/gcc/tree.c b/gcc/tree.c
index 512240c..53cec8f 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -7942,10 +7942,12 @@ walk_type_fields (tree type, walk_tree_fn func, void *data,
break;
case ARRAY_TYPE:
- /* Don't follow this nodes's type if a pointer for fear that we'll
- have infinite recursion. Those types are uninteresting anyway. */
- if (!POINTER_TYPE_P (TREE_TYPE (type))
- && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE)
+ /* Don't follow this nodes's type if a pointer for fear that
+ we'll have infinite recursion. If we have a PSET, then we
+ need not fear. */
+ if (pset
+ || (!POINTER_TYPE_P (TREE_TYPE (type))
+ && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE))
WALK_SUBTREE (TREE_TYPE (type));
WALK_SUBTREE (TYPE_DOMAIN (type));
break;