From 99eb194caf98c40f68bfea7318e2ad66b2ca3d6a Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 31 Jan 2013 21:21:37 +0100 Subject: [PATCH] 4.8.0-0.8 --- .gitignore | 1 + gcc.spec | 49 +- gcc48-pr55742.patch | 1288 ------------------------------------------- sources | 2 +- 4 files changed, 28 insertions(+), 1312 deletions(-) delete mode 100644 gcc48-pr55742.patch diff --git a/.gitignore b/.gitignore index 91441b5..2f1998e 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,4 @@ /gcc-4.8.0-20130122.tar.bz2 /gcc-4.8.0-20130124.tar.bz2 /gcc-4.8.0-20130129.tar.bz2 +/gcc-4.8.0-20130131.tar.bz2 diff --git a/gcc.spec b/gcc.spec index 3f51cab..4f64122 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,9 +1,9 @@ -%global DATE 20130129 -%global SVNREV 195527 +%global DATE 20130131 +%global SVNREV 195626 %global gcc_version 4.8.0 # Note, gcc_release must be integer, if you want to add suffixes to # %{release}, append them after %{gcc_release} on Release: line. -%global gcc_release 0.7 +%global gcc_release 0.8 %global _unpackaged_files_terminate_build 0 %global multilib_64_archs sparc64 ppc64 s390x x86_64 %ifarch %{ix86} x86_64 ia64 ppc ppc64 alpha @@ -26,7 +26,7 @@ %else %global build_libquadmath 0 %endif -%ifarch %{ix86} x86_64 +%ifarch %{ix86} x86_64 ppc ppc64 %global build_libasan 1 %else %global build_libasan 0 @@ -46,11 +46,7 @@ %else %global build_libitm 0 %endif -%if 0%{?rhel} >= 7 -%global build_cloog 0 -%else %global build_cloog 1 -%endif %global build_libstdcxx_docs 1 # If you don't have already a usable gcc-java and libgcj for your arch, # do on some arch which has it rpmbuild -bc --with java_tar gcc.spec @@ -198,7 +194,6 @@ Patch10: gcc48-pr38757.patch Patch11: gcc48-libstdc++-docs.patch Patch12: gcc48-no-add-needed.patch Patch13: gcc48-pr55608.patch -Patch14: gcc48-pr55742.patch Patch1000: fastjar-0.97-segfault.patch Patch1001: fastjar-0.97-len1.patch @@ -222,11 +217,11 @@ Patch1004: fastjar-man.patch %endif %description -The gcc package contains the GNU Compiler Collection version 4.7. +The gcc package contains the GNU Compiler Collection version 4.8. You'll need this package in order to compile C code. %package -n libgcc -Summary: GCC version 4.7 shared support library +Summary: GCC version 4.8 shared support library Group: System Environment/Libraries Autoreq: false @@ -275,7 +270,7 @@ Requires: libstdc++-devel = %{version}-%{release} Autoreq: true %description -n libstdc++-static -Static libraries for the GNU standard C++ library. +Static libraries for the GNU standard C++ library. %package -n libstdc++-docs Summary: Documentation for the GNU standard C++ library @@ -455,7 +450,7 @@ Requires: libitm-devel = %{version}-%{release} %description -n libitm-static This package contains GNU Transactional Memory static libraries. -%package -n libatomic +%package -n libatomic Summary: The GNU Atomic library Group: System Environment/Libraries Requires(post): /sbin/install-info @@ -751,7 +746,6 @@ package or when debugging this package. %endif %patch12 -p0 -b .no-add-needed~ %patch13 -p0 -b .pr55608~ -%patch14 -p0 -E -b .pr55742~ %if 0%{?_enable_debug_packages} cat > split-debuginfo.sh <<\EOF @@ -815,7 +809,7 @@ tar xzf %{SOURCE4} tar xjf %{SOURCE10} %endif -sed -i -e 's/4\.7\.3/4.7.2/' gcc/BASE-VER +sed -i -e 's/4\.8\.0/4.8.0/' gcc/BASE-VER echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE %if 0%{?fedora} >= 16 || 0%{?rhel} >= 7 @@ -1476,28 +1470,28 @@ mv -f $FULLPATH/ada{include,lib} $FULLLPATH/ pushd $FULLLPATH/adalib if [ "%{_lib}" = "lib" ]; then ln -sf ../../../../../libgnarl-*.so libgnarl.so -ln -sf ../../../../../libgnarl-*.so libgnarl-4.7.so +ln -sf ../../../../../libgnarl-*.so libgnarl-4.8.so ln -sf ../../../../../libgnat-*.so libgnat.so -ln -sf ../../../../../libgnat-*.so libgnat-4.7.so +ln -sf ../../../../../libgnat-*.so libgnat-4.8.so else ln -sf ../../../../../../%{_lib}/libgnarl-*.so libgnarl.so -ln -sf ../../../../../../%{_lib}/libgnarl-*.so libgnarl-4.7.so +ln -sf ../../../../../../%{_lib}/libgnarl-*.so libgnarl-4.8.so ln -sf ../../../../../../%{_lib}/libgnat-*.so libgnat.so -ln -sf ../../../../../../%{_lib}/libgnat-*.so libgnat-4.7.so +ln -sf ../../../../../../%{_lib}/libgnat-*.so libgnat-4.8.so fi popd else pushd $FULLPATH/adalib if [ "%{_lib}" = "lib" ]; then ln -sf ../../../../libgnarl-*.so libgnarl.so -ln -sf ../../../../libgnarl-*.so libgnarl-4.7.so +ln -sf ../../../../libgnarl-*.so libgnarl-4.8.so ln -sf ../../../../libgnat-*.so libgnat.so -ln -sf ../../../../libgnat-*.so libgnat-4.7.so +ln -sf ../../../../libgnat-*.so libgnat-4.8.so else ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl.so -ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl-4.7.so +ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl-4.8.so ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat.so -ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat-4.7.so +ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat-4.8.so fi popd fi @@ -2975,6 +2969,15 @@ fi %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin %changelog +* Thu Jan 31 2013 Jakub Jelinek 4.8.0-0.8 +- updated from trunk + - PRs c++/56162, debug/54410, debug/54508, debug/55059, fortran/54107, + fortran/56138, libgomp/55561, libstdc++/54314, lto/56147, + middle-end/53073, other/53413, other/54620, rtl-optimization/56144, + sanitizer/55374, target/39064, target/56121, tree-optimization/55270, + tree-optimization/56064, tree-optimization/56113, + tree-optimization/56150, tree-optimization/56157 + * Tue Jan 29 2013 Jakub Jelinek 4.8.0-0.7 - updated from trunk - PRs c++/56095, c++/56104, c/56078, fortran/53537, fortran/55984, diff --git a/gcc48-pr55742.patch b/gcc48-pr55742.patch deleted file mode 100644 index a88c2e8..0000000 --- a/gcc48-pr55742.patch +++ /dev/null @@ -1,1288 +0,0 @@ -2013-01-21 Jakub Jelinek - - 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. - ---- gcc/config/i386/i386.c.jj 2013-01-21 10:57:08.325945469 +0100 -+++ gcc/config/i386/i386.c 2013-01-21 12:02:59.384701394 +0100 -@@ -4223,7 +4223,10 @@ ix86_valid_target_attribute_inner_p (tre - } - - else if (TREE_CODE (args) != STRING_CST) -- gcc_unreachable (); -+ { -+ error ("attribute % argument not a string"); -+ return false; -+ } - - /* Handle multiple arguments separated by commas. */ - next_optstr = ASTRDUP (TREE_STRING_POINTER (args)); -@@ -4368,7 +4371,7 @@ ix86_valid_target_attribute_tree (tree a - /* Process each of the options on the chain. */ - if (! ix86_valid_target_attribute_inner_p (args, option_strings, - &enum_opts_set)) -- return NULL_TREE; -+ return error_mark_node; - - /* If the changed options are different from the default, rerun - ix86_option_override_internal, and then save the options away. -@@ -4433,6 +4436,15 @@ ix86_valid_target_attribute_p (tree fnde - { - struct cl_target_option cur_target; - bool ret = true; -+ -+ /* attribute((target("default"))) does nothing, beyond -+ affecting multi-versioning. */ -+ if (TREE_VALUE (args) -+ && TREE_CODE (TREE_VALUE (args)) == STRING_CST -+ && TREE_CHAIN (args) == NULL_TREE -+ && strcmp (TREE_STRING_POINTER (TREE_VALUE (args)), "default") == 0) -+ return true; -+ - tree old_optimize = build_optimization_node (); - tree new_target, new_optimize; - tree func_optimize = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (fndecl); -@@ -4449,10 +4461,10 @@ ix86_valid_target_attribute_p (tree fnde - new_target = ix86_valid_target_attribute_tree (args); - new_optimize = build_optimization_node (); - -- if (!new_target) -+ if (new_target == error_mark_node) - ret = false; - -- else if (fndecl) -+ else if (fndecl && new_target) - { - DECL_FUNCTION_SPECIFIC_TARGET (fndecl) = new_target; - -@@ -28946,26 +28958,44 @@ attr_strcmp (const void *v1, const void - return strcmp (c1, c2); - } - --/* STR is the argument to target attribute. This function tokenizes -+/* ARGLIST is the argument to target attribute. This function tokenizes - the comma separated arguments, sorts them and returns a string which - is a unique identifier for the comma separated arguments. It also - replaces non-identifier characters "=,-" with "_". */ - - static char * --sorted_attr_string (const char *str) -+sorted_attr_string (tree arglist) - { -+ tree arg; -+ size_t str_len_sum = 0; - char **args = NULL; - char *attr_str, *ret_str; - char *attr = NULL; - unsigned int argnum = 1; - unsigned int i; - -- for (i = 0; i < strlen (str); i++) -- if (str[i] == ',') -- argnum++; -- -- attr_str = (char *)xmalloc (strlen (str) + 1); -- strcpy (attr_str, str); -+ for (arg = arglist; arg; arg = TREE_CHAIN (arg)) -+ { -+ const char *str = TREE_STRING_POINTER (TREE_VALUE (arg)); -+ size_t len = strlen (str); -+ str_len_sum += len + 1; -+ if (arg != arglist) -+ argnum++; -+ for (i = 0; i < strlen (str); i++) -+ if (str[i] == ',') -+ argnum++; -+ } -+ -+ attr_str = XNEWVEC (char, str_len_sum); -+ str_len_sum = 0; -+ for (arg = arglist; arg; arg = TREE_CHAIN (arg)) -+ { -+ const char *str = TREE_STRING_POINTER (TREE_VALUE (arg)); -+ size_t len = strlen (str); -+ memcpy (attr_str + str_len_sum, str, len); -+ attr_str[str_len_sum + len] = TREE_CHAIN (arg) ? ',' : '\0'; -+ str_len_sum += len + 1; -+ } - - /* Replace "=,-" with "_". */ - for (i = 0; i < strlen (attr_str); i++) -@@ -28986,18 +29016,20 @@ sorted_attr_string (const char *str) - attr = strtok (NULL, ","); - } - -- qsort (args, argnum, sizeof (char*), attr_strcmp); -+ qsort (args, argnum, sizeof (char *), attr_strcmp); - -- ret_str = (char *)xmalloc (strlen (str) + 1); -- strcpy (ret_str, args[0]); -- for (i = 1; i < argnum; i++) -+ ret_str = XNEWVEC (char, str_len_sum); -+ str_len_sum = 0; -+ for (i = 0; i < argnum; i++) - { -- strcat (ret_str, "_"); -- strcat (ret_str, args[i]); -+ size_t len = strlen (args[i]); -+ memcpy (ret_str + str_len_sum, args[i], len); -+ ret_str[str_len_sum + len] = i < argnum - 1 ? '_' : '\0'; -+ str_len_sum += len + 1; - } - -- free (args); -- free (attr_str); -+ XDELETEVEC (args); -+ XDELETEVEC (attr_str); - return ret_str; - } - -@@ -29009,8 +29041,8 @@ static tree - ix86_mangle_function_version_assembler_name (tree decl, tree id) - { - tree version_attr; -- const char *orig_name, *version_string, *attr_str; -- char *assembler_name; -+ const char *orig_name, *version_string; -+ char *attr_str, *assembler_name; - - if (DECL_DECLARED_INLINE_P (decl) - && lookup_attribute ("gnu_inline", -@@ -29034,9 +29066,11 @@ ix86_mangle_function_version_assembler_n - version_string - = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (version_attr))); - -- attr_str = sorted_attr_string (version_string); -- assembler_name = (char *) xmalloc (strlen (orig_name) -- + strlen (attr_str) + 2); -+ if (strcmp (version_string, "default") == 0) -+ return id; -+ -+ attr_str = sorted_attr_string (TREE_VALUE (version_attr)); -+ assembler_name = XNEWVEC (char, strlen (orig_name) + strlen (attr_str) + 2); - - sprintf (assembler_name, "%s.%s", orig_name, attr_str); - -@@ -29044,7 +29078,10 @@ ix86_mangle_function_version_assembler_n - if (DECL_ASSEMBLER_NAME_SET_P (decl)) - SET_DECL_RTL (decl, NULL); - -- return get_identifier (assembler_name); -+ tree ret = get_identifier (assembler_name); -+ XDELETEVEC (attr_str); -+ XDELETEVEC (assembler_name); -+ return ret; - } - - /* This function returns true if FN1 and FN2 are versions of the same function, -@@ -29055,10 +29092,9 @@ static bool - ix86_function_versions (tree fn1, tree fn2) - { - tree attr1, attr2; -- const char *attr_str1, *attr_str2; - char *target1, *target2; - bool result; -- -+ - if (TREE_CODE (fn1) != FUNCTION_DECL - || TREE_CODE (fn2) != FUNCTION_DECL) - return false; -@@ -29070,15 +29106,35 @@ ix86_function_versions (tree fn1, tree f - if (attr1 == NULL_TREE && attr2 == NULL_TREE) - return false; - -- /* If one function does not have a target attribute, these are versions. */ -+ /* Diagnose missing target attribute if one of the decls is already -+ multi-versioned. */ - if (attr1 == NULL_TREE || attr2 == NULL_TREE) -- return true; -- -- attr_str1 = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr1))); -- attr_str2 = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr2))); -+ { -+ if (DECL_FUNCTION_VERSIONED (fn1) || DECL_FUNCTION_VERSIONED (fn2)) -+ { -+ if (attr2 != NULL_TREE) -+ { -+ tree tem = fn1; -+ fn1 = fn2; -+ fn2 = tem; -+ attr1 = attr2; -+ } -+ error_at (DECL_SOURCE_LOCATION (fn2), -+ "missing % attribute for multi-versioned %D", -+ fn2); -+ error_at (DECL_SOURCE_LOCATION (fn1), -+ "previous declaration of %D", fn1); -+ /* Prevent diagnosing of the same error multiple times. */ -+ DECL_ATTRIBUTES (fn2) -+ = tree_cons (get_identifier ("target"), -+ copy_node (TREE_VALUE (attr1)), -+ DECL_ATTRIBUTES (fn2)); -+ } -+ return false; -+ } - -- target1 = sorted_attr_string (attr_str1); -- target2 = sorted_attr_string (attr_str2); -+ target1 = sorted_attr_string (TREE_VALUE (attr1)); -+ target2 = sorted_attr_string (TREE_VALUE (attr2)); - - /* The sorted target strings must be different for fn1 and fn2 - to be versions. */ -@@ -29087,20 +29143,12 @@ ix86_function_versions (tree fn1, tree f - else - result = true; - -- free (target1); -- free (target2); -+ XDELETEVEC (target1); -+ XDELETEVEC (target2); - - return result; - } - --/* This target supports function multiversioning. */ -- --static bool --ix86_supports_function_versions (void) --{ -- return true; --} -- - static tree - ix86_mangle_decl_assembler_name (tree decl, tree id) - { -@@ -29141,10 +29189,10 @@ make_name (tree decl, const char *suffix - - /* Use '.' to concatenate names as it is demangler friendly. */ - if (make_unique) -- snprintf (global_var_name, name_len, "%s.%s.%s", name, -- unique_name, suffix); -+ snprintf (global_var_name, name_len, "%s.%s.%s", name, unique_name, -+ suffix); - else -- snprintf (global_var_name, name_len, "%s.%s", name, suffix); -+ snprintf (global_var_name, name_len, "%s.%s", name, suffix); - - return global_var_name; - } -@@ -29159,7 +29207,7 @@ static tree - make_dispatcher_decl (const tree decl) - { - tree func_decl; -- char *func_name, *resolver_name; -+ char *func_name; - tree fn_type, func_type; - bool is_uniq = false; - -@@ -29167,14 +29215,13 @@ make_dispatcher_decl (const tree decl) - is_uniq = true; - - func_name = make_name (decl, "ifunc", is_uniq); -- resolver_name = make_name (decl, "resolver", is_uniq); -- gcc_assert (resolver_name); - - fn_type = TREE_TYPE (decl); - func_type = build_function_type (TREE_TYPE (fn_type), - TYPE_ARG_TYPES (fn_type)); - - func_decl = build_fn_decl (func_name, func_type); -+ XDELETEVEC (func_name); - TREE_USED (func_decl) = 1; - DECL_CONTEXT (func_decl) = NULL_TREE; - DECL_INITIAL (func_decl) = error_mark_node; -@@ -29196,9 +29243,14 @@ make_dispatcher_decl (const tree decl) - static bool - is_function_default_version (const tree decl) - { -- return (TREE_CODE (decl) == FUNCTION_DECL -- && DECL_FUNCTION_VERSIONED (decl) -- && lookup_attribute ("target", DECL_ATTRIBUTES (decl)) == NULL_TREE); -+ if (TREE_CODE (decl) != FUNCTION_DECL -+ || !DECL_FUNCTION_VERSIONED (decl)) -+ return false; -+ tree attr = lookup_attribute ("target", DECL_ATTRIBUTES (decl)); -+ gcc_assert (attr); -+ attr = TREE_VALUE (TREE_VALUE (attr)); -+ return (TREE_CODE (attr) == STRING_CST -+ && strcmp (TREE_STRING_POINTER (attr), "default") == 0); - } - - /* Make a dispatcher declaration for the multi-versioned function DECL. -@@ -29392,6 +29444,7 @@ make_resolver_func (const tree default_d - /* Create the alias for dispatch to resolver here. */ - /*cgraph_create_function_alias (dispatch_decl, decl);*/ - cgraph_same_body_alias (NULL, dispatch_decl, decl); -+ XDELETEVEC (resolver_name); - return decl; - } - -@@ -29453,7 +29506,7 @@ ix86_generate_version_dispatcher_body (v - } - - dispatch_function_versions (resolver_decl, &fn_ver_vec, &empty_bb); -- -+ fn_ver_vec.release (); - rebuild_cgraph_edges (); - pop_cfun (); - return resolver_decl; -@@ -42441,10 +42494,6 @@ ix86_memmodel_check (unsigned HOST_WIDE_ - #undef TARGET_OPTION_FUNCTION_VERSIONS - #define TARGET_OPTION_FUNCTION_VERSIONS ix86_function_versions - --#undef TARGET_OPTION_SUPPORTS_FUNCTION_VERSIONS --#define TARGET_OPTION_SUPPORTS_FUNCTION_VERSIONS \ -- ix86_supports_function_versions -- - #undef TARGET_CAN_INLINE_P - #define TARGET_CAN_INLINE_P ix86_can_inline_p - ---- gcc/target.def.jj 2013-01-11 09:02:32.000000000 +0100 -+++ gcc/target.def 2013-01-21 11:25:29.145124702 +0100 -@@ -2831,14 +2831,6 @@ DEFHOOK - bool, (tree decl1, tree decl2), - hook_bool_tree_tree_false) - --/* This function returns true if the target supports function -- multiversioning. */ --DEFHOOK --(supports_function_versions, -- "", -- bool, (void), -- hook_bool_void_false) -- - /* Function to determine if one function can inline another function. */ - #undef HOOK_PREFIX - #define HOOK_PREFIX "TARGET_" ---- gcc/doc/tm.texi.in.jj 2013-01-11 09:02:26.000000000 +0100 -+++ gcc/doc/tm.texi.in 2013-01-21 11:25:57.789962584 +0100 -@@ -9768,11 +9768,6 @@ different target specific attributes, th - different target machines. - @end deftypefn - --@hook TARGET_OPTION_SUPPORTS_FUNCTION_VERSIONS --This target hook returns @code{true} if the target supports function --multiversioning. --@end deftypefn -- - @hook TARGET_CAN_INLINE_P - This target hook returns @code{false} if the @var{caller} function - cannot inline @var{callee}, based on target specific information. By ---- gcc/doc/tm.texi.jj 2013-01-11 09:02:26.000000000 +0100 -+++ gcc/doc/tm.texi 2013-01-21 11:26:08.647897014 +0100 -@@ -9907,11 +9907,6 @@ different target specific attributes, th - different target machines. - @end deftypefn - --@deftypefn {Target Hook} bool TARGET_OPTION_SUPPORTS_FUNCTION_VERSIONS (void) --This target hook returns @code{true} if the target supports function --multiversioning. --@end deftypefn -- - @deftypefn {Target Hook} bool TARGET_CAN_INLINE_P (tree @var{caller}, tree @var{callee}) - This target hook returns @code{false} if the @var{caller} function - cannot inline @var{callee}, based on target specific information. By ---- gcc/c-family/c-common.c.jj 2013-01-21 10:56:55.165014693 +0100 -+++ gcc/c-family/c-common.c 2013-01-21 10:59:04.305285038 +0100 -@@ -8759,12 +8759,8 @@ handle_target_attribute (tree *node, tre - warning (OPT_Wattributes, "%qE attribute ignored", name); - *no_add_attrs = true; - } -- /* Do not strip invalid target attributes for targets which support function -- multiversioning as the target string is used to determine versioned -- functions. */ - else if (! targetm.target_option.valid_attribute_p (*node, name, args, -- flags) -- && ! targetm.target_option.supports_function_versions ()) -+ flags)) - *no_add_attrs = true; - - return NULL_TREE; ---- gcc/testsuite/g++.dg/mv1.C.jj 2013-01-21 10:56:54.564017815 +0100 -+++ gcc/testsuite/g++.dg/mv1.C 2013-01-21 11:35:42.260684508 +0100 -@@ -1,130 +0,0 @@ --/* Test case to check if Multiversioning works. */ --/* { dg-do run { target i?86-*-* x86_64-*-* } } */ --/* { dg-require-ifunc "" } */ --/* { dg-options "-O2 -fPIC" } */ -- --#include -- --/* Default version. */ --int foo (); --/* The other versions of foo. Mix up the ordering and -- check if the dispatching does it in the order of priority. */ --/* Check combination of target attributes. */ --int foo () __attribute__ ((target("arch=corei7,popcnt"))); --/* The target operands in this declaration and the definition are re-ordered. -- This should still work. */ --int foo () __attribute__ ((target("ssse3,avx2"))); -- --/* Check for all target attributes for which dispatchers are available. */ --/* Check arch= */ --int foo () __attribute__((target("arch=core2"))); --int foo () __attribute__((target("arch=corei7"))); --int foo () __attribute__((target("arch=atom"))); --/* Check ISAs */ --int foo () __attribute__((target("avx"))); --int foo () __attribute__ ((target("arch=core2,sse4.2"))); --/* Check more arch=. */ --int foo () __attribute__((target("arch=amdfam10"))); --int foo () __attribute__((target("arch=bdver1"))); --int foo () __attribute__((target("arch=bdver2"))); -- --int (*p)() = &foo; --int main () --{ -- int val = foo (); -- assert (val == (*p)()); -- -- /* Check in the exact same order in which the dispatching -- is expected to happen. */ -- if (__builtin_cpu_is ("bdver1")) -- assert (val == 1); -- else if (__builtin_cpu_is ("bdver2")) -- assert (val == 2); -- else if (__builtin_cpu_supports ("avx2") -- && __builtin_cpu_supports ("ssse3")) -- assert (val == 3); -- else if (__builtin_cpu_supports ("avx")) -- assert (val == 4); -- else if (__builtin_cpu_is ("corei7") -- && __builtin_cpu_supports ("popcnt")) -- assert (val == 5); -- else if (__builtin_cpu_is ("corei7")) -- assert (val == 6); -- else if (__builtin_cpu_is ("amdfam10h")) -- assert (val == 7); -- else if (__builtin_cpu_is ("core2") -- && __builtin_cpu_supports ("sse4.2")) -- assert (val == 8); -- else if (__builtin_cpu_is ("core2")) -- assert (val == 9); -- else if (__builtin_cpu_is ("atom")) -- assert (val == 10); -- else -- assert (val == 0); -- -- return 0; --} -- --int foo () --{ -- return 0; --} -- --int __attribute__ ((target("arch=corei7,popcnt"))) --foo () --{ -- return 5; --} --int __attribute__ ((target("avx2,ssse3"))) --foo () --{ -- return 3; --} -- --int __attribute__ ((target("arch=core2"))) --foo () --{ -- return 9; --} -- --int __attribute__ ((target("arch=corei7"))) --foo () --{ -- return 6; --} -- --int __attribute__ ((target("arch=atom"))) --foo () --{ -- return 10; --} -- --int __attribute__ ((target("avx"))) --foo () --{ -- return 4; --} -- --int __attribute__ ((target("arch=core2,sse4.2"))) --foo () --{ -- return 8; --} -- --int __attribute__ ((target("arch=amdfam10"))) --foo () --{ -- return 7; --} -- --int __attribute__ ((target("arch=bdver1"))) --foo () --{ -- return 1; --} -- --int __attribute__ ((target("arch=bdver2"))) --foo () --{ -- return 2; --} ---- gcc/testsuite/g++.dg/ext/mv1.C.jj 2013-01-21 11:36:16.084491175 +0100 -+++ gcc/testsuite/g++.dg/ext/mv1.C 2013-01-21 11:42:52.975315718 +0100 -@@ -0,0 +1,132 @@ -+/* Test case to check if Multiversioning works. */ -+/* { dg-do run { target i?86-*-* x86_64-*-* } } */ -+/* { dg-require-ifunc "" } */ -+/* { dg-options "-O2 -fPIC" } */ -+ -+#include -+ -+/* Default version. */ -+int foo (); // Extra declaration that is merged with the second one. -+int foo () __attribute__ ((target("default"))); -+/* The other versions of foo. Mix up the ordering and -+ check if the dispatching does it in the order of priority. */ -+/* Check combination of target attributes. */ -+int foo () __attribute__ ((target("arch=corei7,popcnt"))); -+/* The target operands in this declaration and the definition are re-ordered. -+ This should still work. */ -+int foo () __attribute__ ((target("ssse3,avx2"))); -+ -+/* Check for all target attributes for which dispatchers are available. */ -+/* Check arch= */ -+int foo () __attribute__((target("arch=core2"))); -+int foo () __attribute__((target("arch=corei7"))); -+int foo () __attribute__((target("arch=atom"))); -+/* Check ISAs */ -+int foo () __attribute__((target("avx"))); -+int foo () __attribute__ ((target("arch=core2,sse4.2"))); -+/* Check more arch=. */ -+int foo () __attribute__((target("arch=amdfam10"))); -+int foo () __attribute__((target("arch=bdver1"))); -+int foo () __attribute__((target("arch=bdver2"))); -+ -+int (*p)() = &foo; -+int main () -+{ -+ int val = foo (); -+ assert (val == (*p)()); -+ -+ /* Check in the exact same order in which the dispatching -+ is expected to happen. */ -+ if (__builtin_cpu_is ("bdver1")) -+ assert (val == 1); -+ else if (__builtin_cpu_is ("bdver2")) -+ assert (val == 2); -+ else if (__builtin_cpu_supports ("avx2") -+ && __builtin_cpu_supports ("ssse3")) -+ assert (val == 3); -+ else if (__builtin_cpu_supports ("avx")) -+ assert (val == 4); -+ else if (__builtin_cpu_is ("corei7") -+ && __builtin_cpu_supports ("popcnt")) -+ assert (val == 5); -+ else if (__builtin_cpu_is ("corei7")) -+ assert (val == 6); -+ else if (__builtin_cpu_is ("amdfam10h")) -+ assert (val == 7); -+ else if (__builtin_cpu_is ("core2") -+ && __builtin_cpu_supports ("sse4.2")) -+ assert (val == 8); -+ else if (__builtin_cpu_is ("core2")) -+ assert (val == 9); -+ else if (__builtin_cpu_is ("atom")) -+ assert (val == 10); -+ else -+ assert (val == 0); -+ -+ return 0; -+} -+ -+int __attribute__ ((target("default"))) -+foo () -+{ -+ return 0; -+} -+ -+int __attribute__ ((target("arch=corei7,popcnt"))) -+foo () -+{ -+ return 5; -+} -+int __attribute__ ((target("avx2,ssse3"))) -+foo () -+{ -+ return 3; -+} -+ -+int __attribute__ ((target("arch=core2"))) -+foo () -+{ -+ return 9; -+} -+ -+int __attribute__ ((target("arch=corei7"))) -+foo () -+{ -+ return 6; -+} -+ -+int __attribute__ ((target("arch=atom"))) -+foo () -+{ -+ return 10; -+} -+ -+int __attribute__ ((target("avx"))) -+foo () -+{ -+ return 4; -+} -+ -+int __attribute__ ((target("arch=core2,sse4.2"))) -+foo () -+{ -+ return 8; -+} -+ -+int __attribute__ ((target("arch=amdfam10"))) -+foo () -+{ -+ return 7; -+} -+ -+int __attribute__ ((target("arch=bdver1"))) -+foo () -+{ -+ return 1; -+} -+ -+int __attribute__ ((target("arch=bdver2"))) -+foo () -+{ -+ return 2; -+} ---- gcc/testsuite/g++.dg/mv2.C.jj 2013-01-21 10:56:54.465018354 +0100 -+++ gcc/testsuite/g++.dg/mv2.C 2013-01-21 11:35:45.088666745 +0100 -@@ -1,118 +0,0 @@ --/* Test case to check if Multiversioning chooses the correct -- dispatching order when versions are for various ISAs. */ --/* { dg-do run { target i?86-*-* x86_64-*-* } } */ --/* { dg-require-ifunc "" } */ --/* { dg-options "-O2" } */ -- --#include -- --/* Default version. */ --int foo (); --/* The dispatch checks should be in the exact reverse order of the -- declarations below. */ --int foo () __attribute__ ((target ("mmx"))); --int foo () __attribute__ ((target ("sse"))); --int foo () __attribute__ ((target ("sse2"))); --int foo () __attribute__ ((target ("sse3"))); --int foo () __attribute__ ((target ("ssse3"))); --int foo () __attribute__ ((target ("sse4.1"))); --int foo () __attribute__ ((target ("sse4.2"))); --int foo () __attribute__ ((target ("popcnt"))); --int foo () __attribute__ ((target ("avx"))); --int foo () __attribute__ ((target ("avx2"))); -- --int main () --{ -- int val = foo (); -- -- if (__builtin_cpu_supports ("avx2")) -- assert (val == 1); -- else if (__builtin_cpu_supports ("avx")) -- assert (val == 2); -- else if (__builtin_cpu_supports ("popcnt")) -- assert (val == 3); -- else if (__builtin_cpu_supports ("sse4.2")) -- assert (val == 4); -- else if (__builtin_cpu_supports ("sse4.1")) -- assert (val == 5); -- else if (__builtin_cpu_supports ("ssse3")) -- assert (val == 6); -- else if (__builtin_cpu_supports ("sse3")) -- assert (val == 7); -- else if (__builtin_cpu_supports ("sse2")) -- assert (val == 8); -- else if (__builtin_cpu_supports ("sse")) -- assert (val == 9); -- else if (__builtin_cpu_supports ("mmx")) -- assert (val == 10); -- else -- assert (val == 0); -- -- return 0; --} -- --int --foo () --{ -- return 0; --} -- --int __attribute__ ((target("mmx"))) --foo () --{ -- return 10; --} -- --int __attribute__ ((target("sse"))) --foo () --{ -- return 9; --} -- --int __attribute__ ((target("sse2"))) --foo () --{ -- return 8; --} -- --int __attribute__ ((target("sse3"))) --foo () --{ -- return 7; --} -- --int __attribute__ ((target("ssse3"))) --foo () --{ -- return 6; --} -- --int __attribute__ ((target("sse4.1"))) --foo () --{ -- return 5; --} -- --int __attribute__ ((target("sse4.2"))) --foo () --{ -- return 4; --} -- --int __attribute__ ((target("popcnt"))) --foo () --{ -- return 3; --} -- --int __attribute__ ((target("avx"))) --foo () --{ -- return 2; --} -- --int __attribute__ ((target("avx2"))) --foo () --{ -- return 1; --} ---- gcc/testsuite/g++.dg/ext/mv2.C.jj 2013-01-21 11:36:16.085491165 +0100 -+++ gcc/testsuite/g++.dg/ext/mv2.C 2013-01-21 10:58:57.000000000 +0100 -@@ -0,0 +1,118 @@ -+/* Test case to check if Multiversioning chooses the correct -+ dispatching order when versions are for various ISAs. */ -+/* { dg-do run { target i?86-*-* x86_64-*-* } } */ -+/* { dg-require-ifunc "" } */ -+/* { dg-options "-O2" } */ -+ -+#include -+ -+/* Default version. */ -+int foo () __attribute__ ((target ("default"))); -+/* The dispatch checks should be in the exact reverse order of the -+ declarations below. */ -+int foo () __attribute__ ((target ("mmx"))); -+int foo () __attribute__ ((target ("sse"))); -+int foo () __attribute__ ((target ("sse2"))); -+int foo () __attribute__ ((target ("sse3"))); -+int foo () __attribute__ ((target ("ssse3"))); -+int foo () __attribute__ ((target ("sse4.1"))); -+int foo () __attribute__ ((target ("sse4.2"))); -+int foo () __attribute__ ((target ("popcnt"))); -+int foo () __attribute__ ((target ("avx"))); -+int foo () __attribute__ ((target ("avx2"))); -+ -+int main () -+{ -+ int val = foo (); -+ -+ if (__builtin_cpu_supports ("avx2")) -+ assert (val == 1); -+ else if (__builtin_cpu_supports ("avx")) -+ assert (val == 2); -+ else if (__builtin_cpu_supports ("popcnt")) -+ assert (val == 3); -+ else if (__builtin_cpu_supports ("sse4.2")) -+ assert (val == 4); -+ else if (__builtin_cpu_supports ("sse4.1")) -+ assert (val == 5); -+ else if (__builtin_cpu_supports ("ssse3")) -+ assert (val == 6); -+ else if (__builtin_cpu_supports ("sse3")) -+ assert (val == 7); -+ else if (__builtin_cpu_supports ("sse2")) -+ assert (val == 8); -+ else if (__builtin_cpu_supports ("sse")) -+ assert (val == 9); -+ else if (__builtin_cpu_supports ("mmx")) -+ assert (val == 10); -+ else -+ assert (val == 0); -+ -+ return 0; -+} -+ -+int __attribute__ ((target("default"))) -+foo () -+{ -+ return 0; -+} -+ -+int __attribute__ ((target("mmx"))) -+foo () -+{ -+ return 10; -+} -+ -+int __attribute__ ((target("sse"))) -+foo () -+{ -+ return 9; -+} -+ -+int __attribute__ ((target("sse2"))) -+foo () -+{ -+ return 8; -+} -+ -+int __attribute__ ((target("sse3"))) -+foo () -+{ -+ return 7; -+} -+ -+int __attribute__ ((target("ssse3"))) -+foo () -+{ -+ return 6; -+} -+ -+int __attribute__ ((target("sse4.1"))) -+foo () -+{ -+ return 5; -+} -+ -+int __attribute__ ((target("sse4.2"))) -+foo () -+{ -+ return 4; -+} -+ -+int __attribute__ ((target("popcnt"))) -+foo () -+{ -+ return 3; -+} -+ -+int __attribute__ ((target("avx"))) -+foo () -+{ -+ return 2; -+} -+ -+int __attribute__ ((target("avx2"))) -+foo () -+{ -+ return 1; -+} ---- gcc/testsuite/g++.dg/mv3.C.jj 2013-01-18 21:23:45.000000000 +0100 -+++ gcc/testsuite/g++.dg/mv3.C 2013-01-21 11:35:52.400626435 +0100 -@@ -1,36 +0,0 @@ --/* Test case to check if a call to a multiversioned function -- is replaced with a direct call to the particular version when -- the most specialized version's target attributes match the -- caller. -- -- In this program, foo is multiversioned but there is no default -- function. This is an error if the call has to go through a -- dispatcher. However, the call to foo in bar can be replaced -- with a direct call to the popcnt version of foo. Hence, this -- test should pass. */ -- --/* { dg-do run { target i?86-*-* x86_64-*-* } } */ --/* { dg-options "-O2" } */ -- -- --int __attribute__ ((target ("sse"))) --foo () --{ -- return 1; --} --int __attribute__ ((target ("popcnt"))) --foo () --{ -- return 0; --} -- --int __attribute__ ((target ("popcnt"))) --bar () --{ -- return foo (); --} -- --int main () --{ -- return bar (); --} ---- gcc/testsuite/g++.dg/ext/mv3.C.jj 2013-01-21 11:36:16.086491156 +0100 -+++ gcc/testsuite/g++.dg/ext/mv3.C 2013-01-18 21:23:45.000000000 +0100 -@@ -0,0 +1,36 @@ -+/* Test case to check if a call to a multiversioned function -+ is replaced with a direct call to the particular version when -+ the most specialized version's target attributes match the -+ caller. -+ -+ In this program, foo is multiversioned but there is no default -+ function. This is an error if the call has to go through a -+ dispatcher. However, the call to foo in bar can be replaced -+ with a direct call to the popcnt version of foo. Hence, this -+ test should pass. */ -+ -+/* { dg-do run { target i?86-*-* x86_64-*-* } } */ -+/* { dg-options "-O2" } */ -+ -+ -+int __attribute__ ((target ("sse"))) -+foo () -+{ -+ return 1; -+} -+int __attribute__ ((target ("popcnt"))) -+foo () -+{ -+ return 0; -+} -+ -+int __attribute__ ((target ("popcnt"))) -+bar () -+{ -+ return foo (); -+} -+ -+int main () -+{ -+ return bar (); -+} ---- gcc/testsuite/g++.dg/mv4.C.jj 2013-01-18 21:23:45.000000000 +0100 -+++ gcc/testsuite/g++.dg/mv4.C 2013-01-21 11:35:54.308616223 +0100 -@@ -1,24 +0,0 @@ --/* Test case to check if the compiler generates an error message -- when the default version of a multiversioned function is absent -- and its pointer is taken. */ -- --/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ --/* { dg-require-ifunc "" } */ --/* { dg-options "-O2" } */ -- --int __attribute__ ((target ("sse"))) --foo () --{ -- return 1; --} --int __attribute__ ((target ("popcnt"))) --foo () --{ -- return 0; --} -- --int main () --{ -- int (*p)() = &foo; /* { dg-error "use of multiversioned function without a default" {} } */ -- return (*p)(); --} ---- gcc/testsuite/g++.dg/ext/mv4.C.jj 2013-01-21 11:36:16.088491133 +0100 -+++ gcc/testsuite/g++.dg/ext/mv4.C 2013-01-18 21:23:45.000000000 +0100 -@@ -0,0 +1,24 @@ -+/* Test case to check if the compiler generates an error message -+ when the default version of a multiversioned function is absent -+ and its pointer is taken. */ -+ -+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ -+/* { dg-require-ifunc "" } */ -+/* { dg-options "-O2" } */ -+ -+int __attribute__ ((target ("sse"))) -+foo () -+{ -+ return 1; -+} -+int __attribute__ ((target ("popcnt"))) -+foo () -+{ -+ return 0; -+} -+ -+int main () -+{ -+ int (*p)() = &foo; /* { dg-error "use of multiversioned function without a default" {} } */ -+ return (*p)(); -+} ---- gcc/testsuite/g++.dg/mv5.C.jj 2013-01-21 10:56:54.582017723 +0100 -+++ gcc/testsuite/g++.dg/mv5.C 2013-01-21 11:35:56.027606185 +0100 -@@ -1,25 +0,0 @@ --/* Test case to check if multiversioned functions are still generated if they are -- marked comdat with inline keyword. */ -- --/* { dg-do run { target i?86-*-* x86_64-*-* } } */ --/* { dg-require-ifunc "" } */ --/* { dg-options "-O2" } */ -- -- --/* Default version. */ --inline int --foo () --{ -- return 0; --} -- --inline int __attribute__ ((target ("popcnt"))) --foo () --{ -- return 0; --} -- --int main () --{ -- return foo (); --} ---- gcc/testsuite/g++.dg/ext/mv5.C.jj 2013-01-21 11:36:16.089491123 +0100 -+++ gcc/testsuite/g++.dg/ext/mv5.C 2013-01-21 10:58:57.000000000 +0100 -@@ -0,0 +1,25 @@ -+/* Test case to check if multiversioned functions are still generated if they are -+ marked comdat with inline keyword. */ -+ -+/* { dg-do run { target i?86-*-* x86_64-*-* } } */ -+/* { dg-require-ifunc "" } */ -+/* { dg-options "-O2" } */ -+ -+ -+/* Default version. */ -+inline int __attribute__ ((target ("default"))) -+foo () -+{ -+ return 0; -+} -+ -+inline int __attribute__ ((target ("popcnt"))) -+foo () -+{ -+ return 0; -+} -+ -+int main () -+{ -+ return foo (); -+} ---- gcc/testsuite/g++.dg/mv6.C.jj 2013-01-21 10:56:54.504018081 +0100 -+++ gcc/testsuite/g++.dg/mv6.C 2013-01-21 11:35:57.514597697 +0100 -@@ -1,27 +0,0 @@ --/* Test to check if member version multiversioning works correctly. */ -- --/* { dg-do run { target i?86-*-* x86_64-*-* } } */ --/* { dg-require-ifunc "" } */ --/* { dg-options "-march=x86-64" } */ -- --class Foo --{ -- public: -- /* Default version of foo. */ -- int foo () -- { -- return 0; -- } -- /* corei7 version of foo. */ -- __attribute__ ((target("arch=corei7"))) -- int foo () -- { -- return 0; -- } --}; -- --int main () --{ -- Foo f; -- return f.foo (); --} ---- gcc/testsuite/g++.dg/ext/mv6.C.jj 2013-01-21 11:36:16.090491117 +0100 -+++ gcc/testsuite/g++.dg/ext/mv6.C 2013-01-21 10:58:57.000000000 +0100 -@@ -0,0 +1,28 @@ -+/* Test to check if member version multiversioning works correctly. */ -+ -+/* { dg-do run { target i?86-*-* x86_64-*-* } } */ -+/* { dg-require-ifunc "" } */ -+/* { dg-options "-march=x86-64" } */ -+ -+class Foo -+{ -+ public: -+ /* Default version of foo. */ -+ __attribute__ ((target("default"))) -+ int foo () -+ { -+ return 0; -+ } -+ /* corei7 version of foo. */ -+ __attribute__ ((target("arch=corei7"))) -+ int foo () -+ { -+ return 0; -+ } -+}; -+ -+int main () -+{ -+ Foo f; -+ return f.foo (); -+} ---- gcc/testsuite/g++.dg/ext/mv7.C.jj 2013-01-21 11:39:21.789460493 +0100 -+++ gcc/testsuite/g++.dg/ext/mv7.C 2013-01-21 11:45:05.098589632 +0100 -@@ -0,0 +1,12 @@ -+// { dg-do compile { target i?86-*-* x86_64-*-* } } -+// { dg-options "" } -+ -+__attribute__((target ("default"))) -+void foo (void) // { dg-error "previously defined here" } -+{ -+} -+ -+__attribute__((target (128))) -+void foo (void) // { dg-error "(not a string|redefinition)" } -+{ -+} ---- gcc/testsuite/g++.dg/ext/mv8.C.jj 2013-01-21 11:41:17.147836101 +0100 -+++ gcc/testsuite/g++.dg/ext/mv8.C 2013-01-21 11:45:13.493544256 +0100 -@@ -0,0 +1,7 @@ -+// { dg-do compile { target i?86-*-* x86_64-*-* } } -+// { dg-options "" } -+ -+__attribute__((target (11,12))) -+void foo (void) // { dg-error "not a string" } -+{ -+} ---- gcc/testsuite/g++.dg/ext/mv9.C.jj 2013-01-21 11:44:31.634774921 +0100 -+++ gcc/testsuite/g++.dg/ext/mv9.C 2013-01-21 11:45:18.275516266 +0100 -@@ -0,0 +1,9 @@ -+// { dg-do compile { target i?86-*-* x86_64-*-* } } -+// { dg-options "" } -+ -+void foo (); -+void foo () __attribute__((target ("sse4"))); -+void foo () __attribute__((target ("default"))); // { dg-error "previous declaration" } -+void foo () // { dg-error "attribute for multi-versioned" } -+{ -+} ---- gcc/testsuite/g++.dg/ext/mv10.C.jj 2013-01-21 12:12:29.354541630 +0100 -+++ gcc/testsuite/g++.dg/ext/mv10.C 2013-01-21 12:12:56.207392886 +0100 -@@ -0,0 +1,12 @@ -+// { dg-do assemble { target i?86-*-* x86_64-*-* } } -+// { dg-options "" } -+ -+__attribute__((target ("popcnt"), used)) -+void foo (void) -+{ -+} -+ -+__attribute__((target ("popcnt","avx"), used)) -+void foo (void) -+{ -+} ---- gcc/testsuite/g++.dg/ext/mv11.C.jj 2013-01-21 12:16:26.381285535 +0100 -+++ gcc/testsuite/g++.dg/ext/mv11.C 2013-01-21 12:17:33.380918996 +0100 -@@ -0,0 +1,23 @@ -+// { dg-do compile { target i?86-*-* x86_64-*-* } } -+// { dg-options "-msse2" } -+ -+int foo () __attribute__ ((target("default"))); -+int foo () __attribute__ ((target("sse2"))); -+ -+int -+main () -+{ -+ return foo (); -+} -+ -+int __attribute__ ((target("default"))) -+foo () -+{ -+ return 0; -+} -+ -+int __attribute__ ((target("sse2"))) -+foo () -+{ -+ return 0; -+} diff --git a/sources b/sources index 514dc02..4dcd42f 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ be78a47bd82523250eb3e91646db5b3d cloog-0.18.0.tar.gz 2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz bce1586384d8635a76d2f017fb067cd2 isl-0.11.1.tar.bz2 -74b615191cdd9dbd3a6a8971fce7f360 gcc-4.8.0-20130129.tar.bz2 +d055987caf9f93fa3b2dc6bddb89dfd6 gcc-4.8.0-20130131.tar.bz2