bjope added inline comments.

================
Comment at: clang-tidy/utils/ExceptionAnalyzer.h:112
+    /// throw, if it's unknown or if it won't throw.
+    enum State Behaviour : 2;
+
----------------
JonasToth wrote:
> bjope wrote:
> > (post-commit comments)
> > 
> > I've seen that @dyung did some VS2015 fixes related to this in 
> > https://reviews.llvm.org/rCTE354545.
> > 
> > But I think there also is some history of problems with typed enums used in 
> > bitfields with GCC (I'm not sure about the details, but it might be 
> > discussed here https://reviews.llvm.org/D24289, and there have been 
> > workarounds applied before, for example here 
> > https://reviews.llvm.org/rCTE319608).
> > 
> > I do not know if we actually have a goal to workaround such problems (no 
> > warnings when using GCC), nor do I know if GCC produce correct code despite 
> > all the warnings we see with GCC (7.4.0) after this patch, such as
> > 
> > ```
> > ../tools/clang/tools/extra/clang-tidy/bugprone/../utils/ExceptionAnalyzer.h:112:23:
> >  warning: 'clang::tidy::utils::ExceptionAnalyzer::ExceptionInfo::Behaviour' 
> > is too small to hold all values of 'enum class 
> > clang::tidy::utils::ExceptionAnalyzer::State'
> >       State Behaviour : 2;
> >                         ^
> > ../tools/clang/tools/extra/clang-tidy/bugprone/../utils/ExceptionAnalyzer.h:112:23:
> >  warning: 'clang::tidy::utils::ExceptionAnalyzer::ExceptionInfo::Behaviour' 
> > is too small to hold all values of 'enum class 
> > clang::tidy::utils::ExceptionAnalyzer::State'
> >      State Behaviour : 2;
> >                        ^
> > In file included from 
> > ../tools/clang/tools/extra/clang-tidy/utils/ExceptionAnalyzer.cpp:9:0:
> > ../tools/clang/tools/extra/clang-tidy/utils/ExceptionAnalyzer.h:112:23: 
> > warning: 'clang::tidy::utils::ExceptionAnalyzer::ExceptionInfo::Behaviour' 
> > is too small to hold all values of 'enum class 
> > clang::tidy::utils::ExceptionAnalyzer::State'
> >      State Behaviour : 2;
> >                        ^
> > ../tools/clang/tools/extra/clang-tidy/utils/ExceptionAnalyzer.cpp: In 
> > member function 'clang::tidy::utils::ExceptionAnalyzer::ExceptionInfo& 
> > clang::tidy::utils::ExceptionAnalyzer::ExceptionInfo::merge(const 
> > clang::tidy::utils::ExceptionAnalyzer::ExceptionInfo&)':
> > ../tools/clang/tools/extra/clang-tidy/utils/ExceptionAnalyzer.cpp:40:28: 
> > warning: comparison is always false due to limited range of data type 
> > [-Wtype-limits]
> >    else if (Other.Behaviour == State::Unknown && Behaviour == 
> > State::NotThrowing)
> >             ~~~~~~~~~~~~~~~~^~~~~~~~
> > ../tools/clang/tools/extra/clang-tidy/utils/ExceptionAnalyzer.cpp:41:24: 
> > warning: overflow in implicit constant conversion [-Woverflow]
> >      Behaviour = State::Unknown;
> >                         ^~~~~~~
> > ../tools/clang/tools/extra/clang-tidy/utils/ExceptionAnalyzer.cpp: In 
> > member function 'void 
> > clang::tidy::utils::ExceptionAnalyzer::ExceptionInfo::reevaluateBehaviour()':
> > ../tools/clang/tools/extra/clang-tidy/utils/ExceptionAnalyzer.cpp:105:26: 
> > warning: overflow in implicit constant conversion [-Woverflow]
> >        Behaviour = State::Unknown;
> >                           ^~~~~~~
> > ```
> > 
> > To sum up:
> > The warning are a little bit annoying (but maybe something we have to live 
> > with if this is known bugs in gcc).
> > It seems like we have done other workarounds in the past (writing ugly code 
> > to satisfy MSVC and GCC). So should we do that here as well?
> > Might wanna check if GCC produce correct code for this.
> I see. All i wanted to achieve was to make the object <= 64 bytes to fit in a 
> cacheline. IMHO the bitfields can disapear. I dont want to sacrifice the 
> `enum class` as I feel that gives more value then the (unmeasured) potential 
> performance gain from shrinking the object sizes.
> 
> I will commit to remove the bitfields. Details can be figured out later.
( regarding https://reviews.llvm.org/rGc1e8cbd5c3f0ed33ab4fb8df98645ebea0018fe8 
)

Pity if we have to sacrifice performance if these are false warnings from gcc. 
But I don't really have the details about that, so thanks for the fix!



Repository:
  rCTE Clang Tools Extra

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

https://reviews.llvm.org/D57883



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

Reply via email to