aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/i386/i386.c7
2 files changed, 14 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 218a95a..e66f1f8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2005-01-31 Danny Smith <dannysmith@users.sourceforge.net>
+
+ PR target/19704
+ * config/i386/i386.c (ix86_function_ok_for_sibcall): Also check
+ that dllimport'd functions do not use all call-clobbered registers
+ to pass parameters.
+
2005-01-30 Richard Henderson <rth@redhat.com>
PR 19696
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 4b6b3f2..f72bd3d 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -1678,6 +1678,13 @@ ix86_function_ok_for_sibcall (tree decl, tree exp)
}
}
+#if TARGET_DLLIMPORT_DECL_ATTRIBUTES
+ /* Dllimport'd functions are also called indirectly. */
+ if (decl && lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl))
+ && ix86_function_regparm (TREE_TYPE (decl), NULL) >= 3)
+ return false;
+#endif
+
/* Otherwise okay. That also includes certain types of indirect calls. */
return true;
}