summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@gcc.gnu.org>2006-09-26 08:36:21 -0700
committerAndrew Pinski <pinskia@gcc.gnu.org>2006-09-26 08:36:21 -0700
commite91de072adbe07ae528857a75c9ef4f1d12e5688 (patch)
treec375a10a62d82187241f5638ddcb0c9b2d0368cf /gcc
parent32d662aa80bd3c9a6daa74a4e34757da900657fd (diff)
downloadgcc-e91de072adbe07ae528857a75c9ef4f1d12e5688.tar.gz
re PR objc/29195 (ICE in expand_expr_real_1, at expr.c:6932)
2006-09-26 Andrew Pinski <pinskia@physics.uc.edu> PR objc/29195 * objc-act.c (objc_push_parm): If we change the type of the decl, relayout the decl. 2006-09-26 Andrew Pinski <pinskia@physics.uc.edu> PR objc/29195 * objc/compile/method-1.m: New test. From-SVN: r117229
Diffstat (limited to 'gcc')
-rw-r--r--gcc/objc/ChangeLog6
-rw-r--r--gcc/objc/objc-act.c15
-rw-r--r--gcc/testsuite/ChangeLog25
-rw-r--r--gcc/testsuite/objc/compile/method-1.m12
4 files changed, 46 insertions, 12 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog
index ec777a64ac0..df8a5872220 100644
--- a/gcc/objc/ChangeLog
+++ b/gcc/objc/ChangeLog
@@ -1,3 +1,9 @@
+2006-09-26 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR objc/29195
+ * objc-act.c (objc_push_parm): If we change the type of the
+ decl, relayout the decl.
+
2006-09-19 Eric Christopher <echristo@apple.com>
* objc-act.c (JBLEN): Rename to OBJC_JBLEN,
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 7ac785f5390..1d3513b6a58 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -8223,11 +8223,22 @@ static GTY(()) tree objc_parmlist = NULL_TREE;
static void
objc_push_parm (tree parm)
{
+ bool relayout_needed = false;
/* Decay arrays and functions into pointers. */
if (TREE_CODE (TREE_TYPE (parm)) == ARRAY_TYPE)
- TREE_TYPE (parm) = build_pointer_type (TREE_TYPE (TREE_TYPE (parm)));
+ {
+ TREE_TYPE (parm) = build_pointer_type (TREE_TYPE (TREE_TYPE (parm)));
+ relayout_needed = true;
+ }
else if (TREE_CODE (TREE_TYPE (parm)) == FUNCTION_TYPE)
- TREE_TYPE (parm) = build_pointer_type (TREE_TYPE (parm));
+ {
+ TREE_TYPE (parm) = build_pointer_type (TREE_TYPE (parm));
+ relayout_needed = true;
+ }
+
+ if (relayout_needed)
+ relayout_decl (parm);
+
DECL_ARG_TYPE (parm)
= lang_hooks.types.type_promotes_to (TREE_TYPE (parm));
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4fc16e5f23d..b196528b820 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,18 +1,23 @@
+2006-09-26 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR objc/29195
+ * objc/compile/method-1.m: New test.
+
2006-09-25 Lee Millward <lee.millward@codesourcery.com>
- PR c++/26938
- * g++.dg/template/crash58.C: New test.
- * g++.dg/parse/crash28.C: Adjust error markers.
- * g++.dg/template/crash34.C: Likewise.
- * g++.dg/template/friend31.C: Likewise.
- * g++.dg/template/crash32.C: Likewise.
+ PR c++/26938
+ * g++.dg/template/crash58.C: New test.
+ * g++.dg/parse/crash28.C: Adjust error markers.
+ * g++.dg/template/crash34.C: Likewise.
+ * g++.dg/template/friend31.C: Likewise.
+ * g++.dg/template/crash32.C: Likewise.
- PR c++/27329
- * g++.dg/template/crash59.C: New test.
+ PR c++/27329
+ * g++.dg/template/crash59.C: New test.
PR c++/27667
- * g++.dg/template/spec33.C: New test.
- * g++.old-deja/g++.pt/spec20.C: Adjust error markers.
+ * g++.dg/template/spec33.C: New test.
+ * g++.old-deja/g++.pt/spec20.C: Adjust error markers.
2006-09-24 Zdenek Dvorak <dvorakz@suse.cz>
Adam Nemet <anemet@caviumnetworks.com>
diff --git a/gcc/testsuite/objc/compile/method-1.m b/gcc/testsuite/objc/compile/method-1.m
new file mode 100644
index 00000000000..e9bb989bef6
--- /dev/null
+++ b/gcc/testsuite/objc/compile/method-1.m
@@ -0,0 +1,12 @@
+/* PR objc/29195 */
+/* Test that array decls are changed to a pointer type
+ correctly and make sure we don't crash because the
+ decl was not relayed out. */
+
+@ implementation NGActiveSocket
++ (void) socketPair:(int [2])
+ _pair
+{
+ _pair[0] = 0;
+}
+@end