From 8d9b7be5f33baf9ca297dd2e65a18890140d874a Mon Sep 17 00:00:00 2001
From: Jie Zhang <jie@codesourcery.com>
Date: Mon, 19 Apr 2010 10:02:52 +0000
Subject: [PATCH] re PR target/43662 (ICE in insert_save with ms_abi attribute)

	PR target/43662
	* reginfo.c (reinit_regs): Set caller_save_initialized_p
	to false.

	testsuite/
	PR target/43662
	* gcc.target/i386/pr43662.c: New test.

From-SVN: r158509
---
 gcc/ChangeLog                           |  6 ++++++
 gcc/reginfo.c                           |  2 ++
 gcc/testsuite/ChangeLog                 |  5 +++++
 gcc/testsuite/gcc.target/i386/pr43662.c | 24 ++++++++++++++++++++++++
 4 files changed, 37 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/i386/pr43662.c

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 98c80045f99d..23f76a3fd051 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2010-04-19  Jie Zhang  <jie@codesourcery.com>
+
+	PR target/43662
+	* reginfo.c (reinit_regs): Set caller_save_initialized_p
+	to false.
+
 2010-04-19 Ira Rosen <irar@il.ibm.com>
 
 	PR tree-optimization/37027
diff --git a/gcc/reginfo.c b/gcc/reginfo.c
index ee6c7ee6447a..bf43d702da55 100644
--- a/gcc/reginfo.c
+++ b/gcc/reginfo.c
@@ -666,6 +666,8 @@ void
 reinit_regs (void)
 {
   init_regs ();
+  /* caller_save needs to be re-initialized.  */
+  caller_save_initialized_p = false;
   ira_init ();
 }
 
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8215f8363b89..01a260241496 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-04-19  Jie Zhang  <jie@codesourcery.com>
+
+	PR target/43662
+	* gcc.target/i386/pr43662.c: New test.
+
 2010-04-19  Dodji Seketeli  <dodji@redhat.com>
 
 	PR c++/43704
diff --git a/gcc/testsuite/gcc.target/i386/pr43662.c b/gcc/testsuite/gcc.target/i386/pr43662.c
new file mode 100644
index 000000000000..246c8aafa6e2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr43662.c
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2" } */
+
+void __attribute__ ((ms_abi)) foo (void)
+{
+}
+
+typedef struct _IAVIStreamImpl
+{
+  int sInfo;
+  int has;
+} IAVIStreamImpl;
+
+extern int __attribute__ ((ms_abi)) aso (void *);
+extern int sre (void *);
+
+int AVIFILE_OpenCompressor (IAVIStreamImpl *This)
+{
+  if (This->has != 0)
+    aso (&This->has);
+  sre (&This->sInfo);
+  return 0;
+}
-- 
GitLab