aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSriraman Tallam <tmsriram@google.com>2013-07-11 22:09:55 +0000
committerSriraman Tallam <tmsriram@gcc.gnu.org>2013-07-11 22:09:55 +0000
commit78039734658d68e1acc5d10ad8e14363ac606ba3 (patch)
tree8f9f514bcc5926df1b6a1b21cf6f61cefa69c737 /gcc
parent2c6215249d06acdca6d7ba5c810f33b2b0395bd1 (diff)
downloadgcc-78039734658d68e1acc5d10ad8e14363ac606ba3.zip
gcc-78039734658d68e1acc5d10ad8e14363ac606ba3.tar.gz
gcc-78039734658d68e1acc5d10ad8e14363ac606ba3.tar.bz2
re PR c++/57362 (unsupported __attribute__((target())) values appear to cause loop and/or pathological behavior)
PR 57362 PR target/57362 * config/i386/i386.c (dispatch_function_versions): Fix array indexing of function_version_info to match actual_versions. PR target/57362 * g++.dg/ext/pr57362.C: New. From-SVN: r200913
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.c7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ext/pr57362.C199
4 files changed, 213 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4454b01..613ede4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2013-07-11 Sriraman Tallam <tmsriram@google.com>
+
+ * config/i386/i386.c (dispatch_function_versions): Fix array
+ indexing of function_version_info to match actual_versions.
+
2013-07-11 Teresa Johnson <tejohnson@google.com>
* vec.h (struct va_gc): Move release out-of-line.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 94a94e4..5df6ab7 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -29342,10 +29342,11 @@ dispatch_function_versions (tree dispatch_decl,
if (predicate_chain == NULL_TREE)
continue;
+ function_version_info [actual_versions].version_decl = version_decl;
+ function_version_info [actual_versions].predicate_chain
+ = predicate_chain;
+ function_version_info [actual_versions].dispatch_priority = priority;
actual_versions++;
- function_version_info [ix - 1].version_decl = version_decl;
- function_version_info [ix - 1].predicate_chain = predicate_chain;
- function_version_info [ix - 1].dispatch_priority = priority;
}
/* Sort the versions according to descending order of dispatch priority. The
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7d5558d..57ab286f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-07-11 Sriraman Tallam <tmsriram@google.com>
+
+ PR target/57362
+ * g++.dg/ext/pr57362.C: New.
+
2013-07-11 Georg-Johann Lay <avr@gjlay.de>
PR target/57631
diff --git a/gcc/testsuite/g++.dg/ext/pr57362.C b/gcc/testsuite/g++.dg/ext/pr57362.C
new file mode 100644
index 0000000..67f9685
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/pr57362.C
@@ -0,0 +1,199 @@
+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-ifunc "" } */
+
+__attribute__((target("default")))
+int foo(void) { return 1; }
+__attribute__((target("128bit-long-double")))
+int foo(void) { return 1; }
+__attribute__((target("80387")))
+int foo(void) { return 1; }
+__attribute__((target("96bit-long-double")))
+int foo(void) { return 1; }
+__attribute__((target("long-double-80")))
+int foo(void) { return 1; }
+__attribute__((target("long-double-64")))
+int foo(void) { return 1; }
+__attribute__((target("accumulate-outgoing-args")))
+int foo(void) { return 1; }
+__attribute__((target("align-double")))
+int foo(void) { return 1; }
+__attribute__((target("align-stringops")))
+int foo(void) { return 1; }
+__attribute__((target("fancy-math-387")))
+int foo(void) { return 1; }
+__attribute__((target("force-drap")))
+int foo(void) { return 1; }
+__attribute__((target("fp-ret-in-387")))
+int foo(void) { return 1; }
+__attribute__((target("hard-float")))
+int foo(void) { return 1; }
+__attribute__((target("ieee-fp")))
+int foo(void) { return 1; }
+__attribute__((target("inline-all-stringops")))
+int foo(void) { return 1; }
+__attribute__((target("inline-stringops-dynamically")))
+int foo(void) { return 1; }
+__attribute__((target("intel-syntax")))
+int foo(void) { return 1; }
+__attribute__((target("ms-bitfields")))
+int foo(void) { return 1; }
+__attribute__((target("no-align-stringops")))
+int foo(void) { return 1; }
+__attribute__((target("no-fancy-math-387")))
+int foo(void) { return 1; }
+__attribute__((target("no-push-args")))
+int foo(void) { return 1; }
+__attribute__((target("no-red-zone")))
+int foo(void) { return 1; }
+__attribute__((target("omit-leaf-frame-pointer")))
+int foo(void) { return 1; }
+__attribute__((target("pc32")))
+int foo(void) { return 1; }
+__attribute__((target("pc64")))
+int foo(void) { return 1; }
+__attribute__((target("pc80")))
+int foo(void) { return 1; }
+__attribute__((target("push-args")))
+int foo(void) { return 1; }
+__attribute__((target("red-zone")))
+int foo(void) { return 1; }
+__attribute__((target("rtd")))
+int foo(void) { return 1; }
+__attribute__((target("soft-float")))
+int foo(void) { return 1; }
+__attribute__((target("sseregparm")))
+int foo(void) { return 1; }
+__attribute__((target("stackrealign")))
+int foo(void) { return 1; }
+__attribute__((target("stack-arg-probe")))
+int foo(void) { return 1; }
+__attribute__((target("tls-direct-seg-refs")))
+int foo(void) { return 1; }
+__attribute__((target("vect8-ret-in-mem")))
+int foo(void) { return 1; }
+__attribute__((target("recip")))
+int foo(void) { return 1; }
+__attribute__((target("cld")))
+int foo(void) { return 1; }
+__attribute__((target("vzeroupper")))
+int foo(void) { return 1; }
+__attribute__((target("dispatch-scheduler")))
+int foo(void) { return 1; }
+__attribute__((target("prefer-avx128")))
+int foo(void) { return 1; }
+__attribute__((target("32")))
+int foo(void) { return 1; }
+__attribute__((target("64")))
+int foo(void) { return 1; }
+__attribute__((target("x32")))
+int foo(void) { return 1; }
+__attribute__((target("mmx")))
+int foo(void) { return 1; }
+__attribute__((target("3dnow")))
+int foo(void) { return 1; }
+__attribute__((target("3dnowa")))
+int foo(void) { return 1; }
+__attribute__((target("sse")))
+int foo(void) { return 1; }
+__attribute__((target("sse2")))
+int foo(void) { return 1; }
+__attribute__((target("sse3")))
+int foo(void) { return 1; }
+__attribute__((target("ssse3")))
+int foo(void) { return 1; }
+__attribute__((target("sse4.1")))
+int foo(void) { return 1; }
+__attribute__((target("sse4.2")))
+int foo(void) { return 1; }
+__attribute__((target("sse4")))
+int foo(void) { return 1; }
+__attribute__((target("no-sse4")))
+int foo(void) { return 1; }
+__attribute__((target("sse5")))
+int foo(void) { return 1; }
+__attribute__((target("avx")))
+int foo(void) { return 1; }
+__attribute__((target("avx2")))
+int foo(void) { return 1; }
+__attribute__((target("fma")))
+int foo(void) { return 1; }
+__attribute__((target("sse4a")))
+int foo(void) { return 1; }
+__attribute__((target("fma4")))
+int foo(void) { return 1; }
+__attribute__((target("xop")))
+int foo(void) { return 1; }
+__attribute__((target("lwp")))
+int foo(void) { return 1; }
+__attribute__((target("abm")))
+int foo(void) { return 1; }
+__attribute__((target("popcnt")))
+int foo(void) { return 1; }
+__attribute__((target("bmi")))
+int foo(void) { return 1; }
+__attribute__((target("bmi2")))
+int foo(void) { return 1; }
+__attribute__((target("lzcnt")))
+int foo(void) { return 1; }
+__attribute__((target("hle")))
+int foo(void) { return 1; }
+__attribute__((target("rdseed")))
+int foo(void) { return 1; }
+__attribute__((target("prfchw")))
+int foo(void) { return 1; }
+__attribute__((target("adx")))
+int foo(void) { return 1; }
+__attribute__((target("fxsr")))
+int foo(void) { return 1; }
+__attribute__((target("xsave")))
+int foo(void) { return 1; }
+__attribute__((target("xsaveopt")))
+int foo(void) { return 1; }
+__attribute__((target("tbm")))
+int foo(void) { return 1; }
+__attribute__((target("cx16")))
+int foo(void) { return 1; }
+__attribute__((target("sahf")))
+int foo(void) { return 1; }
+__attribute__((target("movbe")))
+int foo(void) { return 1; }
+__attribute__((target("crc32")))
+int foo(void) { return 1; }
+__attribute__((target("aes")))
+int foo(void) { return 1; }
+__attribute__((target("pclmul")))
+int foo(void) { return 1; }
+__attribute__((target("sse2avx")))
+int foo(void) { return 1; }
+__attribute__((target("fsgsbase")))
+int foo(void) { return 1; }
+__attribute__((target("rdrnd")))
+int foo(void) { return 1; }
+__attribute__((target("f16c")))
+int foo(void) { return 1; }
+__attribute__((target("fentry")))
+int foo(void) { return 1; }
+__attribute__((target("8bit-idiv")))
+int foo(void) { return 1; }
+__attribute__((target("avx256-split-unaligned-load")))
+int foo(void) { return 1; }
+__attribute__((target("avx256-split-unaligned-store")))
+int foo(void) { return 1; }
+__attribute__((target("rtm")))
+int foo(void) { return 1; }
+//---------------
+
+#include <stdio.h>
+ int main (void)
+ {
+ int result;
+ result = foo();
+ printf("Result is %d\n", result);
+ return result;
+ }
+
+/* { dg-prune-output "attribute.* is unknown" } */
+/* { dg-prune-output "redefinition of int foo" } */
+/* { dg-prune-output "previous declaration of int foo" } */
+/* { dg-prune-output "int foo.* previously defined here" } */
+/* { dg-prune-output "No dispatcher found for" } */