[llvm-rc] Add support for the RCDATA resource type

This is the same as any other user defined resource, but with
a specific allocated resource type number.

Differential Revision: https://reviews.llvm.org/D46636

llvm-svn: 331902
diff --git a/llvm/test/tools/llvm-rc/Inputs/tag-user.rc b/llvm/test/tools/llvm-rc/Inputs/tag-user.rc
index 7043cca..163748d 100644
--- a/llvm/test/tools/llvm-rc/Inputs/tag-user.rc
+++ b/llvm/test/tools/llvm-rc/Inputs/tag-user.rc
@@ -1,6 +1,9 @@
 500 500 {
   1, 2, 3, 4, 5, "data", L"wide data", 0xABCD, 0xABCDEF01L
 }
+501 RCDATA {
+  1, 2, 3, 4, 5, "data", L"wide data", 0xABCD, 0xABCDEF01L
+}
 
 NAME1 NAME2 {}
 
diff --git a/llvm/test/tools/llvm-rc/tag-user.test b/llvm/test/tools/llvm-rc/tag-user.test
index 89fdc4f..c0c1cfd 100644
--- a/llvm/test/tools/llvm-rc/tag-user.test
+++ b/llvm/test/tools/llvm-rc/tag-user.test
@@ -20,6 +20,21 @@
 ; CHECK-NEXT:   0020: CDAB01EF CDAB                        |......|
 ; CHECK-NEXT: )
 
+; CHECK-DAG:  Resource type (int): 10
+; CHECK-NEXT: Resource name (int): 501
+; CHECK-NEXT: Data version: 0
+; CHECK-NEXT: Memory flags: 0x30
+; CHECK-NEXT: Language ID: 1033
+; CHECK-NEXT: Version (major): 0
+; CHECK-NEXT: Version (minor): 0
+; CHECK-NEXT: Characteristics: 0
+; CHECK-NEXT: Data size: 38
+; CHECK-NEXT: Data: (
+; CHECK-NEXT:   0000: 01000200 03000400 05006461 74617700  |..........dataw.|
+; CHECK-NEXT:   0010: 69006400 65002000 64006100 74006100  |i.d.e. .d.a.t.a.|
+; CHECK-NEXT:   0020: CDAB01EF CDAB                        |......|
+; CHECK-NEXT: )
+
 ; CHECK-DAG:  Resource type (string): NAME2
 ; CHECK-NEXT: Resource name (string): NAME1
 ; CHECK-NEXT: Data version: 0
diff --git a/llvm/tools/llvm-rc/ResourceScriptParser.cpp b/llvm/tools/llvm-rc/ResourceScriptParser.cpp
index 0319563..dbdb221 100644
--- a/llvm/tools/llvm-rc/ResourceScriptParser.cpp
+++ b/llvm/tools/llvm-rc/ResourceScriptParser.cpp
@@ -80,6 +80,8 @@
     Result = parseIconResource();
   else if (TypeToken->equalsLower("MENU"))
     Result = parseMenuResource();
+  else if (TypeToken->equalsLower("RCDATA"))
+    Result = parseUserDefinedResource(RkRcData);
   else if (TypeToken->equalsLower("VERSIONINFO"))
     Result = parseVersionInfoResource();
   else
diff --git a/llvm/tools/llvm-rc/ResourceScriptStmt.h b/llvm/tools/llvm-rc/ResourceScriptStmt.h
index 82f7d11..22a569c 100644
--- a/llvm/tools/llvm-rc/ResourceScriptStmt.h
+++ b/llvm/tools/llvm-rc/ResourceScriptStmt.h
@@ -127,6 +127,7 @@
   RkDialog = 5,
   RkStringTableBundle = 6,
   RkAccelerators = 9,
+  RkRcData = 10,
   RkCursorGroup = 12,
   RkIconGroup = 14,
   RkVersionInfo = 16,