rsmith added inline comments.
================ Comment at: lib/Sema/SemaOverload.cpp:3850-3853 // In Microsoft mode, prefer an integral conversion to a // floating-to-integral conversion if the integral conversion // is between types of the same size. // For example: ---------------- This should probably go after all the standard orderings. ================ Comment at: lib/Sema/SemaOverload.cpp:3872 + // promoted underlying type, if the two are different. + if (S.getLangOpts().CPlusPlus11 && + (SCS1.getToType(1).getTypePtr() != SCS2.getToType(1).getTypePtr())) { ---------------- I don't think it makes sense to condition this on C++11 mode: we support fixed underlying types for enums in C++98 as an extension, and they should get this behavior too. ================ Comment at: lib/Sema/SemaOverload.cpp:3874-3879 + bool S1ConvResult = isEnumConversionToUnderlyingType(S.Context, SCS1); + bool S2ConvResult = isEnumConversionToUnderlyingType(S.Context, SCS2); + if (S1ConvResult && !S2ConvResult) + return ImplicitConversionSequence::Better; + else if (!S1ConvResult && S2ConvResult) + return ImplicitConversionSequence::Worse; ---------------- This does not check that the "other" conversion converts to the promoted underlying type. It looks like this would (incorrectly) also order a case like: ``` enum A : char { a }; void f(char); void f(const char&); void g() { f(a); } ``` https://reviews.llvm.org/D32251 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits