From f5e0956b409f45bb80d9e375da7d0ed7ac275ce7 Mon Sep 17 00:00:00 2001
From: Peixin Qiao <qiaopeixin@huawei.com>
Date: Thu, 20 Aug 2020 01:05:48 +0800
Subject: [PATCH] AArch64: Remove "fndecl && TREE_PUBLIC (fndecl)" in
 aarch64_init_cumulative_args

This check will prevent the function type check of static funtion or calling
via a funtion pointer. The function type should be checked no matter if the
function has external linkage.

gcc/ChangeLog:

	* config/aarch64/aarch64.c (aarch64_init_cumulative_args): Remove
	"fndecl && TREE_PUBLIC (fndecl)" check since it prevents the funtion
	type check when calling via a function pointer or when calling a static
	function.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/mgeneral-regs_7.c: New test.
---
 gcc/config/aarch64/aarch64.c                       |  1 -
 gcc/testsuite/gcc.target/aarch64/mgeneral-regs_7.c | 11 +++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gcc.target/aarch64/mgeneral-regs_7.c

diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index b7f5bc76f1b..b6d74496cd0 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -6017,7 +6017,6 @@ aarch64_init_cumulative_args (CUMULATIVE_ARGS *pcum,
 
   if (!silent_p
       && !TARGET_FLOAT
-      && fndecl && TREE_PUBLIC (fndecl)
       && fntype && fntype != error_mark_node)
     {
       const_tree type = TREE_TYPE (fntype);
diff --git a/gcc/testsuite/gcc.target/aarch64/mgeneral-regs_7.c b/gcc/testsuite/gcc.target/aarch64/mgeneral-regs_7.c
new file mode 100644
index 00000000000..3998947987c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/mgeneral-regs_7.c
@@ -0,0 +1,11 @@
+/* { dg-options "-mgeneral-regs-only" } */
+
+typedef int v4si __attribute__ ((__vector_size__ ((16))));
+
+v4si (*foo) ();
+
+void
+f0 (v4si *ptr)
+{
+  *ptr = foo (); /* { dg-error "'-mgeneral-regs-only' is incompatible with the use of vector types" } */
+}
-- 
2.19.1

