comparison gen/statements.cpp @ 1650:40bd4a0d4870

Update to work with LLVM 2.7. Removed use of dyn_cast, llvm no compiles without exceptions and rtti by default. We do need exceptions for the libconfig stuff, but rtti isn't necessary (anymore). Debug info needs to be rewritten, as in LLVM 2.7 the format has completely changed. To have something to look at while rewriting, the old code has been wrapped inside #ifndef DISABLE_DEBUG_INFO , this means that you have to define this to compile at the moment. Updated tango 0.99.9 patch to include updated EH runtime code, which is needed for LLVM 2.7 as well.
author Tomas Lindquist Olsen
date Wed, 19 May 2010 12:42:32 +0200
parents 638a823ace45
children
comparison
equal deleted inserted replaced
1649:36da40ecbbe0 1650:40bd4a0d4870
51 void ReturnStatement::toIR(IRState* p) 51 void ReturnStatement::toIR(IRState* p)
52 { 52 {
53 Logger::println("ReturnStatement::toIR(): %s", loc.toChars()); 53 Logger::println("ReturnStatement::toIR(): %s", loc.toChars());
54 LOG_SCOPE; 54 LOG_SCOPE;
55 55
56 if (global.params.symdebug) 56 #ifndef DISABLE_DEBUG_INFO
57 DtoDwarfStopPoint(loc.linnum); 57 if (global.params.symdebug)
58 58 DtoDwarfStopPoint(loc.linnum);
59 #endif
60
59 // is there a return value expression? 61 // is there a return value expression?
60 if (exp || (!exp && (p->topfunc() == p->mainFunc)) ) 62 if (exp || (!exp && (p->topfunc() == p->mainFunc)) )
61 { 63 {
62 // if the functions return type is void this means that 64 // if the functions return type is void this means that
63 // we are returning through a pointer argument 65 // we are returning through a pointer argument
76 DtoAssign(loc, rvar, e); 78 DtoAssign(loc, rvar, e);
77 79
78 // emit scopes 80 // emit scopes
79 DtoEnclosingHandlers(loc, NULL); 81 DtoEnclosingHandlers(loc, NULL);
80 82
83 #ifndef DISABLE_DEBUG_INFO
81 // emit dbg end function 84 // emit dbg end function
82 if (global.params.symdebug) DtoDwarfFuncEnd(f->decl); 85 if (global.params.symdebug) DtoDwarfFuncEnd(f->decl);
86 #endif
83 87
84 // emit ret 88 // emit ret
85 llvm::ReturnInst::Create(gIR->context(), p->scopebb()); 89 llvm::ReturnInst::Create(gIR->context(), p->scopebb());
86 90
87 } 91 }
124 Logger::cout() << "return value after cast: " << *v << '\n'; 128 Logger::cout() << "return value after cast: " << *v << '\n';
125 } 129 }
126 130
127 DtoEnclosingHandlers(loc, NULL); 131 DtoEnclosingHandlers(loc, NULL);
128 132
133 #ifndef DISABLE_DEBUG_INFO
129 if (global.params.symdebug) DtoDwarfFuncEnd(p->func()->decl); 134 if (global.params.symdebug) DtoDwarfFuncEnd(p->func()->decl);
135 #endif
130 llvm::ReturnInst::Create(gIR->context(), v, p->scopebb()); 136 llvm::ReturnInst::Create(gIR->context(), v, p->scopebb());
131 } 137 }
132 } 138 }
133 // no return value expression means it's a void function 139 // no return value expression means it's a void function
134 else 140 else
135 { 141 {
136 assert(p->topfunc()->getReturnType() == LLType::getVoidTy(gIR->context())); 142 assert(p->topfunc()->getReturnType() == LLType::getVoidTy(gIR->context()));
137 DtoEnclosingHandlers(loc, NULL); 143 DtoEnclosingHandlers(loc, NULL);
138 144
145 #ifndef DISABLE_DEBUG_INFO
139 if (global.params.symdebug) DtoDwarfFuncEnd(p->func()->decl); 146 if (global.params.symdebug) DtoDwarfFuncEnd(p->func()->decl);
147 #endif
140 llvm::ReturnInst::Create(gIR->context(), p->scopebb()); 148 llvm::ReturnInst::Create(gIR->context(), p->scopebb());
141 } 149 }
142 150
143 // the return terminated this basicblock, start a new one 151 // the return terminated this basicblock, start a new one
144 llvm::BasicBlock* oldend = gIR->scopeend(); 152 llvm::BasicBlock* oldend = gIR->scopeend();
151 void ExpStatement::toIR(IRState* p) 159 void ExpStatement::toIR(IRState* p)
152 { 160 {
153 Logger::println("ExpStatement::toIR(): %s", loc.toChars()); 161 Logger::println("ExpStatement::toIR(): %s", loc.toChars());
154 LOG_SCOPE; 162 LOG_SCOPE;
155 163
156 if (global.params.symdebug) 164 #ifndef DISABLE_DEBUG_INFO
157 DtoDwarfStopPoint(loc.linnum); 165 if (global.params.symdebug)
166 DtoDwarfStopPoint(loc.linnum);
167 #endif
158 168
159 if (exp) { 169 if (exp) {
160 if (global.params.llvmAnnotate) 170 if (global.params.llvmAnnotate)
161 DtoAnnotation(exp->toChars()); 171 DtoAnnotation(exp->toChars());
162 elem* e; 172 elem* e;
180 void IfStatement::toIR(IRState* p) 190 void IfStatement::toIR(IRState* p)
181 { 191 {
182 Logger::println("IfStatement::toIR(): %s", loc.toChars()); 192 Logger::println("IfStatement::toIR(): %s", loc.toChars());
183 LOG_SCOPE; 193 LOG_SCOPE;
184 194
185 if (global.params.symdebug) 195 #ifndef DISABLE_DEBUG_INFO
186 DtoDwarfStopPoint(loc.linnum); 196 if (global.params.symdebug)
197 DtoDwarfStopPoint(loc.linnum);
198 #endif
187 199
188 if (match) 200 if (match)
189 DtoRawVarDeclaration(match); 201 DtoRawVarDeclaration(match);
190 202
191 DValue* cond_e = condition->toElem(p); 203 DValue* cond_e = condition->toElem(p);
268 void WhileStatement::toIR(IRState* p) 280 void WhileStatement::toIR(IRState* p)
269 { 281 {
270 Logger::println("WhileStatement::toIR(): %s", loc.toChars()); 282 Logger::println("WhileStatement::toIR(): %s", loc.toChars());
271 LOG_SCOPE; 283 LOG_SCOPE;
272 284
273 if (global.params.symdebug) 285 #ifndef DISABLE_DEBUG_INFO
274 DtoDwarfStopPoint(loc.linnum); 286 if (global.params.symdebug)
287 DtoDwarfStopPoint(loc.linnum);
288 #endif
275 289
276 // create while blocks 290 // create while blocks
277 llvm::BasicBlock* oldend = gIR->scopeend(); 291 llvm::BasicBlock* oldend = gIR->scopeend();
278 llvm::BasicBlock* whilebb = llvm::BasicBlock::Create(gIR->context(), "whilecond", gIR->topfunc(), oldend); 292 llvm::BasicBlock* whilebb = llvm::BasicBlock::Create(gIR->context(), "whilecond", gIR->topfunc(), oldend);
279 llvm::BasicBlock* whilebodybb = llvm::BasicBlock::Create(gIR->context(), "whilebody", gIR->topfunc(), oldend); 293 llvm::BasicBlock* whilebodybb = llvm::BasicBlock::Create(gIR->context(), "whilebody", gIR->topfunc(), oldend);
316 void DoStatement::toIR(IRState* p) 330 void DoStatement::toIR(IRState* p)
317 { 331 {
318 Logger::println("DoStatement::toIR(): %s", loc.toChars()); 332 Logger::println("DoStatement::toIR(): %s", loc.toChars());
319 LOG_SCOPE; 333 LOG_SCOPE;
320 334
321 if (global.params.symdebug) 335 #ifndef DISABLE_DEBUG_INFO
322 DtoDwarfStopPoint(loc.linnum); 336 if (global.params.symdebug)
337 DtoDwarfStopPoint(loc.linnum);
338 #endif
323 339
324 // create while blocks 340 // create while blocks
325 llvm::BasicBlock* oldend = gIR->scopeend(); 341 llvm::BasicBlock* oldend = gIR->scopeend();
326 llvm::BasicBlock* dowhilebb = llvm::BasicBlock::Create(gIR->context(), "dowhile", gIR->topfunc(), oldend); 342 llvm::BasicBlock* dowhilebb = llvm::BasicBlock::Create(gIR->context(), "dowhile", gIR->topfunc(), oldend);
327 llvm::BasicBlock* condbb = llvm::BasicBlock::Create(gIR->context(), "dowhilecond", gIR->topfunc(), oldend); 343 llvm::BasicBlock* condbb = llvm::BasicBlock::Create(gIR->context(), "dowhilecond", gIR->topfunc(), oldend);
361 void ForStatement::toIR(IRState* p) 377 void ForStatement::toIR(IRState* p)
362 { 378 {
363 Logger::println("ForStatement::toIR(): %s", loc.toChars()); 379 Logger::println("ForStatement::toIR(): %s", loc.toChars());
364 LOG_SCOPE; 380 LOG_SCOPE;
365 381
366 if (global.params.symdebug) 382 #ifndef DISABLE_DEBUG_INFO
367 DtoDwarfStopPoint(loc.linnum); 383 if (global.params.symdebug)
384 DtoDwarfStopPoint(loc.linnum);
385 #endif
368 386
369 // create for blocks 387 // create for blocks
370 llvm::BasicBlock* oldend = gIR->scopeend(); 388 llvm::BasicBlock* oldend = gIR->scopeend();
371 llvm::BasicBlock* forbb = llvm::BasicBlock::Create(gIR->context(), "forcond", gIR->topfunc(), oldend); 389 llvm::BasicBlock* forbb = llvm::BasicBlock::Create(gIR->context(), "forcond", gIR->topfunc(), oldend);
372 llvm::BasicBlock* forbodybb = llvm::BasicBlock::Create(gIR->context(), "forbody", gIR->topfunc(), oldend); 390 llvm::BasicBlock* forbodybb = llvm::BasicBlock::Create(gIR->context(), "forbody", gIR->topfunc(), oldend);
441 // don't emit two terminators in a row 459 // don't emit two terminators in a row
442 // happens just before DMD generated default statements if the last case terminates 460 // happens just before DMD generated default statements if the last case terminates
443 if (p->scopereturned()) 461 if (p->scopereturned())
444 return; 462 return;
445 463
446 if (global.params.symdebug) 464 #ifndef DISABLE_DEBUG_INFO
447 DtoDwarfStopPoint(loc.linnum); 465 if (global.params.symdebug)
466 DtoDwarfStopPoint(loc.linnum);
467 #endif
448 468
449 if (ident != 0) { 469 if (ident != 0) {
450 Logger::println("ident = %s", ident->toChars()); 470 Logger::println("ident = %s", ident->toChars());
451 471
452 DtoEnclosingHandlers(loc, target); 472 DtoEnclosingHandlers(loc, target);
496 void ContinueStatement::toIR(IRState* p) 516 void ContinueStatement::toIR(IRState* p)
497 { 517 {
498 Logger::println("ContinueStatement::toIR(): %s", loc.toChars()); 518 Logger::println("ContinueStatement::toIR(): %s", loc.toChars());
499 LOG_SCOPE; 519 LOG_SCOPE;
500 520
501 if (global.params.symdebug) 521 #ifndef DISABLE_DEBUG_INFO
502 DtoDwarfStopPoint(loc.linnum); 522 if (global.params.symdebug)
523 DtoDwarfStopPoint(loc.linnum);
524 #endif
503 525
504 if (ident != 0) { 526 if (ident != 0) {
505 Logger::println("ident = %s", ident->toChars()); 527 Logger::println("ident = %s", ident->toChars());
506 528
507 DtoEnclosingHandlers(loc, target); 529 DtoEnclosingHandlers(loc, target);
562 void TryFinallyStatement::toIR(IRState* p) 584 void TryFinallyStatement::toIR(IRState* p)
563 { 585 {
564 Logger::println("TryFinallyStatement::toIR(): %s", loc.toChars()); 586 Logger::println("TryFinallyStatement::toIR(): %s", loc.toChars());
565 LOG_SCOPE; 587 LOG_SCOPE;
566 588
567 if (global.params.symdebug) 589 #ifndef DISABLE_DEBUG_INFO
568 DtoDwarfStopPoint(loc.linnum); 590 if (global.params.symdebug)
591 DtoDwarfStopPoint(loc.linnum);
592 #endif
569 593
570 // if there's no finalbody or no body, things are simple 594 // if there's no finalbody or no body, things are simple
571 if (!finalbody) { 595 if (!finalbody) {
572 if (body) 596 if (body)
573 body->toIR(p); 597 body->toIR(p);
640 void TryCatchStatement::toIR(IRState* p) 664 void TryCatchStatement::toIR(IRState* p)
641 { 665 {
642 Logger::println("TryCatchStatement::toIR(): %s", loc.toChars()); 666 Logger::println("TryCatchStatement::toIR(): %s", loc.toChars());
643 LOG_SCOPE; 667 LOG_SCOPE;
644 668
645 if (global.params.symdebug) 669 #ifndef DISABLE_DEBUG_INFO
646 DtoDwarfStopPoint(loc.linnum); 670 if (global.params.symdebug)
671 DtoDwarfStopPoint(loc.linnum);
672 #endif
647 673
648 // create basic blocks 674 // create basic blocks
649 llvm::BasicBlock* oldend = p->scopeend(); 675 llvm::BasicBlock* oldend = p->scopeend();
650 676
651 llvm::BasicBlock* trybb = llvm::BasicBlock::Create(gIR->context(), "try", p->topfunc(), oldend); 677 llvm::BasicBlock* trybb = llvm::BasicBlock::Create(gIR->context(), "try", p->topfunc(), oldend);
696 void ThrowStatement::toIR(IRState* p) 722 void ThrowStatement::toIR(IRState* p)
697 { 723 {
698 Logger::println("ThrowStatement::toIR(): %s", loc.toChars()); 724 Logger::println("ThrowStatement::toIR(): %s", loc.toChars());
699 LOG_SCOPE; 725 LOG_SCOPE;
700 726
701 if (global.params.symdebug) 727 #ifndef DISABLE_DEBUG_INFO
702 DtoDwarfStopPoint(loc.linnum); 728 if (global.params.symdebug)
729 DtoDwarfStopPoint(loc.linnum);
730 #endif
703 731
704 assert(exp); 732 assert(exp);
705 DValue* e = exp->toElem(p); 733 DValue* e = exp->toElem(p);
706 734
735 #ifndef DISABLE_DEBUG_INFO
707 if (global.params.symdebug) DtoDwarfFuncEnd(gIR->func()->decl); 736 if (global.params.symdebug) DtoDwarfFuncEnd(gIR->func()->decl);
737 #endif
708 738
709 llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_throw_exception"); 739 llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_throw_exception");
710 //Logger::cout() << "calling: " << *fn << '\n'; 740 //Logger::cout() << "calling: " << *fn << '\n';
711 LLValue* arg = DtoBitCast(e->getRVal(), fn->getFunctionType()->getParamType(0)); 741 LLValue* arg = DtoBitCast(e->getRVal(), fn->getFunctionType()->getParamType(0));
712 //Logger::cout() << "arg: " << *arg << '\n'; 742 //Logger::cout() << "arg: " << *arg << '\n';
778 void SwitchStatement::toIR(IRState* p) 808 void SwitchStatement::toIR(IRState* p)
779 { 809 {
780 Logger::println("SwitchStatement::toIR(): %s", loc.toChars()); 810 Logger::println("SwitchStatement::toIR(): %s", loc.toChars());
781 LOG_SCOPE; 811 LOG_SCOPE;
782 812
783 if (global.params.symdebug) 813 #ifndef DISABLE_DEBUG_INFO
784 DtoDwarfStopPoint(loc.linnum); 814 if (global.params.symdebug)
815 DtoDwarfStopPoint(loc.linnum);
816 #endif
785 817
786 llvm::BasicBlock* oldend = gIR->scopeend(); 818 llvm::BasicBlock* oldend = gIR->scopeend();
787 819
788 // clear data from previous passes... :/ 820 // clear data from previous passes... :/
789 for (int i=0; i<cases->dim; ++i) 821 for (int i=0; i<cases->dim; ++i)
949 981
950 // if no statements, there's nothing to do 982 // if no statements, there's nothing to do
951 if (!statements || !statements->dim) 983 if (!statements || !statements->dim)
952 return; 984 return;
953 985
954 if (global.params.symdebug) 986 #ifndef DISABLE_DEBUG_INFO
955 DtoDwarfStopPoint(loc.linnum); 987 if (global.params.symdebug)
988 DtoDwarfStopPoint(loc.linnum);
989 #endif
956 990
957 // DMD doesn't fold stuff like continue/break, and since this isn't really a loop 991 // DMD doesn't fold stuff like continue/break, and since this isn't really a loop
958 // we have to keep track of each statement and jump to the next/end on continue/break 992 // we have to keep track of each statement and jump to the next/end on continue/break
959 993
960 llvm::BasicBlock* oldend = gIR->scopeend(); 994 llvm::BasicBlock* oldend = gIR->scopeend();
1015 void ForeachStatement::toIR(IRState* p) 1049 void ForeachStatement::toIR(IRState* p)
1016 { 1050 {
1017 Logger::println("ForeachStatement::toIR(): %s", loc.toChars()); 1051 Logger::println("ForeachStatement::toIR(): %s", loc.toChars());
1018 LOG_SCOPE; 1052 LOG_SCOPE;
1019 1053
1020 if (global.params.symdebug) 1054 #ifndef DISABLE_DEBUG_INFO
1021 DtoDwarfStopPoint(loc.linnum); 1055 if (global.params.symdebug)
1056 DtoDwarfStopPoint(loc.linnum);
1057 #endif
1022 1058
1023 //assert(arguments->dim == 1); 1059 //assert(arguments->dim == 1);
1024 assert(value != 0); 1060 assert(value != 0);
1025 assert(aggr != 0); 1061 assert(aggr != 0);
1026 assert(func != 0); 1062 assert(func != 0);
1147 void ForeachRangeStatement::toIR(IRState* p) 1183 void ForeachRangeStatement::toIR(IRState* p)
1148 { 1184 {
1149 Logger::println("ForeachRangeStatement::toIR(): %s", loc.toChars()); 1185 Logger::println("ForeachRangeStatement::toIR(): %s", loc.toChars());
1150 LOG_SCOPE; 1186 LOG_SCOPE;
1151 1187
1152 if (global.params.symdebug) 1188 #ifndef DISABLE_DEBUG_INFO
1153 DtoDwarfStopPoint(loc.linnum); 1189 if (global.params.symdebug)
1190 DtoDwarfStopPoint(loc.linnum);
1191 #endif
1154 1192
1155 // evaluate lwr/upr 1193 // evaluate lwr/upr
1156 assert(lwr->type->isintegral()); 1194 assert(lwr->type->isintegral());
1157 LLValue* lower = lwr->toElem(p)->getRVal(); 1195 LLValue* lower = lwr->toElem(p)->getRVal();
1158 assert(upr->type->isintegral()); 1196 assert(upr->type->isintegral());
1296 void GotoStatement::toIR(IRState* p) 1334 void GotoStatement::toIR(IRState* p)
1297 { 1335 {
1298 Logger::println("GotoStatement::toIR(): %s", loc.toChars()); 1336 Logger::println("GotoStatement::toIR(): %s", loc.toChars());
1299 LOG_SCOPE; 1337 LOG_SCOPE;
1300 1338
1301 if (global.params.symdebug) 1339 #ifndef DISABLE_DEBUG_INFO
1302 DtoDwarfStopPoint(loc.linnum); 1340 if (global.params.symdebug)
1341 DtoDwarfStopPoint(loc.linnum);
1342 #endif
1303 1343
1304 llvm::BasicBlock* oldend = gIR->scopeend(); 1344 llvm::BasicBlock* oldend = gIR->scopeend();
1305 llvm::BasicBlock* bb = llvm::BasicBlock::Create(gIR->context(), "aftergoto", p->topfunc(), oldend); 1345 llvm::BasicBlock* bb = llvm::BasicBlock::Create(gIR->context(), "aftergoto", p->topfunc(), oldend);
1306 1346
1307 DtoGoto(loc, label->ident, enclosingFinally); 1347 DtoGoto(loc, label->ident, enclosingFinally);
1314 void GotoDefaultStatement::toIR(IRState* p) 1354 void GotoDefaultStatement::toIR(IRState* p)
1315 { 1355 {
1316 Logger::println("GotoDefaultStatement::toIR(): %s", loc.toChars()); 1356 Logger::println("GotoDefaultStatement::toIR(): %s", loc.toChars());
1317 LOG_SCOPE; 1357 LOG_SCOPE;
1318 1358
1319 if (global.params.symdebug) 1359 #ifndef DISABLE_DEBUG_INFO
1320 DtoDwarfStopPoint(loc.linnum); 1360 if (global.params.symdebug)
1361 DtoDwarfStopPoint(loc.linnum);
1362 #endif
1321 1363
1322 llvm::BasicBlock* oldend = gIR->scopeend(); 1364 llvm::BasicBlock* oldend = gIR->scopeend();
1323 llvm::BasicBlock* bb = llvm::BasicBlock::Create(gIR->context(), "aftergotodefault", p->topfunc(), oldend); 1365 llvm::BasicBlock* bb = llvm::BasicBlock::Create(gIR->context(), "aftergotodefault", p->topfunc(), oldend);
1324 1366
1325 assert(!p->scopereturned()); 1367 assert(!p->scopereturned());
1336 void GotoCaseStatement::toIR(IRState* p) 1378 void GotoCaseStatement::toIR(IRState* p)
1337 { 1379 {
1338 Logger::println("GotoCaseStatement::toIR(): %s", loc.toChars()); 1380 Logger::println("GotoCaseStatement::toIR(): %s", loc.toChars());
1339 LOG_SCOPE; 1381 LOG_SCOPE;
1340 1382
1341 if (global.params.symdebug) 1383 #ifndef DISABLE_DEBUG_INFO
1342 DtoDwarfStopPoint(loc.linnum); 1384 if (global.params.symdebug)
1385 DtoDwarfStopPoint(loc.linnum);
1386 #endif
1343 1387
1344 llvm::BasicBlock* oldend = gIR->scopeend(); 1388 llvm::BasicBlock* oldend = gIR->scopeend();
1345 llvm::BasicBlock* bb = llvm::BasicBlock::Create(gIR->context(), "aftergotocase", p->topfunc(), oldend); 1389 llvm::BasicBlock* bb = llvm::BasicBlock::Create(gIR->context(), "aftergotocase", p->topfunc(), oldend);
1346 1390
1347 assert(!p->scopereturned()); 1391 assert(!p->scopereturned());
1361 void WithStatement::toIR(IRState* p) 1405 void WithStatement::toIR(IRState* p)
1362 { 1406 {
1363 Logger::println("WithStatement::toIR(): %s", loc.toChars()); 1407 Logger::println("WithStatement::toIR(): %s", loc.toChars());
1364 LOG_SCOPE; 1408 LOG_SCOPE;
1365 1409
1366 if (global.params.symdebug) 1410 #ifndef DISABLE_DEBUG_INFO
1367 DtoDwarfStopPoint(loc.linnum); 1411 if (global.params.symdebug)
1412 DtoDwarfStopPoint(loc.linnum);
1413 #endif
1368 1414
1369 assert(exp); 1415 assert(exp);
1370 assert(body); 1416 assert(body);
1371 1417
1372 // with(..) can either be used with expressions or with symbols 1418 // with(..) can either be used with expressions or with symbols
1391 void SynchronizedStatement::toIR(IRState* p) 1437 void SynchronizedStatement::toIR(IRState* p)
1392 { 1438 {
1393 Logger::println("SynchronizedStatement::toIR(): %s", loc.toChars()); 1439 Logger::println("SynchronizedStatement::toIR(): %s", loc.toChars());
1394 LOG_SCOPE; 1440 LOG_SCOPE;
1395 1441
1396 if (global.params.symdebug) 1442 #ifndef DISABLE_DEBUG_INFO
1397 DtoDwarfStopPoint(loc.linnum); 1443 if (global.params.symdebug)
1444 DtoDwarfStopPoint(loc.linnum);
1445 #endif
1398 1446
1399 // enter lock 1447 // enter lock
1400 if (exp) 1448 if (exp)
1401 { 1449 {
1402 llsync = exp->toElem(p)->getRVal(); 1450 llsync = exp->toElem(p)->getRVal();
1428 void VolatileStatement::toIR(IRState* p) 1476 void VolatileStatement::toIR(IRState* p)
1429 { 1477 {
1430 Logger::println("VolatileStatement::toIR(): %s", loc.toChars()); 1478 Logger::println("VolatileStatement::toIR(): %s", loc.toChars());
1431 LOG_SCOPE; 1479 LOG_SCOPE;
1432 1480
1433 if (global.params.symdebug) 1481 #ifndef DISABLE_DEBUG_INFO
1434 DtoDwarfStopPoint(loc.linnum); 1482 if (global.params.symdebug)
1483 DtoDwarfStopPoint(loc.linnum);
1484 #endif
1435 1485
1436 // mark in-volatile 1486 // mark in-volatile
1437 // FIXME 1487 // FIXME
1438 1488
1439 // has statement 1489 // has statement