craig.topper created this revision. craig.topper added reviewers: aaron.ballman, erichkeane. Herald added a project: All. craig.topper requested review of this revision. Herald added a project: clang.
It appears that ICK_Zero_Queue_Conversion was inserted into the ICK enum without updating this table. Easy to do since the table size was set to ICK_Num_Conversion_Kinds. I've used ICR_Exact_Match to match what was previously done for ICK_Zero_Event_Conversion that last time someone noticed this had happened. To prevent this from happening again, I've removed the explicit size and used a static_assert to check the size against ICK_Num_Conversion_Kinds. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D144990 Files: clang/lib/Sema/SemaOverload.cpp Index: clang/lib/Sema/SemaOverload.cpp =================================================================== --- clang/lib/Sema/SemaOverload.cpp +++ clang/lib/Sema/SemaOverload.cpp @@ -120,7 +120,7 @@ /// corresponding to the given implicit conversion kind. ImplicitConversionRank clang::GetConversionRank(ImplicitConversionKind Kind) { static const ImplicitConversionRank - Rank[(int)ICK_Num_Conversion_Kinds] = { + Rank[] = { ICR_Exact_Match, ICR_Exact_Match, ICR_Exact_Match, @@ -149,16 +149,20 @@ ICR_Exact_Match, // NOTE(gbiv): This may not be completely right -- // it was omitted by the patch that added // ICK_Zero_Event_Conversion + ICR_Exact_Match, // NOTE(ctopper): This may not be completely right -- + // it was omitted by the patch that added + // ICK_Zero_Queue_Conversion ICR_C_Conversion, ICR_C_Conversion_Extension }; + static_assert(std::size(Rank) == (int)ICK_Num_Conversion_Kinds); return Rank[(int)Kind]; } /// GetImplicitConversionName - Return the name of this kind of /// implicit conversion. static const char* GetImplicitConversionName(ImplicitConversionKind Kind) { - static const char* const Name[(int)ICK_Num_Conversion_Kinds] = { + static const char* const Name[] = { "No conversion", "Lvalue-to-rvalue", "Array-to-pointer", @@ -185,9 +189,11 @@ "Transparent Union Conversion", "Writeback conversion", "OpenCL Zero Event Conversion", + "OpenCL Zero Queue Conversion", "C specific type conversion", "Incompatible pointer conversion" }; + static_assert(std::size(Name) == (int)ICK_Num_Conversion_Kinds); return Name[Kind]; }
Index: clang/lib/Sema/SemaOverload.cpp =================================================================== --- clang/lib/Sema/SemaOverload.cpp +++ clang/lib/Sema/SemaOverload.cpp @@ -120,7 +120,7 @@ /// corresponding to the given implicit conversion kind. ImplicitConversionRank clang::GetConversionRank(ImplicitConversionKind Kind) { static const ImplicitConversionRank - Rank[(int)ICK_Num_Conversion_Kinds] = { + Rank[] = { ICR_Exact_Match, ICR_Exact_Match, ICR_Exact_Match, @@ -149,16 +149,20 @@ ICR_Exact_Match, // NOTE(gbiv): This may not be completely right -- // it was omitted by the patch that added // ICK_Zero_Event_Conversion + ICR_Exact_Match, // NOTE(ctopper): This may not be completely right -- + // it was omitted by the patch that added + // ICK_Zero_Queue_Conversion ICR_C_Conversion, ICR_C_Conversion_Extension }; + static_assert(std::size(Rank) == (int)ICK_Num_Conversion_Kinds); return Rank[(int)Kind]; } /// GetImplicitConversionName - Return the name of this kind of /// implicit conversion. static const char* GetImplicitConversionName(ImplicitConversionKind Kind) { - static const char* const Name[(int)ICK_Num_Conversion_Kinds] = { + static const char* const Name[] = { "No conversion", "Lvalue-to-rvalue", "Array-to-pointer", @@ -185,9 +189,11 @@ "Transparent Union Conversion", "Writeback conversion", "OpenCL Zero Event Conversion", + "OpenCL Zero Queue Conversion", "C specific type conversion", "Incompatible pointer conversion" }; + static_assert(std::size(Name) == (int)ICK_Num_Conversion_Kinds); return Name[Kind]; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits