[PATCH] D85157: [Sema] Add casting check for integer to fixed point conversions

Bjorn Pettersson via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 3 23:41:43 PDT 2020


bjope added inline comments.


================
Comment at: clang/lib/Sema/SemaCast.cpp:2660
     return;
+  if (SrcType->isIntegerType() && DestType->isFixedPointType())
+    return;
----------------
vabridgers wrote:
> bjope wrote:
> > Is this really the intention with the patch?
> > 
> > It does match the "summary" above, but isn't the warning well deserved for int->fixed cast.
> > 
> > I also base that question on the you referred to this patch from our bugtracker at Ericsson, which was about conversions from `long __fixed` to `long __fixed`. So I kind of expected to find `(SrcType->isFixedPointType() && DestType->isFixedPointType())` here (similar to the checks above that avoids warning when SrcType equals the DestType).
> > 
> > The test case I expected (related to our downstream bug report) would look like this:
> > 
> > ```
> > _Fract ff1(void);
> > 
> > void
> > foo(void)
> > {
> >   (_Fract)ff1();  // No warning expected.
> > }
> > ```
> > 
> I improve the commit message detail. Please read and let me know if the intent is still not clear. 
I'm afraid you didn't update the summary in phabricator? (I've never managed to do that using arcanist myself, after having updated the commit msg locally I usually need to update the description in phabricator using the web ui).


================
Comment at: clang/lib/Sema/SemaCast.cpp:2660
     return;
+  if (SrcType->isIntegerType() && DestType->isFixedPointType())
+    return;
----------------
bjope wrote:
> vabridgers wrote:
> > bjope wrote:
> > > Is this really the intention with the patch?
> > > 
> > > It does match the "summary" above, but isn't the warning well deserved for int->fixed cast.
> > > 
> > > I also base that question on the you referred to this patch from our bugtracker at Ericsson, which was about conversions from `long __fixed` to `long __fixed`. So I kind of expected to find `(SrcType->isFixedPointType() && DestType->isFixedPointType())` here (similar to the checks above that avoids warning when SrcType equals the DestType).
> > > 
> > > The test case I expected (related to our downstream bug report) would look like this:
> > > 
> > > ```
> > > _Fract ff1(void);
> > > 
> > > void
> > > foo(void)
> > > {
> > >   (_Fract)ff1();  // No warning expected.
> > > }
> > > ```
> > > 
> > I improve the commit message detail. Please read and let me know if the intent is still not clear. 
> I'm afraid you didn't update the summary in phabricator? (I've never managed to do that using arcanist myself, after having updated the commit msg locally I usually need to update the description in phabricator using the web ui).
> Is this really the intention with the patch?
> 
> It does match the "summary" above, but isn't the warning well deserved for int->fixed cast.
> 
> I also base that question on the you referred to this patch from our bugtracker at Ericsson, which was about conversions from `long __fixed` to `long __fixed`. So I kind of expected to find `(SrcType->isFixedPointType() && DestType->isFixedPointType())` here (similar to the checks above that avoids warning when SrcType equals the DestType).
> 
> The test case I expected (related to our downstream bug report) would look like this:
> 
> ```
> _Fract ff1(void);
> 
> void
> foo(void)
> {
>   (_Fract)ff1();  // No warning expected.
> }
> ```
> 




================
Comment at: clang/lib/Sema/SemaCast.cpp:2660
     return;
+  if (SrcType->isIntegerType() && DestType->isFixedPointType())
+    return;
----------------
bjope wrote:
> bjope wrote:
> > vabridgers wrote:
> > > bjope wrote:
> > > > Is this really the intention with the patch?
> > > > 
> > > > It does match the "summary" above, but isn't the warning well deserved for int->fixed cast.
> > > > 
> > > > I also base that question on the you referred to this patch from our bugtracker at Ericsson, which was about conversions from `long __fixed` to `long __fixed`. So I kind of expected to find `(SrcType->isFixedPointType() && DestType->isFixedPointType())` here (similar to the checks above that avoids warning when SrcType equals the DestType).
> > > > 
> > > > The test case I expected (related to our downstream bug report) would look like this:
> > > > 
> > > > ```
> > > > _Fract ff1(void);
> > > > 
> > > > void
> > > > foo(void)
> > > > {
> > > >   (_Fract)ff1();  // No warning expected.
> > > > }
> > > > ```
> > > > 
> > > I improve the commit message detail. Please read and let me know if the intent is still not clear. 
> > I'm afraid you didn't update the summary in phabricator? (I've never managed to do that using arcanist myself, after having updated the commit msg locally I usually need to update the description in phabricator using the web ui).
> > Is this really the intention with the patch?
> > 
> > It does match the "summary" above, but isn't the warning well deserved for int->fixed cast.
> > 
> > I also base that question on the you referred to this patch from our bugtracker at Ericsson, which was about conversions from `long __fixed` to `long __fixed`. So I kind of expected to find `(SrcType->isFixedPointType() && DestType->isFixedPointType())` here (similar to the checks above that avoids warning when SrcType equals the DestType).
> > 
> > The test case I expected (related to our downstream bug report) would look like this:
> > 
> > ```
> > _Fract ff1(void);
> > 
> > void
> > foo(void)
> > {
> >   (_Fract)ff1();  // No warning expected.
> > }
> > ```
> > 
> 
> 
> Is this really the intention with the patch?
> 
> It does match the "summary" above, but isn't the warning well deserved for int->fixed cast.
> 
> I also base that question on the you referred to this patch from our bugtracker at Ericsson, which was about conversions from `long __fixed` to `long __fixed`. So I kind of expected to find `(SrcType->isFixedPointType() && DestType->isFixedPointType())` here (similar to the checks above that avoids warning when SrcType equals the DestType).
> 
> The test case I expected (related to our downstream bug report) would look like this:
> 
> ```
> _Fract ff1(void);
> 
> void
> foo(void)
> {
>   (_Fract)ff1();  // No warning expected.
> }
> ```
> 




================
Comment at: clang/test/Sema/warn-bad-function-cast.c:49
+#ifdef FIXED_POINT
+  (void)(_Fract) if1(); // no warning
+#endif
----------------
vabridgers wrote:
> bjope wrote:
> > bjope wrote:
> > > bjope wrote:
> > > > This should be added before the line saying `/* All following casts issue warning */`.
> > > Is the `(void)` needed/relevant here?
> > As questioned earlier, shouldn't we expect a warning for this scenario?
> > 
> > There is however a problem that we get the warning for _Fract to _Fract conversion. And it would be nice with a more complete set of tests involving both FixedPoint->FixedPoint, FixedPoint->Integer and Integer->FixedPoint casts.
> If you have any *specific* suggestions for test cases, I'm open to that.
Add:

```
_Fract ff1(void);
```

And inside foo add these three tests (you'll need to add appropriate expects):
```
(_Fract)ff1();  // No warning expected.
(_Fract)if1();  // Warning expected.
(int)ff1();  // Warning expected.
```


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D85157/new/

https://reviews.llvm.org/D85157



More information about the cfe-commits mailing list