rsmith added inline comments.

================
Comment at: lib/AST/Expr.cpp:1857
+  if (!PExp->IgnoreParenCasts()
+          ->isNullPointerConstant(Ctx, Expr::NPC_ValueDependentIsNull))
+    return false;
----------------
andrew.w.kaylor wrote:
> rsmith wrote:
> > If we get here with a value-dependent expression, we should treat it as 
> > non-null (do not warn on `(char*)PtrTemplateParameter + N`).
> OK.  I wasn't sure about that.
> 
> So how do I test that?  Is this right?
> ```
> template<typename T, T *P>
> T* f(intptr_t offset) {
>   return P + offset;
> }
> 
> char *test(intptr_t offset) {
>   return f<char, nullptr>(offset);
> }
> ```
You can simplify that slightly by using `template<char *P>`, but yes.


================
Comment at: lib/Sema/SemaExpr.cpp:8807
+    llvm::APSInt KnownVal;
+    if (!getLangOpts().CPlusPlus || !IExp->EvaluateAsInt(KnownVal, Context) ||
+        KnownVal != 0) {
----------------
This talk about value-dependence reminds me: it is an error to call 
`EvaluateAsInt` on a value-dependent expression (the expression evaluator will 
probably assert). If `IExp->isValueDependent()`, you should skip the 
diagnostic, since it might instantiate to zero.


================
Comment at: lib/Sema/SemaExpr.cpp:8877
     if (RHS.get()->getType()->isIntegerType()) {
+      // Subtracting from a null pointer should produce a warning.
+      // The last argument to the diagnose call says this doesn't match the
----------------
andrew.w.kaylor wrote:
> rsmith wrote:
> > Subtracting zero from a null pointer should not warn in C++.
> > 
> > (Conversely, subtracting a non-null pointer from a pointer should warn in 
> > C++, and subtracting any pointer from a null pointer should warn in C.)
> Is it OK if I just add a FIXME in the section below that handles 
> pointer-pointer?
Yes, that's fine. (But the `nullptr - 0` case should be handled in this patch.)


https://reviews.llvm.org/D37042



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to