On 6/7/18 6:57 PM, Stefan Koch wrote:
On Thursday, 7 June 2018 at 22:23:09 UTC, Steven Schveighoffer wrote:
{...}

That a function could return does not mean it will.

int fn (int arg) /*strongly*/ pure
{
   if (arg == 42)
     return 42;
   else (arg < 43)
     return fn(--arg);
   else
     return fn(++arg);
}

do you see the problem?
If not you would you expect the compiler to ?

note: I would expected that the clang static analyzer
would be able to determine that depending on the value of arg
this function might never return.

I'm not talking about the compiler looking at the code to figure out if it will return.

I'm talking about this:

struct S
{
}

S fn() pure;

No matter what is inside fn, it will return S.init, if it returns. The question to answer is, can we assume all functions don't enter infinite loops, and if we can assume this, then why couldn't the compiler simply replace a call to fn with S.init?

And the case FeepingCreature gives is pretty compelling, because it's a real example, not a toy example.

-Steve

Reply via email to