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