aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2019-05-28 07:21:07 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2019-05-28 07:21:07 +0000
commiteabf2b44483427d54be93ae7628065aa08c4a1e6 (patch)
treebf92cada7dec61f9161e78b9a70842d9ed7c5515
parent6a10fedad0d8a7099156b5218728f1fa09f345aa (diff)
downloadgcc-eabf2b44483427d54be93ae7628065aa08c4a1e6.zip
gcc-eabf2b44483427d54be93ae7628065aa08c4a1e6.tar.gz
gcc-eabf2b44483427d54be93ae7628065aa08c4a1e6.tar.bz2
decl.c (intrin_arglists_compatible_p): Do not return false if the internal builtin uses a variable list.
* gcc-interface/decl.c (intrin_arglists_compatible_p): Do not return false if the internal builtin uses a variable list. From-SVN: r271679
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/decl.c6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/prefetch1.adb29
-rw-r--r--gcc/testsuite/gnat.dg/prefetch1.ads9
5 files changed, 50 insertions, 3 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 8c3e7fb..377b13e 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2019-05-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/decl.c (intrin_arglists_compatible_p): Do not return
+ false if the internal builtin uses a variable list.
+
2019-05-27 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c (Call_to_gnu): Do not initialize the temporary
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c
index ed015ba..9082d44 100644
--- a/gcc/ada/gcc-interface/decl.c
+++ b/gcc/ada/gcc-interface/decl.c
@@ -9174,9 +9174,9 @@ intrin_arglists_compatible_p (intrin_binding_t * inb)
if (!ada_type && !btin_type)
break;
- /* If one list is shorter than the other, they fail to match. */
- if (!ada_type || !btin_type)
- return false;
+ /* If the internal builtin uses a variable list, accept anything. */
+ if (!btin_type)
+ break;
/* If we're done with the Ada args and not with the internal builtin
args, or the other way around, complain. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index eb25305..633ecfc 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2019-05-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/prefetch1.ad[sb]: New test.
+
2019-05-27 Iain Sandoe <iain@sandoe.co.uk>
* gcc.target/i386/pr22076.c: Adjust options to
diff --git a/gcc/testsuite/gnat.dg/prefetch1.adb b/gcc/testsuite/gnat.dg/prefetch1.adb
new file mode 100644
index 0000000..2233da4
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/prefetch1.adb
@@ -0,0 +1,29 @@
+-- { dg-do compile }
+
+package body Prefetch1 is
+
+ procedure Prefetch_1 (Addr : System.Address);
+ pragma Import (Intrinsic, Prefetch_1, "__builtin_prefetch");
+
+ procedure Prefetch_2 (Addr : System.Address; RW : Integer);
+ pragma Import (Intrinsic, Prefetch_2, "__builtin_prefetch");
+
+ procedure Prefetch_3 (Addr : System.Address; RW : Integer; Locality : Integer);
+ pragma Import (Intrinsic, Prefetch_3, "__builtin_prefetch");
+
+ procedure My_Proc1 (Addr : System.Address) is
+ begin
+ Prefetch_1 (Addr);
+ end;
+
+ procedure My_Proc2 (Addr : System.Address) is
+ begin
+ Prefetch_2 (Addr, 1);
+ end;
+
+ procedure My_Proc3 (Addr : System.Address) is
+ begin
+ Prefetch_3 (Addr, 1, 1);
+ end;
+
+end Prefetch1;
diff --git a/gcc/testsuite/gnat.dg/prefetch1.ads b/gcc/testsuite/gnat.dg/prefetch1.ads
new file mode 100644
index 0000000..fdb655a
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/prefetch1.ads
@@ -0,0 +1,9 @@
+with System;
+
+package Prefetch1 is
+
+ procedure My_Proc1 (Addr : System.Address);
+ procedure My_Proc2 (Addr : System.Address);
+ procedure My_Proc3 (Addr : System.Address);
+
+end Prefetch1;