diff --git a/libgcc/emutls.c b/libgcc/emutls.c
index 0fea1f10bfabb5b08c85ff628d5fe57079881650..95aaed743411425425b1313a960fd81a1321f881 100644
--- a/libgcc/emutls.c
+++ b/libgcc/emutls.c
@@ -57,6 +57,14 @@ struct __emutls_array
 #  define EMUTLS_ATTR
 #endif
 
+/* __emutls_get_address and __emutls_register_common are registered as
+   builtins, but the compiler struct __emutls_object doesn't have
+   a union in there and is only created when actually needed for
+   the calls to the builtins, so the builtins are created with void *
+   arguments rather than struct __emutls_object *.  Avoid
+   -Wbuiltin-declaration-mismatch warnings.  */
+#pragma GCC diagnostic ignored "-Wbuiltin-declaration-mismatch"
+
 EMUTLS_ATTR
 void *__emutls_get_address (struct __emutls_object *);
 EMUTLS_ATTR