Skip to content

Commit 77347d6

Browse files
authored
[llvm-rc] Allow ALT on non-virtkey accelerators (#143374)
While https://learn.microsoft.com/en-us/windows/win32/menurc/accelerators-resource specifies that ALT only applies to virtkeys, this doesn't seem to be the case in reality. https://learn.microsoft.com/en-us/windows/win32/menurc/using-keyboard-accelerators contains an example that uses this combination: "B", ID_ACCEL5, ALT ; ALT_SHIFT+B Also Microsoft also includes such cases in their repo of test cases: https://github.com/microsoft/Windows-classic-samples/blob/263dd514ad215d0a40d1ec44b4df84b30ec11dcf/Samples/Win7Samples/begin/sdkdiff/sdkdiff.rc#L161-L164 Also MS rc.exe doesn't warn/error about this. However if applying SHIFT or CONTROL on a non-virtkey accelerator, MS rc.exe does produce this warning: warning RC4203 : SHIFT or CONTROL used without VIRTKEY Hence, keep the checks for SHIFT and CONTROL, but remove the checks for ALT, which seems to have been incorrect. This fixes one aspect of #143157.
1 parent 0c3a772 commit 77347d6

File tree

4 files changed

+8
-16
lines changed

4 files changed

+8
-16
lines changed

llvm/test/tools/llvm-rc/Inputs/tag-accelerators-ascii-alt.rc

Lines changed: 0 additions & 4 deletions
This file was deleted.

llvm/test/tools/llvm-rc/Inputs/tag-accelerators.rc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,5 +110,6 @@ LANGUAGE 5, 1
110110
"7", 71, VIRTKEY, NOINVERT, CONTROL, SHIFT, ALT
111111
"^j", 72, ASCII
112112
"^j", 73, ASCII, NOINVERT
113+
"A", 15, ASCII, ALT
113114
}
114115

llvm/test/tools/llvm-rc/tag-accelerators.test

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
; ACCELERATORS-NEXT: Version (major): 0
3838
; ACCELERATORS-NEXT: Version (minor): 0
3939
; ACCELERATORS-NEXT: Characteristics: 0
40-
; ACCELERATORS-NEXT: Data size: 592
40+
; ACCELERATORS-NEXT: Data size: 600
4141
; ACCELERATORS-NEXT: Data: (
4242
; ACCELERATORS-NEXT: 0000: 00002A00 00000000 01002A00 01000000 |..*.......*.....|
4343
; ACCELERATORS-NEXT: 0010: 02002A00 02000000 03002A00 03000000 |..*.......*.....|
@@ -75,7 +75,8 @@
7575
; ACCELERATORS-NEXT: 0210: 15003700 42000000 0F003700 43000000 |..7.B.....7.C...|
7676
; ACCELERATORS-NEXT: 0220: 1B003700 44000000 17003700 45000000 |..7.D.....7.E...|
7777
; ACCELERATORS-NEXT: 0230: 1D003700 46000000 1F003700 47000000 |..7.F.....7.G...|
78-
; ACCELERATORS-NEXT: 0240: 00000A00 48000000 82000A00 49000000 |....H.......I...|
78+
; ACCELERATORS-NEXT: 0240: 00000A00 48000000 02000A00 49000000 |....H.......I...|
79+
; ACCELERATORS-NEXT: 0250: 90004100 0F000000 |..A.....|
7980
; ACCELERATORS-NEXT: )
8081

8182

@@ -94,19 +95,13 @@
9495
; RUN: not llvm-rc -no-preprocess /FO %t -- %p/Inputs/tag-accelerators-ascii-control.rc 2>&1 | FileCheck %s --check-prefix ASCII2
9596

9697
; ASCII2: llvm-rc: Error in ACCELERATORS statement (ID 2):
97-
; ASCII2-NEXT: Accelerator ID 15: Can only apply ALT, SHIFT or CONTROL to VIRTKEY accelerators
98+
; ASCII2-NEXT: Accelerator ID 15: Can only apply SHIFT or CONTROL to VIRTKEY accelerators
9899

99100

100101
; RUN: not llvm-rc -no-preprocess /FO %t -- %p/Inputs/tag-accelerators-ascii-shift.rc 2>&1 | FileCheck %s --check-prefix ASCII3
101102

102103
; ASCII3: llvm-rc: Error in ACCELERATORS statement (ID 2):
103-
; ASCII3-NEXT: Accelerator ID 15: Can only apply ALT, SHIFT or CONTROL to VIRTKEY accelerators
104-
105-
106-
; RUN: not llvm-rc -no-preprocess /FO %t -- %p/Inputs/tag-accelerators-ascii-alt.rc 2>&1 | FileCheck %s --check-prefix ASCII4
107-
108-
; ASCII4: llvm-rc: Error in ACCELERATORS statement (ID 2):
109-
; ASCII4-NEXT: Accelerator ID 15: Can only apply ALT, SHIFT or CONTROL to VIRTKEY accelerators
104+
; ASCII3-NEXT: Accelerator ID 15: Can only apply SHIFT or CONTROL to VIRTKEY accelerators
110105

111106

112107
; RUN: not llvm-rc -no-preprocess /FO %t -- %p/Inputs/tag-accelerators-bad-key-id.rc 2>&1 | FileCheck %s --check-prefix BADKEYID

llvm/tools/llvm-rc/ResourceFileWriter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -631,8 +631,8 @@ Error ResourceFileWriter::writeSingleAccelerator(
631631
if (IsASCII && IsVirtKey)
632632
return createAccError("Accelerator can't be both ASCII and VIRTKEY");
633633

634-
if (!IsVirtKey && (Obj.Flags & (Opt::ALT | Opt::SHIFT | Opt::CONTROL)))
635-
return createAccError("Can only apply ALT, SHIFT or CONTROL to VIRTKEY"
634+
if (!IsVirtKey && (Obj.Flags & (Opt::SHIFT | Opt::CONTROL)))
635+
return createAccError("Can only apply SHIFT or CONTROL to VIRTKEY"
636636
" accelerators");
637637

638638
if (Obj.Event.isInt()) {

0 commit comments

Comments
 (0)