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

Side by Side Diff: unittest/IceParseInstsTest.cpp

Issue 1173353003: Unittest fixes. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Optional runTest() ParseError parameter. Created 5 years, 6 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
« no previous file with comments | « unittest/BitcodeMunge.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- unittest/IceParseInstsTest.cpp - test instruction errors -----------===// 1 //===- unittest/IceParseInstsTest.cpp - test instruction errors -----------===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 9
10 #include <string>
11
10 #include "llvm/ADT/STLExtras.h" 12 #include "llvm/ADT/STLExtras.h"
11 #include "llvm/Bitcode/NaCl/NaClBitcodeParser.h" 13 #include "llvm/Bitcode/NaCl/NaClBitcodeParser.h"
12 #include "llvm/Bitcode/NaCl/NaClLLVMBitCodes.h" 14 #include "llvm/Bitcode/NaCl/NaClLLVMBitCodes.h"
13 15
14 #include "BitcodeMunge.h" 16 #include "BitcodeMunge.h"
15 #include "unittests/Bitcode/NaClMungeTest.h" 17 #include "unittests/Bitcode/NaClMungeTest.h"
16 18
17 using namespace llvm; 19 using namespace llvm;
18 using namespace naclmungetest; 20 using namespace naclmungetest;
19 21
20 namespace { 22 namespace {
21 23
24 // The ParseError constant is passed to the BitcodeMunger to prevent translation
25 // when we expect a Parse error.
26 constexpr bool ParseError = true;
27
22 // Note: alignment stored as 0 or log2(Alignment)+1. 28 // Note: alignment stored as 0 or log2(Alignment)+1.
23 uint64_t getEncAlignPower(unsigned Power) { 29 uint64_t getEncAlignPower(unsigned Power) {
24 return Power + 1; 30 return Power + 1;
25 } 31 }
26 uint64_t getEncAlignZero() { return 0; } 32 uint64_t getEncAlignZero() { return 0; }
27 33
28 /// Test how we report a call arg that refers to nonexistent call argument 34 /// Test how we report a call arg that refers to nonexistent call argument
29 TEST(IceParseInstsTest, NonexistentCallArg) { 35 TEST(IceParseInstsTest, NonexistentCallArg) {
30 const uint64_t BitcodeRecords[] = { 36 const uint64_t BitcodeRecords[] = {
31 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator, 37 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator,
(...skipping 17 matching lines...) Expand all
49 // Show bitcode objdump for BitcodeRecords. 55 // Show bitcode objdump for BitcodeRecords.
50 NaClObjDumpMunger DumpMunger(ARRAY_TERM(BitcodeRecords)); 56 NaClObjDumpMunger DumpMunger(ARRAY_TERM(BitcodeRecords));
51 EXPECT_FALSE(DumpMunger.runTest()); 57 EXPECT_FALSE(DumpMunger.runTest());
52 EXPECT_EQ(" 66:4| 3: <34, 0, 4, 2, 100> | call void @f0(i32 " 58 EXPECT_EQ(" 66:4| 3: <34, 0, 4, 2, 100> | call void @f0(i32 "
53 "%p0, i32 @f0);\n" 59 "%p0, i32 @f0);\n"
54 "Error(66:4): Invalid relative value id: 100 (Must be <= 4)\n", 60 "Error(66:4): Invalid relative value id: 100 (Must be <= 4)\n",
55 DumpMunger.getLinesWithSubstring("66:4")); 61 DumpMunger.getLinesWithSubstring("66:4"));
56 62
57 // Show that we get appropriate error when parsing in Subzero. 63 // Show that we get appropriate error when parsing in Subzero.
58 IceTest::SubzeroBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords)); 64 IceTest::SubzeroBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords));
59 EXPECT_FALSE(Munger.runTest()); 65 EXPECT_FALSE(Munger.runTest(ParseError));
60 EXPECT_EQ("Error(66:4): Invalid function record: <34 0 4 2 100>\n", 66 EXPECT_EQ("Error(66:4): Invalid function record: <34 0 4 2 100>\n",
61 Munger.getTestResults()); 67 Munger.getTestResults());
62 68
63 // Show that we generate a fatal error when not allowing error recovery. 69 // Show that we generate a fatal error when not allowing error recovery.
64 Munger.Flags.setAllowErrorRecovery(false); 70 Munger.Flags.setAllowErrorRecovery(false);
65 EXPECT_DEATH(Munger.runTest(), ".*ERROR: Unable to continue.*"); 71 EXPECT_DEATH(Munger.runTest(ParseError), ".*ERROR: Unable to continue.*");
66 } 72 }
67 73
68 /// Test how we recognize alignments in alloca instructions. 74 /// Test how we recognize alignments in alloca instructions.
69 TEST(IceParseInstsTests, AllocaAlignment) { 75 TEST(IceParseInstsTests, AllocaAlignment) {
70 const uint64_t BitcodeRecords[] = { 76 const uint64_t BitcodeRecords[] = {
71 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator, 77 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator,
72 1, naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, 2, Terminator, 78 1, naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, 2, Terminator,
73 3, naclbitc::TYPE_CODE_NUMENTRY, 4, Terminator, 79 3, naclbitc::TYPE_CODE_NUMENTRY, 4, Terminator,
74 3, naclbitc::TYPE_CODE_INTEGER, 32, Terminator, 80 3, naclbitc::TYPE_CODE_INTEGER, 32, Terminator,
75 3, naclbitc::TYPE_CODE_VOID, Terminator, 81 3, naclbitc::TYPE_CODE_VOID, Terminator,
(...skipping 29 matching lines...) Expand all
105 EXPECT_TRUE(Munger.runTest(ARRAY(Align0))); 111 EXPECT_TRUE(Munger.runTest(ARRAY(Align0)));
106 EXPECT_TRUE(DumpMunger.runTestForAssembly(ARRAY(Align0))); 112 EXPECT_TRUE(DumpMunger.runTestForAssembly(ARRAY(Align0)));
107 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 0;\n", 113 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 0;\n",
108 DumpMunger.getLinesWithSubstring("alloca")); 114 DumpMunger.getLinesWithSubstring("alloca"));
109 115
110 // Show what happens when changing alignment to 2**30. 116 // Show what happens when changing alignment to 2**30.
111 const uint64_t Align30[] = { 117 const uint64_t Align30[] = {
112 ReplaceIndex, NaClMungedBitcode::Replace, 118 ReplaceIndex, NaClMungedBitcode::Replace,
113 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(30), Terminator, 119 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(30), Terminator,
114 }; 120 };
115 EXPECT_FALSE(Munger.runTest(ARRAY(Align30))); 121 EXPECT_FALSE(Munger.runTest(ARRAY(Align30), ParseError));
116 EXPECT_EQ("Error(62:4): Invalid function record: <19 1 31>\n", 122 EXPECT_EQ("Error(62:4): Invalid function record: <19 1 31>\n",
117 Munger.getTestResults()); 123 Munger.getTestResults());
118 124
119 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); 125 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30)));
120 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 0;\n", 126 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 0;\n",
121 DumpMunger.getLinesWithSubstring("alloca")); 127 DumpMunger.getLinesWithSubstring("alloca"));
122 EXPECT_EQ( 128 EXPECT_EQ(
123 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n", 129 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n",
124 DumpMunger.getLinesWithSubstring("Error")); 130 DumpMunger.getLinesWithSubstring("Error"));
125 131
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 "align 1;\n", 166 "align 1;\n",
161 DumpMunger.getLinesWithSubstring("58:4")); 167 DumpMunger.getLinesWithSubstring("58:4"));
162 IceTest::SubzeroBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords)); 168 IceTest::SubzeroBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords));
163 EXPECT_TRUE(Munger.runTest()); 169 EXPECT_TRUE(Munger.runTest());
164 170
165 // Show what happens when changing alignment to 0. 171 // Show what happens when changing alignment to 0.
166 const uint64_t Align0[] = { 172 const uint64_t Align0[] = {
167 ReplaceIndex, NaClMungedBitcode::Replace, 173 ReplaceIndex, NaClMungedBitcode::Replace,
168 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator, 174 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator,
169 }; 175 };
170 EXPECT_FALSE(Munger.runTest(ARRAY(Align0))); 176 EXPECT_FALSE(Munger.runTest(ARRAY(Align0), ParseError));
171 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 0 0>\n", 177 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 0 0>\n",
172 Munger.getTestResults()); 178 Munger.getTestResults());
173 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align0))); 179 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align0)));
174 EXPECT_EQ(" %v0 = load i32* %p0, align 0;\n" 180 EXPECT_EQ(" %v0 = load i32* %p0, align 0;\n"
175 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", 181 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n",
176 DumpMunger.getLinesWithSubstring("load")); 182 DumpMunger.getLinesWithSubstring("load"));
177 183
178 // Show what happens when changing alignment to 4. 184 // Show what happens when changing alignment to 4.
179 const uint64_t Align4[] = { 185 const uint64_t Align4[] = {
180 ReplaceIndex, NaClMungedBitcode::Replace, 186 ReplaceIndex, NaClMungedBitcode::Replace,
181 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator, 187 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator,
182 }; 188 };
183 EXPECT_FALSE(Munger.runTest(ARRAY(Align4))); 189 EXPECT_FALSE(Munger.runTest(ARRAY(Align4), ParseError));
184 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 3 0>\n", 190 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 3 0>\n",
185 Munger.getTestResults()); 191 Munger.getTestResults());
186 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align4))); 192 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align4)));
187 EXPECT_EQ(" %v0 = load i32* %p0, align 4;\n" 193 EXPECT_EQ(" %v0 = load i32* %p0, align 4;\n"
188 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", 194 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n",
189 DumpMunger.getLinesWithSubstring("load")); 195 DumpMunger.getLinesWithSubstring("load"));
190 196
191 // Show what happens when changing alignment to 2**29. 197 // Show what happens when changing alignment to 2**29.
192 const uint64_t Align29[] = { 198 const uint64_t Align29[] = {
193 ReplaceIndex, NaClMungedBitcode::Replace, 199 ReplaceIndex, NaClMungedBitcode::Replace,
194 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator, 200 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator,
195 }; 201 };
196 EXPECT_FALSE(Munger.runTest(ARRAY(Align29))); 202 EXPECT_FALSE(Munger.runTest(ARRAY(Align29), ParseError));
197 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 30 0>\n", 203 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 30 0>\n",
198 Munger.getTestResults()); 204 Munger.getTestResults());
199 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align29))); 205 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align29)));
200 EXPECT_EQ(" %v0 = load i32* %p0, align 536870912;\n" 206 EXPECT_EQ(" %v0 = load i32* %p0, align 536870912;\n"
201 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", 207 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n",
202 DumpMunger.getLinesWithSubstring("load")); 208 DumpMunger.getLinesWithSubstring("load"));
203 209
204 // Show what happens when changing alignment to 2**30. 210 // Show what happens when changing alignment to 2**30.
205 const uint64_t Align30[] = { 211 const uint64_t Align30[] = {
206 ReplaceIndex, NaClMungedBitcode::Replace, 212 ReplaceIndex, NaClMungedBitcode::Replace,
207 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator, 213 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator,
208 }; 214 };
209 EXPECT_FALSE(Munger.runTest(ARRAY(Align30))); 215 EXPECT_FALSE(Munger.runTest(ARRAY(Align30), ParseError));
210 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 31 0>\n", 216 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 31 0>\n",
211 Munger.getTestResults()); 217 Munger.getTestResults());
212 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); 218 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30)));
213 EXPECT_EQ(" %v0 = load i32* %p0, align 0;\n" 219 EXPECT_EQ(" %v0 = load i32* %p0, align 0;\n"
214 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", 220 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n",
215 DumpMunger.getLinesWithSubstring("load")); 221 DumpMunger.getLinesWithSubstring("load"));
216 } 222 }
217 223
218 // Test how we recognize alignments in load float instructions. 224 // Test how we recognize alignments in load float instructions.
219 TEST(IceParseInstsTests, LoadFloatAlignment) { 225 TEST(IceParseInstsTests, LoadFloatAlignment) {
(...skipping 22 matching lines...) Expand all
242 "%p0, align 1;\n", 248 "%p0, align 1;\n",
243 DumpMunger.getLinesWithSubstring("58:4")); 249 DumpMunger.getLinesWithSubstring("58:4"));
244 IceTest::SubzeroBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords)); 250 IceTest::SubzeroBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords));
245 EXPECT_TRUE(Munger.runTest()); 251 EXPECT_TRUE(Munger.runTest());
246 252
247 // Show what happens when changing alignment to 0. 253 // Show what happens when changing alignment to 0.
248 const uint64_t Align0[] = { 254 const uint64_t Align0[] = {
249 ReplaceIndex, NaClMungedBitcode::Replace, 255 ReplaceIndex, NaClMungedBitcode::Replace,
250 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator, 256 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator,
251 }; 257 };
252 EXPECT_FALSE(Munger.runTest(ARRAY(Align0))); 258 EXPECT_FALSE(Munger.runTest(ARRAY(Align0), ParseError));
253 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 0 0>\n", 259 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 0 0>\n",
254 Munger.getTestResults()); 260 Munger.getTestResults());
255 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align0))); 261 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align0)));
256 EXPECT_EQ( 262 EXPECT_EQ(
257 " %v0 = load float* %p0, align 0;\n" 263 " %v0 = load float* %p0, align 0;\n"
258 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", 264 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n",
259 DumpMunger.getLinesWithSubstring("load")); 265 DumpMunger.getLinesWithSubstring("load"));
260 266
261 // Show what happens when changing alignment to 4. 267 // Show what happens when changing alignment to 4.
262 const uint64_t Align4[] = { 268 const uint64_t Align4[] = {
263 ReplaceIndex, NaClMungedBitcode::Replace, 269 ReplaceIndex, NaClMungedBitcode::Replace,
264 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator, 270 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator,
265 }; 271 };
266 EXPECT_TRUE(Munger.runTest(ARRAY(Align4))); 272 EXPECT_TRUE(Munger.runTest(ARRAY(Align4)));
267 EXPECT_TRUE(DumpMunger.runTestForAssembly(ARRAY(Align4))); 273 EXPECT_TRUE(DumpMunger.runTestForAssembly(ARRAY(Align4)));
268 EXPECT_EQ(" %v0 = load float* %p0, align 4;\n", 274 EXPECT_EQ(" %v0 = load float* %p0, align 4;\n",
269 DumpMunger.getLinesWithSubstring("load")); 275 DumpMunger.getLinesWithSubstring("load"));
270 276
271 const uint64_t Align29[] = { 277 const uint64_t Align29[] = {
272 ReplaceIndex, NaClMungedBitcode::Replace, 278 ReplaceIndex, NaClMungedBitcode::Replace,
273 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator, 279 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator,
274 }; 280 };
275 EXPECT_FALSE(Munger.runTest(ARRAY(Align29))); 281 EXPECT_FALSE(Munger.runTest(ARRAY(Align29), ParseError));
276 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 30 0>\n", 282 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 30 0>\n",
277 Munger.getTestResults()); 283 Munger.getTestResults());
278 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align29))); 284 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align29)));
279 EXPECT_EQ( 285 EXPECT_EQ(
280 " %v0 = load float* %p0, align 536870912;\n" 286 " %v0 = load float* %p0, align 536870912;\n"
281 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", 287 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n",
282 DumpMunger.getLinesWithSubstring("load")); 288 DumpMunger.getLinesWithSubstring("load"));
283 289
284 // Show what happens when changing alignment to 2**30. 290 // Show what happens when changing alignment to 2**30.
285 const uint64_t Align30[] = { 291 const uint64_t Align30[] = {
286 ReplaceIndex, NaClMungedBitcode::Replace, 292 ReplaceIndex, NaClMungedBitcode::Replace,
287 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator, 293 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator,
288 }; 294 };
289 EXPECT_FALSE(Munger.runTest(ARRAY(Align30))); 295 EXPECT_FALSE(Munger.runTest(ARRAY(Align30), ParseError));
290 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 31 0>\n", 296 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 31 0>\n",
291 Munger.getTestResults()); 297 Munger.getTestResults());
292 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); 298 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30)));
293 EXPECT_EQ( 299 EXPECT_EQ(
294 " %v0 = load float* %p0, align 0;\n" 300 " %v0 = load float* %p0, align 0;\n"
295 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", 301 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n",
296 DumpMunger.getLinesWithSubstring("load")); 302 DumpMunger.getLinesWithSubstring("load"));
297 } 303 }
298 304
299 // Test how we recognize alignments in store instructions. 305 // Test how we recognize alignments in store instructions.
(...skipping 25 matching lines...) Expand all
325 DumpMunger.getLinesWithSubstring("62:4")); 331 DumpMunger.getLinesWithSubstring("62:4"));
326 IceTest::SubzeroBitcodeMunger Munger( 332 IceTest::SubzeroBitcodeMunger Munger(
327 BitcodeRecords, array_lengthof(BitcodeRecords), Terminator); 333 BitcodeRecords, array_lengthof(BitcodeRecords), Terminator);
328 EXPECT_TRUE(Munger.runTest()); 334 EXPECT_TRUE(Munger.runTest());
329 335
330 // Show what happens when changing alignment to 0. 336 // Show what happens when changing alignment to 0.
331 const uint64_t Align0[] = { 337 const uint64_t Align0[] = {
332 ReplaceIndex, NaClMungedBitcode::Replace, 338 ReplaceIndex, NaClMungedBitcode::Replace,
333 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignZero(), Terminator, 339 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignZero(), Terminator,
334 }; 340 };
335 EXPECT_FALSE(Munger.runTest(ARRAY(Align0))); 341 EXPECT_FALSE(Munger.runTest(ARRAY(Align0), ParseError));
336 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 0>\n", 342 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 0>\n",
337 Munger.getTestResults()); 343 Munger.getTestResults());
338 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align0))); 344 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align0)));
339 EXPECT_EQ( 345 EXPECT_EQ(
340 " store float %p1, float* %p0, align 0;\n" 346 " store float %p1, float* %p0, align 0;\n"
341 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", 347 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n",
342 DumpMunger.getLinesWithSubstring("store")); 348 DumpMunger.getLinesWithSubstring("store"));
343 349
344 // Show what happens when changing alignment to 4. 350 // Show what happens when changing alignment to 4.
345 const uint64_t Align4[] = { 351 const uint64_t Align4[] = {
346 ReplaceIndex, NaClMungedBitcode::Replace, 352 ReplaceIndex, NaClMungedBitcode::Replace,
347 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(2), Terminator, 353 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(2), Terminator,
348 }; 354 };
349 EXPECT_TRUE(Munger.runTest(ARRAY(Align4))); 355 EXPECT_TRUE(Munger.runTest(ARRAY(Align4)));
350 EXPECT_TRUE(DumpMunger.runTestForAssembly(ARRAY(Align4))); 356 EXPECT_TRUE(DumpMunger.runTestForAssembly(ARRAY(Align4)));
351 357
352 // Show what happens when changing alignment to 8. 358 // Show what happens when changing alignment to 8.
353 const uint64_t Align8[] = { 359 const uint64_t Align8[] = {
354 ReplaceIndex, NaClMungedBitcode::Replace, 360 ReplaceIndex, NaClMungedBitcode::Replace,
355 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(3), Terminator, 361 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(3), Terminator,
356 }; 362 };
357 EXPECT_FALSE(Munger.runTest(ARRAY(Align8))); 363 EXPECT_FALSE(Munger.runTest(ARRAY(Align8), ParseError));
358 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 4>\n", 364 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 4>\n",
359 Munger.getTestResults()); 365 Munger.getTestResults());
360 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align8))); 366 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align8)));
361 EXPECT_EQ( 367 EXPECT_EQ(
362 " store float %p1, float* %p0, align 8;\n" 368 " store float %p1, float* %p0, align 8;\n"
363 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", 369 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n",
364 DumpMunger.getLinesWithSubstring("store")); 370 DumpMunger.getLinesWithSubstring("store"));
365 371
366 // Show what happens when changing alignment to 2**29. 372 // Show what happens when changing alignment to 2**29.
367 const uint64_t Align29[] = { 373 const uint64_t Align29[] = {
368 ReplaceIndex, NaClMungedBitcode::Replace, 374 ReplaceIndex, NaClMungedBitcode::Replace,
369 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(29), Terminator, 375 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(29), Terminator,
370 }; 376 };
371 EXPECT_FALSE(Munger.runTest(ARRAY(Align29))); 377 EXPECT_FALSE(Munger.runTest(ARRAY(Align29), ParseError));
372 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 30>\n", 378 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 30>\n",
373 Munger.getTestResults()); 379 Munger.getTestResults());
374 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align29))); 380 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align29)));
375 EXPECT_EQ( 381 EXPECT_EQ(
376 " store float %p1, float* %p0, align 536870912;\n" 382 " store float %p1, float* %p0, align 536870912;\n"
377 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", 383 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n",
378 DumpMunger.getLinesWithSubstring("store")); 384 DumpMunger.getLinesWithSubstring("store"));
379 385
380 const uint64_t Align30[] = { 386 const uint64_t Align30[] = {
381 ReplaceIndex, NaClMungedBitcode::Replace, 387 ReplaceIndex, NaClMungedBitcode::Replace,
382 // Note: alignment stored as 0 or log2(Alignment)+1. 388 // Note: alignment stored as 0 or log2(Alignment)+1.
383 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(30), Terminator, 389 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(30), Terminator,
384 }; 390 };
385 EXPECT_FALSE(Munger.runTest(ARRAY(Align30))); 391 EXPECT_FALSE(Munger.runTest(ARRAY(Align30), ParseError));
386 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 31>\n", 392 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 31>\n",
387 Munger.getTestResults()); 393 Munger.getTestResults());
388 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); 394 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30)));
389 EXPECT_EQ( 395 EXPECT_EQ(
390 " store float %p1, float* %p0, align 0;\n" 396 " store float %p1, float* %p0, align 0;\n"
391 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", 397 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n",
392 DumpMunger.getLinesWithSubstring("store")); 398 DumpMunger.getLinesWithSubstring("store"));
393 } 399 }
394 400
395 } // end of anonymous namespace 401 } // end of anonymous namespace
OLDNEW
« no previous file with comments | « unittest/BitcodeMunge.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698