2010-09-07 Martin Jambor <mjambor@suse.cz>
authorjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 7 Sep 2010 17:00:44 +0000 (17:00 +0000)
committerjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 7 Sep 2010 17:00:44 +0000 (17:00 +0000)
PR fortran/43665
* ipa-cp.c (ipcp_versionable_function_p): Return false if there
are any type attributes.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163960 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/ipa-cp.c

index 7d75459..746b3fb 100644 (file)
@@ -1,3 +1,9 @@
+2010-09-07  Martin Jambor  <mjambor@suse.cz>
+
+       PR fortran/43665
+       * ipa-cp.c (ipcp_versionable_function_p): Return false if there
+       are any type attributes.
+
 2010-09-07  Jan Hubicka  <jh@suse.cz>
 
        * tree-ssa-ccp.c (fold_const_aggregate_ref): Fix handling of array_ref_low_bound
index e6c67d6..e94fdca 100644 (file)
@@ -427,8 +427,11 @@ ipcp_versionable_function_p (struct cgraph_node *node)
 {
   struct cgraph_edge *edge;
 
-  /* There are a number of generic reasons functions cannot be versioned.  */
-  if (!node->local.versionable)
+  /* There are a number of generic reasons functions cannot be versioned.  We
+     also cannot remove parameters if there are type attributes such as fnspec
+     present.  */
+  if (!node->local.versionable
+      || TYPE_ATTRIBUTES (TREE_TYPE (node->decl)))
     return false;
 
   /* Removing arguments doesn't work if the function takes varargs