ojhunt wrote:

> We're seeing another couple of false positives:
> 
> ```
> printf("%s", b ? "true" : "false");
> ```
> 
> and
> 
> ```
> constexpr char s[] = "foo";
> printf("%s", s);
> ```
> 
> It would be nice if the warning didn't fire on those.
> 
> I also wonder if we should relax the "c_str() check" a little, to accommodate 
> custom string implementations. If something has a c_str() method, wouldn't it 
> be fair to assume that's going to be a null terminated string?

There's the evaluate as constant string function (I can't recall the exact 
name) but it doesn't handle null terminated strings. @apple-fcloutier and I 
have both looked at adding null terminated string support to that. I have an 
implementation I've been working on as well that tries to adopt it in this 
code, but the problems I were running intro were

* Many StringLiteral type guards
* Conflation of string length and null termination impacting test output.

The former is obvious, but I think the issue I was having there was dealing 
with myriad repeated checks which isn't practical once you're actually 
evaluating them

The latter is more irksome. Given that adding support for constant evaluation 
of strings to these checks is a fairly significant change I don't really want 
any test results to change, as presumably those results are intended, but once 
you have constant evaluation you get differences in behavior as a StringLiteral 
length gives the size of the string literal, a constant evaluated null 
terminated string ends at the null, so `"123\0456"` behaves differently. 

I've found the various warnings being issued to be somewhat opaque so I can't 
tell which are deliberate, and which are just emergent.

https://github.com/llvm/llvm-project/pull/173096
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to