carlosgalvezp added inline comments.

================
Comment at: clang-tools-extra/clang-tidy/bugprone/EnumToIntCheck.cpp:45
+  } else {
+    Note << FixItHint::CreateInsertion(MatchedExpr->getBeginLoc(), "(int)");
+  }
----------------
pfultz2 wrote:
> carlosgalvezp wrote:
> > I don't think we can assume the type of the enum is `int`, see for example:
> > 
> > ```
> > enum Foo : unsigned int
> > {
> >     a,
> >     b
> > };
> > 
> > 
> > void f(unsigned int);
> > 
> > int main()
> > {
> >     f(a);
> > }
> > 
> > ```
> > 
> > Even if there is no explicit underlying type, isn't the underlying type 
> > implementation-defined?
> Since its an explicit cast then we should probably use the type that the 
> function accepts(since thats what it will be eventually converted to)  rather 
> than the type of the underling enum type.
I'm not sure that's correct either, and it could lead to narrowing conversion 
warnings being ignored, see example:

https://godbolt.org/z/PfPxEYPrj

The correct thing to do would be to cast to the underlying type of the enum. A 
user could do it like this, although it's quite unreadable:

  static_cast<std::underlying_type_t<MyEnum>>(enum_value)

But since in this context we have a lot more information from the AST, maybe we 
can automatically figure out the underlying type of the enum without having to 
call `std::underlying_type`?




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

https://reviews.llvm.org/D129570

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

Reply via email to