diff --git a/gcc/multiple_target.c b/gcc/multiple_target.c
index 54618d8..8cca281 100644
--- a/gcc/multiple_target.c
+++ b/gcc/multiple_target.c
@@ -61,12 +61,20 @@ create_dispatcher_calls (struct cgraph_node *node)
 	  || !DECL_FUNCTION_VERSIONED (decl))
 	continue;
 
+      if (!targetm.has_ifunc_p ())
+	{
+	  error_at (gimple_location (call),
+		    "the call requires ifunc, which is not"
+		    " supported by this target");
+	  break;
+	}
       e_next = e->next_caller;
       idecl = targetm.get_function_versions_dispatcher (decl);
       if (!idecl)
 	{
 	  error_at (gimple_location (call),
 		    "default target_clones attribute was not set");
+	  break;
 	}
       inode = cgraph_node::get (idecl);
       gcc_assert (inode);
@@ -215,6 +223,10 @@ create_target_clone (cgraph_node *node, bool definition, char *name)
     {
       tree new_decl = copy_node (node->decl);
       new_node = cgraph_node::get_create (new_decl);
+      /* Generate a new name for the new version.  */
+      symtab->change_decl_assembler_name (new_node->decl,
+					  clone_function_name (node->decl,
+							       name));
     }
   return new_node;
 }
diff --git a/gcc/testsuite/g++.dg/ext/mvc1.C b/gcc/testsuite/g++.dg/ext/mvc1.C
index fbf9011..ff37238 100644
--- a/gcc/testsuite/g++.dg/ext/mvc1.C
+++ b/gcc/testsuite/g++.dg/ext/mvc1.C
@@ -1,4 +1,5 @@
 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-ifunc "" } */
 
 __attribute__((target_clones("avx","arch=slm","arch=core-avx2","default")))
 int
diff --git a/gcc/testsuite/g++.dg/ext/mvc4.C b/gcc/testsuite/g++.dg/ext/mvc4.C
index 98e3502..6e18e56 100644
--- a/gcc/testsuite/g++.dg/ext/mvc4.C
+++ b/gcc/testsuite/g++.dg/ext/mvc4.C
@@ -1,4 +1,5 @@
 /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-ifunc "" } */
 /* { dg-options "-mavx" } */
 
 #include <immintrin.h>
diff --git a/gcc/testsuite/gcc.dg/mvc1.c b/gcc/testsuite/gcc.dg/mvc1.c
index 8e02721..95fd8f6 100644
--- a/gcc/testsuite/gcc.dg/mvc1.c
+++ b/gcc/testsuite/gcc.dg/mvc1.c
@@ -1,4 +1,5 @@
 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-ifunc "" } */
 
 __attribute__((target_clones("avx","arch=slm","arch=core-avx2","default")))
 int
diff --git a/gcc/testsuite/gcc.dg/mvc4.c b/gcc/testsuite/gcc.dg/mvc4.c
index 48ec9a1..eb93abe 100644
--- a/gcc/testsuite/gcc.dg/mvc4.c
+++ b/gcc/testsuite/gcc.dg/mvc4.c
@@ -1,4 +1,5 @@
 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-ifunc "" } */
 
 __attribute__((target_clones("default","avx","default")))
 int
diff --git a/gcc/testsuite/gcc.dg/mvc5.c b/gcc/testsuite/gcc.dg/mvc5.c
index 89001e5..0ee1127 100644
--- a/gcc/testsuite/gcc.dg/mvc5.c
+++ b/gcc/testsuite/gcc.dg/mvc5.c
@@ -1,4 +1,5 @@
 /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-ifunc "" } */
 /* { dg-options "-fno-inline" } */
 /* { dg-final { scan-assembler-times "foo.ifunc" 6 } } */
 
diff --git a/gcc/testsuite/gcc.dg/mvc7.c b/gcc/testsuite/gcc.dg/mvc7.c
index d61d78e..be2d5f0 100644
--- a/gcc/testsuite/gcc.dg/mvc7.c
+++ b/gcc/testsuite/gcc.dg/mvc7.c
@@ -1,5 +1,9 @@
 /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-ifunc "" } */
 /* { dg-final { scan-assembler-times "foo.ifunc" 4 } } */
+/* { dg-final { scan-assembler "foo.resolver" } } */
+/* { dg-final { scan-assembler "avx" } } */
+/* { dg-final { scan-assembler "slm" } } */
 
 __attribute__((target_clones("avx","default","arch=slm","arch=core-avx2")))
 int foo ();
