diff --git a/lib/ftp.c b/lib/ftp.c
index 862b3402f6250305335dc9a460274295bf949848..87d5cafa37a764fef4ae85b97544c3fdbc220106 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -2807,9 +2807,18 @@ static CURLcode ftp_easy_statemach(struct connectdata *conn)
  * Allocate and initialize the struct FTP for the current SessionHandle.  If
  * need be.
  */
+
+#if defined(__INTEL_COMPILER) && (__INTEL_COMPILER == 910) && \
+    defined(__OPTIMIZE__) && defined(__unix__) && defined(__i386__)
+  /* workaround icc 9.1 optimizer issue */
+# define vqualifier volatile
+#else
+# define vqualifier
+#endif
+
 static CURLcode ftp_init(struct connectdata *conn)
 {
-  struct FTP *ftp;
+  struct FTP *vqualifier ftp;
 
   if(NULL == conn->data->state.proto.ftp) {
     conn->data->state.proto.ftp = malloc(sizeof(struct FTP));