http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55742
--- Comment #44 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-01-30 18:04:49 UTC --- Author: jakub Date: Wed Jan 30 18:04:34 2013 New Revision: 195584 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=195584 Log: PR c++/55742 * config/i386/i386.c (ix86_valid_target_attribute_inner_p): Diagnose invalid args instead of ICEing on it. (ix86_valid_target_attribute_tree): Return error_mark_node if ix86_valid_target_attribute_inner_p failed. (ix86_valid_target_attribute_p): Return false only if ix86_valid_target_attribute_tree returned error_mark_node. Allow target("default") attribute. (sorted_attr_string): Change argument from const char * to tree, merge in all target attribute arguments rather than just one. Formatting fix. Use XNEWVEC instead of xmalloc and XDELETEVEC instead of free. Avoid using strcat. (ix86_mangle_function_version_assembler_name): Mangle target("default") as if no target attribute is present. Adjust sorted_attr_string caller. Avoid leaking memory. Use XNEWVEC instead of xmalloc and XDELETEVEC instead of free. (ix86_function_versions): Don't return true if one of the decls doesn't have target attribute. If they don't and one of the decls is DECL_FUNCTION_VERSIONED, report an error. Adjust sorted_attr_string caller. Use XDELETEVEC instead of free. (ix86_supports_function_versions): Remove. (make_name): Fix up formatting. (make_dispatcher_decl): Remove resolver_name and its initialization. Avoid leaking memory. (is_function_default_version): Return true if there is target("default") attribute rather than no target attribute at all. (make_resolver_func): Avoid leaking memory. (ix86_generate_version_dispatcher_body): Likewise. (TARGET_OPTION_SUPPORTS_FUNCTION_VERSIONS): Remove. * target.def (supports_function_versions): Remove. * doc/tm.texi.in (SUPPORTS_FUNCTION_VERSIONS): Remove. * doc/tm.texi: Regenerated. * c-common.c (handle_target_attribute): Revert 2012-12-26 change. * g++.dg/mv1.C: Moved to... * g++.dg/ext/mv1.C: ... here. Adjust test. * g++.dg/mv2.C: Moved to... * g++.dg/ext/mv2.C: ... here. Adjust test. * g++.dg/mv3.C: Moved to... * g++.dg/ext/mv3.C: ... here. * g++.dg/mv4.C: Moved to... * g++.dg/ext/mv4.C: ... here. * g++.dg/mv5.C: Moved to... * g++.dg/ext/mv5.C: ... here. Adjust test. * g++.dg/mv6.C: Moved to... * g++.dg/ext/mv6.C: ... here. Adjust test. * g++.dg/ext/mv7.C: New test. * g++.dg/ext/mv8.C: New test. * g++.dg/ext/mv9.C: New test. * g++.dg/ext/mv10.C: New test. * g++.dg/ext/mv11.C: New test. Added: trunk/gcc/testsuite/g++.dg/ext/mv1.C - copied, changed from r195583, trunk/gcc/testsuite/g++.dg/mv1.C trunk/gcc/testsuite/g++.dg/ext/mv10.C trunk/gcc/testsuite/g++.dg/ext/mv11.C trunk/gcc/testsuite/g++.dg/ext/mv2.C - copied, changed from r195583, trunk/gcc/testsuite/g++.dg/mv2.C trunk/gcc/testsuite/g++.dg/ext/mv3.C - copied unchanged from r195583, trunk/gcc/testsuite/g++.dg/mv3.C trunk/gcc/testsuite/g++.dg/ext/mv4.C - copied unchanged from r195583, trunk/gcc/testsuite/g++.dg/mv4.C trunk/gcc/testsuite/g++.dg/ext/mv5.C - copied, changed from r195583, trunk/gcc/testsuite/g++.dg/mv5.C trunk/gcc/testsuite/g++.dg/ext/mv6.C - copied, changed from r195583, trunk/gcc/testsuite/g++.dg/mv6.C trunk/gcc/testsuite/g++.dg/ext/mv7.C trunk/gcc/testsuite/g++.dg/ext/mv8.C trunk/gcc/testsuite/g++.dg/ext/mv9.C Removed: trunk/gcc/testsuite/g++.dg/mv1.C trunk/gcc/testsuite/g++.dg/mv2.C trunk/gcc/testsuite/g++.dg/mv3.C trunk/gcc/testsuite/g++.dg/mv4.C trunk/gcc/testsuite/g++.dg/mv5.C trunk/gcc/testsuite/g++.dg/mv6.C Modified: trunk/gcc/ChangeLog trunk/gcc/c-family/ChangeLog trunk/gcc/c-family/c-common.c trunk/gcc/config/i386/i386.c trunk/gcc/doc/tm.texi trunk/gcc/doc/tm.texi.in trunk/gcc/target.def trunk/gcc/testsuite/ChangeLog