diff --git a/llvm/test/tools/llvm-rc/Inputs/tag-menu.rc b/llvm/test/tools/llvm-rc/Inputs/tag-menu.rc --- a/llvm/test/tools/llvm-rc/Inputs/tag-menu.rc +++ b/llvm/test/tools/llvm-rc/Inputs/tag-menu.rc @@ -54,7 +54,7 @@ MENUITEM "a&bcde", 2 MENUITEM "ab&cde", 3 MENUITEM "abc&de", 4 - MENUITEM "abcd&e", 5 + MENUITEM "abcd&e", -1 } END diff --git a/llvm/test/tools/llvm-rc/tag-menu.test b/llvm/test/tools/llvm-rc/tag-menu.test --- a/llvm/test/tools/llvm-rc/tag-menu.test +++ b/llvm/test/tools/llvm-rc/tag-menu.test @@ -69,7 +69,7 @@ ; MENU-NEXT: 0060: 61002600 62006300 64006500 00000000 |a.&.b.c.d.e.....| ; MENU-NEXT: 0070: 03006100 62002600 63006400 65000000 |..a.b.&.c.d.e...| ; MENU-NEXT: 0080: 00000400 61006200 63002600 64006500 |....a.b.c.&.d.e.| -; MENU-NEXT: 0090: 00008000 05006100 62006300 64002600 |......a.b.c.d.&.| +; MENU-NEXT: 0090: 00008000 FFFF6100 62006300 64002600 |......a.b.c.d.&.| ; MENU-NEXT: 00A0: 65000000 |e...| ; MENU-NEXT: ) diff --git a/llvm/tools/llvm-rc/ResourceFileWriter.cpp b/llvm/tools/llvm-rc/ResourceFileWriter.cpp --- a/llvm/tools/llvm-rc/ResourceFileWriter.cpp +++ b/llvm/tools/llvm-rc/ResourceFileWriter.cpp @@ -1180,8 +1180,10 @@ if (auto *MenuItemPtr = dyn_cast(DefPtr)) { writeInt(Flags); - RETURN_IF_ERROR( - checkNumberFits(MenuItemPtr->Id, "MENUITEM action ID")); + // Some resource files use -1, i.e. UINT32_MAX, for empty menu items. + if (MenuItemPtr->Id != static_cast(-1)) + RETURN_IF_ERROR( + checkNumberFits(MenuItemPtr->Id, "MENUITEM action ID")); writeInt(MenuItemPtr->Id); RETURN_IF_ERROR(writeCString(MenuItemPtr->Name)); return Error::success();