This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Warn when returning the address of a temporary (middle-end) v2

On Tue, 29 Jul 2014, David Malcolm wrote:

On Tue, 2014-07-29 at 19:36 +0200, Marc Glisse wrote:
On Sun, 27 Jul 2014, Richard Sandiford wrote:

Marc Glisse <> writes:

I followed the advice in this discussion:

and here is a new patch. I made an effort to isolate a path in at least
one subcase so it doesn't look too strange that the warning is in this
file. Computing the dominance info just to tweak the warning message may
be a bit excessive.

How about only calculating it once you've decided to issue a message?

+		      if (always_executed)
+			msg = "function returns address of local variable";
+		      else
+			msg = "function may return address of local variable";

I think you need _(...) here, unless some magic makes that unnecessary now.

Current version, which passed bootstrap+testsuite on x86_64-linux-gnu.
(the original discussion is at )

This is possibly a dumb question, but what happens for a static local,
rather than an auto local? e.g.

int *f (void)
   static int i;
   return &i;

is_global_var returns true and we don't warn.

(e.g. should the test case cover this?)

I can add it if you want. I already test a global variable (function h) and I expect this is likely already covered elsewhere, but it would make the testcase more complete, so I'll do that.

I just noticed an issue with my patch: since I am using a compound expression in the front-ends to preserve side-effects, I am now sometimes getting this extra warning:

warning: left-hand operand of comma expression has no effect [-Wunused-value]

(I am surprised the testsuite didn't tell me about it)

I will probably have to use the compound expr only if there are side effects.

Marc Glisse

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]