Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: unittests/Bitcode/NaClParseInstsTest.cpp

Issue 932953002: Fix the NaCl bitstream reader to report fatal errors. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Fix formatting. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 //===- llvm/unittest/Bitcode/NaClParseInstsTest.cpp ----------------------===// 1 //===- llvm/unittest/Bitcode/NaClParseInstsTest.cpp ----------------------===//
2 // Tests parser for PNaCl bitcode instructions. 2 // Tests parser for PNaCl bitcode instructions.
3 // 3 //
4 // The LLVM Compiler Infrastructure 4 // The LLVM Compiler Infrastructure
5 // 5 //
6 // This file is distributed under the University of Illinois Open Source 6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details. 7 // License. See LICENSE.TXT for details.
8 // 8 //
9 //===----------------------------------------------------------------------===// 9 //===----------------------------------------------------------------------===//
10 10
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 // Note: 100 is a bad value index in next line. 48 // Note: 100 is a bad value index in next line.
49 3, naclbitc::FUNC_CODE_INST_CALL, 0, 4, 2, 100, Terminator, 49 3, naclbitc::FUNC_CODE_INST_CALL, 0, 4, 2, 100, Terminator,
50 3, naclbitc::FUNC_CODE_INST_RET, Terminator, 50 3, naclbitc::FUNC_CODE_INST_RET, Terminator,
51 0, naclbitc::BLK_CODE_EXIT, Terminator, 51 0, naclbitc::BLK_CODE_EXIT, Terminator,
52 0, naclbitc::BLK_CODE_EXIT, Terminator 52 0, naclbitc::BLK_CODE_EXIT, Terminator
53 }; 53 };
54 54
55 // Show text of base input. 55 // Show text of base input.
56 NaClObjDumpMunger DumpMunger(BitcodeRecords, 56 NaClObjDumpMunger DumpMunger(BitcodeRecords,
57 array_lengthof(BitcodeRecords), Terminator); 57 array_lengthof(BitcodeRecords), Terminator);
58 EXPECT_FALSE(DumpMunger.runTestForAssembly("Nonexistant call arg")); 58 //EXPECT_FALSE(DumpMunger.runTestForAssembly("Nonexistant call arg"));
jvoung (off chromium) 2015/02/20 00:12:42 remove commented out version?
Karl 2015/02/20 21:41:17 Done.
59 EXPECT_FALSE(DumpMunger.runTest("Nonexistant call arg"));
59 EXPECT_EQ( 60 EXPECT_EQ(
60 "module { // BlockID = 8\n" 61 " 0:0|<65532, 80, 69, 88, 69, 1, 0,|Magic Number: 'PEXE' (80, 69, "
61 " types { // BlockID = 17\n" 62 "88, 69)\n"
62 " count 3;\n" 63 " | 8, 0, 17, 0, 4, 0, 2, 0, 0, |PNaCl Version: 2\n"
63 " @t0 = i32;\n" 64 " | 0> |\n"
64 " @t1 = void;\n" 65 " 16:0|1: <65535, 8, 2> |module { // BlockID = 8\n"
65 " @t2 = void (i32, i32);\n" 66 " 24:0| 1: <65535, 17, 2> | types { // BlockID = 17\n"
66 " }\n" 67 " 32:0| 3: <1, 3> | count 3;\n"
67 " declare external void @f0(i32, i32);\n" 68 " 34:4| 3: <7, 32> | @t0 = i32;\n"
68 " define external void @f1(i32, i32);\n" 69 " 37:6| 3: <2> | @t1 = void;\n"
69 " function void @f1(i32 %p0, i32 %p1) { // BlockID = 12\n" 70 " 39:4| 3: <21, 0, 1, 0, 0> | @t2 = void (i32, i32);\n"
70 " blocks 1;\n" 71 " 44:2| 0: <65534> | }\n"
71 " %b0:\n" 72 " 48:0| 3: <8, 2, 0, 1, 0> | declare external void @f0(i32"
72 " call void @f0(i32 %p0, i32 @f0);\n" 73 ", i32);\n"
74 " 52:6| 3: <8, 2, 0, 0, 0> | define external void @f1(i32,"
75 " i32);\n"
76 " 57:4| 1: <65535, 12, 2> | function void @f1(i32 %p0, "
77 "i32 %p1) {\n"
78 " | | // BlockID "
79 "= 12\n"
80 " 64:0| 3: <1, 1> | blocks 1;\n"
81 " | | %b0:\n"
82 " 66:4| 3: <34, 0, 4, 2, 100> | call void @f0(i32 %p0, i32"
83 " @f0);\n"
73 "Error(66:4): Invalid relative value id: 100 (Must be <= 4)\n" 84 "Error(66:4): Invalid relative value id: 100 (Must be <= 4)\n"
74 " ret void;\n" 85 " 72:6| 3: <10> | ret void;\n"
75 " }\n" 86 " 74:4| 0: <65534> | }\n"
76 "}\n", 87 " 76:0|0: <65534> |}\n",
77 DumpMunger.getTestResults()); 88 DumpMunger.getTestResults());
78 89
79 NaClParseBitcodeMunger Munger(BitcodeRecords, 90 NaClParseBitcodeMunger Munger(BitcodeRecords,
80 array_lengthof(BitcodeRecords), Terminator); 91 array_lengthof(BitcodeRecords), Terminator);
81 EXPECT_FALSE(Munger.runTest("Nonexistant call arg", true)); 92 EXPECT_FALSE(Munger.runTest("Nonexistant call arg", true));
82 EXPECT_EQ( 93 EXPECT_EQ(
83 "Error: (56:6) Invalid call argument: Index 1\n" 94 "Error: (72:6) Invalid call argument: Index 1\n"
84 "Error: Invalid value in record\n", 95 "Error: Invalid value in record\n",
85 Munger.getTestResults()); 96 Munger.getTestResults());
86 } 97 }
87 98
88 /// Test how we recognize alignments in alloca instructions. 99 /// Test how we recognize alignments in alloca instructions.
89 TEST(NaClParseInstsTests, BadAllocaAlignment) { 100 TEST(NaClParseInstsTests, BadAllocaAlignment) {
90 const uint64_t BitcodeRecords[] = { 101 const uint64_t BitcodeRecords[] = {
91 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator, 102 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator,
92 1, naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, 2, Terminator, 103 1, naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, 2, Terminator,
93 3, naclbitc::TYPE_CODE_NUMENTRY, 4, Terminator, 104 3, naclbitc::TYPE_CODE_NUMENTRY, 4, Terminator,
94 3, naclbitc::TYPE_CODE_INTEGER, 32, Terminator, 105 3, naclbitc::TYPE_CODE_INTEGER, 32, Terminator,
95 3, naclbitc::TYPE_CODE_VOID, Terminator, 106 3, naclbitc::TYPE_CODE_VOID, Terminator,
96 3, naclbitc::TYPE_CODE_FUNCTION, 0, 1, 0, Terminator, 107 3, naclbitc::TYPE_CODE_FUNCTION, 0, 1, 0, Terminator,
97 3, naclbitc::TYPE_CODE_INTEGER, 8, Terminator, 108 3, naclbitc::TYPE_CODE_INTEGER, 8, Terminator,
98 0, naclbitc::BLK_CODE_EXIT, Terminator, 109 0, naclbitc::BLK_CODE_EXIT, Terminator,
99 3, naclbitc::MODULE_CODE_FUNCTION, 2, 0, 0, 0, Terminator, 110 3, naclbitc::MODULE_CODE_FUNCTION, 2, 0, 0, 0, Terminator,
100 1, naclbitc::BLK_CODE_ENTER, naclbitc::FUNCTION_BLOCK_ID, 2, Terminator, 111 1, naclbitc::BLK_CODE_ENTER, naclbitc::FUNCTION_BLOCK_ID, 2, Terminator,
101 3, naclbitc::FUNC_CODE_DECLAREBLOCKS, 1, Terminator, 112 3, naclbitc::FUNC_CODE_DECLAREBLOCKS, 1, Terminator,
102 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(0), Terminator, 113 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(0), Terminator,
103 3, naclbitc::FUNC_CODE_INST_RET, Terminator, 114 3, naclbitc::FUNC_CODE_INST_RET, Terminator,
104 0, naclbitc::BLK_CODE_EXIT, Terminator, 115 0, naclbitc::BLK_CODE_EXIT, Terminator,
105 0, naclbitc::BLK_CODE_EXIT, Terminator 116 0, naclbitc::BLK_CODE_EXIT, Terminator
106 }; 117 };
107 118
108 const uint64_t ReplaceIndex = 11; // index for FUNC_CODE_INST_ALLOCA 119 const uint64_t ReplaceIndex = 11; // index for FUNC_CODE_INST_ALLOCA
109 120
110 // Show text when alignment is 1. 121 // Show text when alignment is 1.
111 NaClObjDumpMunger DumpMunger(BitcodeRecords, 122 NaClObjDumpMunger DumpMunger(BitcodeRecords,
112 array_lengthof(BitcodeRecords), Terminator); 123 array_lengthof(BitcodeRecords), Terminator);
113 EXPECT_TRUE(DumpMunger.runTestForAssembly("BadAllocaAlignment")); 124 EXPECT_TRUE(DumpMunger.runTest("BadAllocaAlignment"));
114 EXPECT_EQ( 125 EXPECT_EQ(
115 "module { // BlockID = 8\n" 126 " 0:0|<65532, 80, 69, 88, 69, 1, 0,|Magic Number: 'PEXE' (80, 69, "
116 " types { // BlockID = 17\n" 127 "88, 69)\n"
117 " count 4;\n" 128 " | 8, 0, 17, 0, 4, 0, 2, 0, 0, |PNaCl Version: 2\n"
118 " @t0 = i32;\n" 129 " | 0> |\n"
119 " @t1 = void;\n" 130 " 16:0|1: <65535, 8, 2> |module { // BlockID = 8\n"
120 " @t2 = void (i32);\n" 131 " 24:0| 1: <65535, 17, 2> | types { // BlockID = 17\n"
121 " @t3 = i8;\n" 132 " 32:0| 3: <1, 4> | count 4;\n"
122 " }\n" 133 " 34:4| 3: <7, 32> | @t0 = i32;\n"
123 " define external void @f0(i32);\n" 134 " 37:6| 3: <2> | @t1 = void;\n"
124 " function void @f0(i32 %p0) { // BlockID = 12\n" 135 " 39:4| 3: <21, 0, 1, 0> | @t2 = void (i32);\n"
125 " blocks 1;\n" 136 " 43:4| 3: <7, 8> | @t3 = i8;\n"
126 " %b0:\n" 137 " 46:0| 0: <65534> | }\n"
127 " %v0 = alloca i8, i32 %p0, align 1;\n" 138 " 48:0| 3: <8, 2, 0, 0, 0> | define external void @f0(i32"
128 " ret void;\n" 139 ");\n"
129 " }\n" 140 " 52:6| 1: <65535, 12, 2> | function void @f0(i32 %p0) {"
130 "}\n", 141 " \n"
142 " | | // BlockID "
143 "= 12\n"
144 " 60:0| 3: <1, 1> | blocks 1;\n"
145 " | | %b0:\n"
146 " 62:4| 3: <19, 1, 1> | %v0 = alloca i8, i32 %p0, "
147 "align 1;\n"
148 " 65:6| 3: <10> | ret void;\n"
149 " 67:4| 0: <65534> | }\n"
150 " 68:0|0: <65534> |}\n",
131 DumpMunger.getTestResults()); 151 DumpMunger.getTestResults());
132 NaClParseBitcodeMunger Munger(BitcodeRecords, 152 NaClParseBitcodeMunger Munger(BitcodeRecords,
133 array_lengthof(BitcodeRecords), Terminator); 153 array_lengthof(BitcodeRecords), Terminator);
134 EXPECT_TRUE(Munger.runTest("BadAllocaAlignment", true)); 154 EXPECT_TRUE(Munger.runTest("BadAllocaAlignment", true));
135 155
136 // Show what happens when changing alignment to 0. 156 // Show what happens when changing alignment to 0.
137 const uint64_t Align0[] = { 157 const uint64_t Align0[] = {
138 ReplaceIndex, NaClBitcodeMunger::Replace, 158 ReplaceIndex, NaClBitcodeMunger::Replace,
139 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignZero(), Terminator, 159 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignZero(), Terminator,
140 }; 160 };
141 EXPECT_TRUE(Munger.runTest( 161 EXPECT_TRUE(Munger.runTest(
142 "BadAllocaAlignment-0", Align0, array_lengthof(Align0), true)); 162 "BadAllocaAlignment-0", Align0, array_lengthof(Align0), true));
143 EXPECT_TRUE(DumpMunger.runTestForAssembly( 163 EXPECT_TRUE(DumpMunger.runTestForAssembly(
144 "BadAllocaAlignment-0", Align0, array_lengthof(Align0))); 164 "BadAllocaAlignment-0", Align0, array_lengthof(Align0)));
145 EXPECT_EQ( 165 EXPECT_EQ(
146 " %v0 = alloca i8, i32 %p0, align 0;\n", 166 " %v0 = alloca i8, i32 %p0, align 0;\n",
147 DumpMunger.getLinesWithSubstring("alloca")); 167 DumpMunger.getLinesWithSubstring("alloca"));
148 168
149 // Show what happens when changing alignment to 2**30. 169 // Show what happens when changing alignment to 2**30.
150 const uint64_t Align30[] = { 170 const uint64_t Align30[] = {
151 ReplaceIndex, NaClBitcodeMunger::Replace, 171 ReplaceIndex, NaClBitcodeMunger::Replace,
152 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(30), Terminator, 172 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(30), Terminator,
153 }; 173 };
154 EXPECT_FALSE(Munger.runTest( 174 EXPECT_FALSE(Munger.runTest(
155 "BadAllocaAlignment-30", Align30, array_lengthof(Align30), true)); 175 "BadAllocaAlignment-30", Align30, array_lengthof(Align30), true));
156 EXPECT_EQ( 176 EXPECT_EQ(
157 "Error: (49:6) Alignment can't be greater than 2**29. Found: 2**30\n" 177 "Error: (65:6) Alignment can't be greater than 2**29. Found: 2**30\n"
158 "Error: Invalid value in record\n", 178 "Error: Invalid value in record\n",
159 Munger.getTestResults()); 179 Munger.getTestResults());
160 EXPECT_FALSE(DumpMunger.runTestForAssembly( 180 EXPECT_FALSE(DumpMunger.runTestForAssembly(
161 "BadAllocaAlignment-30", Align30, array_lengthof(Align30))); 181 "BadAllocaAlignment-30", Align30, array_lengthof(Align30)));
162 EXPECT_EQ( 182 EXPECT_EQ(
163 " %v0 = alloca i8, i32 %p0, align 0;\n", 183 " %v0 = alloca i8, i32 %p0, align 0;\n",
164 DumpMunger.getLinesWithSubstring("alloca")); 184 DumpMunger.getLinesWithSubstring("alloca"));
165 EXPECT_EQ( 185 EXPECT_EQ(
166 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n", 186 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n",
167 DumpMunger.getLinesWithSubstring("Error")); 187 DumpMunger.getLinesWithSubstring("Error"));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 3, naclbitc::FUNC_CODE_INST_RET, 1, Terminator, 219 3, naclbitc::FUNC_CODE_INST_RET, 1, Terminator,
200 0, naclbitc::BLK_CODE_EXIT, Terminator, 220 0, naclbitc::BLK_CODE_EXIT, Terminator,
201 0, naclbitc::BLK_CODE_EXIT, Terminator 221 0, naclbitc::BLK_CODE_EXIT, Terminator
202 }; 222 };
203 223
204 const uint64_t ReplaceIndex = 9; // index for FUNC_CODE_INST_LOAD 224 const uint64_t ReplaceIndex = 9; // index for FUNC_CODE_INST_LOAD
205 225
206 // Show text when alignment is 1. 226 // Show text when alignment is 1.
207 NaClObjDumpMunger DumpMunger(BitcodeRecords, 227 NaClObjDumpMunger DumpMunger(BitcodeRecords,
208 array_lengthof(BitcodeRecords), Terminator); 228 array_lengthof(BitcodeRecords), Terminator);
209 EXPECT_TRUE(DumpMunger.runTestForAssembly("BadLoadAlignment-1")); 229 EXPECT_TRUE(DumpMunger.runTest("BadLoadAlignment-1"));
210 EXPECT_EQ( 230 EXPECT_EQ(
211 "module { // BlockID = 8\n" 231 " 0:0|<65532, 80, 69, 88, 69, 1, 0,|Magic Number: 'PEXE' (80, 69, "
212 " types { // BlockID = 17\n" 232 "88, 69)\n"
213 " count 2;\n" 233 " | 8, 0, 17, 0, 4, 0, 2, 0, 0, |PNaCl Version: 2\n"
214 " @t0 = i32;\n" 234 " | 0> |\n"
215 " @t1 = i32 (i32);\n" 235 " 16:0|1: <65535, 8, 2> |module { // BlockID = 8\n"
216 " }\n" 236 " 24:0| 1: <65535, 17, 2> | types { // BlockID = 17\n"
217 " define external i32 @f0(i32);\n" 237 " 32:0| 3: <1, 2> | count 2;\n"
218 " function i32 @f0(i32 %p0) { // BlockID = 12\n" 238 " 34:4| 3: <7, 32> | @t0 = i32;\n"
219 " blocks 1;\n" 239 " 37:6| 3: <21, 0, 0, 0> | @t1 = i32 (i32);\n"
220 " %b0:\n" 240 " 41:6| 0: <65534> | }\n"
221 " %v0 = load i32* %p0, align 1;\n" 241 " 44:0| 3: <8, 1, 0, 0, 0> | define external i32 @f0(i32"
222 " ret i32 %v0;\n" 242 ");\n"
223 " }\n" 243 " 48:6| 1: <65535, 12, 2> | function i32 @f0(i32 %p0) {"
224 "}\n", 244 " \n"
245 " | | // BlockID "
246 "= 12\n"
247 " 56:0| 3: <1, 1> | blocks 1;\n"
248 " | | %b0:\n"
249 " 58:4| 3: <20, 1, 1, 0> | %v0 = load i32* %p0, "
250 "align 1;\n"
251 " 62:4| 3: <10, 1> | ret i32 %v0;\n"
252 " 65:0| 0: <65534> | }\n"
253 " 68:0|0: <65534> |}\n",
225 DumpMunger.getTestResults()); 254 DumpMunger.getTestResults());
226 NaClParseBitcodeMunger Munger(BitcodeRecords, 255 NaClParseBitcodeMunger Munger(BitcodeRecords,
227 array_lengthof(BitcodeRecords), Terminator); 256 array_lengthof(BitcodeRecords), Terminator);
228 EXPECT_TRUE(Munger.runTest("BadLoadAlignment", true)); 257 EXPECT_TRUE(Munger.runTest("BadLoadAlignment", true));
229 258
230 // Show what happens when changing alignment to 0. 259 // Show what happens when changing alignment to 0.
231 const uint64_t Align0[] = { 260 const uint64_t Align0[] = {
232 ReplaceIndex, NaClBitcodeMunger::Replace, 261 ReplaceIndex, NaClBitcodeMunger::Replace,
233 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator, 262 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator,
234 }; 263 };
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 DumpMunger.getLinesWithSubstring("load")); 303 DumpMunger.getLinesWithSubstring("load"));
275 304
276 // Show what happens when changing alignment to 2**30. 305 // Show what happens when changing alignment to 2**30.
277 const uint64_t Align30[] = { 306 const uint64_t Align30[] = {
278 ReplaceIndex, NaClBitcodeMunger::Replace, 307 ReplaceIndex, NaClBitcodeMunger::Replace,
279 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator, 308 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator,
280 }; 309 };
281 EXPECT_FALSE(Munger.runTest( 310 EXPECT_FALSE(Munger.runTest(
282 "BadLoadAlignment-30", Align30, array_lengthof(Align30), true)); 311 "BadLoadAlignment-30", Align30, array_lengthof(Align30), true));
283 EXPECT_EQ( 312 EXPECT_EQ(
284 "Error: (46:4) Alignment can't be greater than 2**29. Found: 2**30\n" 313 "Error: (62:4) Alignment can't be greater than 2**29. Found: 2**30\n"
285 "Error: Invalid value in record\n", 314 "Error: Invalid value in record\n",
286 Munger.getTestResults()); 315 Munger.getTestResults());
287 EXPECT_FALSE(DumpMunger.runTestForAssembly( 316 EXPECT_FALSE(DumpMunger.runTestForAssembly(
288 "BadLoadAlignment-30", Align30, array_lengthof(Align30))); 317 "BadLoadAlignment-30", Align30, array_lengthof(Align30)));
289 EXPECT_EQ( 318 EXPECT_EQ(
290 " %v0 = load i32* %p0, align 0;\n" 319 " %v0 = load i32* %p0, align 0;\n"
291 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", 320 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n",
292 DumpMunger.getLinesWithSubstring("load")); 321 DumpMunger.getLinesWithSubstring("load"));
293 } 322 }
294 323
(...skipping 14 matching lines...) Expand all
309 3, naclbitc::FUNC_CODE_INST_RET, 1, Terminator, 338 3, naclbitc::FUNC_CODE_INST_RET, 1, Terminator,
310 0, naclbitc::BLK_CODE_EXIT, Terminator, 339 0, naclbitc::BLK_CODE_EXIT, Terminator,
311 0, naclbitc::BLK_CODE_EXIT, Terminator 340 0, naclbitc::BLK_CODE_EXIT, Terminator
312 }; 341 };
313 342
314 const uint64_t ReplaceIndex = 10; // index for FUNC_CODE_INST_STORE 343 const uint64_t ReplaceIndex = 10; // index for FUNC_CODE_INST_STORE
315 344
316 // Show text when alignment is 1. 345 // Show text when alignment is 1.
317 NaClObjDumpMunger DumpMunger(BitcodeRecords, 346 NaClObjDumpMunger DumpMunger(BitcodeRecords,
318 array_lengthof(BitcodeRecords), Terminator); 347 array_lengthof(BitcodeRecords), Terminator);
319 EXPECT_TRUE(DumpMunger.runTestForAssembly("BadStoreAlignment")); 348 EXPECT_TRUE(DumpMunger.runTest("BadStoreAlignment"));
320 EXPECT_EQ( 349 EXPECT_EQ(
321 "module { // BlockID = 8\n" 350 " 0:0|<65532, 80, 69, 88, 69, 1, 0,|Magic Number: 'PEXE' (80, 69, "
322 " types { // BlockID = 17\n" 351 "88, 69)\n"
323 " count 3;\n" 352 " | 8, 0, 17, 0, 4, 0, 2, 0, 0, |PNaCl Version: 2\n"
324 " @t0 = float;\n" 353 " | 0> |\n"
325 " @t1 = i32;\n" 354 " 16:0|1: <65535, 8, 2> |module { // BlockID = 8\n"
326 " @t2 = float (i32, float);\n" 355 " 24:0| 1: <65535, 17, 2> | types { // BlockID = 17\n"
327 " }\n" 356 " 32:0| 3: <1, 3> | count 3;\n"
328 " define external float @f0(i32, float);\n" 357 " 34:4| 3: <3> | @t0 = float;\n"
329 " function float @f0(i32 %p0, float %p1) { // BlockID = 12\n" 358 " 36:2| 3: <7, 32> | @t1 = i32;\n"
330 " blocks 1;\n" 359 " 39:4| 3: <21, 0, 0, 1, 0> | @t2 = float (i32, float);\n"
331 " %b0:\n" 360 " 44:2| 0: <65534> | }\n"
332 " store float %p1, float* %p0, align 1;\n" 361 " 48:0| 3: <8, 2, 0, 0, 0> | define external \n"
333 " ret float %p1;\n" 362 " | | float @f0(i32, float);\n"
334 " }\n" 363 " 52:6| 1: <65535, 12, 2> | function \n"
335 "}\n", 364 " | | float @f0(i32 %p0, float "
365 "%p1) { \n"
366 " | | // BlockID "
367 "= 12\n"
368 " 60:0| 3: <1, 1> | blocks 1;\n"
369 " | | %b0:\n"
370 " 62:4| 3: <24, 2, 1, 1> | store float %p1, float* "
371 "%p0, \n"
372 " | | align 1;\n"
373 " 66:4| 3: <10, 1> | ret float %p1;\n"
374 " 69:0| 0: <65534> | }\n"
375 " 72:0|0: <65534> |}\n",
336 DumpMunger.getTestResults()); 376 DumpMunger.getTestResults());
337 NaClParseBitcodeMunger Munger(BitcodeRecords, 377 NaClParseBitcodeMunger Munger(BitcodeRecords,
338 array_lengthof(BitcodeRecords), Terminator); 378 array_lengthof(BitcodeRecords), Terminator);
339 EXPECT_TRUE(Munger.runTest("BadStoreAlignment", true)); 379 EXPECT_TRUE(Munger.runTest("BadStoreAlignment", true));
340 380
341 // Show what happens when changing alignment to 0. 381 // Show what happens when changing alignment to 0.
342 const uint64_t Align0[] = { 382 const uint64_t Align0[] = {
343 ReplaceIndex, NaClBitcodeMunger::Replace, 383 ReplaceIndex, NaClBitcodeMunger::Replace,
344 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignZero(), Terminator, 384 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignZero(), Terminator,
345 }; 385 };
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 DumpMunger.getLinesWithSubstring("store")); 435 DumpMunger.getLinesWithSubstring("store"));
396 436
397 // Show what happens when changing alignment to 2**30. 437 // Show what happens when changing alignment to 2**30.
398 const uint64_t Align30[] = { 438 const uint64_t Align30[] = {
399 ReplaceIndex, NaClBitcodeMunger::Replace, 439 ReplaceIndex, NaClBitcodeMunger::Replace,
400 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(30), Terminator, 440 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(30), Terminator,
401 }; 441 };
402 EXPECT_FALSE(Munger.runTest( 442 EXPECT_FALSE(Munger.runTest(
403 "BadStoreAlignment-30", Align30, array_lengthof(Align30), true)); 443 "BadStoreAlignment-30", Align30, array_lengthof(Align30), true));
404 EXPECT_EQ( 444 EXPECT_EQ(
405 "Error: (50:4) Alignment can't be greater than 2**29. Found: 2**30\n" 445 "Error: (66:4) Alignment can't be greater than 2**29. Found: 2**30\n"
406 "Error: Invalid value in record\n", 446 "Error: Invalid value in record\n",
407 Munger.getTestResults()); 447 Munger.getTestResults());
408 EXPECT_FALSE(DumpMunger.runTestForAssembly( 448 EXPECT_FALSE(DumpMunger.runTestForAssembly(
409 "BadStoreAlignment-30", Align30, array_lengthof(Align30))); 449 "BadStoreAlignment-30", Align30, array_lengthof(Align30)));
410 EXPECT_EQ( 450 EXPECT_EQ(
411 " store float %p1, float* %p0, align 0;\n" 451 " store float %p1, float* %p0, align 0;\n"
412 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", 452 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n",
413 DumpMunger.getLinesWithSubstring("store")); 453 DumpMunger.getLinesWithSubstring("store"));
414 } 454 }
415 455
416 } // end of anonamous namespace. 456 } // end of anonamous namespace.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698