PR85734

Message ID CAAgBjM=VeybyghFgEThw55mQRSHy3w_+4Dg__NAtkJOQEF_FMQ@mail.gmail.com
State New
Headers show
Series
  • PR85734
Related show

Commit Message

Prathamesh Kulkarni May 14, 2018, 9:07 a.m.
Hi,
The attached patch tries to fix PR85734, by gating on
!function_always_visible_to_compiler_p.
Bootstrap+test in progress on x86_64.
OK to commit if passes ?

Thanks,
Prathamesh
2018-05-14  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

	PR ipa/85734
	* ipa-pure-const.c (propagate_malloc): Gate call towarn_function_malloc 
	on !funcion_always_visible_to_compiler_p.
	(pass_local_pure_const::execute): Likewise.

testsuite/
	* gcc.dg/ipa/pr85734.c: New test.

Comments

Richard Biener May 14, 2018, 9:16 a.m. | #1
On Mon, 14 May 2018, Prathamesh Kulkarni wrote:

> Hi,

> The attached patch tries to fix PR85734, by gating on

> !function_always_visible_to_compiler_p.

> Bootstrap+test in progress on x86_64.

> OK to commit if passes ?


This looks redundant - suggest_attribute does that very same check
but warn_function_malloc passes it 'false' as known_finite
(warn_function_noreturn passes it true for example).

So I suggest to simply pass true as that arg.

Richard

> Thanks,

> Prathamesh

> 


-- 
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)
Prathamesh Kulkarni May 14, 2018, 9:33 a.m. | #2
On 14 May 2018 at 14:46, Richard Biener <rguenther@suse.de> wrote:
> On Mon, 14 May 2018, Prathamesh Kulkarni wrote:

>

>> Hi,

>> The attached patch tries to fix PR85734, by gating on

>> !function_always_visible_to_compiler_p.

>> Bootstrap+test in progress on x86_64.

>> OK to commit if passes ?

>

> This looks redundant - suggest_attribute does that very same check

> but warn_function_malloc passes it 'false' as known_finite

> (warn_function_noreturn passes it true for example).

Indeed, thanks for pointing it out.
>

> So I suggest to simply pass true as that arg.

Is the attached version OK to commit after bootstrap+test ?

Thanks,
Prathamesh
>

> Richard

>

>> Thanks,

>> Prathamesh

>>

>

> --

> Richard Biener <rguenther@suse.de>

> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)
2018-05-14  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

	PR ipa/85734
	* ipa-pure-const.c (warn_function_malloc): Pass value of known_finite param
	as true in call to suggest_attribute.

testsuite/
	* gcc.dg/ipa/pr85734.c: New test.

diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c
index a80b6845633..7665358a9a5 100644
--- a/gcc/ipa-pure-const.c
+++ b/gcc/ipa-pure-const.c
@@ -249,7 +249,7 @@ warn_function_malloc (tree decl)
   static hash_set<tree> *warned_about;
   warned_about
     = suggest_attribute (OPT_Wsuggest_attribute_malloc, decl,
-			 false, warned_about, "malloc");
+			 true, warned_about, "malloc");
 }
 
 /* Emit suggestion about __attribute__((noreturn)) for DECL.  */
diff --git a/gcc/testsuite/gcc.dg/ipa/pr85734.c b/gcc/testsuite/gcc.dg/ipa/pr85734.c
new file mode 100644
index 00000000000..e5fa21f0548
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/pr85734.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wsuggest-attribute=malloc" } */
+
+__attribute__((noinline))
+static void *f1(__SIZE_TYPE__ sz) /* { dg-bogus "function might be candidate for attribute 'malloc'" } */
+{
+  return __builtin_malloc (sz);
+}
+
+__attribute__((noinline))
+static void *f2(__SIZE_TYPE__ sz) /* { dg-bogus "function might be candidate for attribute 'malloc'" } */
+{
+  return f1 (sz);
+}
+
+void *f3(__SIZE_TYPE__ sz) /* { dg-warning "function might be candidate for attribute 'malloc'" } */
+{
+  return f2(sz);
+}
Richard Biener May 14, 2018, 9:36 a.m. | #3
On Mon, 14 May 2018, Prathamesh Kulkarni wrote:

> On 14 May 2018 at 14:46, Richard Biener <rguenther@suse.de> wrote:

> > On Mon, 14 May 2018, Prathamesh Kulkarni wrote:

> >

> >> Hi,

> >> The attached patch tries to fix PR85734, by gating on

> >> !function_always_visible_to_compiler_p.

> >> Bootstrap+test in progress on x86_64.

> >> OK to commit if passes ?

> >

> > This looks redundant - suggest_attribute does that very same check

> > but warn_function_malloc passes it 'false' as known_finite

> > (warn_function_noreturn passes it true for example).

> Indeed, thanks for pointing it out.

> >

> > So I suggest to simply pass true as that arg.

> Is the attached version OK to commit after bootstrap+test ?


Yes.
Richard.

> Thanks,

> Prathamesh

> >

> > Richard

> >

> >> Thanks,

> >> Prathamesh

> >>

> >

> > --

> > Richard Biener <rguenther@suse.de>

> > SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)

> 


-- 
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)
Prathamesh Kulkarni May 14, 2018, 12:30 p.m. | #4
On 14 May 2018 at 15:06, Richard Biener <rguenther@suse.de> wrote:
> On Mon, 14 May 2018, Prathamesh Kulkarni wrote:

>

>> On 14 May 2018 at 14:46, Richard Biener <rguenther@suse.de> wrote:

>> > On Mon, 14 May 2018, Prathamesh Kulkarni wrote:

>> >

>> >> Hi,

>> >> The attached patch tries to fix PR85734, by gating on

>> >> !function_always_visible_to_compiler_p.

>> >> Bootstrap+test in progress on x86_64.

>> >> OK to commit if passes ?

>> >

>> > This looks redundant - suggest_attribute does that very same check

>> > but warn_function_malloc passes it 'false' as known_finite

>> > (warn_function_noreturn passes it true for example).

>> Indeed, thanks for pointing it out.

>> >

>> > So I suggest to simply pass true as that arg.

>> Is the attached version OK to commit after bootstrap+test ?

>

> Yes.

Also on a related bug PR85562, should we change the wording of
suggest_attribute for malloc
to omit the text "if it is known to return normally" ?

Thanks,
Prathamesh
> Richard.

>

>> Thanks,

>> Prathamesh

>> >

>> > Richard

>> >

>> >> Thanks,

>> >> Prathamesh

>> >>

>> >

>> > --

>> > Richard Biener <rguenther@suse.de>

>> > SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)

>>

>

> --

> Richard Biener <rguenther@suse.de>

> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)
Richard Biener May 14, 2018, 2:19 p.m. | #5
On May 14, 2018 2:30:27 PM GMT+02:00, Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> wrote:
>On 14 May 2018 at 15:06, Richard Biener <rguenther@suse.de> wrote:

>> On Mon, 14 May 2018, Prathamesh Kulkarni wrote:

>>

>>> On 14 May 2018 at 14:46, Richard Biener <rguenther@suse.de> wrote:

>>> > On Mon, 14 May 2018, Prathamesh Kulkarni wrote:

>>> >

>>> >> Hi,

>>> >> The attached patch tries to fix PR85734, by gating on

>>> >> !function_always_visible_to_compiler_p.

>>> >> Bootstrap+test in progress on x86_64.

>>> >> OK to commit if passes ?

>>> >

>>> > This looks redundant - suggest_attribute does that very same check

>>> > but warn_function_malloc passes it 'false' as known_finite

>>> > (warn_function_noreturn passes it true for example).

>>> Indeed, thanks for pointing it out.

>>> >

>>> > So I suggest to simply pass true as that arg.

>>> Is the attached version OK to commit after bootstrap+test ?

>>

>> Yes.

>Also on a related bug PR85562, should we change the wording of

>suggest_attribute for malloc

>to omit the text "if it is known to return normally" ?


Yes. 

Richard. 

>Thanks,

>Prathamesh

>> Richard.

>>

>>> Thanks,

>>> Prathamesh

>>> >

>>> > Richard

>>> >

>>> >> Thanks,

>>> >> Prathamesh

>>> >>

>>> >

>>> > --

>>> > Richard Biener <rguenther@suse.de>

>>> > SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham

>Norton, HRB 21284 (AG Nuernberg)

>>>

>>

>> --

>> Richard Biener <rguenther@suse.de>

>> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham

>Norton, HRB 21284 (AG Nuernberg)

Patch

diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c
index a80b6845633..ce8028c1639 100644
--- a/gcc/ipa-pure-const.c
+++ b/gcc/ipa-pure-const.c
@@ -1987,7 +1987,8 @@  propagate_malloc (void)
 
 	    bool malloc_decl_p = DECL_IS_MALLOC (node->decl);
 	    node->set_malloc_flag (true);
-	    if (!malloc_decl_p && warn_suggest_attribute_malloc)
+	    if (!malloc_decl_p && !function_always_visible_to_compiler_p (node->decl)
+		&& warn_suggest_attribute_malloc)
 		warn_function_malloc (node->decl);
 	  }
       }
@@ -2221,7 +2222,8 @@  pass_local_pure_const::execute (function *fun)
       && !DECL_IS_MALLOC (current_function_decl))
     {
       node->set_malloc_flag (true);
-      if (warn_suggest_attribute_malloc)
+      if (warn_suggest_attribute_malloc
+	  && !function_always_visible_to_compiler_p (current_function_decl))
 	warn_function_malloc (node->decl);
       changed = true;
       if (dump_file)
diff --git a/gcc/testsuite/gcc.dg/ipa/pr85734.c b/gcc/testsuite/gcc.dg/ipa/pr85734.c
new file mode 100644
index 00000000000..e5fa21f0548
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/pr85734.c
@@ -0,0 +1,19 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wsuggest-attribute=malloc" } */
+
+__attribute__((noinline))
+static void *f1(__SIZE_TYPE__ sz) /* { dg-bogus "function might be candidate for attribute 'malloc'" } */
+{
+  return __builtin_malloc (sz);
+}
+
+__attribute__((noinline))
+static void *f2(__SIZE_TYPE__ sz) /* { dg-bogus "function might be candidate for attribute 'malloc'" } */
+{
+  return f1 (sz);
+}
+
+void *f3(__SIZE_TYPE__ sz) /* { dg-warning "function might be candidate for attribute 'malloc'" } */
+{
+  return f2(sz);
+}