diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index dd28ff7..3960ac9 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -82,6 +82,8 @@
 #include <unordered_set>
 #include <unordered_map>
 
+
+
 typedef struct symbol *symbolp;
 DEF_VEC_P (symbolp);
 
@@ -603,7 +605,7 @@
   unsigned int checked_producer : 1;
   unsigned int producer_is_gxx_lt_4_6 : 1;
   unsigned int producer_is_gcc_lt_4_3 : 1;
-  unsigned int producer_is_icc : 1;
+  unsigned int producer_is_icc_lt_14 : 1;
 
   /* When set, the file that we're processing is known to have
      debugging info for C++ namespaces.  GCC 3.3.x did not produce
@@ -9348,6 +9350,19 @@
 		       &objfile->objfile_obstack);
 }
 
+/* For versions older than 14 ICC did not output the required DW_AT_declaration
+   on incomplete types, but gives them a size of zero.  Starting on version 14
+   ICC is compatible with GCC.  */
+
+static int
+producer_is_icc_lt_14 (struct dwarf2_cu *cu)
+{
+  if (!cu->checked_producer)
+    check_producer (cu);
+
+  return cu->producer_is_icc_lt_14;
+}
+
 /* Check for possibly missing DW_AT_comp_dir with relative .debug_line
    directory paths.  GCC SVN r127613 (new option -fdebug-prefix-map) fixed
    this, it was first present in GCC release 4.3.0.  */
@@ -12829,6 +12844,9 @@
     }
 }
 
+
+
+
 /* Check whether the producer field indicates either of GCC < 4.6, or the
    Intel C/C++ compiler, and cache the result in CU.  */
 
@@ -12853,8 +12871,10 @@
       cu->producer_is_gxx_lt_4_6 = major < 4 || (major == 4 && minor < 6);
       cu->producer_is_gcc_lt_4_3 = major < 4 || (major == 4 && minor < 3);
     }
-  else if (startswith (cu->producer, "Intel(R) C"))
-    cu->producer_is_icc = 1;
+  else if (producer_is_icc (cu->producer, &major, &minor))
+    {
+      cu->producer_is_icc_lt_14 = major < 14 ;
+    }
   else
     {
       /* For other non-GCC compilers, expect their behavior is DWARF version
@@ -13595,17 +13615,6 @@
   smash_to_methodptr_type (type, new_type);
 }
 
-/* Return non-zero if the CU's PRODUCER string matches the Intel C/C++ compiler
-   (icc).  */
-
-static int
-producer_is_icc (struct dwarf2_cu *cu)
-{
-  if (!cu->checked_producer)
-    check_producer (cu);
-
-  return cu->producer_is_icc;
-}
 
 /* Called when we find the DIE that starts a structure or union scope
    (definition) to create a type for the structure or union.  Fill in
@@ -13711,7 +13720,7 @@
       TYPE_LENGTH (type) = 0;
     }
 
-  if (producer_is_icc (cu) && (TYPE_LENGTH (type) == 0))
+  if (producer_is_icc_lt_14 (cu) && (TYPE_LENGTH (type) == 0))
     {
       /* ICC does not output the required DW_AT_declaration
 	 on incomplete types, but gives them a size of zero.  */
diff --git a/gdb/dwarf2utils.c b/gdb/dwarf2utils.c
index 9bb69f7..7b0db20 100644
--- a/gdb/dwarf2utils.c
+++ b/gdb/dwarf2utils.c
@@ -31,6 +31,9 @@
 #include "common/common-exceptions.h"
 #include "common/common-utils.h"
 
+#if defined GDB_SELF_TEST
+#include "selftest.h"
+#endif
 
 #include "utils.h"
 
@@ -84,3 +87,149 @@
   /* Not recognized as GCC.  */
   return 0;
 }
+
+/* Returns nonzero if the given PRODUCER string is Intel or zero
+   otherwise.  Sets the MAJOR and MINOR versions when not NULL.
+
+   Internal and external versions have to be taken into account.
+   Before a public release string for the PRODUCER is slightly
+   different than the public one.  Internal releases have mainly
+   a major release number and 0 as minor release.  External
+   releases have 4 fields, 3 of them are not 0 and only two
+   are of interest, major and update.
+
+   Examples are:
+
+     Public release:
+     "Intel(R) Fortran Intel(R) 64 Compiler XE for applications
+     running on Intel(R) 64, Version 14.0.1.074 Build 20130716";
+     "Intel(R) C++ Intel(R) 64 Compiler XE for applications
+     running on Intel(R) 64, Version 14.0.1.074 Build 20130716";
+
+     Internal releases:
+     "Intel(R) C++ Intel(R) 64 Compiler for applications
+     running on Intel(R) 64, Version 18.0 Beta ....".  */
+
+bool
+producer_is_icc (const char *producer, int *major, int *minor)
+{
+  if (producer == NULL || !startswith (producer, "Intel(R)"))
+    return 0;
+
+/* Preparing the used fields.  */
+  int maj, min;
+  if (major == NULL)
+    major = &maj;
+  if (minor == NULL)
+    minor = &min;
+
+  *minor = 0;
+  *major = 0;
+
+  /* Consumes the string till a "Version" is found.  */
+  const char *cs = strstr(producer, "Version");
+  cs = skip_to_space (cs);
+
+  int intermediate = 0;
+  int nof = sscanf (cs, "%d.%d.%d.%*d", major, &intermediate, minor);
+
+  /* Internal versions are represented only as MAJOR.MINOR, whereas
+     minor is usually 0.
+     Public versions have 4 fields as described with the command above.  */
+  if (nof == 3)
+    return TRUE;
+
+  if (nof == 2)
+    {
+      *minor = intermediate;
+      return TRUE;
+    }
+
+  static bool warning_printed = FALSE;
+  /* Not recognized as Intel, let user know.  */
+  if (warning_printed == FALSE)
+    {
+      warning (_("Could not recognize version of Intel Compiler in:%s"), producer);
+      warning_printed = TRUE;
+    }
+  return FALSE;
+}
+
+#if defined GDB_SELF_TEST
+namespace selftests {
+namespace dwarf2utils {
+
+static void
+dwarf_producer_test ()
+{
+  int major = 0, minor = 0;
+
+  const char *extern_f_14_1 = "Intel(R) Fortran Intel(R) 64 Compiler \
+XE for applications running on Intel(R) 64, Version \
+14.0.1.074 Build 20130716";
+
+  bool retval = producer_is_icc (extern_f_14_1, &major, &minor);
+  SELF_CHECK (retval == 1 && major == 14 && minor == 1);
+  retval = producer_is_gcc (extern_f_14_1, &major, &minor);
+  SELF_CHECK (retval == 0);
+
+  const char *intern_f_14 = "Intel(R) Fortran Intel(R) 64 Compiler \
+XE for applications running on Intel(R) 64, Version \
+14.0";
+
+  major = 0;
+  minor = 0;
+  retval = producer_is_icc (intern_f_14, &major, &minor);
+  SELF_CHECK (retval == 1 && major == 14 && minor == 0);
+  retval = producer_is_gcc (intern_f_14, &major, &minor);
+  SELF_CHECK (retval == 0);
+
+  const char *intern_c_14 = "Intel(R) C++ Intel(R) 64 Compiler \
+XE for applications running on Intel(R) 64, Version \
+14.0";
+  major = 0;
+  minor = 0;
+  retval = producer_is_icc (intern_c_14, &major, &minor);
+  SELF_CHECK (retval == 1 && major == 14 && minor == 0);
+  retval = producer_is_gcc (intern_c_14, &major, &minor);
+  SELF_CHECK (retval == 0);
+
+  const char *intern_c_18 = "Intel(R) C++ Intel(R) 64 Compiler \
+for applications running on Intel(R) 64, Version 18.0 Beta";
+  major = 0;
+  minor = 0;
+  retval = producer_is_icc (intern_c_18, &major, &minor);
+  SELF_CHECK (retval == 1 && major == 18 && minor == 0);
+
+  const char *gnu = "GNU C 4.7.2";
+  major = 0;
+  minor = 0;
+  retval = producer_is_icc (gnu, &major, &minor);
+  SELF_CHECK (retval == 0);
+  retval = producer_is_gcc (gnu, &major, &minor);
+  SELF_CHECK (retval == 1 && major == 4 && minor == 7);
+
+  const char *gnu_exp ="GNU C++14 5.0.0 20150123 (experimental)";
+  major = 0;
+  minor = 0;
+  retval = producer_is_icc (gnu_exp, &major, &minor);
+  SELF_CHECK (retval == 0);
+  retval = producer_is_gcc (gnu_exp, &major, &minor);
+  SELF_CHECK (retval == 1 && major == 5 && minor == 0);
+}
+}
+}
+#endif
+
+
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_dwarf2utils;
+
+void
+_initialize_dwarf2utils (void)
+{
+#if defined GDB_SELF_TEST
+  selftests::register_test  (selftests::dwarf2utils::dwarf_producer_test);
+#endif
+}
diff --git a/gdb/dwarf2utils.h b/gdb/dwarf2utils.h
index 95d629d..b9aa60a 100644
--- a/gdb/dwarf2utils.h
+++ b/gdb/dwarf2utils.h
@@ -25,4 +25,7 @@
 /* See documentation in the utils.c file.  */
 extern int producer_is_gcc (const char *producer, int *major, int *minor);
 
+/* See documentation in the utils.c file.  */
+extern bool producer_is_icc (const char *producer, int *major, int *minor);
+
 #endif
diff --git a/gdb/utils.c b/gdb/utils.c
index 45373a0..1e61729 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -2945,6 +2945,7 @@
 }
 
 
+
 /* Helper for make_cleanup_free_char_ptr_vec.  */
 
 static void
