OLD | NEW |
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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 "Error(66:4): Invalid relative value id: 100 (Must be <= 4)\n" | 83 "Error(66:4): Invalid relative value id: 100 (Must be <= 4)\n" |
84 " 72:6| 3: <10> | ret void;\n" | 84 " 72:6| 3: <10> | ret void;\n" |
85 " 74:4| 0: <65534> | }\n" | 85 " 74:4| 0: <65534> | }\n" |
86 " 76:0|0: <65534> |}\n", | 86 " 76:0|0: <65534> |}\n", |
87 DumpMunger.getTestResults()); | 87 DumpMunger.getTestResults()); |
88 | 88 |
89 NaClParseBitcodeMunger Munger(BitcodeRecords, | 89 NaClParseBitcodeMunger Munger(BitcodeRecords, |
90 array_lengthof(BitcodeRecords), Terminator); | 90 array_lengthof(BitcodeRecords), Terminator); |
91 EXPECT_FALSE(Munger.runTest("Nonexistant call arg", true)); | 91 EXPECT_FALSE(Munger.runTest("Nonexistant call arg", true)); |
92 EXPECT_EQ( | 92 EXPECT_EQ( |
93 "Error: (72:6) Invalid call argument: Index 1\n" | 93 "Error(72:6): Invalid call argument: Index 1\n" |
94 "Error: Invalid value in record\n", | 94 "Error: Invalid value in record\n", |
95 Munger.getTestResults()); | 95 Munger.getTestResults()); |
96 } | 96 } |
97 | 97 |
98 /// Test how we recognize alignments in alloca instructions. | 98 /// Test how we recognize alignments in alloca instructions. |
99 TEST(NaClParseInstsTests, BadAllocaAlignment) { | 99 TEST(NaClParseInstsTests, BadAllocaAlignment) { |
100 const uint64_t BitcodeRecords[] = { | 100 const uint64_t BitcodeRecords[] = { |
101 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator, | 101 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator, |
102 1, naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, 2, Terminator, | 102 1, naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, 2, Terminator, |
103 3, naclbitc::TYPE_CODE_NUMENTRY, 4, Terminator, | 103 3, naclbitc::TYPE_CODE_NUMENTRY, 4, Terminator, |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 DumpMunger.getLinesWithSubstring("alloca")); | 166 DumpMunger.getLinesWithSubstring("alloca")); |
167 | 167 |
168 // Show what happens when changing alignment to 2**30. | 168 // Show what happens when changing alignment to 2**30. |
169 const uint64_t Align30[] = { | 169 const uint64_t Align30[] = { |
170 ReplaceIndex, NaClBitcodeMunger::Replace, | 170 ReplaceIndex, NaClBitcodeMunger::Replace, |
171 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(30), Terminator, | 171 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(30), Terminator, |
172 }; | 172 }; |
173 EXPECT_FALSE(Munger.runTest( | 173 EXPECT_FALSE(Munger.runTest( |
174 "BadAllocaAlignment-30", Align30, array_lengthof(Align30), true)); | 174 "BadAllocaAlignment-30", Align30, array_lengthof(Align30), true)); |
175 EXPECT_EQ( | 175 EXPECT_EQ( |
176 "Error: (65:6) Alignment can't be greater than 2**29. Found: 2**30\n" | 176 "Error(65:6): Alignment can't be greater than 2**29. Found: 2**30\n" |
177 "Error: Invalid value in record\n", | 177 "Error: Invalid value in record\n", |
178 Munger.getTestResults()); | 178 Munger.getTestResults()); |
179 EXPECT_FALSE(DumpMunger.runTestForAssembly( | 179 EXPECT_FALSE(DumpMunger.runTestForAssembly( |
180 "BadAllocaAlignment-30", Align30, array_lengthof(Align30))); | 180 "BadAllocaAlignment-30", Align30, array_lengthof(Align30))); |
181 EXPECT_EQ( | 181 EXPECT_EQ( |
182 " %v0 = alloca i8, i32 %p0, align 0;\n", | 182 " %v0 = alloca i8, i32 %p0, align 0;\n", |
183 DumpMunger.getLinesWithSubstring("alloca")); | 183 DumpMunger.getLinesWithSubstring("alloca")); |
184 EXPECT_EQ( | 184 EXPECT_EQ( |
185 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n", | 185 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n", |
186 DumpMunger.getLinesWithSubstring("Error")); | 186 DumpMunger.getLinesWithSubstring("Error")); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 DumpMunger.getLinesWithSubstring("load")); | 302 DumpMunger.getLinesWithSubstring("load")); |
303 | 303 |
304 // Show what happens when changing alignment to 2**30. | 304 // Show what happens when changing alignment to 2**30. |
305 const uint64_t Align30[] = { | 305 const uint64_t Align30[] = { |
306 ReplaceIndex, NaClBitcodeMunger::Replace, | 306 ReplaceIndex, NaClBitcodeMunger::Replace, |
307 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator, | 307 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator, |
308 }; | 308 }; |
309 EXPECT_FALSE(Munger.runTest( | 309 EXPECT_FALSE(Munger.runTest( |
310 "BadLoadAlignment-30", Align30, array_lengthof(Align30), true)); | 310 "BadLoadAlignment-30", Align30, array_lengthof(Align30), true)); |
311 EXPECT_EQ( | 311 EXPECT_EQ( |
312 "Error: (62:4) Alignment can't be greater than 2**29. Found: 2**30\n" | 312 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n" |
313 "Error: Invalid value in record\n", | 313 "Error: Invalid value in record\n", |
314 Munger.getTestResults()); | 314 Munger.getTestResults()); |
315 EXPECT_FALSE(DumpMunger.runTestForAssembly( | 315 EXPECT_FALSE(DumpMunger.runTestForAssembly( |
316 "BadLoadAlignment-30", Align30, array_lengthof(Align30))); | 316 "BadLoadAlignment-30", Align30, array_lengthof(Align30))); |
317 EXPECT_EQ( | 317 EXPECT_EQ( |
318 " %v0 = load i32* %p0, align 0;\n" | 318 " %v0 = load i32* %p0, align 0;\n" |
319 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", | 319 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", |
320 DumpMunger.getLinesWithSubstring("load")); | 320 DumpMunger.getLinesWithSubstring("load")); |
321 } | 321 } |
322 | 322 |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
434 DumpMunger.getLinesWithSubstring("store")); | 434 DumpMunger.getLinesWithSubstring("store")); |
435 | 435 |
436 // Show what happens when changing alignment to 2**30. | 436 // Show what happens when changing alignment to 2**30. |
437 const uint64_t Align30[] = { | 437 const uint64_t Align30[] = { |
438 ReplaceIndex, NaClBitcodeMunger::Replace, | 438 ReplaceIndex, NaClBitcodeMunger::Replace, |
439 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(30), Terminator, | 439 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(30), Terminator, |
440 }; | 440 }; |
441 EXPECT_FALSE(Munger.runTest( | 441 EXPECT_FALSE(Munger.runTest( |
442 "BadStoreAlignment-30", Align30, array_lengthof(Align30), true)); | 442 "BadStoreAlignment-30", Align30, array_lengthof(Align30), true)); |
443 EXPECT_EQ( | 443 EXPECT_EQ( |
444 "Error: (66:4) Alignment can't be greater than 2**29. Found: 2**30\n" | 444 "Error(66:4): Alignment can't be greater than 2**29. Found: 2**30\n" |
445 "Error: Invalid value in record\n", | 445 "Error: Invalid value in record\n", |
446 Munger.getTestResults()); | 446 Munger.getTestResults()); |
447 EXPECT_FALSE(DumpMunger.runTestForAssembly( | 447 EXPECT_FALSE(DumpMunger.runTestForAssembly( |
448 "BadStoreAlignment-30", Align30, array_lengthof(Align30))); | 448 "BadStoreAlignment-30", Align30, array_lengthof(Align30))); |
449 EXPECT_EQ( | 449 EXPECT_EQ( |
450 " store float %p1, float* %p0, align 0;\n" | 450 " store float %p1, float* %p0, align 0;\n" |
451 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", | 451 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", |
452 DumpMunger.getLinesWithSubstring("store")); | 452 DumpMunger.getLinesWithSubstring("store")); |
453 } | 453 } |
454 | 454 |
455 } // end of anonamous namespace. | 455 } // end of anonamous namespace. |
OLD | NEW |