http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57561
Bug ID: 57561 Summary: gnu function multiversion - resolver doesn't use isa priority according to documentation Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: mib.bugzilla at gmail dot com In this test case, the resolver function doesn't find the correct version, according to the documentation e.g. mmx should not preceed sse4.2 (Using gcc 4.8.1 on x86 system) grep movl fu.s | grep arch movl $_Z3fumv.arch_corei7_avx2, %eax movl $_Z3fumv.arch_corei7_avx, %eax movl $_Z3fumv.arch_corei7_popcnt, %eax movl $_Z3fumv.arch_corei7_mmx, %eax movl $_Z3fumv.arch_corei7_sse4.2, %eax movl $_Z3fumv.arch_corei7_sse4.1, %eax movl $_Z3fumv.arch_corei7_ssse3, %eax movl $_Z3fumv.arch_corei7_sse, %eax movl $_Z3fumv.arch_corei7_sse2, %eax movl $_Z3fumv.arch_corei7_sse3, %eax cat fu.cpp __attribute__ ((target("default"))) int fum () { return 0; } __attribute__ ((target("arch=corei7,sse3"))) int fum () { return 0; } __attribute__ ((target("arch=corei7,sse2"))) int fum () { return 0; } __attribute__ ((target("arch=corei7,sse"))) int fum () { return 0; } __attribute__ ((target("arch=corei7,ssse3"))) int fum () { return 0; } __attribute__ ((target("arch=corei7,sse4.1"))) int fum () { return 0; } __attribute__ ((target("arch=corei7,sse4.2"))) int fum () { return 0; } __attribute__ ((target("arch=corei7,popcnt"))) int fum () { return 0; } __attribute__ ((target("arch=corei7,avx"))) int fum () { return 0; } __attribute__ ((target("arch=corei7,avx2"))) int fum () { return 0; } __attribute__ ((target("arch=corei7,mmx"))) int fum () { return 0; } int (*p)() = &fum; int foo(void) { int j = fum(); return j; }