re PR driver/69805 (ICE in greater_than_spec_func, at gcc.c:9722)
authorJakub Jelinek <jakub@redhat.com>
Fri, 19 Feb 2016 22:18:38 +0000 (23:18 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 19 Feb 2016 22:18:38 +0000 (23:18 +0100)
PR driver/69805
* gcc.c (LINK_COMMAND_SPEC, GOMP_SELF_SPECS): Use
:%* in %:gt() argument.
(greater_than_spec_func): Adjust for expecting only numbers,
if there are more than two numbers, compare the last two.

* testsuite/libgomp.c/pr69805.c: New test.

From-SVN: r233573

gcc/ChangeLog
gcc/gcc.c
libgomp/ChangeLog
libgomp/testsuite/libgomp.c/pr69805.c [new file with mode: 0644]

index 4227941..c8548c0 100644 (file)
@@ -1,3 +1,11 @@
+2016-02-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR driver/69805
+       * gcc.c (LINK_COMMAND_SPEC, GOMP_SELF_SPECS): Use
+       :%* in %:gt() argument.
+       (greater_than_spec_func): Adjust for expecting only numbers,
+       if there are more than two numbers, compare the last two.
+
 2016-02-19  Jonathan Wakely  <jwakely@redhat.com>
 
        * doc/invoke.texi (C++ Dialect Options): Clarify interaction of
index eaa4653..1af5920 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -1019,7 +1019,7 @@ proper position among the other output files.  */
     %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} \
     %{static:} %{L*} %(mfwrap) %(link_libgcc) " \
     VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o " CHKP_SPEC " \
-    %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*} 1):\
+    %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
        %:include(libgomp.spec)%(link_gomp)}\
     %{fcilkplus:%:include(libcilkrts.spec)%(link_cilkrts)}\
     %{fgnu-tm:%:include(libitm.spec)%(link_itm)}\
@@ -1183,7 +1183,7 @@ static const char *const multilib_defaults_raw[] = MULTILIB_DEFAULTS;
    for targets that use different start files and suchlike.  */
 #ifndef GOMP_SELF_SPECS
 #define GOMP_SELF_SPECS \
-  "%{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*} 1): " \
+  "%{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1): " \
   "-pthread}"
 #endif
 
@@ -9764,7 +9764,7 @@ replace_extension_spec_func (int argc, const char **argv)
   return result;
 }
 
-/* Returns "" if the n in ARGV[1] == -opt=<n> is greater than ARGV[2].
+/* Returns "" if ARGV[ARGC - 2] is greater than ARGV[ARGC-1].
    Otherwise, return NULL.  */
 
 static const char *
@@ -9775,29 +9775,13 @@ greater_than_spec_func (int argc, const char **argv)
   if (argc == 1)
     return NULL;
 
-  gcc_assert (argc == 3);
-  gcc_assert (argv[0][0] == '-');
-  gcc_assert (argv[0][1] == '\0');
+  gcc_assert (argc >= 2);
 
-  /* Point p to <n> in in -opt=<n>.  */
-  const char *p = argv[1];
-  while (true)
-    {
-      char c = *p;
-      if (c == '\0')
-       gcc_unreachable ();
-
-      ++p;
-
-      if (c == '=')
-       break;
-    }
-
-  long arg = strtol (p, &converted, 10);
-  gcc_assert (converted != p);
+  long arg = strtol (argv[argc - 2], &converted, 10);
+  gcc_assert (converted != argv[argc - 2]);
 
-  long lim = strtol (argv[2], &converted, 10);
-  gcc_assert (converted != argv[2]);
+  long lim = strtol (argv[argc - 1], &converted, 10);
+  gcc_assert (converted != argv[argc - 1]);
 
   if (arg > lim)
     return "";
index 0b03e66..5dca721 100644 (file)
@@ -1,3 +1,8 @@
+2016-02-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR driver/69805
+       * testsuite/libgomp.c/pr69805.c: New test.
+
 2016-02-16  Tom de Vries  <tom@codesourcery.com>
 
        PR lto/67709
diff --git a/libgomp/testsuite/libgomp.c/pr69805.c b/libgomp/testsuite/libgomp.c/pr69805.c
new file mode 100644 (file)
index 0000000..735d6d9
--- /dev/null
@@ -0,0 +1,9 @@
+/* PR driver/69805 */
+/* { dg-do link } */
+/* { dg-options "-ftree-parallelize-loops=1 -O2 -ftree-parallelize-loops=2" } */
+
+int
+main ()
+{
+  return 0;
+}