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   const FieldDecl *LastFD = 0;
348   bool IsMsStruct = RD->hasAttr<MsStructAttr>();
349 
350   for (RecordDecl::field_iterator Field = RD->field_begin(),
351        FieldEnd = RD->field_end(); Field != FieldEnd; ++Field, ++FieldNo) {
352     if (IsMsStruct) {
353       // Zero-length bitfields following non-bitfield members are
354       // ignored:
355       if (CGM.getContext().ZeroBitfieldFollowsNonBitfield((*Field), LastFD)) {
356         --FieldNo;
357         continue;
358       }
359       LastFD = (*Field);
360     }
361 
362     // If this is a union, skip all the fields that aren't being initialized.
363     if (RD->isUnion() && ILE->getInitializedFieldInUnion() != *Field)
364       continue;
365 
366     // Don't emit anonymous bitfields, they just affect layout.
367     if (Field->isBitField() && !Field->getIdentifier()) {
368       LastFD = (*Field);
369       continue;
370     }
371 
372     // Get the initializer.  A struct can include fields without initializers,
373     // we just use explicit null values for them.
374     llvm::Constant *EltInit;
375     if (ElementNo < ILE->getNumInits())
376       EltInit = CGM.EmitConstantExpr(ILE->getInit(ElementNo++),
377                                      Field->getType(), CGF);
378     else
379       EltInit = CGM.EmitNullConstant(Field->getType());
380 
381     if (!EltInit)
382       return false;
383 
384     if (!Field->isBitField()) {
385       // Handle non-bitfield members.
386       if (!AppendField(*Field, Layout.getFieldOffset(FieldNo), EltInit))
387         return false;
388     } else {
389       // Otherwise we have a bitfield.
390       AppendBitField(*Field, Layout.getFieldOffset(FieldNo),
391                      cast<llvm::ConstantInt>(EltInit));
392     }
393   }
394 
395   CharUnits LayoutSizeInChars = Layout.getSize();
396 
397   if (NextFieldOffsetInChars > LayoutSizeInChars) {
398     // If the struct is bigger than the size of the record type,
399     // we must have a flexible array member at the end.
400     assert(RD->hasFlexibleArrayMember() &&
401            "Must have flexible array member if struct is bigger than type!");
402 
403     // No tail padding is necessary.
404     return true;
405   }
406 
407   CharUnits LLVMSizeInChars =
408     NextFieldOffsetInChars.RoundUpToAlignment(LLVMStructAlignment);
409 
410   // Check if we need to convert the struct to a packed struct.
411   if (NextFieldOffsetInChars <= LayoutSizeInChars &&
412       LLVMSizeInChars > LayoutSizeInChars) {
413     assert(!Packed && "Size mismatch!");
414 
415     ConvertStructToPacked();
416     assert(NextFieldOffsetInChars <= LayoutSizeInChars &&
417            "Converting to packed did not help!");
418   }
419 
420   // Append tail padding if necessary.
421   AppendTailPadding(LayoutSizeInChars);
422 
423   assert(LayoutSizeInChars == NextFieldOffsetInChars &&
424          "Tail padding mismatch!");
425 
426   return true;
427 }
428 
429 llvm::Constant *ConstStructBuilder::
430   BuildStruct(CodeGenModule &CGM, CodeGenFunction *CGF, InitListExpr *ILE) {
431   ConstStructBuilder Builder(CGM, CGF);
432 
433   if (!Builder.Build(ILE))
434     return 0;
435 
436   llvm::Constant *Result =
437   llvm::ConstantStruct::get(CGM.getLLVMContext(),
438                             Builder.Elements, Builder.Packed);
439 
440   assert(Builder.NextFieldOffsetInChars.RoundUpToAlignment(
441            Builder.getAlignment(Result)) ==
442          Builder.getSizeInChars(Result) && "Size mismatch!");
443 
444   return Result;
445 }
446 
447 
448 //===----------------------------------------------------------------------===//
449 //                             ConstExprEmitter
450 //===----------------------------------------------------------------------===//
451 
452 class ConstExprEmitter :
453   public StmtVisitor<ConstExprEmitter, llvm::Constant*> {
454   CodeGenModule &CGM;
455   CodeGenFunction *CGF;
456   llvm::LLVMContext &VMContext;
457 public:
458   ConstExprEmitter(CodeGenModule &cgm, CodeGenFunction *cgf)
459     : CGM(cgm), CGF(cgf), VMContext(cgm.getLLVMContext()) {
460   }
461 
462   //===--------------------------------------------------------------------===//
463   //                            Visitor Methods
464   //===--------------------------------------------------------------------===//
465 
466   llvm::Constant *VisitStmt(Stmt *S) {
467     return 0;
468   }
469 
470   llvm::Constant *VisitParenExpr(ParenExpr *PE) {
471     return Visit(PE->getSubExpr());
472   }
473 
474   llvm::Constant *VisitGenericSelectionExpr(GenericSelectionExpr *GE) {
475     return Visit(GE->getResultExpr());
476   }
477 
478   llvm::Constant *VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
479     return Visit(E->getInitializer());
480   }
481 
482   llvm::Constant *VisitUnaryAddrOf(UnaryOperator *E) {
483     if (E->getType()->isMemberPointerType())
484       return CGM.getMemberPointerConstant(E);
485 
486     return 0;
487   }
488 
489   llvm::Constant *VisitBinSub(BinaryOperator *E) {
490     // This must be a pointer/pointer subtraction.  This only happens for
491     // address of label.
492     if (!isa<AddrLabelExpr>(E->getLHS()->IgnoreParenNoopCasts(CGM.getContext())) ||
493        !isa<AddrLabelExpr>(E->getRHS()->IgnoreParenNoopCasts(CGM.getContext())))
494       return 0;
495 
496     llvm::Constant *LHS = CGM.EmitConstantExpr(E->getLHS(),
497                                                E->getLHS()->getType(), CGF);
498     llvm::Constant *RHS = CGM.EmitConstantExpr(E->getRHS(),
499                                                E->getRHS()->getType(), CGF);
500 
501     const llvm::Type *ResultType = ConvertType(E->getType());
502     LHS = llvm::ConstantExpr::getPtrToInt(LHS, ResultType);
503     RHS = llvm::ConstantExpr::getPtrToInt(RHS, ResultType);
504 
505     // No need to divide by element size, since addr of label is always void*,
506     // which has size 1 in GNUish.
507     return llvm::ConstantExpr::getSub(LHS, RHS);
508   }
509 
510   llvm::Constant *VisitCastExpr(CastExpr* E) {
511     Expr *subExpr = E->getSubExpr();
512     llvm::Constant *C = CGM.EmitConstantExpr(subExpr, subExpr->getType(), CGF);
513     if (!C) return 0;
514 
515     const llvm::Type *destType = ConvertType(E->getType());
516 
517     switch (E->getCastKind()) {
518     case CK_ToUnion: {
519       // GCC cast to union extension
520       assert(E->getType()->isUnionType() &&
521              "Destination type is not union type!");
522 
523       // Build a struct with the union sub-element as the first member,
524       // and padded to the appropriate size
525       std::vector<llvm::Constant*> Elts;
526       std::vector<const llvm::Type*> Types;
527       Elts.push_back(C);
528       Types.push_back(C->getType());
529       unsigned CurSize = CGM.getTargetData().getTypeAllocSize(C->getType());
530       unsigned TotalSize = CGM.getTargetData().getTypeAllocSize(destType);
531 
532       assert(CurSize <= TotalSize && "Union size mismatch!");
533       if (unsigned NumPadBytes = TotalSize - CurSize) {
534         const llvm::Type *Ty = llvm::Type::getInt8Ty(VMContext);
535         if (NumPadBytes > 1)
536           Ty = llvm::ArrayType::get(Ty, NumPadBytes);
537 
538         Elts.push_back(llvm::UndefValue::get(Ty));
539         Types.push_back(Ty);
540       }
541 
542       llvm::StructType* STy =
543         llvm::StructType::get(C->getType()->getContext(), Types, false);
544       return llvm::ConstantStruct::get(STy, Elts);
545     }
546     case CK_NullToMemberPointer: {
547       const MemberPointerType *MPT = E->getType()->getAs<MemberPointerType>();
548       return CGM.getCXXABI().EmitNullMemberPointer(MPT);
549     }
550 
551     case CK_DerivedToBaseMemberPointer:
552     case CK_BaseToDerivedMemberPointer:
553       return CGM.getCXXABI().EmitMemberPointerConversion(C, E);
554 
555     case CK_LValueToRValue:
556     case CK_NoOp:
557       return C;
558 
559     case CK_AnyPointerToObjCPointerCast:
560     case CK_AnyPointerToBlockPointerCast:
561     case CK_LValueBitCast:
562     case CK_BitCast:
563       if (C->getType() == destType) return C;
564       return llvm::ConstantExpr::getBitCast(C, destType);
565 
566     case CK_Dependent: llvm_unreachable("saw dependent cast!");
567 
568     // These will never be supported.
569     case CK_ObjCObjectLValueCast:
570     case CK_GetObjCProperty:
571     case CK_ToVoid:
572     case CK_Dynamic:
573       return 0;
574 
575     // These might need to be supported for constexpr.
576     case CK_UserDefinedConversion:
577     case CK_ConstructorConversion:
578       return 0;
579 
580     // These should eventually be supported.
581     case CK_ArrayToPointerDecay:
582     case CK_FunctionToPointerDecay:
583     case CK_BaseToDerived:
584     case CK_DerivedToBase:
585     case CK_UncheckedDerivedToBase:
586     case CK_MemberPointerToBoolean:
587     case CK_VectorSplat:
588     case CK_FloatingRealToComplex:
589     case CK_FloatingComplexToReal:
590     case CK_FloatingComplexToBoolean:
591     case CK_FloatingComplexCast:
592     case CK_FloatingComplexToIntegralComplex:
593     case CK_IntegralRealToComplex:
594     case CK_IntegralComplexToReal:
595     case CK_IntegralComplexToBoolean:
596     case CK_IntegralComplexCast:
597     case CK_IntegralComplexToFloatingComplex:
598       return 0;
599 
600     case CK_PointerToIntegral:
601       if (!E->getType()->isBooleanType())
602         return llvm::ConstantExpr::getPtrToInt(C, destType);
603       // fallthrough
604 
605     case CK_PointerToBoolean:
606       return llvm::ConstantExpr::getICmp(llvm::CmpInst::ICMP_EQ, C,
607         llvm::ConstantPointerNull::get(cast<llvm::PointerType>(C->getType())));
608 
609     case CK_NullToPointer:
610       return llvm::ConstantPointerNull::get(cast<llvm::PointerType>(destType));
611 
612     case CK_IntegralCast: {
613       bool isSigned = subExpr->getType()->isSignedIntegerOrEnumerationType();
614       return llvm::ConstantExpr::getIntegerCast(C, destType, isSigned);
615     }
616 
617     case CK_IntegralToPointer: {
618       bool isSigned = subExpr->getType()->isSignedIntegerOrEnumerationType();
619       C = llvm::ConstantExpr::getIntegerCast(C, CGM.IntPtrTy, isSigned);
620       return llvm::ConstantExpr::getIntToPtr(C, destType);
621     }
622 
623     case CK_IntegralToBoolean:
624       return llvm::ConstantExpr::getICmp(llvm::CmpInst::ICMP_EQ, C,
625                              llvm::Constant::getNullValue(C->getType()));
626 
627     case CK_IntegralToFloating:
628       if (subExpr->getType()->isSignedIntegerOrEnumerationType())
629         return llvm::ConstantExpr::getSIToFP(C, destType);
630       else
631         return llvm::ConstantExpr::getUIToFP(C, destType);
632 
633     case CK_FloatingToIntegral:
634       if (E->getType()->isSignedIntegerOrEnumerationType())
635         return llvm::ConstantExpr::getFPToSI(C, destType);
636       else
637         return llvm::ConstantExpr::getFPToUI(C, destType);
638 
639     case CK_FloatingToBoolean:
640       return llvm::ConstantExpr::getFCmp(llvm::CmpInst::FCMP_UNE, C,
641                              llvm::Constant::getNullValue(C->getType()));
642 
643     case CK_FloatingCast:
644       return llvm::ConstantExpr::getFPCast(C, destType);
645     }
646     llvm_unreachable("Invalid CastKind");
647   }
648 
649   llvm::Constant *VisitCXXDefaultArgExpr(CXXDefaultArgExpr *DAE) {
650     return Visit(DAE->getExpr());
651   }
652 
653   llvm::Constant *EmitArrayInitialization(InitListExpr *ILE) {
654     unsigned NumInitElements = ILE->getNumInits();
655     if (NumInitElements == 1 && ILE->getType() == ILE->getInit(0)->getType() &&
656         (isa<StringLiteral>(ILE->getInit(0)) ||
657          isa<ObjCEncodeExpr>(ILE->getInit(0))))
658       return Visit(ILE->getInit(0));
659 
660     std::vector<llvm::Constant*> Elts;
661     const llvm::ArrayType *AType =
662         cast<llvm::ArrayType>(ConvertType(ILE->getType()));
663     const llvm::Type *ElemTy = AType->getElementType();
664     unsigned NumElements = AType->getNumElements();
665 
666     // Initialising an array requires us to automatically
667     // initialise any elements that have not been initialised explicitly
668     unsigned NumInitableElts = std::min(NumInitElements, NumElements);
669 
670     // Copy initializer elements.
671     unsigned i = 0;
672     bool RewriteType = false;
673     for (; i < NumInitableElts; ++i) {
674       Expr *Init = ILE->getInit(i);
675       llvm::Constant *C = CGM.EmitConstantExpr(Init, Init->getType(), CGF);
676       if (!C)
677         return 0;
678       RewriteType |= (C->getType() != ElemTy);
679       Elts.push_back(C);
680     }
681 
682     // Initialize remaining array elements.
683     // FIXME: This doesn't handle member pointers correctly!
684     llvm::Constant *fillC;
685     if (Expr *filler = ILE->getArrayFiller())
686       fillC = CGM.EmitConstantExpr(filler, filler->getType(), CGF);
687     else
688       fillC = llvm::Constant::getNullValue(ElemTy);
689     if (!fillC)
690       return 0;
691     RewriteType |= (fillC->getType() != ElemTy);
692     for (; i < NumElements; ++i)
693       Elts.push_back(fillC);
694 
695     if (RewriteType) {
696       // FIXME: Try to avoid packing the array
697       std::vector<const llvm::Type*> Types;
698       for (unsigned i = 0; i < Elts.size(); ++i)
699         Types.push_back(Elts[i]->getType());
700       const llvm::StructType *SType = llvm::StructType::get(AType->getContext(),
701                                                             Types, true);
702       return llvm::ConstantStruct::get(SType, Elts);
703     }
704 
705     return llvm::ConstantArray::get(AType, Elts);
706   }
707 
708   llvm::Constant *EmitStructInitialization(InitListExpr *ILE) {
709     return ConstStructBuilder::BuildStruct(CGM, CGF, ILE);
710   }
711 
712   llvm::Constant *EmitUnionInitialization(InitListExpr *ILE) {
713     return ConstStructBuilder::BuildStruct(CGM, CGF, ILE);
714   }
715 
716   llvm::Constant *VisitImplicitValueInitExpr(ImplicitValueInitExpr* E) {
717     return CGM.EmitNullConstant(E->getType());
718   }
719 
720   llvm::Constant *VisitInitListExpr(InitListExpr *ILE) {
721     if (ILE->getType()->isScalarType()) {
722       // We have a scalar in braces. Just use the first element.
723       if (ILE->getNumInits() > 0) {
724         Expr *Init = ILE->getInit(0);
725         return CGM.EmitConstantExpr(Init, Init->getType(), CGF);
726       }
727       return CGM.EmitNullConstant(ILE->getType());
728     }
729 
730     if (ILE->getType()->isArrayType())
731       return EmitArrayInitialization(ILE);
732 
733     if (ILE->getType()->isRecordType())
734       return EmitStructInitialization(ILE);
735 
736     if (ILE->getType()->isUnionType())
737       return EmitUnionInitialization(ILE);
738 
739     // If ILE was a constant vector, we would have handled it already.
740     if (ILE->getType()->isVectorType())
741       return 0;
742 
743     assert(0 && "Unable to handle InitListExpr");
744     // Get rid of control reaches end of void function warning.
745     // Not reached.
746     return 0;
747   }
748 
749   llvm::Constant *VisitCXXConstructExpr(CXXConstructExpr *E) {
750     if (!E->getConstructor()->isTrivial())
751       return 0;
752 
753     QualType Ty = E->getType();
754 
755     // FIXME: We should not have to call getBaseElementType here.
756     const RecordType *RT =
757       CGM.getContext().getBaseElementType(Ty)->getAs<RecordType>();
758     const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
759 
760     // If the class doesn't have a trivial destructor, we can't emit it as a
761     // constant expr.
762     if (!RD->hasTrivialDestructor())
763       return 0;
764 
765     // Only copy and default constructors can be trivial.
766 
767 
768     if (E->getNumArgs()) {
769       assert(E->getNumArgs() == 1 && "trivial ctor with > 1 argument");
770       assert(E->getConstructor()->isCopyConstructor() &&
771              "trivial ctor has argument but isn't a copy ctor");
772 
773       Expr *Arg = E->getArg(0);
774       assert(CGM.getContext().hasSameUnqualifiedType(Ty, Arg->getType()) &&
775              "argument to copy ctor is of wrong type");
776 
777       return Visit(Arg);
778     }
779 
780     return CGM.EmitNullConstant(Ty);
781   }
782 
783   llvm::Constant *VisitStringLiteral(StringLiteral *E) {
784     assert(!E->getType()->isPointerType() && "Strings are always arrays");
785 
786     // This must be a string initializing an array in a static initializer.
787     // Don't emit it as the address of the string, emit the string data itself
788     // as an inline array.
789     return llvm::ConstantArray::get(VMContext,
790                                     CGM.GetStringForStringLiteral(E), false);
791   }
792 
793   llvm::Constant *VisitObjCEncodeExpr(ObjCEncodeExpr *E) {
794     // This must be an @encode initializing an array in a static initializer.
795     // Don't emit it as the address of the string, emit the string data itself
796     // as an inline array.
797     std::string Str;
798     CGM.getContext().getObjCEncodingForType(E->getEncodedType(), Str);
799     const ConstantArrayType *CAT = cast<ConstantArrayType>(E->getType());
800 
801     // Resize the string to the right size, adding zeros at the end, or
802     // truncating as needed.
803     Str.resize(CAT->getSize().getZExtValue(), '\0');
804     return llvm::ConstantArray::get(VMContext, Str, false);
805   }
806 
807   llvm::Constant *VisitUnaryExtension(const UnaryOperator *E) {
808     return Visit(E->getSubExpr());
809   }
810 
811   // Utility methods
812   const llvm::Type *ConvertType(QualType T) {
813     return CGM.getTypes().ConvertType(T);
814   }
815 
816 public:
817   llvm::Constant *EmitLValue(Expr *E) {
818     switch (E->getStmtClass()) {
819     default: break;
820     case Expr::CompoundLiteralExprClass: {
821       // Note that due to the nature of compound literals, this is guaranteed
822       // to be the only use of the variable, so we just generate it here.
823       CompoundLiteralExpr *CLE = cast<CompoundLiteralExpr>(E);
824       llvm::Constant* C = Visit(CLE->getInitializer());
825       // FIXME: "Leaked" on failure.
826       if (C)
827         C = new llvm::GlobalVariable(CGM.getModule(), C->getType(),
828                                      E->getType().isConstant(CGM.getContext()),
829                                      llvm::GlobalValue::InternalLinkage,
830                                      C, ".compoundliteral", 0, false,
831                           CGM.getContext().getTargetAddressSpace(E->getType()));
832       return C;
833     }
834     case Expr::DeclRefExprClass: {
835       ValueDecl *Decl = cast<DeclRefExpr>(E)->getDecl();
836       if (Decl->hasAttr<WeakRefAttr>())
837         return CGM.GetWeakRefReference(Decl);
838       if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Decl))
839         return CGM.GetAddrOfFunction(FD);
840       if (const VarDecl* VD = dyn_cast<VarDecl>(Decl)) {
841         // We can never refer to a variable with local storage.
842         if (!VD->hasLocalStorage()) {
843           if (VD->isFileVarDecl() || VD->hasExternalStorage())
844             return CGM.GetAddrOfGlobalVar(VD);
845           else if (VD->isLocalVarDecl()) {
846             assert(CGF && "Can't access static local vars without CGF");
847             return CGF->GetAddrOfStaticLocalVar(VD);
848           }
849         }
850       }
851       break;
852     }
853     case Expr::StringLiteralClass:
854       return CGM.GetAddrOfConstantStringFromLiteral(cast<StringLiteral>(E));
855     case Expr::ObjCEncodeExprClass:
856       return CGM.GetAddrOfConstantStringFromObjCEncode(cast<ObjCEncodeExpr>(E));
857     case Expr::ObjCStringLiteralClass: {
858       ObjCStringLiteral* SL = cast<ObjCStringLiteral>(E);
859       llvm::Constant *C =
860           CGM.getObjCRuntime().GenerateConstantString(SL->getString());
861       return llvm::ConstantExpr::getBitCast(C, ConvertType(E->getType()));
862     }
863     case Expr::PredefinedExprClass: {
864       unsigned Type = cast<PredefinedExpr>(E)->getIdentType();
865       if (CGF) {
866         LValue Res = CGF->EmitPredefinedLValue(cast<PredefinedExpr>(E));
867         return cast<llvm::Constant>(Res.getAddress());
868       } else if (Type == PredefinedExpr::PrettyFunction) {
869         return CGM.GetAddrOfConstantCString("top level", ".tmp");
870       }
871 
872       return CGM.GetAddrOfConstantCString("", ".tmp");
873     }
874     case Expr::AddrLabelExprClass: {
875       assert(CGF && "Invalid address of label expression outside function.");
876       llvm::Constant *Ptr =
877         CGF->GetAddrOfLabel(cast<AddrLabelExpr>(E)->getLabel());
878       return llvm::ConstantExpr::getBitCast(Ptr, ConvertType(E->getType()));
879     }
880     case Expr::CallExprClass: {
881       CallExpr* CE = cast<CallExpr>(E);
882       unsigned builtin = CE->isBuiltinCall(CGM.getContext());
883       if (builtin !=
884             Builtin::BI__builtin___CFStringMakeConstantString &&
885           builtin !=
886             Builtin::BI__builtin___NSStringMakeConstantString)
887         break;
888       const Expr *Arg = CE->getArg(0)->IgnoreParenCasts();
889       const StringLiteral *Literal = cast<StringLiteral>(Arg);
890       if (builtin ==
891             Builtin::BI__builtin___NSStringMakeConstantString) {
892         return CGM.getObjCRuntime().GenerateConstantString(Literal);
893       }
894       // FIXME: need to deal with UCN conversion issues.
895       return CGM.GetAddrOfConstantCFString(Literal);
896     }
897     case Expr::BlockExprClass: {
898       std::string FunctionName;
899       if (CGF)
900         FunctionName = CGF->CurFn->getName();
901       else
902         FunctionName = "global";
903 
904       return CGM.GetAddrOfGlobalBlock(cast<BlockExpr>(E), FunctionName.c_str());
905     }
906     }
907 
908     return 0;
909   }
910 };
911 
912 }  // end anonymous namespace.
913 
914 llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E,
915                                                 QualType DestType,
916                                                 CodeGenFunction *CGF) {
917   Expr::EvalResult Result;
918 
919   bool Success = false;
920 
921   if (DestType->isReferenceType())
922     Success = E->EvaluateAsLValue(Result, Context);
923   else
924     Success = E->Evaluate(Result, Context);
925 
926   if (Success && !Result.HasSideEffects) {
927     switch (Result.Val.getKind()) {
928     case APValue::Uninitialized:
929       assert(0 && "Constant expressions should be initialized.");
930       return 0;
931     case APValue::LValue: {
932       const llvm::Type *DestTy = getTypes().ConvertTypeForMem(DestType);
933       llvm::Constant *Offset =
934         llvm::ConstantInt::get(llvm::Type::getInt64Ty(VMContext),
935                                Result.Val.getLValueOffset().getQuantity());
936 
937       llvm::Constant *C;
938       if (const Expr *LVBase = Result.Val.getLValueBase()) {
939         C = ConstExprEmitter(*this, CGF).EmitLValue(const_cast<Expr*>(LVBase));
940 
941         // Apply offset if necessary.
942         if (!Offset->isNullValue()) {
943           const llvm::Type *Type = llvm::Type::getInt8PtrTy(VMContext);
944           llvm::Constant *Casted = llvm::ConstantExpr::getBitCast(C, Type);
945           Casted = llvm::ConstantExpr::getGetElementPtr(Casted, &Offset, 1);
946           C = llvm::ConstantExpr::getBitCast(Casted, C->getType());
947         }
948 
949         // Convert to the appropriate type; this could be an lvalue for
950         // an integer.
951         if (isa<llvm::PointerType>(DestTy))
952           return llvm::ConstantExpr::getBitCast(C, DestTy);
953 
954         return llvm::ConstantExpr::getPtrToInt(C, DestTy);
955       } else {
956         C = Offset;
957 
958         // Convert to the appropriate type; this could be an lvalue for
959         // an integer.
960         if (isa<llvm::PointerType>(DestTy))
961           return llvm::ConstantExpr::getIntToPtr(C, DestTy);
962 
963         // If the types don't match this should only be a truncate.
964         if (C->getType() != DestTy)
965           return llvm::ConstantExpr::getTrunc(C, DestTy);
966 
967         return C;
968       }
969     }
970     case APValue::Int: {
971       llvm::Constant *C = llvm::ConstantInt::get(VMContext,
972                                                  Result.Val.getInt());
973 
974       if (C->getType()->isIntegerTy(1)) {
975         const llvm::Type *BoolTy = getTypes().ConvertTypeForMem(E->getType());
976         C = llvm::ConstantExpr::getZExt(C, BoolTy);
977       }
978       return C;
979     }
980     case APValue::ComplexInt: {
981       llvm::Constant *Complex[2];
982 
983       Complex[0] = llvm::ConstantInt::get(VMContext,
984                                           Result.Val.getComplexIntReal());
985       Complex[1] = llvm::ConstantInt::get(VMContext,
986                                           Result.Val.getComplexIntImag());
987 
988       // FIXME: the target may want to specify that this is packed.
989       return llvm::ConstantStruct::get(VMContext, Complex, 2, false);
990     }
991     case APValue::Float:
992       return llvm::ConstantFP::get(VMContext, Result.Val.getFloat());
993     case APValue::ComplexFloat: {
994       llvm::Constant *Complex[2];
995 
996       Complex[0] = llvm::ConstantFP::get(VMContext,
997                                          Result.Val.getComplexFloatReal());
998       Complex[1] = llvm::ConstantFP::get(VMContext,
999                                          Result.Val.getComplexFloatImag());
1000 
1001       // FIXME: the target may want to specify that this is packed.
1002       return llvm::ConstantStruct::get(VMContext, Complex, 2, false);
1003     }
1004     case APValue::Vector: {
1005       llvm::SmallVector<llvm::Constant *, 4> Inits;
1006       unsigned NumElts = Result.Val.getVectorLength();
1007 
1008       if (Context.getLangOptions().AltiVec &&
1009           isa<CastExpr>(E) &&
1010           cast<CastExpr>(E)->getCastKind() == CK_VectorSplat) {
1011         // AltiVec vector initialization with a single literal
1012         APValue &Elt = Result.Val.getVectorElt(0);
1013 
1014         llvm::Constant* InitValue = Elt.isInt()
1015           ? cast<llvm::Constant>
1016               (llvm::ConstantInt::get(VMContext, Elt.getInt()))
1017           : cast<llvm::Constant>
1018               (llvm::ConstantFP::get(VMContext, Elt.getFloat()));
1019 
1020         for (unsigned i = 0; i != NumElts; ++i)
1021           Inits.push_back(InitValue);
1022 
1023       } else {
1024         for (unsigned i = 0; i != NumElts; ++i) {
1025           APValue &Elt = Result.Val.getVectorElt(i);
1026           if (Elt.isInt())
1027             Inits.push_back(llvm::ConstantInt::get(VMContext, Elt.getInt()));
1028           else
1029             Inits.push_back(llvm::ConstantFP::get(VMContext, Elt.getFloat()));
1030         }
1031       }
1032       return llvm::ConstantVector::get(Inits);
1033     }
1034     }
1035   }
1036 
1037   llvm::Constant* C = ConstExprEmitter(*this, CGF).Visit(const_cast<Expr*>(E));
1038   if (C && C->getType()->isIntegerTy(1)) {
1039     const llvm::Type *BoolTy = getTypes().ConvertTypeForMem(E->getType());
1040     C = llvm::ConstantExpr::getZExt(C, BoolTy);
1041   }
1042   return C;
1043 }
1044 
1045 static uint64_t getFieldOffset(ASTContext &C, const FieldDecl *field) {
1046   const ASTRecordLayout &layout = C.getASTRecordLayout(field->getParent());
1047   return layout.getFieldOffset(field->getFieldIndex());
1048 }
1049 
1050 llvm::Constant *
1051 CodeGenModule::getMemberPointerConstant(const UnaryOperator *uo) {
1052   // Member pointer constants always have a very particular form.
1053   const MemberPointerType *type = cast<MemberPointerType>(uo->getType());
1054   const ValueDecl *decl = cast<DeclRefExpr>(uo->getSubExpr())->getDecl();
1055 
1056   // A member function pointer.
1057   if (const CXXMethodDecl *method = dyn_cast<CXXMethodDecl>(decl))
1058     return getCXXABI().EmitMemberPointer(method);
1059 
1060   // Otherwise, a member data pointer.
1061   uint64_t fieldOffset;
1062   if (const FieldDecl *field = dyn_cast<FieldDecl>(decl))
1063     fieldOffset = getFieldOffset(getContext(), field);
1064   else {
1065     const IndirectFieldDecl *ifield = cast<IndirectFieldDecl>(decl);
1066 
1067     fieldOffset = 0;
1068     for (IndirectFieldDecl::chain_iterator ci = ifield->chain_begin(),
1069            ce = ifield->chain_end(); ci != ce; ++ci)
1070       fieldOffset += getFieldOffset(getContext(), cast<FieldDecl>(*ci));
1071   }
1072 
1073   CharUnits chars = getContext().toCharUnitsFromBits((int64_t) fieldOffset);
1074   return getCXXABI().EmitMemberDataPointer(type, chars);
1075 }
1076 
1077 static void
1078 FillInNullDataMemberPointers(CodeGenModule &CGM, QualType T,
1079                              std::vector<llvm::Constant *> &Elements,
1080                              uint64_t StartOffset) {
1081   assert(StartOffset % CGM.getContext().getCharWidth() == 0 &&
1082          "StartOffset not byte aligned!");
1083 
1084   if (CGM.getTypes().isZeroInitializable(T))
1085     return;
1086 
1087   if (const ConstantArrayType *CAT =
1088         CGM.getContext().getAsConstantArrayType(T)) {
1089     QualType ElementTy = CAT->getElementType();
1090     uint64_t ElementSize = CGM.getContext().getTypeSize(ElementTy);
1091 
1092     for (uint64_t I = 0, E = CAT->getSize().getZExtValue(); I != E; ++I) {
1093       FillInNullDataMemberPointers(CGM, ElementTy, Elements,
1094                                    StartOffset + I * ElementSize);
1095     }
1096   } else if (const RecordType *RT = T->getAs<RecordType>()) {
1097     const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
1098     const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);
1099 
1100     // Go through all bases and fill in any null pointer to data members.
1101     for (CXXRecordDecl::base_class_const_iterator I = RD->bases_begin(),
1102          E = RD->bases_end(); I != E; ++I) {
1103       if (I->isVirtual()) {
1104         // Ignore virtual bases.
1105         continue;
1106       }
1107 
1108       const CXXRecordDecl *BaseDecl =
1109       cast<CXXRecordDecl>(I->getType()->getAs<RecordType>()->getDecl());
1110 
1111       // Ignore empty bases.
1112       if (BaseDecl->isEmpty())
1113         continue;
1114 
1115       // Ignore bases that don't have any pointer to data members.
1116       if (CGM.getTypes().isZeroInitializable(BaseDecl))
1117         continue;
1118 
1119       uint64_t BaseOffset = Layout.getBaseClassOffsetInBits(BaseDecl);
1120       FillInNullDataMemberPointers(CGM, I->getType(),
1121                                    Elements, StartOffset + BaseOffset);
1122     }
1123 
1124     // Visit all fields.
1125     unsigned FieldNo = 0;
1126     for (RecordDecl::field_iterator I = RD->field_begin(),
1127          E = RD->field_end(); I != E; ++I, ++FieldNo) {
1128       QualType FieldType = I->getType();
1129 
1130       if (CGM.getTypes().isZeroInitializable(FieldType))
1131         continue;
1132 
1133       uint64_t FieldOffset = StartOffset + Layout.getFieldOffset(FieldNo);
1134       FillInNullDataMemberPointers(CGM, FieldType, Elements, FieldOffset);
1135     }
1136   } else {
1137     assert(T->isMemberPointerType() && "Should only see member pointers here!");
1138     assert(!T->getAs<MemberPointerType>()->getPointeeType()->isFunctionType() &&
1139            "Should only see pointers to data members here!");
1140 
1141     CharUnits StartIndex = CGM.getContext().toCharUnitsFromBits(StartOffset);
1142     CharUnits EndIndex = StartIndex + CGM.getContext().getTypeSizeInChars(T);
1143 
1144     // FIXME: hardcodes Itanium member pointer representation!
1145     llvm::Constant *NegativeOne =
1146       llvm::ConstantInt::get(llvm::Type::getInt8Ty(CGM.getLLVMContext()),
1147                              -1ULL, /*isSigned*/true);
1148 
1149     // Fill in the null data member pointer.
1150     for (CharUnits I = StartIndex; I != EndIndex; ++I)
1151       Elements[I.getQuantity()] = NegativeOne;
1152   }
1153 }
1154 
1155 static llvm::Constant *EmitNullConstantForBase(CodeGenModule &CGM,
1156                                                const llvm::Type *baseType,
1157                                                const CXXRecordDecl *base);
1158 
1159 static llvm::Constant *EmitNullConstant(CodeGenModule &CGM,
1160                                         const CXXRecordDecl *record,
1161                                         bool asCompleteObject) {
1162   const CGRecordLayout &layout = CGM.getTypes().getCGRecordLayout(record);
1163   const llvm::StructType *structure =
1164     (asCompleteObject ? layout.getLLVMType()
1165                       : layout.getBaseSubobjectLLVMType());
1166 
1167   unsigned numElements = structure->getNumElements();
1168   std::vector<llvm::Constant *> elements(numElements);
1169 
1170   // Fill in all the bases.
1171   for (CXXRecordDecl::base_class_const_iterator
1172          I = record->bases_begin(), E = record->bases_end(); I != E; ++I) {
1173     if (I->isVirtual()) {
1174       // Ignore virtual bases; if we're laying out for a complete
1175       // object, we'll lay these out later.
1176       continue;
1177     }
1178 
1179     const CXXRecordDecl *base =
1180       cast<CXXRecordDecl>(I->getType()->castAs<RecordType>()->getDecl());
1181 
1182     // Ignore empty bases.
1183     if (base->isEmpty())
1184       continue;
1185 
1186     unsigned fieldIndex = layout.getNonVirtualBaseLLVMFieldNo(base);
1187     const llvm::Type *baseType = structure->getElementType(fieldIndex);
1188     elements[fieldIndex] = EmitNullConstantForBase(CGM, baseType, base);
1189   }
1190 
1191   // Fill in all the fields.
1192   for (RecordDecl::field_iterator I = record->field_begin(),
1193          E = record->field_end(); I != E; ++I) {
1194     const FieldDecl *field = *I;
1195 
1196     // Ignore bit fields.
1197     if (field->isBitField())
1198       continue;
1199 
1200     unsigned fieldIndex = layout.getLLVMFieldNo(field);
1201     elements[fieldIndex] = CGM.EmitNullConstant(field->getType());
1202   }
1203 
1204   // Fill in the virtual bases, if we're working with the complete object.
1205   if (asCompleteObject) {
1206     for (CXXRecordDecl::base_class_const_iterator
1207            I = record->vbases_begin(), E = record->vbases_end(); I != E; ++I) {
1208       const CXXRecordDecl *base =
1209         cast<CXXRecordDecl>(I->getType()->castAs<RecordType>()->getDecl());
1210 
1211       // Ignore empty bases.
1212       if (base->isEmpty())
1213         continue;
1214 
1215       unsigned fieldIndex = layout.getVirtualBaseIndex(base);
1216 
1217       // We might have already laid this field out.
1218       if (elements[fieldIndex]) continue;
1219 
1220       const llvm::Type *baseType = structure->getElementType(fieldIndex);
1221       elements[fieldIndex] = EmitNullConstantForBase(CGM, baseType, base);
1222     }
1223   }
1224 
1225   // Now go through all other fields and zero them out.
1226   for (unsigned i = 0; i != numElements; ++i) {
1227     if (!elements[i])
1228       elements[i] = llvm::Constant::getNullValue(structure->getElementType(i));
1229   }
1230 
1231   return llvm::ConstantStruct::get(structure, elements);
1232 }
1233 
1234 /// Emit the null constant for a base subobject.
1235 static llvm::Constant *EmitNullConstantForBase(CodeGenModule &CGM,
1236                                                const llvm::Type *baseType,
1237                                                const CXXRecordDecl *base) {
1238   const CGRecordLayout &baseLayout = CGM.getTypes().getCGRecordLayout(base);
1239 
1240   // Just zero out bases that don't have any pointer to data members.
1241   if (baseLayout.isZeroInitializableAsBase())
1242     return llvm::Constant::getNullValue(baseType);
1243 
1244   // If the base type is a struct, we can just use its null constant.
1245   if (isa<llvm::StructType>(baseType)) {
1246     return EmitNullConstant(CGM, base, /*complete*/ false);
1247   }
1248 
1249   // Otherwise, some bases are represented as arrays of i8 if the size
1250   // of the base is smaller than its corresponding LLVM type.  Figure
1251   // out how many elements this base array has.
1252   const llvm::ArrayType *baseArrayType = cast<llvm::ArrayType>(baseType);
1253   unsigned numBaseElements = baseArrayType->getNumElements();
1254 
1255   // Fill in null data member pointers.
1256   std::vector<llvm::Constant *> baseElements(numBaseElements);
1257   FillInNullDataMemberPointers(CGM, CGM.getContext().getTypeDeclType(base),
1258                                baseElements, 0);
1259 
1260   // Now go through all other elements and zero them out.
1261   if (numBaseElements) {
1262     const llvm::Type *i8 = llvm::Type::getInt8Ty(CGM.getLLVMContext());
1263     llvm::Constant *i8_zero = llvm::Constant::getNullValue(i8);
1264     for (unsigned i = 0; i != numBaseElements; ++i) {
1265       if (!baseElements[i])
1266         baseElements[i] = i8_zero;
1267     }
1268   }
1269 
1270   return llvm::ConstantArray::get(baseArrayType, baseElements);
1271 }
1272 
1273 llvm::Constant *CodeGenModule::EmitNullConstant(QualType T) {
1274   if (getTypes().isZeroInitializable(T))
1275     return llvm::Constant::getNullValue(getTypes().ConvertTypeForMem(T));
1276 
1277   if (const ConstantArrayType *CAT = Context.getAsConstantArrayType(T)) {
1278 
1279     QualType ElementTy = CAT->getElementType();
1280 
1281     llvm::Constant *Element = EmitNullConstant(ElementTy);
1282     unsigned NumElements = CAT->getSize().getZExtValue();
1283     std::vector<llvm::Constant *> Array(NumElements);
1284     for (unsigned i = 0; i != NumElements; ++i)
1285       Array[i] = Element;
1286 
1287     const llvm::ArrayType *ATy =
1288       cast<llvm::ArrayType>(getTypes().ConvertTypeForMem(T));
1289     return llvm::ConstantArray::get(ATy, Array);
1290   }
1291 
1292   if (const RecordType *RT = T->getAs<RecordType>()) {
1293     const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
1294     return ::EmitNullConstant(*this, RD, /*complete object*/ true);
1295   }
1296 
1297   assert(T->isMemberPointerType() && "Should only see member pointers here!");
1298   assert(!T->getAs<MemberPointerType>()->getPointeeType()->isFunctionType() &&
1299          "Should only see pointers to data members here!");
1300 
1301   // Itanium C++ ABI 2.3:
1302   //   A NULL pointer is represented as -1.
1303   return getCXXABI().EmitNullMemberPointer(T->castAs<MemberPointerType>());
1304 }
1305