Chromium Code Reviews| 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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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. |
| OLD | NEW |