1 //===--- CGExprConstant.cpp - Emit LLVM Code from Constant Expressions ----===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This contains code to emit Constant Expr nodes as LLVM code.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "CodeGenFunction.h"
15 #include "CodeGenModule.h"
16 #include "CGCXXABI.h"
17 #include "CGObjCRuntime.h"
18 #include "CGRecordLayout.h"
19 #include "clang/AST/APValue.h"
20 #include "clang/AST/ASTContext.h"
21 #include "clang/AST/RecordLayout.h"
22 #include "clang/AST/StmtVisitor.h"
23 #include "clang/Basic/Builtins.h"
24 #include "llvm/Constants.h"
25 #include "llvm/Function.h"
26 #include "llvm/GlobalVariable.h"
27 #include "llvm/Target/TargetData.h"
28 using namespace clang;
29 using namespace CodeGen;
30 
31 //===----------------------------------------------------------------------===//
32 //                            ConstStructBuilder
33 //===----------------------------------------------------------------------===//
34 
35 namespace {
36 class ConstStructBuilder {
37   CodeGenModule &CGM;
38   CodeGenFunction *CGF;
39 
40   bool Packed;
41   CharUnits NextFieldOffsetInChars;
42   CharUnits LLVMStructAlignment;
43   std::vector<llvm::Constant *> Elements;
44 public:
45   static llvm::Constant *BuildStruct(CodeGenModule &CGM, CodeGenFunction *CGF,
46                                      InitListExpr *ILE);
47 
48 private:
49   ConstStructBuilder(CodeGenModule &CGM, CodeGenFunction *CGF)
50     : CGM(CGM), CGF(CGF), Packed(false),
51     NextFieldOffsetInChars(CharUnits::Zero()),
52     LLVMStructAlignment(CharUnits::One()) { }
53 
54   bool AppendField(const FieldDecl *Field, uint64_t FieldOffset,
55                    llvm::Constant *InitExpr);
56 
57   void AppendBitField(const FieldDecl *Field, uint64_t FieldOffset,
58                       llvm::ConstantInt *InitExpr);
59 
60   void AppendPadding(CharUnits PadSize);
61 
62   void AppendTailPadding(CharUnits RecordSize);
63 
64   void ConvertStructToPacked();
65 
66   bool Build(InitListExpr *ILE);
67 
68   CharUnits getAlignment(const llvm::Constant *C) const {
69     if (Packed)  return CharUnits::One();
70     return CharUnits::fromQuantity(
71         CGM.getTargetData().getABITypeAlignment(C->getType()));
72   }
73 
74   CharUnits getSizeInChars(const llvm::Constant *C) const {
75     return CharUnits::fromQuantity(
76         CGM.getTargetData().getTypeAllocSize(C->getType()));
77   }
78 };
79 
80 bool ConstStructBuilder::
81 AppendField(const FieldDecl *Field, uint64_t FieldOffset,
82             llvm::Constant *InitCst) {
83 
84   const ASTContext &Context = CGM.getContext();
85 
86   CharUnits FieldOffsetInChars = Context.toCharUnitsFromBits(FieldOffset);
87 
88   assert(NextFieldOffsetInChars <= FieldOffsetInChars
89          && "Field offset mismatch!");
90 
91   CharUnits FieldAlignment = getAlignment(InitCst);
92 
93   // Round up the field offset to the alignment of the field type.
94   CharUnits AlignedNextFieldOffsetInChars =
95     NextFieldOffsetInChars.RoundUpToAlignment(FieldAlignment);
96 
97   if (AlignedNextFieldOffsetInChars > FieldOffsetInChars) {
98     assert(!Packed && "Alignment is wrong even with a packed struct!");
99 
100     // Convert the struct to a packed struct.
101     ConvertStructToPacked();
102 
103     AlignedNextFieldOffsetInChars = NextFieldOffsetInChars;
104   }
105 
106   if (AlignedNextFieldOffsetInChars < FieldOffsetInChars) {
107     // We need to append padding.
108     AppendPadding(
109         FieldOffsetInChars - NextFieldOffsetInChars);
110 
111     assert(NextFieldOffsetInChars == FieldOffsetInChars &&
112            "Did not add enough padding!");
113 
114     AlignedNextFieldOffsetInChars = NextFieldOffsetInChars;
115   }
116 
117   // Add the field.
118   Elements.push_back(InitCst);
119   NextFieldOffsetInChars = AlignedNextFieldOffsetInChars +
120                            getSizeInChars(InitCst);
121 
122   if (Packed)
123     assert(LLVMStructAlignment == CharUnits::One() &&
124            "Packed struct not byte-aligned!");
125   else
126     LLVMStructAlignment = std::max(LLVMStructAlignment, FieldAlignment);
127 
128   return true;
129 }
130 
131 void ConstStructBuilder::AppendBitField(const FieldDecl *Field,
132                                         uint64_t FieldOffset,
133                                         llvm::ConstantInt *CI) {
134   const ASTContext &Context = CGM.getContext();
135   const uint64_t CharWidth = Context.getCharWidth();
136   uint64_t NextFieldOffsetInBits = Context.toBits(NextFieldOffsetInChars);
137   if (FieldOffset > NextFieldOffsetInBits) {
138     // We need to add padding.
139     CharUnits PadSize = Context.toCharUnitsFromBits(
140       llvm::RoundUpToAlignment(FieldOffset - NextFieldOffsetInBits,
141                                Context.Target.getCharAlign()));
142 
143     AppendPadding(PadSize);
144   }
145 
146   uint64_t FieldSize =
147     Field->getBitWidth()->EvaluateAsInt(Context).getZExtValue();
148 
149   llvm::APInt FieldValue = CI->getValue();
150 
151   // Promote the size of FieldValue if necessary
152   // FIXME: This should never occur, but currently it can because initializer
153   // constants are cast to bool, and because clang is not enforcing bitfield
154   // width limits.
155   if (FieldSize > FieldValue.getBitWidth())
156     FieldValue = FieldValue.zext(FieldSize);
157 
158   // Truncate the size of FieldValue to the bit field size.
159   if (FieldSize < FieldValue.getBitWidth())
160     FieldValue = FieldValue.trunc(FieldSize);
161 
162   NextFieldOffsetInBits = Context.toBits(NextFieldOffsetInChars);
163   if (FieldOffset < NextFieldOffsetInBits) {
164     // Either part of the field or the entire field can go into the previous
165     // byte.
166     assert(!Elements.empty() && "Elements can't be empty!");
167 
168     unsigned BitsInPreviousByte = NextFieldOffsetInBits - FieldOffset;
169 
170     bool FitsCompletelyInPreviousByte =
171       BitsInPreviousByte >= FieldValue.getBitWidth();
172 
173     llvm::APInt Tmp = FieldValue;
174 
175     if (!FitsCompletelyInPreviousByte) {
176       unsigned NewFieldWidth = FieldSize - BitsInPreviousByte;
177 
178       if (CGM.getTargetData().isBigEndian()) {
179         Tmp = Tmp.lshr(NewFieldWidth);
180         Tmp = Tmp.trunc(BitsInPreviousByte);
181 
182         // We want the remaining high bits.
183         FieldValue = FieldValue.trunc(NewFieldWidth);
184       } else {
185         Tmp = Tmp.trunc(BitsInPreviousByte);
186 
187         // We want the remaining low bits.
188         FieldValue = FieldValue.lshr(BitsInPreviousByte);
189         FieldValue = FieldValue.trunc(NewFieldWidth);
190       }
191     }
192 
193     Tmp = Tmp.zext(CharWidth);
194     if (CGM.getTargetData().isBigEndian()) {
195       if (FitsCompletelyInPreviousByte)
196         Tmp = Tmp.shl(BitsInPreviousByte - FieldValue.getBitWidth());
197     } else {
198       Tmp = Tmp.shl(CharWidth - BitsInPreviousByte);
199     }
200 
201     // 'or' in the bits that go into the previous byte.
202     llvm::Value *LastElt = Elements.back();
203     if (llvm::ConstantInt *Val = dyn_cast<llvm::ConstantInt>(LastElt))
204       Tmp |= Val->getValue();
205     else {
206       assert(isa<llvm::UndefValue>(LastElt));
207       // If there is an undef field that we're adding to, it can either be a
208       // scalar undef (in which case, we just replace it with our field) or it
209       // is an array.  If it is an array, we have to pull one byte off the
210       // array so that the other undef bytes stay around.
211       if (!isa<llvm::IntegerType>(LastElt->getType())) {
212         // The undef padding will be a multibyte array, create a new smaller
213         // padding and then an hole for our i8 to get plopped into.
214         assert(isa<llvm::ArrayType>(LastElt->getType()) &&
215                "Expected array padding of undefs");
216         const llvm::ArrayType *AT = cast<llvm::ArrayType>(LastElt->getType());
217         assert(AT->getElementType()->isIntegerTy(CharWidth) &&
218                AT->getNumElements() != 0 &&
219                "Expected non-empty array padding of undefs");
220 
221         // Remove the padding array.
222         NextFieldOffsetInChars -= CharUnits::fromQuantity(AT->getNumElements());
223         Elements.pop_back();
224 
225         // Add the padding back in two chunks.
226         AppendPadding(CharUnits::fromQuantity(AT->getNumElements()-1));
227         AppendPadding(CharUnits::One());
228         assert(isa<llvm::UndefValue>(Elements.back()) &&
229                Elements.back()->getType()->isIntegerTy(CharWidth) &&
230                "Padding addition didn't work right");
231       }
232     }
233 
234     Elements.back() = llvm::ConstantInt::get(CGM.getLLVMContext(), Tmp);
235 
236     if (FitsCompletelyInPreviousByte)
237       return;
238   }
239 
240   while (FieldValue.getBitWidth() > CharWidth) {
241     llvm::APInt Tmp;
242 
243     if (CGM.getTargetData().isBigEndian()) {
244       // We want the high bits.
245       Tmp =
246         FieldValue.lshr(FieldValue.getBitWidth() - CharWidth).trunc(CharWidth);
247     } else {
248       // We want the low bits.
249       Tmp = FieldValue.trunc(CharWidth);
250 
251       FieldValue = FieldValue.lshr(CharWidth);
252     }
253 
254     Elements.push_back(llvm::ConstantInt::get(CGM.getLLVMContext(), Tmp));
255     ++NextFieldOffsetInChars;
256 
257     FieldValue = FieldValue.trunc(FieldValue.getBitWidth() - CharWidth);
258   }
259 
260   assert(FieldValue.getBitWidth() > 0 &&
261          "Should have at least one bit left!");
262   assert(FieldValue.getBitWidth() <= CharWidth &&
263          "Should not have more than a byte left!");
264 
265   if (FieldValue.getBitWidth() < CharWidth) {
266     if (CGM.getTargetData().isBigEndian()) {
267       unsigned BitWidth = FieldValue.getBitWidth();
268 
269       FieldValue = FieldValue.zext(CharWidth) << (CharWidth - BitWidth);
270     } else
271       FieldValue = FieldValue.zext(CharWidth);
272   }
273 
274   // Append the last element.
275   Elements.push_back(llvm::ConstantInt::get(CGM.getLLVMContext(),
276                                             FieldValue));
277   ++NextFieldOffsetInChars;
278 }
279 
280 void ConstStructBuilder::AppendPadding(CharUnits PadSize) {
281   if (PadSize.isZero())
282     return;
283 
284   const llvm::Type *Ty = llvm::Type::getInt8Ty(CGM.getLLVMContext());
285   if (PadSize > CharUnits::One())
286     Ty = llvm::ArrayType::get(Ty, PadSize.getQuantity());
287 
288   llvm::Constant *C = llvm::UndefValue::get(Ty);
289   Elements.push_back(C);
290   assert(getAlignment(C) == CharUnits::One() &&
291          "Padding must have 1 byte alignment!");
292 
293   NextFieldOffsetInChars += getSizeInChars(C);
294 }
295 
296 void ConstStructBuilder::AppendTailPadding(CharUnits RecordSize) {
297   assert(NextFieldOffsetInChars <= RecordSize &&
298          "Size mismatch!");
299 
300   AppendPadding(RecordSize - NextFieldOffsetInChars);
301 }
302 
303 void ConstStructBuilder::ConvertStructToPacked() {
304   std::vector<llvm::Constant *> PackedElements;
305   CharUnits ElementOffsetInChars = CharUnits::Zero();
306 
307   for (unsigned i = 0, e = Elements.size(); i != e; ++i) {
308     llvm::Constant *C = Elements[i];
309 
310     CharUnits ElementAlign = CharUnits::fromQuantity(
311       CGM.getTargetData().getABITypeAlignment(C->getType()));
312     CharUnits AlignedElementOffsetInChars =
313       ElementOffsetInChars.RoundUpToAlignment(ElementAlign);
314 
315     if (AlignedElementOffsetInChars > ElementOffsetInChars) {
316       // We need some padding.
317       CharUnits NumChars =
318         AlignedElementOffsetInChars - ElementOffsetInChars;
319 
320       const llvm::Type *Ty = llvm::Type::getInt8Ty(CGM.getLLVMContext());
321       if (NumChars > CharUnits::One())
322         Ty = llvm::ArrayType::get(Ty, NumChars.getQuantity());
323 
324       llvm::Constant *Padding = llvm::UndefValue::get(Ty);
325       PackedElements.push_back(Padding);
326       ElementOffsetInChars += getSizeInChars(Padding);
327     }
328 
329     PackedElements.push_back(C);
330     ElementOffsetInChars += getSizeInChars(C);
331   }
332 
333   assert(ElementOffsetInChars == NextFieldOffsetInChars &&
334          "Packing the struct changed its size!");
335 
336   Elements = PackedElements;
337   LLVMStructAlignment = CharUnits::One();
338   Packed = true;
339 }
340 
341 bool ConstStructBuilder::Build(InitListExpr *ILE) {
342   RecordDecl *RD = ILE->getType()->getAs<RecordType>()->getDecl();
343   const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);
344 
345   unsigned FieldNo = 0;
346   unsigned ElementNo = 0;
347   for (RecordDecl::field_iterator Field = RD->field_begin(),
348        FieldEnd = RD->field_end(); Field != FieldEnd; ++Field, ++FieldNo) {
349 
350     // If this is a union, skip all the fields that aren't being initialized.
351     if (RD->isUnion() && ILE->getInitializedFieldInUnion() != *Field)
352       continue;
353 
354     // Don't emit anonymous bitfields, they just affect layout.
355     if (Field->isBitField() && !Field->getIdentifier())
356       continue;
357 
358     // Get the initializer.  A struct can include fields without initializers,
359     // we just use explicit null values for them.
360     llvm::Constant *EltInit;
361     if (ElementNo < ILE->getNumInits())
362       EltInit = CGM.EmitConstantExpr(ILE->getInit(ElementNo++),
363                                      Field->getType(), CGF);
364     else
365       EltInit = CGM.EmitNullConstant(Field->getType());
366 
367     if (!EltInit)
368       return false;
369 
370     if (!Field->isBitField()) {
371       // Handle non-bitfield members.
372       if (!AppendField(*Field, Layout.getFieldOffset(FieldNo), EltInit))
373         return false;
374     } else {
375       // Otherwise we have a bitfield.
376       AppendBitField(*Field, Layout.getFieldOffset(FieldNo),
377                      cast<llvm::ConstantInt>(EltInit));
378     }
379   }
380 
381   CharUnits LayoutSizeInChars = Layout.getSize();
382 
383   if (NextFieldOffsetInChars > LayoutSizeInChars) {
384     // If the struct is bigger than the size of the record type,
385     // we must have a flexible array member at the end.
386     assert(RD->hasFlexibleArrayMember() &&
387            "Must have flexible array member if struct is bigger than type!");
388 
389     // No tail padding is necessary.
390     return true;
391   }
392 
393   CharUnits LLVMSizeInChars =
394     NextFieldOffsetInChars.RoundUpToAlignment(LLVMStructAlignment);
395 
396   // Check if we need to convert the struct to a packed struct.
397   if (NextFieldOffsetInChars <= LayoutSizeInChars &&
398       LLVMSizeInChars > LayoutSizeInChars) {
399     assert(!Packed && "Size mismatch!");
400 
401     ConvertStructToPacked();
402     assert(NextFieldOffsetInChars <= LayoutSizeInChars &&
403            "Converting to packed did not help!");
404   }
405 
406   // Append tail padding if necessary.
407   AppendTailPadding(LayoutSizeInChars);
408 
409   assert(LayoutSizeInChars == NextFieldOffsetInChars &&
410          "Tail padding mismatch!");
411 
412   return true;
413 }
414 
415 llvm::Constant *ConstStructBuilder::
416   BuildStruct(CodeGenModule &CGM, CodeGenFunction *CGF, InitListExpr *ILE) {
417   ConstStructBuilder Builder(CGM, CGF);
418 
419   if (!Builder.Build(ILE))
420     return 0;
421 
422   llvm::Constant *Result =
423   llvm::ConstantStruct::get(CGM.getLLVMContext(),
424                             Builder.Elements, Builder.Packed);
425 
426   assert(Builder.NextFieldOffsetInChars.RoundUpToAlignment(
427            Builder.getAlignment(Result)) ==
428          Builder.getSizeInChars(Result) && "Size mismatch!");
429 
430   return Result;
431 }
432 
433 
434 //===----------------------------------------------------------------------===//
435 //                             ConstExprEmitter
436 //===----------------------------------------------------------------------===//
437 
438 class ConstExprEmitter :
439   public StmtVisitor<ConstExprEmitter, llvm::Constant*> {
440   CodeGenModule &CGM;
441   CodeGenFunction *CGF;
442   llvm::LLVMContext &VMContext;
443 public:
444   ConstExprEmitter(CodeGenModule &cgm, CodeGenFunction *cgf)
445     : CGM(cgm), CGF(cgf), VMContext(cgm.getLLVMContext()) {
446   }
447 
448   //===--------------------------------------------------------------------===//
449   //                            Visitor Methods
450   //===--------------------------------------------------------------------===//
451 
452   llvm::Constant *VisitStmt(Stmt *S) {
453     return 0;
454   }
455 
456   llvm::Constant *VisitParenExpr(ParenExpr *PE) {
457     return Visit(PE->getSubExpr());
458   }
459 
460   llvm::Constant *VisitGenericSelectionExpr(GenericSelectionExpr *GE) {
461     return Visit(GE->getResultExpr());
462   }
463 
464   llvm::Constant *VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
465     return Visit(E->getInitializer());
466   }
467 
468   llvm::Constant *VisitUnaryAddrOf(UnaryOperator *E) {
469     if (E->getType()->isMemberPointerType())
470       return CGM.getMemberPointerConstant(E);
471 
472     return 0;
473   }
474 
475   llvm::Constant *VisitBinSub(BinaryOperator *E) {
476     // This must be a pointer/pointer subtraction.  This only happens for
477     // address of label.
478     if (!isa<AddrLabelExpr>(E->getLHS()->IgnoreParenNoopCasts(CGM.getContext())) ||
479        !isa<AddrLabelExpr>(E->getRHS()->IgnoreParenNoopCasts(CGM.getContext())))
480       return 0;
481 
482     llvm::Constant *LHS = CGM.EmitConstantExpr(E->getLHS(),
483                                                E->getLHS()->getType(), CGF);
484     llvm::Constant *RHS = CGM.EmitConstantExpr(E->getRHS(),
485                                                E->getRHS()->getType(), CGF);
486 
487     const llvm::Type *ResultType = ConvertType(E->getType());
488     LHS = llvm::ConstantExpr::getPtrToInt(LHS, ResultType);
489     RHS = llvm::ConstantExpr::getPtrToInt(RHS, ResultType);
490 
491     // No need to divide by element size, since addr of label is always void*,
492     // which has size 1 in GNUish.
493     return llvm::ConstantExpr::getSub(LHS, RHS);
494   }
495 
496   llvm::Constant *VisitCastExpr(CastExpr* E) {
497     Expr *subExpr = E->getSubExpr();
498     llvm::Constant *C = CGM.EmitConstantExpr(subExpr, subExpr->getType(), CGF);
499     if (!C) return 0;
500 
501     const llvm::Type *destType = ConvertType(E->getType());
502 
503     switch (E->getCastKind()) {
504     case CK_ToUnion: {
505       // GCC cast to union extension
506       assert(E->getType()->isUnionType() &&
507              "Destination type is not union type!");
508 
509       // Build a struct with the union sub-element as the first member,
510       // and padded to the appropriate size
511       std::vector<llvm::Constant*> Elts;
512       std::vector<const llvm::Type*> Types;
513       Elts.push_back(C);
514       Types.push_back(C->getType());
515       unsigned CurSize = CGM.getTargetData().getTypeAllocSize(C->getType());
516       unsigned TotalSize = CGM.getTargetData().getTypeAllocSize(destType);
517 
518       assert(CurSize <= TotalSize && "Union size mismatch!");
519       if (unsigned NumPadBytes = TotalSize - CurSize) {
520         const llvm::Type *Ty = llvm::Type::getInt8Ty(VMContext);
521         if (NumPadBytes > 1)
522           Ty = llvm::ArrayType::get(Ty, NumPadBytes);
523 
524         Elts.push_back(llvm::UndefValue::get(Ty));
525         Types.push_back(Ty);
526       }
527 
528       llvm::StructType* STy =
529         llvm::StructType::get(C->getType()->getContext(), Types, false);
530       return llvm::ConstantStruct::get(STy, Elts);
531     }
532     case CK_NullToMemberPointer: {
533       const MemberPointerType *MPT = E->getType()->getAs<MemberPointerType>();
534       return CGM.getCXXABI().EmitNullMemberPointer(MPT);
535     }
536 
537     case CK_DerivedToBaseMemberPointer:
538     case CK_BaseToDerivedMemberPointer:
539       return CGM.getCXXABI().EmitMemberPointerConversion(C, E);
540 
541     case CK_LValueToRValue:
542     case CK_NoOp:
543       return C;
544 
545     case CK_AnyPointerToObjCPointerCast:
546     case CK_AnyPointerToBlockPointerCast:
547     case CK_LValueBitCast:
548     case CK_BitCast:
549       if (C->getType() == destType) return C;
550       return llvm::ConstantExpr::getBitCast(C, destType);
551 
552     case CK_Dependent: llvm_unreachable("saw dependent cast!");
553 
554     // These will never be supported.
555     case CK_ObjCObjectLValueCast:
556     case CK_GetObjCProperty:
557     case CK_ToVoid:
558     case CK_Dynamic:
559       return 0;
560 
561     // These might need to be supported for constexpr.
562     case CK_UserDefinedConversion:
563     case CK_ConstructorConversion:
564       return 0;
565 
566     // These should eventually be supported.
567     case CK_ArrayToPointerDecay:
568     case CK_FunctionToPointerDecay:
569     case CK_BaseToDerived:
570     case CK_DerivedToBase:
571     case CK_UncheckedDerivedToBase:
572     case CK_MemberPointerToBoolean:
573     case CK_VectorSplat:
574     case CK_FloatingRealToComplex:
575     case CK_FloatingComplexToReal:
576     case CK_FloatingComplexToBoolean:
577     case CK_FloatingComplexCast:
578     case CK_FloatingComplexToIntegralComplex:
579     case CK_IntegralRealToComplex:
580     case CK_IntegralComplexToReal:
581     case CK_IntegralComplexToBoolean:
582     case CK_IntegralComplexCast:
583     case CK_IntegralComplexToFloatingComplex:
584       return 0;
585 
586     case CK_PointerToIntegral:
587       if (!E->getType()->isBooleanType())
588         return llvm::ConstantExpr::getPtrToInt(C, destType);
589       // fallthrough
590 
591     case CK_PointerToBoolean:
592       return llvm::ConstantExpr::getICmp(llvm::CmpInst::ICMP_EQ, C,
593         llvm::ConstantPointerNull::get(cast<llvm::PointerType>(C->getType())));
594 
595     case CK_NullToPointer:
596       return llvm::ConstantPointerNull::get(cast<llvm::PointerType>(destType));
597 
598     case CK_IntegralCast: {
599       bool isSigned = subExpr->getType()->isSignedIntegerType();
600       return llvm::ConstantExpr::getIntegerCast(C, destType, isSigned);
601     }
602 
603     case CK_IntegralToPointer: {
604       bool isSigned = subExpr->getType()->isSignedIntegerType();
605       C = llvm::ConstantExpr::getIntegerCast(C, CGM.IntPtrTy, isSigned);
606       return llvm::ConstantExpr::getIntToPtr(C, destType);
607     }
608 
609     case CK_IntegralToBoolean:
610       return llvm::ConstantExpr::getICmp(llvm::CmpInst::ICMP_EQ, C,
611                              llvm::Constant::getNullValue(C->getType()));
612 
613     case CK_IntegralToFloating:
614       if (subExpr->getType()->isSignedIntegerType())
615         return llvm::ConstantExpr::getSIToFP(C, destType);
616       else
617         return llvm::ConstantExpr::getUIToFP(C, destType);
618 
619     case CK_FloatingToIntegral:
620       if (E->getType()->isSignedIntegerType())
621         return llvm::ConstantExpr::getFPToSI(C, destType);
622       else
623         return llvm::ConstantExpr::getFPToUI(C, destType);
624 
625     case CK_FloatingToBoolean:
626       return llvm::ConstantExpr::getFCmp(llvm::CmpInst::FCMP_UNE, C,
627                              llvm::Constant::getNullValue(C->getType()));
628 
629     case CK_FloatingCast:
630       return llvm::ConstantExpr::getFPCast(C, destType);
631     }
632     llvm_unreachable("Invalid CastKind");
633   }
634 
635   llvm::Constant *VisitCXXDefaultArgExpr(CXXDefaultArgExpr *DAE) {
636     return Visit(DAE->getExpr());
637   }
638 
639   llvm::Constant *EmitArrayInitialization(InitListExpr *ILE) {
640     unsigned NumInitElements = ILE->getNumInits();
641     if (NumInitElements == 1 && ILE->getType() == ILE->getInit(0)->getType() &&
642         (isa<StringLiteral>(ILE->getInit(0)) ||
643          isa<ObjCEncodeExpr>(ILE->getInit(0))))
644       return Visit(ILE->getInit(0));
645 
646     std::vector<llvm::Constant*> Elts;
647     const llvm::ArrayType *AType =
648         cast<llvm::ArrayType>(ConvertType(ILE->getType()));
649     const llvm::Type *ElemTy = AType->getElementType();
650     unsigned NumElements = AType->getNumElements();
651 
652     // Initialising an array requires us to automatically
653     // initialise any elements that have not been initialised explicitly
654     unsigned NumInitableElts = std::min(NumInitElements, NumElements);
655 
656     // Copy initializer elements.
657     unsigned i = 0;
658     bool RewriteType = false;
659     for (; i < NumInitableElts; ++i) {
660       Expr *Init = ILE->getInit(i);
661       llvm::Constant *C = CGM.EmitConstantExpr(Init, Init->getType(), CGF);
662       if (!C)
663         return 0;
664       RewriteType |= (C->getType() != ElemTy);
665       Elts.push_back(C);
666     }
667 
668     // Initialize remaining array elements.
669     // FIXME: This doesn't handle member pointers correctly!
670     for (; i < NumElements; ++i)
671       Elts.push_back(llvm::Constant::getNullValue(ElemTy));
672 
673     if (RewriteType) {
674       // FIXME: Try to avoid packing the array
675       std::vector<const llvm::Type*> Types;
676       for (unsigned i = 0; i < Elts.size(); ++i)
677         Types.push_back(Elts[i]->getType());
678       const llvm::StructType *SType = llvm::StructType::get(AType->getContext(),
679                                                             Types, true);
680       return llvm::ConstantStruct::get(SType, Elts);
681     }
682 
683     return llvm::ConstantArray::get(AType, Elts);
684   }
685 
686   llvm::Constant *EmitStructInitialization(InitListExpr *ILE) {
687     return ConstStructBuilder::BuildStruct(CGM, CGF, ILE);
688   }
689 
690   llvm::Constant *EmitUnionInitialization(InitListExpr *ILE) {
691     return ConstStructBuilder::BuildStruct(CGM, CGF, ILE);
692   }
693 
694   llvm::Constant *VisitImplicitValueInitExpr(ImplicitValueInitExpr* E) {
695     return CGM.EmitNullConstant(E->getType());
696   }
697 
698   llvm::Constant *VisitInitListExpr(InitListExpr *ILE) {
699     if (ILE->getType()->isScalarType()) {
700       // We have a scalar in braces. Just use the first element.
701       if (ILE->getNumInits() > 0) {
702         Expr *Init = ILE->getInit(0);
703         return CGM.EmitConstantExpr(Init, Init->getType(), CGF);
704       }
705       return CGM.EmitNullConstant(ILE->getType());
706     }
707 
708     if (ILE->getType()->isArrayType())
709       return EmitArrayInitialization(ILE);
710 
711     if (ILE->getType()->isRecordType())
712       return EmitStructInitialization(ILE);
713 
714     if (ILE->getType()->isUnionType())
715       return EmitUnionInitialization(ILE);
716 
717     // If ILE was a constant vector, we would have handled it already.
718     if (ILE->getType()->isVectorType())
719       return 0;
720 
721     assert(0 && "Unable to handle InitListExpr");
722     // Get rid of control reaches end of void function warning.
723     // Not reached.
724     return 0;
725   }
726 
727   llvm::Constant *VisitCXXConstructExpr(CXXConstructExpr *E) {
728     if (!E->getConstructor()->isTrivial())
729       return 0;
730 
731     QualType Ty = E->getType();
732 
733     // FIXME: We should not have to call getBaseElementType here.
734     const RecordType *RT =
735       CGM.getContext().getBaseElementType(Ty)->getAs<RecordType>();
736     const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
737 
738     // If the class doesn't have a trivial destructor, we can't emit it as a
739     // constant expr.
740     if (!RD->hasTrivialDestructor())
741       return 0;
742 
743     // Only copy and default constructors can be trivial.
744 
745 
746     if (E->getNumArgs()) {
747       assert(E->getNumArgs() == 1 && "trivial ctor with > 1 argument");
748       assert(E->getConstructor()->isCopyConstructor() &&
749              "trivial ctor has argument but isn't a copy ctor");
750 
751       Expr *Arg = E->getArg(0);
752       assert(CGM.getContext().hasSameUnqualifiedType(Ty, Arg->getType()) &&
753              "argument to copy ctor is of wrong type");
754 
755       return Visit(Arg);
756     }
757 
758     return CGM.EmitNullConstant(Ty);
759   }
760 
761   llvm::Constant *VisitStringLiteral(StringLiteral *E) {
762     assert(!E->getType()->isPointerType() && "Strings are always arrays");
763 
764     // This must be a string initializing an array in a static initializer.
765     // Don't emit it as the address of the string, emit the string data itself
766     // as an inline array.
767     return llvm::ConstantArray::get(VMContext,
768                                     CGM.GetStringForStringLiteral(E), false);
769   }
770 
771   llvm::Constant *VisitObjCEncodeExpr(ObjCEncodeExpr *E) {
772     // This must be an @encode initializing an array in a static initializer.
773     // Don't emit it as the address of the string, emit the string data itself
774     // as an inline array.
775     std::string Str;
776     CGM.getContext().getObjCEncodingForType(E->getEncodedType(), Str);
777     const ConstantArrayType *CAT = cast<ConstantArrayType>(E->getType());
778 
779     // Resize the string to the right size, adding zeros at the end, or
780     // truncating as needed.
781     Str.resize(CAT->getSize().getZExtValue(), '\0');
782     return llvm::ConstantArray::get(VMContext, Str, false);
783   }
784 
785   llvm::Constant *VisitUnaryExtension(const UnaryOperator *E) {
786     return Visit(E->getSubExpr());
787   }
788 
789   // Utility methods
790   const llvm::Type *ConvertType(QualType T) {
791     return CGM.getTypes().ConvertType(T);
792   }
793 
794 public:
795   llvm::Constant *EmitLValue(Expr *E) {
796     switch (E->getStmtClass()) {
797     default: break;
798     case Expr::CompoundLiteralExprClass: {
799       // Note that due to the nature of compound literals, this is guaranteed
800       // to be the only use of the variable, so we just generate it here.
801       CompoundLiteralExpr *CLE = cast<CompoundLiteralExpr>(E);
802       llvm::Constant* C = Visit(CLE->getInitializer());
803       // FIXME: "Leaked" on failure.
804       if (C)
805         C = new llvm::GlobalVariable(CGM.getModule(), C->getType(),
806                                      E->getType().isConstant(CGM.getContext()),
807                                      llvm::GlobalValue::InternalLinkage,
808                                      C, ".compoundliteral", 0, false,
809                           CGM.getContext().getTargetAddressSpace(E->getType()));
810       return C;
811     }
812     case Expr::DeclRefExprClass: {
813       ValueDecl *Decl = cast<DeclRefExpr>(E)->getDecl();
814       if (Decl->hasAttr<WeakRefAttr>())
815         return CGM.GetWeakRefReference(Decl);
816       if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Decl))
817         return CGM.GetAddrOfFunction(FD);
818       if (const VarDecl* VD = dyn_cast<VarDecl>(Decl)) {
819         // We can never refer to a variable with local storage.
820         if (!VD->hasLocalStorage()) {
821           if (VD->isFileVarDecl() || VD->hasExternalStorage())
822             return CGM.GetAddrOfGlobalVar(VD);
823           else if (VD->isLocalVarDecl()) {
824             assert(CGF && "Can't access static local vars without CGF");
825             return CGF->GetAddrOfStaticLocalVar(VD);
826           }
827         }
828       }
829       break;
830     }
831     case Expr::StringLiteralClass:
832       return CGM.GetAddrOfConstantStringFromLiteral(cast<StringLiteral>(E));
833     case Expr::ObjCEncodeExprClass:
834       return CGM.GetAddrOfConstantStringFromObjCEncode(cast<ObjCEncodeExpr>(E));
835     case Expr::ObjCStringLiteralClass: {
836       ObjCStringLiteral* SL = cast<ObjCStringLiteral>(E);
837       llvm::Constant *C =
838           CGM.getObjCRuntime().GenerateConstantString(SL->getString());
839       return llvm::ConstantExpr::getBitCast(C, ConvertType(E->getType()));
840     }
841     case Expr::PredefinedExprClass: {
842       unsigned Type = cast<PredefinedExpr>(E)->getIdentType();
843       if (CGF) {
844         LValue Res = CGF->EmitPredefinedLValue(cast<PredefinedExpr>(E));
845         return cast<llvm::Constant>(Res.getAddress());
846       } else if (Type == PredefinedExpr::PrettyFunction) {
847         return CGM.GetAddrOfConstantCString("top level", ".tmp");
848       }
849 
850       return CGM.GetAddrOfConstantCString("", ".tmp");
851     }
852     case Expr::AddrLabelExprClass: {
853       assert(CGF && "Invalid address of label expression outside function.");
854       llvm::Constant *Ptr =
855         CGF->GetAddrOfLabel(cast<AddrLabelExpr>(E)->getLabel());
856       return llvm::ConstantExpr::getBitCast(Ptr, ConvertType(E->getType()));
857     }
858     case Expr::CallExprClass: {
859       CallExpr* CE = cast<CallExpr>(E);
860       unsigned builtin = CE->isBuiltinCall(CGM.getContext());
861       if (builtin !=
862             Builtin::BI__builtin___CFStringMakeConstantString &&
863           builtin !=
864             Builtin::BI__builtin___NSStringMakeConstantString)
865         break;
866       const Expr *Arg = CE->getArg(0)->IgnoreParenCasts();
867       const StringLiteral *Literal = cast<StringLiteral>(Arg);
868       if (builtin ==
869             Builtin::BI__builtin___NSStringMakeConstantString) {
870         return CGM.getObjCRuntime().GenerateConstantString(Literal);
871       }
872       // FIXME: need to deal with UCN conversion issues.
873       return CGM.GetAddrOfConstantCFString(Literal);
874     }
875     case Expr::BlockExprClass: {
876       std::string FunctionName;
877       if (CGF)
878         FunctionName = CGF->CurFn->getName();
879       else
880         FunctionName = "global";
881 
882       return CGM.GetAddrOfGlobalBlock(cast<BlockExpr>(E), FunctionName.c_str());
883     }
884     }
885 
886     return 0;
887   }
888 };
889 
890 }  // end anonymous namespace.
891 
892 llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E,
893                                                 QualType DestType,
894                                                 CodeGenFunction *CGF) {
895   Expr::EvalResult Result;
896 
897   bool Success = false;
898 
899   if (DestType->isReferenceType())
900     Success = E->EvaluateAsLValue(Result, Context);
901   else
902     Success = E->Evaluate(Result, Context);
903 
904   if (Success && !Result.HasSideEffects) {
905     switch (Result.Val.getKind()) {
906     case APValue::Uninitialized:
907       assert(0 && "Constant expressions should be initialized.");
908       return 0;
909     case APValue::LValue: {
910       const llvm::Type *DestTy = getTypes().ConvertTypeForMem(DestType);
911       llvm::Constant *Offset =
912         llvm::ConstantInt::get(llvm::Type::getInt64Ty(VMContext),
913                                Result.Val.getLValueOffset().getQuantity());
914 
915       llvm::Constant *C;
916       if (const Expr *LVBase = Result.Val.getLValueBase()) {
917         C = ConstExprEmitter(*this, CGF).EmitLValue(const_cast<Expr*>(LVBase));
918 
919         // Apply offset if necessary.
920         if (!Offset->isNullValue()) {
921           const llvm::Type *Type = llvm::Type::getInt8PtrTy(VMContext);
922           llvm::Constant *Casted = llvm::ConstantExpr::getBitCast(C, Type);
923           Casted = llvm::ConstantExpr::getGetElementPtr(Casted, &Offset, 1);
924           C = llvm::ConstantExpr::getBitCast(Casted, C->getType());
925         }
926 
927         // Convert to the appropriate type; this could be an lvalue for
928         // an integer.
929         if (isa<llvm::PointerType>(DestTy))
930           return llvm::ConstantExpr::getBitCast(C, DestTy);
931 
932         return llvm::ConstantExpr::getPtrToInt(C, DestTy);
933       } else {
934         C = Offset;
935 
936         // Convert to the appropriate type; this could be an lvalue for
937         // an integer.
938         if (isa<llvm::PointerType>(DestTy))
939           return llvm::ConstantExpr::getIntToPtr(C, DestTy);
940 
941         // If the types don't match this should only be a truncate.
942         if (C->getType() != DestTy)
943           return llvm::ConstantExpr::getTrunc(C, DestTy);
944 
945         return C;
946       }
947     }
948     case APValue::Int: {
949       llvm::Constant *C = llvm::ConstantInt::get(VMContext,
950                                                  Result.Val.getInt());
951 
952       if (C->getType()->isIntegerTy(1)) {
953         const llvm::Type *BoolTy = getTypes().ConvertTypeForMem(E->getType());
954         C = llvm::ConstantExpr::getZExt(C, BoolTy);
955       }
956       return C;
957     }
958     case APValue::ComplexInt: {
959       llvm::Constant *Complex[2];
960 
961       Complex[0] = llvm::ConstantInt::get(VMContext,
962                                           Result.Val.getComplexIntReal());
963       Complex[1] = llvm::ConstantInt::get(VMContext,
964                                           Result.Val.getComplexIntImag());
965 
966       // FIXME: the target may want to specify that this is packed.
967       return llvm::ConstantStruct::get(VMContext, Complex, 2, false);
968     }
969     case APValue::Float:
970       return llvm::ConstantFP::get(VMContext, Result.Val.getFloat());
971     case APValue::ComplexFloat: {
972       llvm::Constant *Complex[2];
973 
974       Complex[0] = llvm::ConstantFP::get(VMContext,
975                                          Result.Val.getComplexFloatReal());
976       Complex[1] = llvm::ConstantFP::get(VMContext,
977                                          Result.Val.getComplexFloatImag());
978 
979       // FIXME: the target may want to specify that this is packed.
980       return llvm::ConstantStruct::get(VMContext, Complex, 2, false);
981     }
982     case APValue::Vector: {
983       llvm::SmallVector<llvm::Constant *, 4> Inits;
984       unsigned NumElts = Result.Val.getVectorLength();
985 
986       if (Context.getLangOptions().AltiVec &&
987           isa<CastExpr>(E) &&
988           cast<CastExpr>(E)->getCastKind() == CK_VectorSplat) {
989         // AltiVec vector initialization with a single literal
990         APValue &Elt = Result.Val.getVectorElt(0);
991 
992         llvm::Constant* InitValue = Elt.isInt()
993           ? cast<llvm::Constant>
994               (llvm::ConstantInt::get(VMContext, Elt.getInt()))
995           : cast<llvm::Constant>
996               (llvm::ConstantFP::get(VMContext, Elt.getFloat()));
997 
998         for (unsigned i = 0; i != NumElts; ++i)
999           Inits.push_back(InitValue);
1000 
1001       } else {
1002         for (unsigned i = 0; i != NumElts; ++i) {
1003           APValue &Elt = Result.Val.getVectorElt(i);
1004           if (Elt.isInt())
1005             Inits.push_back(llvm::ConstantInt::get(VMContext, Elt.getInt()));
1006           else
1007             Inits.push_back(llvm::ConstantFP::get(VMContext, Elt.getFloat()));
1008         }
1009       }
1010       return llvm::ConstantVector::get(Inits);
1011     }
1012     }
1013   }
1014 
1015   llvm::Constant* C = ConstExprEmitter(*this, CGF).Visit(const_cast<Expr*>(E));
1016   if (C && C->getType()->isIntegerTy(1)) {
1017     const llvm::Type *BoolTy = getTypes().ConvertTypeForMem(E->getType());
1018     C = llvm::ConstantExpr::getZExt(C, BoolTy);
1019   }
1020   return C;
1021 }
1022 
1023 static uint64_t getFieldOffset(ASTContext &C, const FieldDecl *field) {
1024   const ASTRecordLayout &layout = C.getASTRecordLayout(field->getParent());
1025   return layout.getFieldOffset(field->getFieldIndex());
1026 }
1027 
1028 llvm::Constant *
1029 CodeGenModule::getMemberPointerConstant(const UnaryOperator *uo) {
1030   // Member pointer constants always have a very particular form.
1031   const MemberPointerType *type = cast<MemberPointerType>(uo->getType());
1032   const ValueDecl *decl = cast<DeclRefExpr>(uo->getSubExpr())->getDecl();
1033 
1034   // A member function pointer.
1035   if (const CXXMethodDecl *method = dyn_cast<CXXMethodDecl>(decl))
1036     return getCXXABI().EmitMemberPointer(method);
1037 
1038   // Otherwise, a member data pointer.
1039   uint64_t fieldOffset;
1040   if (const FieldDecl *field = dyn_cast<FieldDecl>(decl))
1041     fieldOffset = getFieldOffset(getContext(), field);
1042   else {
1043     const IndirectFieldDecl *ifield = cast<IndirectFieldDecl>(decl);
1044 
1045     fieldOffset = 0;
1046     for (IndirectFieldDecl::chain_iterator ci = ifield->chain_begin(),
1047            ce = ifield->chain_end(); ci != ce; ++ci)
1048       fieldOffset += getFieldOffset(getContext(), cast<FieldDecl>(*ci));
1049   }
1050 
1051   CharUnits chars = getContext().toCharUnitsFromBits((int64_t) fieldOffset);
1052   return getCXXABI().EmitMemberDataPointer(type, chars);
1053 }
1054 
1055 static void
1056 FillInNullDataMemberPointers(CodeGenModule &CGM, QualType T,
1057                              std::vector<llvm::Constant *> &Elements,
1058                              uint64_t StartOffset) {
1059   assert(StartOffset % CGM.getContext().getCharWidth() == 0 &&
1060          "StartOffset not byte aligned!");
1061 
1062   if (CGM.getTypes().isZeroInitializable(T))
1063     return;
1064 
1065   if (const ConstantArrayType *CAT =
1066         CGM.getContext().getAsConstantArrayType(T)) {
1067     QualType ElementTy = CAT->getElementType();
1068     uint64_t ElementSize = CGM.getContext().getTypeSize(ElementTy);
1069 
1070     for (uint64_t I = 0, E = CAT->getSize().getZExtValue(); I != E; ++I) {
1071       FillInNullDataMemberPointers(CGM, ElementTy, Elements,
1072                                    StartOffset + I * ElementSize);
1073     }
1074   } else if (const RecordType *RT = T->getAs<RecordType>()) {
1075     const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
1076     const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);
1077 
1078     // Go through all bases and fill in any null pointer to data members.
1079     for (CXXRecordDecl::base_class_const_iterator I = RD->bases_begin(),
1080          E = RD->bases_end(); I != E; ++I) {
1081       if (I->isVirtual()) {
1082         // Ignore virtual bases.
1083         continue;
1084       }
1085 
1086       const CXXRecordDecl *BaseDecl =
1087       cast<CXXRecordDecl>(I->getType()->getAs<RecordType>()->getDecl());
1088 
1089       // Ignore empty bases.
1090       if (BaseDecl->isEmpty())
1091         continue;
1092 
1093       // Ignore bases that don't have any pointer to data members.
1094       if (CGM.getTypes().isZeroInitializable(BaseDecl))
1095         continue;
1096 
1097       uint64_t BaseOffset = Layout.getBaseClassOffsetInBits(BaseDecl);
1098       FillInNullDataMemberPointers(CGM, I->getType(),
1099                                    Elements, StartOffset + BaseOffset);
1100     }
1101 
1102     // Visit all fields.
1103     unsigned FieldNo = 0;
1104     for (RecordDecl::field_iterator I = RD->field_begin(),
1105          E = RD->field_end(); I != E; ++I, ++FieldNo) {
1106       QualType FieldType = I->getType();
1107 
1108       if (CGM.getTypes().isZeroInitializable(FieldType))
1109         continue;
1110 
1111       uint64_t FieldOffset = StartOffset + Layout.getFieldOffset(FieldNo);
1112       FillInNullDataMemberPointers(CGM, FieldType, Elements, FieldOffset);
1113     }
1114   } else {
1115     assert(T->isMemberPointerType() && "Should only see member pointers here!");
1116     assert(!T->getAs<MemberPointerType>()->getPointeeType()->isFunctionType() &&
1117            "Should only see pointers to data members here!");
1118 
1119     CharUnits StartIndex = CGM.getContext().toCharUnitsFromBits(StartOffset);
1120     CharUnits EndIndex = StartIndex + CGM.getContext().getTypeSizeInChars(T);
1121 
1122     // FIXME: hardcodes Itanium member pointer representation!
1123     llvm::Constant *NegativeOne =
1124       llvm::ConstantInt::get(llvm::Type::getInt8Ty(CGM.getLLVMContext()),
1125                              -1ULL, /*isSigned*/true);
1126 
1127     // Fill in the null data member pointer.
1128     for (CharUnits I = StartIndex; I != EndIndex; ++I)
1129       Elements[I.getQuantity()] = NegativeOne;
1130   }
1131 }
1132 
1133 static llvm::Constant *EmitNullConstantForBase(CodeGenModule &CGM,
1134                                                const llvm::Type *baseType,
1135                                                const CXXRecordDecl *base);
1136 
1137 static llvm::Constant *EmitNullConstant(CodeGenModule &CGM,
1138                                         const CXXRecordDecl *record,
1139                                         bool asCompleteObject) {
1140   const CGRecordLayout &layout = CGM.getTypes().getCGRecordLayout(record);
1141   const llvm::StructType *structure =
1142     (asCompleteObject ? layout.getLLVMType()
1143                       : layout.getBaseSubobjectLLVMType());
1144 
1145   unsigned numElements = structure->getNumElements();
1146   std::vector<llvm::Constant *> elements(numElements);
1147 
1148   // Fill in all the bases.
1149   for (CXXRecordDecl::base_class_const_iterator
1150          I = record->bases_begin(), E = record->bases_end(); I != E; ++I) {
1151     if (I->isVirtual()) {
1152       // Ignore virtual bases; if we're laying out for a complete
1153       // object, we'll lay these out later.
1154       continue;
1155     }
1156 
1157     const CXXRecordDecl *base =
1158       cast<CXXRecordDecl>(I->getType()->castAs<RecordType>()->getDecl());
1159 
1160     // Ignore empty bases.
1161     if (base->isEmpty())
1162       continue;
1163 
1164     unsigned fieldIndex = layout.getNonVirtualBaseLLVMFieldNo(base);
1165     const llvm::Type *baseType = structure->getElementType(fieldIndex);
1166     elements[fieldIndex] = EmitNullConstantForBase(CGM, baseType, base);
1167   }
1168 
1169   // Fill in all the fields.
1170   for (RecordDecl::field_iterator I = record->field_begin(),
1171          E = record->field_end(); I != E; ++I) {
1172     const FieldDecl *field = *I;
1173 
1174     // Ignore bit fields.
1175     if (field->isBitField())
1176       continue;
1177 
1178     unsigned fieldIndex = layout.getLLVMFieldNo(field);
1179     elements[fieldIndex] = CGM.EmitNullConstant(field->getType());
1180   }
1181 
1182   // Fill in the virtual bases, if we're working with the complete object.
1183   if (asCompleteObject) {
1184     for (CXXRecordDecl::base_class_const_iterator
1185            I = record->vbases_begin(), E = record->vbases_end(); I != E; ++I) {
1186       const CXXRecordDecl *base =
1187         cast<CXXRecordDecl>(I->getType()->castAs<RecordType>()->getDecl());
1188 
1189       // Ignore empty bases.
1190       if (base->isEmpty())
1191         continue;
1192 
1193       unsigned fieldIndex = layout.getVirtualBaseIndex(base);
1194 
1195       // We might have already laid this field out.
1196       if (elements[fieldIndex]) continue;
1197 
1198       const llvm::Type *baseType = structure->getElementType(fieldIndex);
1199       elements[fieldIndex] = EmitNullConstantForBase(CGM, baseType, base);
1200     }
1201   }
1202 
1203   // Now go through all other fields and zero them out.
1204   for (unsigned i = 0; i != numElements; ++i) {
1205     if (!elements[i])
1206       elements[i] = llvm::Constant::getNullValue(structure->getElementType(i));
1207   }
1208 
1209   return llvm::ConstantStruct::get(structure, elements);
1210 }
1211 
1212 /// Emit the null constant for a base subobject.
1213 static llvm::Constant *EmitNullConstantForBase(CodeGenModule &CGM,
1214                                                const llvm::Type *baseType,
1215                                                const CXXRecordDecl *base) {
1216   const CGRecordLayout &baseLayout = CGM.getTypes().getCGRecordLayout(base);
1217 
1218   // Just zero out bases that don't have any pointer to data members.
1219   if (baseLayout.isZeroInitializableAsBase())
1220     return llvm::Constant::getNullValue(baseType);
1221 
1222   // If the base type is a struct, we can just use its null constant.
1223   if (isa<llvm::StructType>(baseType)) {
1224     return EmitNullConstant(CGM, base, /*complete*/ false);
1225   }
1226 
1227   // Otherwise, some bases are represented as arrays of i8 if the size
1228   // of the base is smaller than its corresponding LLVM type.  Figure
1229   // out how many elements this base array has.
1230   const llvm::ArrayType *baseArrayType = cast<llvm::ArrayType>(baseType);
1231   unsigned numBaseElements = baseArrayType->getNumElements();
1232 
1233   // Fill in null data member pointers.
1234   std::vector<llvm::Constant *> baseElements(numBaseElements);
1235   FillInNullDataMemberPointers(CGM, CGM.getContext().getTypeDeclType(base),
1236                                baseElements, 0);
1237 
1238   // Now go through all other elements and zero them out.
1239   if (numBaseElements) {
1240     const llvm::Type *i8 = llvm::Type::getInt8Ty(CGM.getLLVMContext());
1241     llvm::Constant *i8_zero = llvm::Constant::getNullValue(i8);
1242     for (unsigned i = 0; i != numBaseElements; ++i) {
1243       if (!baseElements[i])
1244         baseElements[i] = i8_zero;
1245     }
1246   }
1247 
1248   return llvm::ConstantArray::get(baseArrayType, baseElements);
1249 }
1250 
1251 llvm::Constant *CodeGenModule::EmitNullConstant(QualType T) {
1252   if (getTypes().isZeroInitializable(T))
1253     return llvm::Constant::getNullValue(getTypes().ConvertTypeForMem(T));
1254 
1255   if (const ConstantArrayType *CAT = Context.getAsConstantArrayType(T)) {
1256 
1257     QualType ElementTy = CAT->getElementType();
1258 
1259     llvm::Constant *Element = EmitNullConstant(ElementTy);
1260     unsigned NumElements = CAT->getSize().getZExtValue();
1261     std::vector<llvm::Constant *> Array(NumElements);
1262     for (unsigned i = 0; i != NumElements; ++i)
1263       Array[i] = Element;
1264 
1265     const llvm::ArrayType *ATy =
1266       cast<llvm::ArrayType>(getTypes().ConvertTypeForMem(T));
1267     return llvm::ConstantArray::get(ATy, Array);
1268   }
1269 
1270   if (const RecordType *RT = T->getAs<RecordType>()) {
1271     const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
1272     return ::EmitNullConstant(*this, RD, /*complete object*/ true);
1273   }
1274 
1275   assert(T->isMemberPointerType() && "Should only see member pointers here!");
1276   assert(!T->getAs<MemberPointerType>()->getPointeeType()->isFunctionType() &&
1277          "Should only see pointers to data members here!");
1278 
1279   // Itanium C++ ABI 2.3:
1280   //   A NULL pointer is represented as -1.
1281   return getCXXABI().EmitNullMemberPointer(T->castAs<MemberPointerType>());
1282 }
1283