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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 " 66:4| 3: <34, 0, 4, 2, 100> | call void @f0(i32 %p0, i32" | 76 " 66:4| 3: <34, 0, 4, 2, 100> | call void @f0(i32 %p0, i32" |
77 " @f0);\n" | 77 " @f0);\n" |
78 "Error(66:4): Invalid relative value id: 100 (Must be <= 4)\n" | 78 "Error(66:4): Invalid relative value id: 100 (Must be <= 4)\n" |
79 " 72:6| 3: <10> | ret void;\n" | 79 " 72:6| 3: <10> | ret void;\n" |
80 " 74:4| 0: <65534> | }\n" | 80 " 74:4| 0: <65534> | }\n" |
81 " 76:0|0: <65534> |}\n", | 81 " 76:0|0: <65534> |}\n", |
82 DumpMunger.getTestResults()); | 82 DumpMunger.getTestResults()); |
83 | 83 |
84 NaClParseBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords)); | 84 NaClParseBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords)); |
85 EXPECT_FALSE(Munger.runTest(true)); | 85 EXPECT_FALSE(Munger.runTest(true)); |
86 EXPECT_EQ( | 86 EXPECT_EQ("Invalid call argument: Index 1\n" |
87 "Error(72:6): Invalid call argument: Index 1\n" | 87 "Corrupted bitcode\n", |
88 "Error: Invalid value in record\n", | 88 stripErrorPrefix(Munger.getTestResults())); |
89 Munger.getTestResults()); | |
90 } | 89 } |
91 | 90 |
92 /// Test how we recognize alignments in alloca instructions. | 91 /// Test how we recognize alignments in alloca instructions. |
93 TEST(NaClParseInstsTests, BadAllocaAlignment) { | 92 TEST(NaClParseInstsTests, BadAllocaAlignment) { |
94 const uint64_t BitcodeRecords[] = { | 93 const uint64_t BitcodeRecords[] = { |
95 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator, | 94 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator, |
96 1, naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, 2, Terminator, | 95 1, naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, 2, Terminator, |
97 3, naclbitc::TYPE_CODE_NUMENTRY, 4, Terminator, | 96 3, naclbitc::TYPE_CODE_NUMENTRY, 4, Terminator, |
98 3, naclbitc::TYPE_CODE_INTEGER, 32, Terminator, | 97 3, naclbitc::TYPE_CODE_INTEGER, 32, Terminator, |
99 3, naclbitc::TYPE_CODE_VOID, Terminator, | 98 3, naclbitc::TYPE_CODE_VOID, Terminator, |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 EXPECT_EQ( | 153 EXPECT_EQ( |
155 " %v0 = alloca i8, i32 %p0, align 0;\n", | 154 " %v0 = alloca i8, i32 %p0, align 0;\n", |
156 DumpMunger.getLinesWithSubstring("alloca")); | 155 DumpMunger.getLinesWithSubstring("alloca")); |
157 | 156 |
158 // Show what happens when changing alignment to 2**30. | 157 // Show what happens when changing alignment to 2**30. |
159 const uint64_t Align30[] = { | 158 const uint64_t Align30[] = { |
160 ReplaceIndex, NaClMungedBitcode::Replace, | 159 ReplaceIndex, NaClMungedBitcode::Replace, |
161 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(30), Terminator, | 160 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(30), Terminator, |
162 }; | 161 }; |
163 EXPECT_FALSE(Munger.runTest(ARRAY(Align30), true)); | 162 EXPECT_FALSE(Munger.runTest(ARRAY(Align30), true)); |
164 EXPECT_EQ( | 163 EXPECT_EQ("Alignment can't be greater than 2**29. Found: 2**30\n" |
165 "Error(65:6): Alignment can't be greater than 2**29. Found: 2**30\n" | 164 "Corrupted bitcode\n", |
166 "Error: Invalid value in record\n", | 165 stripErrorPrefix(Munger.getTestResults())); |
167 Munger.getTestResults()); | |
168 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); | 166 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); |
169 EXPECT_EQ( | 167 EXPECT_EQ( |
170 " %v0 = alloca i8, i32 %p0, align 0;\n", | 168 " %v0 = alloca i8, i32 %p0, align 0;\n", |
171 DumpMunger.getLinesWithSubstring("alloca")); | 169 DumpMunger.getLinesWithSubstring("alloca")); |
172 EXPECT_EQ( | 170 EXPECT_EQ( |
173 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n", | 171 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n", |
174 DumpMunger.getLinesWithSubstring("Error")); | 172 DumpMunger.getLinesWithSubstring("Error")); |
175 | 173 |
176 // Show what happens when changing alignment to 2**29. | 174 // Show what happens when changing alignment to 2**29. |
177 const uint64_t Align29[] = { | 175 const uint64_t Align29[] = { |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 " %v0 = load i32* %p0, align 536870912;\n" | 276 " %v0 = load i32* %p0, align 536870912;\n" |
279 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", | 277 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", |
280 DumpMunger.getLinesWithSubstring("load")); | 278 DumpMunger.getLinesWithSubstring("load")); |
281 | 279 |
282 // Show what happens when changing alignment to 2**30. | 280 // Show what happens when changing alignment to 2**30. |
283 const uint64_t Align30[] = { | 281 const uint64_t Align30[] = { |
284 ReplaceIndex, NaClMungedBitcode::Replace, | 282 ReplaceIndex, NaClMungedBitcode::Replace, |
285 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator, | 283 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator, |
286 }; | 284 }; |
287 EXPECT_FALSE(Munger.runTest(ARRAY(Align30), true)); | 285 EXPECT_FALSE(Munger.runTest(ARRAY(Align30), true)); |
288 EXPECT_EQ( | 286 EXPECT_EQ("Alignment can't be greater than 2**29. Found: 2**30\n" |
289 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n" | 287 "Corrupted bitcode\n", |
290 "Error: Invalid value in record\n", | 288 stripErrorPrefix(Munger.getTestResults())); |
291 Munger.getTestResults()); | |
292 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); | 289 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); |
293 EXPECT_EQ( | 290 EXPECT_EQ( |
294 " %v0 = load i32* %p0, align 0;\n" | 291 " %v0 = load i32* %p0, align 0;\n" |
295 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", | 292 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", |
296 DumpMunger.getLinesWithSubstring("load")); | 293 DumpMunger.getLinesWithSubstring("load")); |
297 } | 294 } |
298 | 295 |
299 // Test how we recognize alignments in store instructions. | 296 // Test how we recognize alignments in store instructions. |
300 TEST(NaClParseInstsTests, BadStoreAlignment) { | 297 TEST(NaClParseInstsTests, BadStoreAlignment) { |
301 const uint64_t BitcodeRecords[] = { | 298 const uint64_t BitcodeRecords[] = { |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 " store float %p1, float* %p0, align 536870912;\n" | 395 " store float %p1, float* %p0, align 536870912;\n" |
399 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", | 396 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", |
400 DumpMunger.getLinesWithSubstring("store")); | 397 DumpMunger.getLinesWithSubstring("store")); |
401 | 398 |
402 // Show what happens when changing alignment to 2**30. | 399 // Show what happens when changing alignment to 2**30. |
403 const uint64_t Align30[] = { | 400 const uint64_t Align30[] = { |
404 ReplaceIndex, NaClMungedBitcode::Replace, | 401 ReplaceIndex, NaClMungedBitcode::Replace, |
405 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(30), Terminator, | 402 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(30), Terminator, |
406 }; | 403 }; |
407 EXPECT_FALSE(Munger.runTest(ARRAY(Align30), true)); | 404 EXPECT_FALSE(Munger.runTest(ARRAY(Align30), true)); |
408 EXPECT_EQ( | 405 EXPECT_EQ("Alignment can't be greater than 2**29. Found: 2**30\n" |
409 "Error(66:4): Alignment can't be greater than 2**29. Found: 2**30\n" | 406 "Corrupted bitcode\n", |
410 "Error: Invalid value in record\n", | 407 stripErrorPrefix(Munger.getTestResults())); |
411 Munger.getTestResults()); | |
412 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); | 408 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); |
413 EXPECT_EQ( | 409 EXPECT_EQ( |
414 " store float %p1, float* %p0, align 0;\n" | 410 " store float %p1, float* %p0, align 0;\n" |
415 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", | 411 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", |
416 DumpMunger.getLinesWithSubstring("store")); | 412 DumpMunger.getLinesWithSubstring("store")); |
417 } | 413 } |
418 | 414 |
419 } // end of namespace naclmungetest | 415 } // end of namespace naclmungetest |
OLD | NEW |