On 06/28/2017 04:24 PM, Jan Hubicka wrote:
>> -  /* If callee has no option attributes, then it is ok to inline.  */
>> -  if (!callee_tree)
>> +  /* If callee has no option attributes (or default),
>> +     then it is ok to inline.  */
>> +  if (!callee_tree || callee_tree == target_option_default_node)
> 
> I am not sure this actually makes sense, because target_option_default_node 
> is not very
> meaningful for LTO (it contains whatever was passed to LTO driver). 

I see!

 Perhaps one can check
> for explicit optimization/machine attribute and whether caller and callee 
> come from
> same compilation unit, though this is quite hackish and will do unexpected 
> things with COMDATs.

That's quite cumbersome. Any other idea than marking the PR as won't fix?

Martin

> 
> honza
>>      ret = true;
>>  
>>    /* If caller has no option attributes, but callee does then it is not ok 
>> to
>> diff --git a/gcc/testsuite/gcc.dg/torture/pr71991.c 
>> b/gcc/testsuite/gcc.dg/torture/pr71991.c
>> new file mode 100644
>> index 00000000000..79c927f6844
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.dg/torture/pr71991.c
>> @@ -0,0 +1,12 @@
>> +/* PR target/71991 */
>> +
>> +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
>> +/* { dg-options "-std=c99" } */
>> +
>> +static inline int __attribute__ ((__always_inline__)) fn1 () { return 0; }
>> +static inline int __attribute__ ((target("inline-all-stringops"))) fn2 () { 
>> return fn1 (); }
>> +
>> +int main()
>> +{
>> +  return fn2();
>> +}
>>
> 

Reply via email to