SemaExpr.cpp revision c0d600c83a91b200616616f3982553c0ff42fcf3
1//===--- SemaExpr.cpp - Semantic Analysis for 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 file implements semantic analysis for expressions.
11//
12//===----------------------------------------------------------------------===//
13
14#include "Sema.h"
15#include "clang/AST/ASTContext.h"
16#include "clang/AST/DeclObjC.h"
17#include "clang/AST/ExprCXX.h"
18#include "clang/AST/ExprObjC.h"
19#include "clang/AST/DeclTemplate.h"
20#include "clang/Lex/Preprocessor.h"
21#include "clang/Lex/LiteralSupport.h"
22#include "clang/Basic/SourceManager.h"
23#include "clang/Basic/TargetInfo.h"
24#include "clang/Parse/DeclSpec.h"
25#include "clang/Parse/Designator.h"
26#include "clang/Parse/Scope.h"
27using namespace clang;
28
29/// \brief Determine whether the use of this declaration is valid, and
30/// emit any corresponding diagnostics.
31///
32/// This routine diagnoses various problems with referencing
33/// declarations that can occur when using a declaration. For example,
34/// it might warn if a deprecated or unavailable declaration is being
35/// used, or produce an error (and return true) if a C++0x deleted
36/// function is being used.
37///
38/// \returns true if there was an error (this declaration cannot be
39/// referenced), false otherwise.
40bool Sema::DiagnoseUseOfDecl(NamedDecl *D, SourceLocation Loc) {
41  // See if the decl is deprecated.
42  if (D->getAttr<DeprecatedAttr>()) {
43    // Implementing deprecated stuff requires referencing deprecated
44    // stuff. Don't warn if we are implementing a deprecated
45    // construct.
46    bool isSilenced = false;
47
48    if (NamedDecl *ND = getCurFunctionOrMethodDecl()) {
49      // If this reference happens *in* a deprecated function or method, don't
50      // warn.
51      isSilenced = ND->getAttr<DeprecatedAttr>();
52
53      // If this is an Objective-C method implementation, check to see if the
54      // method was deprecated on the declaration, not the definition.
55      if (ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(ND)) {
56        // The semantic decl context of a ObjCMethodDecl is the
57        // ObjCImplementationDecl.
58        if (ObjCImplementationDecl *Impl
59              = dyn_cast<ObjCImplementationDecl>(MD->getParent())) {
60
61          MD = Impl->getClassInterface()->getMethod(Context,
62                                                    MD->getSelector(),
63                                                    MD->isInstanceMethod());
64          isSilenced |= MD && MD->getAttr<DeprecatedAttr>();
65        }
66      }
67    }
68
69    if (!isSilenced)
70      Diag(Loc, diag::warn_deprecated) << D->getDeclName();
71  }
72
73  // See if this is a deleted function.
74  if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
75    if (FD->isDeleted()) {
76      Diag(Loc, diag::err_deleted_function_use);
77      Diag(D->getLocation(), diag::note_unavailable_here) << true;
78      return true;
79    }
80  }
81
82  // See if the decl is unavailable
83  if (D->getAttr<UnavailableAttr>()) {
84    Diag(Loc, diag::warn_unavailable) << D->getDeclName();
85    Diag(D->getLocation(), diag::note_unavailable_here) << 0;
86  }
87
88  return false;
89}
90
91SourceRange Sema::getExprRange(ExprTy *E) const {
92  Expr *Ex = (Expr *)E;
93  return Ex? Ex->getSourceRange() : SourceRange();
94}
95
96//===----------------------------------------------------------------------===//
97//  Standard Promotions and Conversions
98//===----------------------------------------------------------------------===//
99
100/// DefaultFunctionArrayConversion (C99 6.3.2.1p3, C99 6.3.2.1p4).
101void Sema::DefaultFunctionArrayConversion(Expr *&E) {
102  QualType Ty = E->getType();
103  assert(!Ty.isNull() && "DefaultFunctionArrayConversion - missing type");
104
105  if (Ty->isFunctionType())
106    ImpCastExprToType(E, Context.getPointerType(Ty));
107  else if (Ty->isArrayType()) {
108    // In C90 mode, arrays only promote to pointers if the array expression is
109    // an lvalue.  The relevant legalese is C90 6.2.2.1p3: "an lvalue that has
110    // type 'array of type' is converted to an expression that has type 'pointer
111    // to type'...".  In C99 this was changed to: C99 6.3.2.1p3: "an expression
112    // that has type 'array of type' ...".  The relevant change is "an lvalue"
113    // (C90) to "an expression" (C99).
114    //
115    // C++ 4.2p1:
116    // An lvalue or rvalue of type "array of N T" or "array of unknown bound of
117    // T" can be converted to an rvalue of type "pointer to T".
118    //
119    if (getLangOptions().C99 || getLangOptions().CPlusPlus ||
120        E->isLvalue(Context) == Expr::LV_Valid)
121      ImpCastExprToType(E, Context.getArrayDecayedType(Ty));
122  }
123}
124
125/// \brief Whether this is a promotable bitfield reference according
126/// to C99 6.3.1.1p2, bullet 2.
127///
128/// \returns the type this bit-field will promote to, or NULL if no
129/// promotion occurs.
130static QualType isPromotableBitField(Expr *E, ASTContext &Context) {
131  FieldDecl *Field = E->getBitField();
132  if (!Field)
133    return QualType();
134
135  const BuiltinType *BT = Field->getType()->getAsBuiltinType();
136  if (!BT)
137    return QualType();
138
139  if (BT->getKind() != BuiltinType::Bool &&
140      BT->getKind() != BuiltinType::Int &&
141      BT->getKind() != BuiltinType::UInt)
142    return QualType();
143
144  llvm::APSInt BitWidthAP;
145  if (!Field->getBitWidth()->isIntegerConstantExpr(BitWidthAP, Context))
146    return QualType();
147
148  uint64_t BitWidth = BitWidthAP.getZExtValue();
149  uint64_t IntSize = Context.getTypeSize(Context.IntTy);
150  if (BitWidth < IntSize ||
151      (Field->getType()->isSignedIntegerType() && BitWidth == IntSize))
152    return Context.IntTy;
153
154  if (BitWidth == IntSize && Field->getType()->isUnsignedIntegerType())
155    return Context.UnsignedIntTy;
156
157  return QualType();
158}
159
160/// UsualUnaryConversions - Performs various conversions that are common to most
161/// operators (C99 6.3). The conversions of array and function types are
162/// sometimes surpressed. For example, the array->pointer conversion doesn't
163/// apply if the array is an argument to the sizeof or address (&) operators.
164/// In these instances, this routine should *not* be called.
165Expr *Sema::UsualUnaryConversions(Expr *&Expr) {
166  QualType Ty = Expr->getType();
167  assert(!Ty.isNull() && "UsualUnaryConversions - missing type");
168
169  // C99 6.3.1.1p2:
170  //
171  //   The following may be used in an expression wherever an int or
172  //   unsigned int may be used:
173  //     - an object or expression with an integer type whose integer
174  //       conversion rank is less than or equal to the rank of int
175  //       and unsigned int.
176  //     - A bit-field of type _Bool, int, signed int, or unsigned int.
177  //
178  //   If an int can represent all values of the original type, the
179  //   value is converted to an int; otherwise, it is converted to an
180  //   unsigned int. These are called the integer promotions. All
181  //   other types are unchanged by the integer promotions.
182  if (Ty->isPromotableIntegerType()) {
183    ImpCastExprToType(Expr, Context.IntTy);
184    return Expr;
185  } else {
186    QualType T = isPromotableBitField(Expr, Context);
187    if (!T.isNull()) {
188      ImpCastExprToType(Expr, T);
189      return Expr;
190    }
191  }
192
193  DefaultFunctionArrayConversion(Expr);
194  return Expr;
195}
196
197/// DefaultArgumentPromotion (C99 6.5.2.2p6). Used for function calls that
198/// do not have a prototype. Arguments that have type float are promoted to
199/// double. All other argument types are converted by UsualUnaryConversions().
200void Sema::DefaultArgumentPromotion(Expr *&Expr) {
201  QualType Ty = Expr->getType();
202  assert(!Ty.isNull() && "DefaultArgumentPromotion - missing type");
203
204  // If this is a 'float' (CVR qualified or typedef) promote to double.
205  if (const BuiltinType *BT = Ty->getAsBuiltinType())
206    if (BT->getKind() == BuiltinType::Float)
207      return ImpCastExprToType(Expr, Context.DoubleTy);
208
209  UsualUnaryConversions(Expr);
210}
211
212/// DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but
213/// will warn if the resulting type is not a POD type, and rejects ObjC
214/// interfaces passed by value.  This returns true if the argument type is
215/// completely illegal.
216bool Sema::DefaultVariadicArgumentPromotion(Expr *&Expr, VariadicCallType CT) {
217  DefaultArgumentPromotion(Expr);
218
219  if (Expr->getType()->isObjCInterfaceType()) {
220    Diag(Expr->getLocStart(),
221         diag::err_cannot_pass_objc_interface_to_vararg)
222      << Expr->getType() << CT;
223    return true;
224  }
225
226  if (!Expr->getType()->isPODType())
227    Diag(Expr->getLocStart(), diag::warn_cannot_pass_non_pod_arg_to_vararg)
228      << Expr->getType() << CT;
229
230  return false;
231}
232
233
234/// UsualArithmeticConversions - Performs various conversions that are common to
235/// binary operators (C99 6.3.1.8). If both operands aren't arithmetic, this
236/// routine returns the first non-arithmetic type found. The client is
237/// responsible for emitting appropriate error diagnostics.
238/// FIXME: verify the conversion rules for "complex int" are consistent with
239/// GCC.
240QualType Sema::UsualArithmeticConversions(Expr *&lhsExpr, Expr *&rhsExpr,
241                                          bool isCompAssign) {
242  if (!isCompAssign)
243    UsualUnaryConversions(lhsExpr);
244
245  UsualUnaryConversions(rhsExpr);
246
247  // For conversion purposes, we ignore any qualifiers.
248  // For example, "const float" and "float" are equivalent.
249  QualType lhs =
250    Context.getCanonicalType(lhsExpr->getType()).getUnqualifiedType();
251  QualType rhs =
252    Context.getCanonicalType(rhsExpr->getType()).getUnqualifiedType();
253
254  // If both types are identical, no conversion is needed.
255  if (lhs == rhs)
256    return lhs;
257
258  // If either side is a non-arithmetic type (e.g. a pointer), we are done.
259  // The caller can deal with this (e.g. pointer + int).
260  if (!lhs->isArithmeticType() || !rhs->isArithmeticType())
261    return lhs;
262
263  // Perform bitfield promotions.
264  QualType LHSBitfieldPromoteTy = isPromotableBitField(lhsExpr, Context);
265  if (!LHSBitfieldPromoteTy.isNull())
266    lhs = LHSBitfieldPromoteTy;
267  QualType RHSBitfieldPromoteTy = isPromotableBitField(rhsExpr, Context);
268  if (!RHSBitfieldPromoteTy.isNull())
269    rhs = RHSBitfieldPromoteTy;
270
271  QualType destType = UsualArithmeticConversionsType(lhs, rhs);
272  if (!isCompAssign)
273    ImpCastExprToType(lhsExpr, destType);
274  ImpCastExprToType(rhsExpr, destType);
275  return destType;
276}
277
278QualType Sema::UsualArithmeticConversionsType(QualType lhs, QualType rhs) {
279  // Perform the usual unary conversions. We do this early so that
280  // integral promotions to "int" can allow us to exit early, in the
281  // lhs == rhs check. Also, for conversion purposes, we ignore any
282  // qualifiers.  For example, "const float" and "float" are
283  // equivalent.
284  if (lhs->isPromotableIntegerType())
285    lhs = Context.IntTy;
286  else
287    lhs = lhs.getUnqualifiedType();
288  if (rhs->isPromotableIntegerType())
289    rhs = Context.IntTy;
290  else
291    rhs = rhs.getUnqualifiedType();
292
293  // If both types are identical, no conversion is needed.
294  if (lhs == rhs)
295    return lhs;
296
297  // If either side is a non-arithmetic type (e.g. a pointer), we are done.
298  // The caller can deal with this (e.g. pointer + int).
299  if (!lhs->isArithmeticType() || !rhs->isArithmeticType())
300    return lhs;
301
302  // At this point, we have two different arithmetic types.
303
304  // Handle complex types first (C99 6.3.1.8p1).
305  if (lhs->isComplexType() || rhs->isComplexType()) {
306    // if we have an integer operand, the result is the complex type.
307    if (rhs->isIntegerType() || rhs->isComplexIntegerType()) {
308      // convert the rhs to the lhs complex type.
309      return lhs;
310    }
311    if (lhs->isIntegerType() || lhs->isComplexIntegerType()) {
312      // convert the lhs to the rhs complex type.
313      return rhs;
314    }
315    // This handles complex/complex, complex/float, or float/complex.
316    // When both operands are complex, the shorter operand is converted to the
317    // type of the longer, and that is the type of the result. This corresponds
318    // to what is done when combining two real floating-point operands.
319    // The fun begins when size promotion occur across type domains.
320    // From H&S 6.3.4: When one operand is complex and the other is a real
321    // floating-point type, the less precise type is converted, within it's
322    // real or complex domain, to the precision of the other type. For example,
323    // when combining a "long double" with a "double _Complex", the
324    // "double _Complex" is promoted to "long double _Complex".
325    int result = Context.getFloatingTypeOrder(lhs, rhs);
326
327    if (result > 0) { // The left side is bigger, convert rhs.
328      rhs = Context.getFloatingTypeOfSizeWithinDomain(lhs, rhs);
329    } else if (result < 0) { // The right side is bigger, convert lhs.
330      lhs = Context.getFloatingTypeOfSizeWithinDomain(rhs, lhs);
331    }
332    // At this point, lhs and rhs have the same rank/size. Now, make sure the
333    // domains match. This is a requirement for our implementation, C99
334    // does not require this promotion.
335    if (lhs != rhs) { // Domains don't match, we have complex/float mix.
336      if (lhs->isRealFloatingType()) { // handle "double, _Complex double".
337        return rhs;
338      } else { // handle "_Complex double, double".
339        return lhs;
340      }
341    }
342    return lhs; // The domain/size match exactly.
343  }
344  // Now handle "real" floating types (i.e. float, double, long double).
345  if (lhs->isRealFloatingType() || rhs->isRealFloatingType()) {
346    // if we have an integer operand, the result is the real floating type.
347    if (rhs->isIntegerType()) {
348      // convert rhs to the lhs floating point type.
349      return lhs;
350    }
351    if (rhs->isComplexIntegerType()) {
352      // convert rhs to the complex floating point type.
353      return Context.getComplexType(lhs);
354    }
355    if (lhs->isIntegerType()) {
356      // convert lhs to the rhs floating point type.
357      return rhs;
358    }
359    if (lhs->isComplexIntegerType()) {
360      // convert lhs to the complex floating point type.
361      return Context.getComplexType(rhs);
362    }
363    // We have two real floating types, float/complex combos were handled above.
364    // Convert the smaller operand to the bigger result.
365    int result = Context.getFloatingTypeOrder(lhs, rhs);
366    if (result > 0) // convert the rhs
367      return lhs;
368    assert(result < 0 && "illegal float comparison");
369    return rhs;   // convert the lhs
370  }
371  if (lhs->isComplexIntegerType() || rhs->isComplexIntegerType()) {
372    // Handle GCC complex int extension.
373    const ComplexType *lhsComplexInt = lhs->getAsComplexIntegerType();
374    const ComplexType *rhsComplexInt = rhs->getAsComplexIntegerType();
375
376    if (lhsComplexInt && rhsComplexInt) {
377      if (Context.getIntegerTypeOrder(lhsComplexInt->getElementType(),
378                                      rhsComplexInt->getElementType()) >= 0)
379        return lhs; // convert the rhs
380      return rhs;
381    } else if (lhsComplexInt && rhs->isIntegerType()) {
382      // convert the rhs to the lhs complex type.
383      return lhs;
384    } else if (rhsComplexInt && lhs->isIntegerType()) {
385      // convert the lhs to the rhs complex type.
386      return rhs;
387    }
388  }
389  // Finally, we have two differing integer types.
390  // The rules for this case are in C99 6.3.1.8
391  int compare = Context.getIntegerTypeOrder(lhs, rhs);
392  bool lhsSigned = lhs->isSignedIntegerType(),
393       rhsSigned = rhs->isSignedIntegerType();
394  QualType destType;
395  if (lhsSigned == rhsSigned) {
396    // Same signedness; use the higher-ranked type
397    destType = compare >= 0 ? lhs : rhs;
398  } else if (compare != (lhsSigned ? 1 : -1)) {
399    // The unsigned type has greater than or equal rank to the
400    // signed type, so use the unsigned type
401    destType = lhsSigned ? rhs : lhs;
402  } else if (Context.getIntWidth(lhs) != Context.getIntWidth(rhs)) {
403    // The two types are different widths; if we are here, that
404    // means the signed type is larger than the unsigned type, so
405    // use the signed type.
406    destType = lhsSigned ? lhs : rhs;
407  } else {
408    // The signed type is higher-ranked than the unsigned type,
409    // but isn't actually any bigger (like unsigned int and long
410    // on most 32-bit systems).  Use the unsigned type corresponding
411    // to the signed type.
412    destType = Context.getCorrespondingUnsignedType(lhsSigned ? lhs : rhs);
413  }
414  return destType;
415}
416
417//===----------------------------------------------------------------------===//
418//  Semantic Analysis for various Expression Types
419//===----------------------------------------------------------------------===//
420
421
422/// ActOnStringLiteral - The specified tokens were lexed as pasted string
423/// fragments (e.g. "foo" "bar" L"baz").  The result string has to handle string
424/// concatenation ([C99 5.1.1.2, translation phase #6]), so it may come from
425/// multiple tokens.  However, the common case is that StringToks points to one
426/// string.
427///
428Action::OwningExprResult
429Sema::ActOnStringLiteral(const Token *StringToks, unsigned NumStringToks) {
430  assert(NumStringToks && "Must have at least one string!");
431
432  StringLiteralParser Literal(StringToks, NumStringToks, PP);
433  if (Literal.hadError)
434    return ExprError();
435
436  llvm::SmallVector<SourceLocation, 4> StringTokLocs;
437  for (unsigned i = 0; i != NumStringToks; ++i)
438    StringTokLocs.push_back(StringToks[i].getLocation());
439
440  QualType StrTy = Context.CharTy;
441  if (Literal.AnyWide) StrTy = Context.getWCharType();
442  if (Literal.Pascal) StrTy = Context.UnsignedCharTy;
443
444  // A C++ string literal has a const-qualified element type (C++ 2.13.4p1).
445  if (getLangOptions().CPlusPlus)
446    StrTy.addConst();
447
448  // Get an array type for the string, according to C99 6.4.5.  This includes
449  // the nul terminator character as well as the string length for pascal
450  // strings.
451  StrTy = Context.getConstantArrayType(StrTy,
452                                 llvm::APInt(32, Literal.GetNumStringChars()+1),
453                                       ArrayType::Normal, 0);
454
455  // Pass &StringTokLocs[0], StringTokLocs.size() to factory!
456  return Owned(StringLiteral::Create(Context, Literal.GetString(),
457                                     Literal.GetStringLength(),
458                                     Literal.AnyWide, StrTy,
459                                     &StringTokLocs[0],
460                                     StringTokLocs.size()));
461}
462
463/// ShouldSnapshotBlockValueReference - Return true if a reference inside of
464/// CurBlock to VD should cause it to be snapshotted (as we do for auto
465/// variables defined outside the block) or false if this is not needed (e.g.
466/// for values inside the block or for globals).
467///
468/// This also keeps the 'hasBlockDeclRefExprs' in the BlockSemaInfo records
469/// up-to-date.
470///
471static bool ShouldSnapshotBlockValueReference(BlockSemaInfo *CurBlock,
472                                              ValueDecl *VD) {
473  // If the value is defined inside the block, we couldn't snapshot it even if
474  // we wanted to.
475  if (CurBlock->TheDecl == VD->getDeclContext())
476    return false;
477
478  // If this is an enum constant or function, it is constant, don't snapshot.
479  if (isa<EnumConstantDecl>(VD) || isa<FunctionDecl>(VD))
480    return false;
481
482  // If this is a reference to an extern, static, or global variable, no need to
483  // snapshot it.
484  // FIXME: What about 'const' variables in C++?
485  if (const VarDecl *Var = dyn_cast<VarDecl>(VD))
486    if (!Var->hasLocalStorage())
487      return false;
488
489  // Blocks that have these can't be constant.
490  CurBlock->hasBlockDeclRefExprs = true;
491
492  // If we have nested blocks, the decl may be declared in an outer block (in
493  // which case that outer block doesn't get "hasBlockDeclRefExprs") or it may
494  // be defined outside all of the current blocks (in which case the blocks do
495  // all get the bit).  Walk the nesting chain.
496  for (BlockSemaInfo *NextBlock = CurBlock->PrevBlockInfo; NextBlock;
497       NextBlock = NextBlock->PrevBlockInfo) {
498    // If we found the defining block for the variable, don't mark the block as
499    // having a reference outside it.
500    if (NextBlock->TheDecl == VD->getDeclContext())
501      break;
502
503    // Otherwise, the DeclRef from the inner block causes the outer one to need
504    // a snapshot as well.
505    NextBlock->hasBlockDeclRefExprs = true;
506  }
507
508  return true;
509}
510
511
512
513/// ActOnIdentifierExpr - The parser read an identifier in expression context,
514/// validate it per-C99 6.5.1.  HasTrailingLParen indicates whether this
515/// identifier is used in a function call context.
516/// SS is only used for a C++ qualified-id (foo::bar) to indicate the
517/// class or namespace that the identifier must be a member of.
518Sema::OwningExprResult Sema::ActOnIdentifierExpr(Scope *S, SourceLocation Loc,
519                                                 IdentifierInfo &II,
520                                                 bool HasTrailingLParen,
521                                                 const CXXScopeSpec *SS,
522                                                 bool isAddressOfOperand) {
523  return ActOnDeclarationNameExpr(S, Loc, &II, HasTrailingLParen, SS,
524                                  isAddressOfOperand);
525}
526
527/// BuildDeclRefExpr - Build either a DeclRefExpr or a
528/// QualifiedDeclRefExpr based on whether or not SS is a
529/// nested-name-specifier.
530DeclRefExpr *
531Sema::BuildDeclRefExpr(NamedDecl *D, QualType Ty, SourceLocation Loc,
532                       bool TypeDependent, bool ValueDependent,
533                       const CXXScopeSpec *SS) {
534  if (SS && !SS->isEmpty()) {
535    return new (Context) QualifiedDeclRefExpr(D, Ty, Loc, TypeDependent,
536                                              ValueDependent, SS->getRange(),
537                  static_cast<NestedNameSpecifier *>(SS->getScopeRep()));
538  } else
539    return new (Context) DeclRefExpr(D, Ty, Loc, TypeDependent, ValueDependent);
540}
541
542/// getObjectForAnonymousRecordDecl - Retrieve the (unnamed) field or
543/// variable corresponding to the anonymous union or struct whose type
544/// is Record.
545static Decl *getObjectForAnonymousRecordDecl(ASTContext &Context,
546                                             RecordDecl *Record) {
547  assert(Record->isAnonymousStructOrUnion() &&
548         "Record must be an anonymous struct or union!");
549
550  // FIXME: Once Decls are directly linked together, this will
551  // be an O(1) operation rather than a slow walk through DeclContext's
552  // vector (which itself will be eliminated). DeclGroups might make
553  // this even better.
554  DeclContext *Ctx = Record->getDeclContext();
555  for (DeclContext::decl_iterator D = Ctx->decls_begin(Context),
556                               DEnd = Ctx->decls_end(Context);
557       D != DEnd; ++D) {
558    if (*D == Record) {
559      // The object for the anonymous struct/union directly
560      // follows its type in the list of declarations.
561      ++D;
562      assert(D != DEnd && "Missing object for anonymous record");
563      assert(!cast<NamedDecl>(*D)->getDeclName() && "Decl should be unnamed");
564      return *D;
565    }
566  }
567
568  assert(false && "Missing object for anonymous record");
569  return 0;
570}
571
572/// \brief Given a field that represents a member of an anonymous
573/// struct/union, build the path from that field's context to the
574/// actual member.
575///
576/// Construct the sequence of field member references we'll have to
577/// perform to get to the field in the anonymous union/struct. The
578/// list of members is built from the field outward, so traverse it
579/// backwards to go from an object in the current context to the field
580/// we found.
581///
582/// \returns The variable from which the field access should begin,
583/// for an anonymous struct/union that is not a member of another
584/// class. Otherwise, returns NULL.
585VarDecl *Sema::BuildAnonymousStructUnionMemberPath(FieldDecl *Field,
586                                   llvm::SmallVectorImpl<FieldDecl *> &Path) {
587  assert(Field->getDeclContext()->isRecord() &&
588         cast<RecordDecl>(Field->getDeclContext())->isAnonymousStructOrUnion()
589         && "Field must be stored inside an anonymous struct or union");
590
591  Path.push_back(Field);
592  VarDecl *BaseObject = 0;
593  DeclContext *Ctx = Field->getDeclContext();
594  do {
595    RecordDecl *Record = cast<RecordDecl>(Ctx);
596    Decl *AnonObject = getObjectForAnonymousRecordDecl(Context, Record);
597    if (FieldDecl *AnonField = dyn_cast<FieldDecl>(AnonObject))
598      Path.push_back(AnonField);
599    else {
600      BaseObject = cast<VarDecl>(AnonObject);
601      break;
602    }
603    Ctx = Ctx->getParent();
604  } while (Ctx->isRecord() &&
605           cast<RecordDecl>(Ctx)->isAnonymousStructOrUnion());
606
607  return BaseObject;
608}
609
610Sema::OwningExprResult
611Sema::BuildAnonymousStructUnionMemberReference(SourceLocation Loc,
612                                               FieldDecl *Field,
613                                               Expr *BaseObjectExpr,
614                                               SourceLocation OpLoc) {
615  llvm::SmallVector<FieldDecl *, 4> AnonFields;
616  VarDecl *BaseObject = BuildAnonymousStructUnionMemberPath(Field,
617                                                            AnonFields);
618
619  // Build the expression that refers to the base object, from
620  // which we will build a sequence of member references to each
621  // of the anonymous union objects and, eventually, the field we
622  // found via name lookup.
623  bool BaseObjectIsPointer = false;
624  unsigned ExtraQuals = 0;
625  if (BaseObject) {
626    // BaseObject is an anonymous struct/union variable (and is,
627    // therefore, not part of another non-anonymous record).
628    if (BaseObjectExpr) BaseObjectExpr->Destroy(Context);
629    BaseObjectExpr = new (Context) DeclRefExpr(BaseObject,BaseObject->getType(),
630                                               SourceLocation());
631    ExtraQuals
632      = Context.getCanonicalType(BaseObject->getType()).getCVRQualifiers();
633  } else if (BaseObjectExpr) {
634    // The caller provided the base object expression. Determine
635    // whether its a pointer and whether it adds any qualifiers to the
636    // anonymous struct/union fields we're looking into.
637    QualType ObjectType = BaseObjectExpr->getType();
638    if (const PointerType *ObjectPtr = ObjectType->getAsPointerType()) {
639      BaseObjectIsPointer = true;
640      ObjectType = ObjectPtr->getPointeeType();
641    }
642    ExtraQuals = Context.getCanonicalType(ObjectType).getCVRQualifiers();
643  } else {
644    // We've found a member of an anonymous struct/union that is
645    // inside a non-anonymous struct/union, so in a well-formed
646    // program our base object expression is "this".
647    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(CurContext)) {
648      if (!MD->isStatic()) {
649        QualType AnonFieldType
650          = Context.getTagDeclType(
651                     cast<RecordDecl>(AnonFields.back()->getDeclContext()));
652        QualType ThisType = Context.getTagDeclType(MD->getParent());
653        if ((Context.getCanonicalType(AnonFieldType)
654               == Context.getCanonicalType(ThisType)) ||
655            IsDerivedFrom(ThisType, AnonFieldType)) {
656          // Our base object expression is "this".
657          BaseObjectExpr = new (Context) CXXThisExpr(SourceLocation(),
658                                                     MD->getThisType(Context));
659          BaseObjectIsPointer = true;
660        }
661      } else {
662        return ExprError(Diag(Loc,diag::err_invalid_member_use_in_static_method)
663          << Field->getDeclName());
664      }
665      ExtraQuals = MD->getTypeQualifiers();
666    }
667
668    if (!BaseObjectExpr)
669      return ExprError(Diag(Loc, diag::err_invalid_non_static_member_use)
670        << Field->getDeclName());
671  }
672
673  // Build the implicit member references to the field of the
674  // anonymous struct/union.
675  Expr *Result = BaseObjectExpr;
676  for (llvm::SmallVector<FieldDecl *, 4>::reverse_iterator
677         FI = AnonFields.rbegin(), FIEnd = AnonFields.rend();
678       FI != FIEnd; ++FI) {
679    QualType MemberType = (*FI)->getType();
680    if (!(*FI)->isMutable()) {
681      unsigned combinedQualifiers
682        = MemberType.getCVRQualifiers() | ExtraQuals;
683      MemberType = MemberType.getQualifiedType(combinedQualifiers);
684    }
685    Result = new (Context) MemberExpr(Result, BaseObjectIsPointer, *FI,
686                                      OpLoc, MemberType);
687    BaseObjectIsPointer = false;
688    ExtraQuals = Context.getCanonicalType(MemberType).getCVRQualifiers();
689  }
690
691  return Owned(Result);
692}
693
694/// ActOnDeclarationNameExpr - The parser has read some kind of name
695/// (e.g., a C++ id-expression (C++ [expr.prim]p1)). This routine
696/// performs lookup on that name and returns an expression that refers
697/// to that name. This routine isn't directly called from the parser,
698/// because the parser doesn't know about DeclarationName. Rather,
699/// this routine is called by ActOnIdentifierExpr,
700/// ActOnOperatorFunctionIdExpr, and ActOnConversionFunctionExpr,
701/// which form the DeclarationName from the corresponding syntactic
702/// forms.
703///
704/// HasTrailingLParen indicates whether this identifier is used in a
705/// function call context.  LookupCtx is only used for a C++
706/// qualified-id (foo::bar) to indicate the class or namespace that
707/// the identifier must be a member of.
708///
709/// isAddressOfOperand means that this expression is the direct operand
710/// of an address-of operator. This matters because this is the only
711/// situation where a qualified name referencing a non-static member may
712/// appear outside a member function of this class.
713Sema::OwningExprResult
714Sema::ActOnDeclarationNameExpr(Scope *S, SourceLocation Loc,
715                               DeclarationName Name, bool HasTrailingLParen,
716                               const CXXScopeSpec *SS,
717                               bool isAddressOfOperand) {
718  // Could be enum-constant, value decl, instance variable, etc.
719  if (SS && SS->isInvalid())
720    return ExprError();
721
722  // C++ [temp.dep.expr]p3:
723  //   An id-expression is type-dependent if it contains:
724  //     -- a nested-name-specifier that contains a class-name that
725  //        names a dependent type.
726  if (SS && isDependentScopeSpecifier(*SS)) {
727    return Owned(new (Context) UnresolvedDeclRefExpr(Name, Context.DependentTy,
728                                                     Loc, SS->getRange(),
729                static_cast<NestedNameSpecifier *>(SS->getScopeRep())));
730  }
731
732  LookupResult Lookup = LookupParsedName(S, SS, Name, LookupOrdinaryName,
733                                         false, true, Loc);
734
735  if (Lookup.isAmbiguous()) {
736    DiagnoseAmbiguousLookup(Lookup, Name, Loc,
737                            SS && SS->isSet() ? SS->getRange()
738                                              : SourceRange());
739    return ExprError();
740  }
741
742  NamedDecl *D = Lookup.getAsDecl();
743
744  // If this reference is in an Objective-C method, then ivar lookup happens as
745  // well.
746  IdentifierInfo *II = Name.getAsIdentifierInfo();
747  if (II && getCurMethodDecl()) {
748    // There are two cases to handle here.  1) scoped lookup could have failed,
749    // in which case we should look for an ivar.  2) scoped lookup could have
750    // found a decl, but that decl is outside the current instance method (i.e.
751    // a global variable).  In these two cases, we do a lookup for an ivar with
752    // this name, if the lookup sucedes, we replace it our current decl.
753    if (D == 0 || D->isDefinedOutsideFunctionOrMethod()) {
754      ObjCInterfaceDecl *IFace = getCurMethodDecl()->getClassInterface();
755      ObjCInterfaceDecl *ClassDeclared;
756      if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(Context, II,
757                                                           ClassDeclared)) {
758        // Check if referencing a field with __attribute__((deprecated)).
759        if (DiagnoseUseOfDecl(IV, Loc))
760          return ExprError();
761
762        // If we're referencing an invalid decl, just return this as a silent
763        // error node.  The error diagnostic was already emitted on the decl.
764        if (IV->isInvalidDecl())
765          return ExprError();
766
767        bool IsClsMethod = getCurMethodDecl()->isClassMethod();
768        // If a class method attemps to use a free standing ivar, this is
769        // an error.
770        if (IsClsMethod && D && !D->isDefinedOutsideFunctionOrMethod())
771           return ExprError(Diag(Loc, diag::error_ivar_use_in_class_method)
772                           << IV->getDeclName());
773        // If a class method uses a global variable, even if an ivar with
774        // same name exists, use the global.
775        if (!IsClsMethod) {
776          if (IV->getAccessControl() == ObjCIvarDecl::Private &&
777              ClassDeclared != IFace)
778           Diag(Loc, diag::error_private_ivar_access) << IV->getDeclName();
779          // FIXME: This should use a new expr for a direct reference, don't turn
780          // this into Self->ivar, just return a BareIVarExpr or something.
781          IdentifierInfo &II = Context.Idents.get("self");
782          OwningExprResult SelfExpr = ActOnIdentifierExpr(S, Loc, II, false);
783          return Owned(new (Context)
784                       ObjCIvarRefExpr(IV, IV->getType(), Loc,
785                                       SelfExpr.takeAs<Expr>(), true, true));
786        }
787      }
788    }
789    else if (getCurMethodDecl()->isInstanceMethod()) {
790      // We should warn if a local variable hides an ivar.
791      ObjCInterfaceDecl *IFace = getCurMethodDecl()->getClassInterface();
792      ObjCInterfaceDecl *ClassDeclared;
793      if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(Context, II,
794                                                           ClassDeclared)) {
795        if (IV->getAccessControl() != ObjCIvarDecl::Private ||
796            IFace == ClassDeclared)
797          Diag(Loc, diag::warn_ivar_use_hidden) << IV->getDeclName();
798      }
799    }
800    // Needed to implement property "super.method" notation.
801    if (D == 0 && II->isStr("super")) {
802      QualType T;
803
804      if (getCurMethodDecl()->isInstanceMethod())
805        T = Context.getPointerType(Context.getObjCInterfaceType(
806                                   getCurMethodDecl()->getClassInterface()));
807      else
808        T = Context.getObjCClassType();
809      return Owned(new (Context) ObjCSuperExpr(Loc, T));
810    }
811  }
812
813  // Determine whether this name might be a candidate for
814  // argument-dependent lookup.
815  bool ADL = getLangOptions().CPlusPlus && (!SS || !SS->isSet()) &&
816             HasTrailingLParen;
817
818  if (ADL && D == 0) {
819    // We've seen something of the form
820    //
821    //   identifier(
822    //
823    // and we did not find any entity by the name
824    // "identifier". However, this identifier is still subject to
825    // argument-dependent lookup, so keep track of the name.
826    return Owned(new (Context) UnresolvedFunctionNameExpr(Name,
827                                                          Context.OverloadTy,
828                                                          Loc));
829  }
830
831  if (D == 0) {
832    // Otherwise, this could be an implicitly declared function reference (legal
833    // in C90, extension in C99).
834    if (HasTrailingLParen && II &&
835        !getLangOptions().CPlusPlus) // Not in C++.
836      D = ImplicitlyDefineFunction(Loc, *II, S);
837    else {
838      // If this name wasn't predeclared and if this is not a function call,
839      // diagnose the problem.
840      if (SS && !SS->isEmpty())
841        return ExprError(Diag(Loc, diag::err_typecheck_no_member)
842          << Name << SS->getRange());
843      else if (Name.getNameKind() == DeclarationName::CXXOperatorName ||
844               Name.getNameKind() == DeclarationName::CXXConversionFunctionName)
845        return ExprError(Diag(Loc, diag::err_undeclared_use)
846          << Name.getAsString());
847      else
848        return ExprError(Diag(Loc, diag::err_undeclared_var_use) << Name);
849    }
850  }
851
852  // If this is an expression of the form &Class::member, don't build an
853  // implicit member ref, because we want a pointer to the member in general,
854  // not any specific instance's member.
855  if (isAddressOfOperand && SS && !SS->isEmpty() && !HasTrailingLParen) {
856    DeclContext *DC = computeDeclContext(*SS);
857    if (D && isa<CXXRecordDecl>(DC)) {
858      QualType DType;
859      if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {
860        DType = FD->getType().getNonReferenceType();
861      } else if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
862        DType = Method->getType();
863      } else if (isa<OverloadedFunctionDecl>(D)) {
864        DType = Context.OverloadTy;
865      }
866      // Could be an inner type. That's diagnosed below, so ignore it here.
867      if (!DType.isNull()) {
868        // The pointer is type- and value-dependent if it points into something
869        // dependent.
870        bool Dependent = false;
871        for (; DC; DC = DC->getParent()) {
872          // FIXME: could stop early at namespace scope.
873          if (DC->isRecord()) {
874            CXXRecordDecl *Record = cast<CXXRecordDecl>(DC);
875            if (Context.getTypeDeclType(Record)->isDependentType()) {
876              Dependent = true;
877              break;
878            }
879          }
880        }
881        return Owned(BuildDeclRefExpr(D, DType, Loc, Dependent, Dependent, SS));
882      }
883    }
884  }
885
886  // We may have found a field within an anonymous union or struct
887  // (C++ [class.union]).
888  if (FieldDecl *FD = dyn_cast<FieldDecl>(D))
889    if (cast<RecordDecl>(FD->getDeclContext())->isAnonymousStructOrUnion())
890      return BuildAnonymousStructUnionMemberReference(Loc, FD);
891
892  if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(CurContext)) {
893    if (!MD->isStatic()) {
894      // C++ [class.mfct.nonstatic]p2:
895      //   [...] if name lookup (3.4.1) resolves the name in the
896      //   id-expression to a nonstatic nontype member of class X or of
897      //   a base class of X, the id-expression is transformed into a
898      //   class member access expression (5.2.5) using (*this) (9.3.2)
899      //   as the postfix-expression to the left of the '.' operator.
900      DeclContext *Ctx = 0;
901      QualType MemberType;
902      if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {
903        Ctx = FD->getDeclContext();
904        MemberType = FD->getType();
905
906        if (const ReferenceType *RefType = MemberType->getAsReferenceType())
907          MemberType = RefType->getPointeeType();
908        else if (!FD->isMutable()) {
909          unsigned combinedQualifiers
910            = MemberType.getCVRQualifiers() | MD->getTypeQualifiers();
911          MemberType = MemberType.getQualifiedType(combinedQualifiers);
912        }
913      } else if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
914        if (!Method->isStatic()) {
915          Ctx = Method->getParent();
916          MemberType = Method->getType();
917        }
918      } else if (OverloadedFunctionDecl *Ovl
919                   = dyn_cast<OverloadedFunctionDecl>(D)) {
920        for (OverloadedFunctionDecl::function_iterator
921               Func = Ovl->function_begin(),
922               FuncEnd = Ovl->function_end();
923             Func != FuncEnd; ++Func) {
924          if (CXXMethodDecl *DMethod = dyn_cast<CXXMethodDecl>(*Func))
925            if (!DMethod->isStatic()) {
926              Ctx = Ovl->getDeclContext();
927              MemberType = Context.OverloadTy;
928              break;
929            }
930        }
931      }
932
933      if (Ctx && Ctx->isRecord()) {
934        QualType CtxType = Context.getTagDeclType(cast<CXXRecordDecl>(Ctx));
935        QualType ThisType = Context.getTagDeclType(MD->getParent());
936        if ((Context.getCanonicalType(CtxType)
937               == Context.getCanonicalType(ThisType)) ||
938            IsDerivedFrom(ThisType, CtxType)) {
939          // Build the implicit member access expression.
940          Expr *This = new (Context) CXXThisExpr(SourceLocation(),
941                                                 MD->getThisType(Context));
942          return Owned(new (Context) MemberExpr(This, true, D,
943                                                Loc, MemberType));
944        }
945      }
946    }
947  }
948
949  if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {
950    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(CurContext)) {
951      if (MD->isStatic())
952        // "invalid use of member 'x' in static member function"
953        return ExprError(Diag(Loc,diag::err_invalid_member_use_in_static_method)
954          << FD->getDeclName());
955    }
956
957    // Any other ways we could have found the field in a well-formed
958    // program would have been turned into implicit member expressions
959    // above.
960    return ExprError(Diag(Loc, diag::err_invalid_non_static_member_use)
961      << FD->getDeclName());
962  }
963
964  if (isa<TypedefDecl>(D))
965    return ExprError(Diag(Loc, diag::err_unexpected_typedef) << Name);
966  if (isa<ObjCInterfaceDecl>(D))
967    return ExprError(Diag(Loc, diag::err_unexpected_interface) << Name);
968  if (isa<NamespaceDecl>(D))
969    return ExprError(Diag(Loc, diag::err_unexpected_namespace) << Name);
970
971  // Make the DeclRefExpr or BlockDeclRefExpr for the decl.
972  if (OverloadedFunctionDecl *Ovl = dyn_cast<OverloadedFunctionDecl>(D))
973    return Owned(BuildDeclRefExpr(Ovl, Context.OverloadTy, Loc,
974                                  false, false, SS));
975  else if (TemplateDecl *Template = dyn_cast<TemplateDecl>(D))
976    return Owned(BuildDeclRefExpr(Template, Context.OverloadTy, Loc,
977                                  false, false, SS));
978  ValueDecl *VD = cast<ValueDecl>(D);
979
980  // Check whether this declaration can be used. Note that we suppress
981  // this check when we're going to perform argument-dependent lookup
982  // on this function name, because this might not be the function
983  // that overload resolution actually selects.
984  if (!(ADL && isa<FunctionDecl>(VD)) && DiagnoseUseOfDecl(VD, Loc))
985    return ExprError();
986
987  if (VarDecl *Var = dyn_cast<VarDecl>(VD)) {
988    // Warn about constructs like:
989    //   if (void *X = foo()) { ... } else { X }.
990    // In the else block, the pointer is always false.
991    if (Var->isDeclaredInCondition() && Var->getType()->isScalarType()) {
992      Scope *CheckS = S;
993      while (CheckS) {
994        if (CheckS->isWithinElse() &&
995            CheckS->getControlParent()->isDeclScope(DeclPtrTy::make(Var))) {
996          if (Var->getType()->isBooleanType())
997            ExprError(Diag(Loc, diag::warn_value_always_false)
998              << Var->getDeclName());
999          else
1000            ExprError(Diag(Loc, diag::warn_value_always_zero)
1001              << Var->getDeclName());
1002          break;
1003        }
1004
1005        // Move up one more control parent to check again.
1006        CheckS = CheckS->getControlParent();
1007        if (CheckS)
1008          CheckS = CheckS->getParent();
1009      }
1010    }
1011  } else if (FunctionDecl *Func = dyn_cast<FunctionDecl>(VD)) {
1012    if (!getLangOptions().CPlusPlus && !Func->hasPrototype()) {
1013      // C99 DR 316 says that, if a function type comes from a
1014      // function definition (without a prototype), that type is only
1015      // used for checking compatibility. Therefore, when referencing
1016      // the function, we pretend that we don't have the full function
1017      // type.
1018      QualType T = Func->getType();
1019      QualType NoProtoType = T;
1020      if (const FunctionProtoType *Proto = T->getAsFunctionProtoType())
1021        NoProtoType = Context.getFunctionNoProtoType(Proto->getResultType());
1022      return Owned(BuildDeclRefExpr(VD, NoProtoType, Loc, false, false, SS));
1023    }
1024  }
1025
1026  // Only create DeclRefExpr's for valid Decl's.
1027  if (VD->isInvalidDecl())
1028    return ExprError();
1029
1030  // If the identifier reference is inside a block, and it refers to a value
1031  // that is outside the block, create a BlockDeclRefExpr instead of a
1032  // DeclRefExpr.  This ensures the value is treated as a copy-in snapshot when
1033  // the block is formed.
1034  //
1035  // We do not do this for things like enum constants, global variables, etc,
1036  // as they do not get snapshotted.
1037  //
1038  if (CurBlock && ShouldSnapshotBlockValueReference(CurBlock, VD)) {
1039    QualType ExprTy = VD->getType().getNonReferenceType();
1040    // The BlocksAttr indicates the variable is bound by-reference.
1041    if (VD->getAttr<BlocksAttr>())
1042      return Owned(new (Context) BlockDeclRefExpr(VD, ExprTy, Loc, true));
1043
1044    // Variable will be bound by-copy, make it const within the closure.
1045    ExprTy.addConst();
1046    return Owned(new (Context) BlockDeclRefExpr(VD, ExprTy, Loc, false));
1047  }
1048  // If this reference is not in a block or if the referenced variable is
1049  // within the block, create a normal DeclRefExpr.
1050
1051  bool TypeDependent = false;
1052  bool ValueDependent = false;
1053  if (getLangOptions().CPlusPlus) {
1054    // C++ [temp.dep.expr]p3:
1055    //   An id-expression is type-dependent if it contains:
1056    //     - an identifier that was declared with a dependent type,
1057    if (VD->getType()->isDependentType())
1058      TypeDependent = true;
1059    //     - FIXME: a template-id that is dependent,
1060    //     - a conversion-function-id that specifies a dependent type,
1061    else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName &&
1062             Name.getCXXNameType()->isDependentType())
1063      TypeDependent = true;
1064    //     - a nested-name-specifier that contains a class-name that
1065    //       names a dependent type.
1066    else if (SS && !SS->isEmpty()) {
1067      for (DeclContext *DC = computeDeclContext(*SS);
1068           DC; DC = DC->getParent()) {
1069        // FIXME: could stop early at namespace scope.
1070        if (DC->isRecord()) {
1071          CXXRecordDecl *Record = cast<CXXRecordDecl>(DC);
1072          if (Context.getTypeDeclType(Record)->isDependentType()) {
1073            TypeDependent = true;
1074            break;
1075          }
1076        }
1077      }
1078    }
1079
1080    // C++ [temp.dep.constexpr]p2:
1081    //
1082    //   An identifier is value-dependent if it is:
1083    //     - a name declared with a dependent type,
1084    if (TypeDependent)
1085      ValueDependent = true;
1086    //     - the name of a non-type template parameter,
1087    else if (isa<NonTypeTemplateParmDecl>(VD))
1088      ValueDependent = true;
1089    //    - a constant with integral or enumeration type and is
1090    //      initialized with an expression that is value-dependent
1091    //      (FIXME!).
1092  }
1093
1094  return Owned(BuildDeclRefExpr(VD, VD->getType().getNonReferenceType(), Loc,
1095                                TypeDependent, ValueDependent, SS));
1096}
1097
1098Sema::OwningExprResult Sema::ActOnPredefinedExpr(SourceLocation Loc,
1099                                                 tok::TokenKind Kind) {
1100  PredefinedExpr::IdentType IT;
1101
1102  switch (Kind) {
1103  default: assert(0 && "Unknown simple primary expr!");
1104  case tok::kw___func__: IT = PredefinedExpr::Func; break; // [C99 6.4.2.2]
1105  case tok::kw___FUNCTION__: IT = PredefinedExpr::Function; break;
1106  case tok::kw___PRETTY_FUNCTION__: IT = PredefinedExpr::PrettyFunction; break;
1107  }
1108
1109  // Pre-defined identifiers are of type char[x], where x is the length of the
1110  // string.
1111  unsigned Length;
1112  if (FunctionDecl *FD = getCurFunctionDecl())
1113    Length = FD->getIdentifier()->getLength();
1114  else if (ObjCMethodDecl *MD = getCurMethodDecl())
1115    Length = MD->getSynthesizedMethodSize();
1116  else {
1117    Diag(Loc, diag::ext_predef_outside_function);
1118    // __PRETTY_FUNCTION__ -> "top level", the others produce an empty string.
1119    Length = IT == PredefinedExpr::PrettyFunction ? strlen("top level") : 0;
1120  }
1121
1122
1123  llvm::APInt LengthI(32, Length + 1);
1124  QualType ResTy = Context.CharTy.getQualifiedType(QualType::Const);
1125  ResTy = Context.getConstantArrayType(ResTy, LengthI, ArrayType::Normal, 0);
1126  return Owned(new (Context) PredefinedExpr(Loc, ResTy, IT));
1127}
1128
1129Sema::OwningExprResult Sema::ActOnCharacterConstant(const Token &Tok) {
1130  llvm::SmallString<16> CharBuffer;
1131  CharBuffer.resize(Tok.getLength());
1132  const char *ThisTokBegin = &CharBuffer[0];
1133  unsigned ActualLength = PP.getSpelling(Tok, ThisTokBegin);
1134
1135  CharLiteralParser Literal(ThisTokBegin, ThisTokBegin+ActualLength,
1136                            Tok.getLocation(), PP);
1137  if (Literal.hadError())
1138    return ExprError();
1139
1140  QualType type = getLangOptions().CPlusPlus ? Context.CharTy : Context.IntTy;
1141
1142  return Owned(new (Context) CharacterLiteral(Literal.getValue(),
1143                                              Literal.isWide(),
1144                                              type, Tok.getLocation()));
1145}
1146
1147Action::OwningExprResult Sema::ActOnNumericConstant(const Token &Tok) {
1148  // Fast path for a single digit (which is quite common).  A single digit
1149  // cannot have a trigraph, escaped newline, radix prefix, or type suffix.
1150  if (Tok.getLength() == 1) {
1151    const char Val = PP.getSpellingOfSingleCharacterNumericConstant(Tok);
1152    unsigned IntSize = Context.Target.getIntWidth();
1153    return Owned(new (Context) IntegerLiteral(llvm::APInt(IntSize, Val-'0'),
1154                    Context.IntTy, Tok.getLocation()));
1155  }
1156
1157  llvm::SmallString<512> IntegerBuffer;
1158  // Add padding so that NumericLiteralParser can overread by one character.
1159  IntegerBuffer.resize(Tok.getLength()+1);
1160  const char *ThisTokBegin = &IntegerBuffer[0];
1161
1162  // Get the spelling of the token, which eliminates trigraphs, etc.
1163  unsigned ActualLength = PP.getSpelling(Tok, ThisTokBegin);
1164
1165  NumericLiteralParser Literal(ThisTokBegin, ThisTokBegin+ActualLength,
1166                               Tok.getLocation(), PP);
1167  if (Literal.hadError)
1168    return ExprError();
1169
1170  Expr *Res;
1171
1172  if (Literal.isFloatingLiteral()) {
1173    QualType Ty;
1174    if (Literal.isFloat)
1175      Ty = Context.FloatTy;
1176    else if (!Literal.isLong)
1177      Ty = Context.DoubleTy;
1178    else
1179      Ty = Context.LongDoubleTy;
1180
1181    const llvm::fltSemantics &Format = Context.getFloatTypeSemantics(Ty);
1182
1183    // isExact will be set by GetFloatValue().
1184    bool isExact = false;
1185    Res = new (Context) FloatingLiteral(Literal.GetFloatValue(Format, &isExact),
1186                                        &isExact, Ty, Tok.getLocation());
1187
1188  } else if (!Literal.isIntegerLiteral()) {
1189    return ExprError();
1190  } else {
1191    QualType Ty;
1192
1193    // long long is a C99 feature.
1194    if (!getLangOptions().C99 && !getLangOptions().CPlusPlus0x &&
1195        Literal.isLongLong)
1196      Diag(Tok.getLocation(), diag::ext_longlong);
1197
1198    // Get the value in the widest-possible width.
1199    llvm::APInt ResultVal(Context.Target.getIntMaxTWidth(), 0);
1200
1201    if (Literal.GetIntegerValue(ResultVal)) {
1202      // If this value didn't fit into uintmax_t, warn and force to ull.
1203      Diag(Tok.getLocation(), diag::warn_integer_too_large);
1204      Ty = Context.UnsignedLongLongTy;
1205      assert(Context.getTypeSize(Ty) == ResultVal.getBitWidth() &&
1206             "long long is not intmax_t?");
1207    } else {
1208      // If this value fits into a ULL, try to figure out what else it fits into
1209      // according to the rules of C99 6.4.4.1p5.
1210
1211      // Octal, Hexadecimal, and integers with a U suffix are allowed to
1212      // be an unsigned int.
1213      bool AllowUnsigned = Literal.isUnsigned || Literal.getRadix() != 10;
1214
1215      // Check from smallest to largest, picking the smallest type we can.
1216      unsigned Width = 0;
1217      if (!Literal.isLong && !Literal.isLongLong) {
1218        // Are int/unsigned possibilities?
1219        unsigned IntSize = Context.Target.getIntWidth();
1220
1221        // Does it fit in a unsigned int?
1222        if (ResultVal.isIntN(IntSize)) {
1223          // Does it fit in a signed int?
1224          if (!Literal.isUnsigned && ResultVal[IntSize-1] == 0)
1225            Ty = Context.IntTy;
1226          else if (AllowUnsigned)
1227            Ty = Context.UnsignedIntTy;
1228          Width = IntSize;
1229        }
1230      }
1231
1232      // Are long/unsigned long possibilities?
1233      if (Ty.isNull() && !Literal.isLongLong) {
1234        unsigned LongSize = Context.Target.getLongWidth();
1235
1236        // Does it fit in a unsigned long?
1237        if (ResultVal.isIntN(LongSize)) {
1238          // Does it fit in a signed long?
1239          if (!Literal.isUnsigned && ResultVal[LongSize-1] == 0)
1240            Ty = Context.LongTy;
1241          else if (AllowUnsigned)
1242            Ty = Context.UnsignedLongTy;
1243          Width = LongSize;
1244        }
1245      }
1246
1247      // Finally, check long long if needed.
1248      if (Ty.isNull()) {
1249        unsigned LongLongSize = Context.Target.getLongLongWidth();
1250
1251        // Does it fit in a unsigned long long?
1252        if (ResultVal.isIntN(LongLongSize)) {
1253          // Does it fit in a signed long long?
1254          if (!Literal.isUnsigned && ResultVal[LongLongSize-1] == 0)
1255            Ty = Context.LongLongTy;
1256          else if (AllowUnsigned)
1257            Ty = Context.UnsignedLongLongTy;
1258          Width = LongLongSize;
1259        }
1260      }
1261
1262      // If we still couldn't decide a type, we probably have something that
1263      // does not fit in a signed long long, but has no U suffix.
1264      if (Ty.isNull()) {
1265        Diag(Tok.getLocation(), diag::warn_integer_too_large_for_signed);
1266        Ty = Context.UnsignedLongLongTy;
1267        Width = Context.Target.getLongLongWidth();
1268      }
1269
1270      if (ResultVal.getBitWidth() != Width)
1271        ResultVal.trunc(Width);
1272    }
1273    Res = new (Context) IntegerLiteral(ResultVal, Ty, Tok.getLocation());
1274  }
1275
1276  // If this is an imaginary literal, create the ImaginaryLiteral wrapper.
1277  if (Literal.isImaginary)
1278    Res = new (Context) ImaginaryLiteral(Res,
1279                                        Context.getComplexType(Res->getType()));
1280
1281  return Owned(Res);
1282}
1283
1284Action::OwningExprResult Sema::ActOnParenExpr(SourceLocation L,
1285                                              SourceLocation R, ExprArg Val) {
1286  Expr *E = Val.takeAs<Expr>();
1287  assert((E != 0) && "ActOnParenExpr() missing expr");
1288  return Owned(new (Context) ParenExpr(L, R, E));
1289}
1290
1291/// The UsualUnaryConversions() function is *not* called by this routine.
1292/// See C99 6.3.2.1p[2-4] for more details.
1293bool Sema::CheckSizeOfAlignOfOperand(QualType exprType,
1294                                     SourceLocation OpLoc,
1295                                     const SourceRange &ExprRange,
1296                                     bool isSizeof) {
1297  if (exprType->isDependentType())
1298    return false;
1299
1300  // C99 6.5.3.4p1:
1301  if (isa<FunctionType>(exprType)) {
1302    // alignof(function) is allowed as an extension.
1303    if (isSizeof)
1304      Diag(OpLoc, diag::ext_sizeof_function_type) << ExprRange;
1305    return false;
1306  }
1307
1308  // Allow sizeof(void)/alignof(void) as an extension.
1309  if (exprType->isVoidType()) {
1310    Diag(OpLoc, diag::ext_sizeof_void_type)
1311      << (isSizeof ? "sizeof" : "__alignof") << ExprRange;
1312    return false;
1313  }
1314
1315  if (RequireCompleteType(OpLoc, exprType,
1316                          isSizeof ? diag::err_sizeof_incomplete_type :
1317                          diag::err_alignof_incomplete_type,
1318                          ExprRange))
1319    return true;
1320
1321  // Reject sizeof(interface) and sizeof(interface<proto>) in 64-bit mode.
1322  if (LangOpts.ObjCNonFragileABI && exprType->isObjCInterfaceType()) {
1323    Diag(OpLoc, diag::err_sizeof_nonfragile_interface)
1324      << exprType << isSizeof << ExprRange;
1325    return true;
1326  }
1327
1328  return false;
1329}
1330
1331bool Sema::CheckAlignOfExpr(Expr *E, SourceLocation OpLoc,
1332                            const SourceRange &ExprRange) {
1333  E = E->IgnoreParens();
1334
1335  // alignof decl is always ok.
1336  if (isa<DeclRefExpr>(E))
1337    return false;
1338
1339  // Cannot know anything else if the expression is dependent.
1340  if (E->isTypeDependent())
1341    return false;
1342
1343  if (E->getBitField()) {
1344    Diag(OpLoc, diag::err_sizeof_alignof_bitfield) << 1 << ExprRange;
1345    return true;
1346  }
1347
1348  // Alignment of a field access is always okay, so long as it isn't a
1349  // bit-field.
1350  if (MemberExpr *ME = dyn_cast<MemberExpr>(E))
1351    if (dyn_cast<FieldDecl>(ME->getMemberDecl()))
1352      return false;
1353
1354  return CheckSizeOfAlignOfOperand(E->getType(), OpLoc, ExprRange, false);
1355}
1356
1357/// \brief Build a sizeof or alignof expression given a type operand.
1358Action::OwningExprResult
1359Sema::CreateSizeOfAlignOfExpr(QualType T, SourceLocation OpLoc,
1360                              bool isSizeOf, SourceRange R) {
1361  if (T.isNull())
1362    return ExprError();
1363
1364  if (!T->isDependentType() &&
1365      CheckSizeOfAlignOfOperand(T, OpLoc, R, isSizeOf))
1366    return ExprError();
1367
1368  // C99 6.5.3.4p4: the type (an unsigned integer type) is size_t.
1369  return Owned(new (Context) SizeOfAlignOfExpr(isSizeOf, T,
1370                                               Context.getSizeType(), OpLoc,
1371                                               R.getEnd()));
1372}
1373
1374/// \brief Build a sizeof or alignof expression given an expression
1375/// operand.
1376Action::OwningExprResult
1377Sema::CreateSizeOfAlignOfExpr(Expr *E, SourceLocation OpLoc,
1378                              bool isSizeOf, SourceRange R) {
1379  // Verify that the operand is valid.
1380  bool isInvalid = false;
1381  if (E->isTypeDependent()) {
1382    // Delay type-checking for type-dependent expressions.
1383  } else if (!isSizeOf) {
1384    isInvalid = CheckAlignOfExpr(E, OpLoc, R);
1385  } else if (E->getBitField()) {  // C99 6.5.3.4p1.
1386    Diag(OpLoc, diag::err_sizeof_alignof_bitfield) << 0;
1387    isInvalid = true;
1388  } else {
1389    isInvalid = CheckSizeOfAlignOfOperand(E->getType(), OpLoc, R, true);
1390  }
1391
1392  if (isInvalid)
1393    return ExprError();
1394
1395  // C99 6.5.3.4p4: the type (an unsigned integer type) is size_t.
1396  return Owned(new (Context) SizeOfAlignOfExpr(isSizeOf, E,
1397                                               Context.getSizeType(), OpLoc,
1398                                               R.getEnd()));
1399}
1400
1401/// ActOnSizeOfAlignOfExpr - Handle @c sizeof(type) and @c sizeof @c expr and
1402/// the same for @c alignof and @c __alignof
1403/// Note that the ArgRange is invalid if isType is false.
1404Action::OwningExprResult
1405Sema::ActOnSizeOfAlignOfExpr(SourceLocation OpLoc, bool isSizeof, bool isType,
1406                             void *TyOrEx, const SourceRange &ArgRange) {
1407  // If error parsing type, ignore.
1408  if (TyOrEx == 0) return ExprError();
1409
1410  if (isType) {
1411    QualType ArgTy = QualType::getFromOpaquePtr(TyOrEx);
1412    return CreateSizeOfAlignOfExpr(ArgTy, OpLoc, isSizeof, ArgRange);
1413  }
1414
1415  // Get the end location.
1416  Expr *ArgEx = (Expr *)TyOrEx;
1417  Action::OwningExprResult Result
1418    = CreateSizeOfAlignOfExpr(ArgEx, OpLoc, isSizeof, ArgEx->getSourceRange());
1419
1420  if (Result.isInvalid())
1421    DeleteExpr(ArgEx);
1422
1423  return move(Result);
1424}
1425
1426QualType Sema::CheckRealImagOperand(Expr *&V, SourceLocation Loc, bool isReal) {
1427  if (V->isTypeDependent())
1428    return Context.DependentTy;
1429
1430  // These operators return the element type of a complex type.
1431  if (const ComplexType *CT = V->getType()->getAsComplexType())
1432    return CT->getElementType();
1433
1434  // Otherwise they pass through real integer and floating point types here.
1435  if (V->getType()->isArithmeticType())
1436    return V->getType();
1437
1438  // Reject anything else.
1439  Diag(Loc, diag::err_realimag_invalid_type) << V->getType()
1440    << (isReal ? "__real" : "__imag");
1441  return QualType();
1442}
1443
1444
1445
1446Action::OwningExprResult
1447Sema::ActOnPostfixUnaryOp(Scope *S, SourceLocation OpLoc,
1448                          tok::TokenKind Kind, ExprArg Input) {
1449  Expr *Arg = (Expr *)Input.get();
1450
1451  UnaryOperator::Opcode Opc;
1452  switch (Kind) {
1453  default: assert(0 && "Unknown unary op!");
1454  case tok::plusplus:   Opc = UnaryOperator::PostInc; break;
1455  case tok::minusminus: Opc = UnaryOperator::PostDec; break;
1456  }
1457
1458  if (getLangOptions().CPlusPlus &&
1459      (Arg->getType()->isRecordType() || Arg->getType()->isEnumeralType())) {
1460    // Which overloaded operator?
1461    OverloadedOperatorKind OverOp =
1462      (Opc == UnaryOperator::PostInc)? OO_PlusPlus : OO_MinusMinus;
1463
1464    // C++ [over.inc]p1:
1465    //
1466    //     [...] If the function is a member function with one
1467    //     parameter (which shall be of type int) or a non-member
1468    //     function with two parameters (the second of which shall be
1469    //     of type int), it defines the postfix increment operator ++
1470    //     for objects of that type. When the postfix increment is
1471    //     called as a result of using the ++ operator, the int
1472    //     argument will have value zero.
1473    Expr *Args[2] = {
1474      Arg,
1475      new (Context) IntegerLiteral(llvm::APInt(Context.Target.getIntWidth(), 0,
1476                          /*isSigned=*/true), Context.IntTy, SourceLocation())
1477    };
1478
1479    // Build the candidate set for overloading
1480    OverloadCandidateSet CandidateSet;
1481    AddOperatorCandidates(OverOp, S, OpLoc, Args, 2, CandidateSet);
1482
1483    // Perform overload resolution.
1484    OverloadCandidateSet::iterator Best;
1485    switch (BestViableFunction(CandidateSet, Best)) {
1486    case OR_Success: {
1487      // We found a built-in operator or an overloaded operator.
1488      FunctionDecl *FnDecl = Best->Function;
1489
1490      if (FnDecl) {
1491        // We matched an overloaded operator. Build a call to that
1492        // operator.
1493
1494        // Convert the arguments.
1495        if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
1496          if (PerformObjectArgumentInitialization(Arg, Method))
1497            return ExprError();
1498        } else {
1499          // Convert the arguments.
1500          if (PerformCopyInitialization(Arg,
1501                                        FnDecl->getParamDecl(0)->getType(),
1502                                        "passing"))
1503            return ExprError();
1504        }
1505
1506        // Determine the result type
1507        QualType ResultTy
1508          = FnDecl->getType()->getAsFunctionType()->getResultType();
1509        ResultTy = ResultTy.getNonReferenceType();
1510
1511        // Build the actual expression node.
1512        Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
1513                                                 SourceLocation());
1514        UsualUnaryConversions(FnExpr);
1515
1516        Input.release();
1517        return Owned(new (Context) CXXOperatorCallExpr(Context, OverOp, FnExpr,
1518                                                       Args, 2, ResultTy,
1519                                                       OpLoc));
1520      } else {
1521        // We matched a built-in operator. Convert the arguments, then
1522        // break out so that we will build the appropriate built-in
1523        // operator node.
1524        if (PerformCopyInitialization(Arg, Best->BuiltinTypes.ParamTypes[0],
1525                                      "passing"))
1526          return ExprError();
1527
1528        break;
1529      }
1530    }
1531
1532    case OR_No_Viable_Function:
1533      // No viable function; fall through to handling this as a
1534      // built-in operator, which will produce an error message for us.
1535      break;
1536
1537    case OR_Ambiguous:
1538      Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
1539          << UnaryOperator::getOpcodeStr(Opc)
1540          << Arg->getSourceRange();
1541      PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
1542      return ExprError();
1543
1544    case OR_Deleted:
1545      Diag(OpLoc, diag::err_ovl_deleted_oper)
1546        << Best->Function->isDeleted()
1547        << UnaryOperator::getOpcodeStr(Opc)
1548        << Arg->getSourceRange();
1549      PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
1550      return ExprError();
1551    }
1552
1553    // Either we found no viable overloaded operator or we matched a
1554    // built-in operator. In either case, fall through to trying to
1555    // build a built-in operation.
1556  }
1557
1558  QualType result = CheckIncrementDecrementOperand(Arg, OpLoc,
1559                                                 Opc == UnaryOperator::PostInc);
1560  if (result.isNull())
1561    return ExprError();
1562  Input.release();
1563  return Owned(new (Context) UnaryOperator(Arg, Opc, result, OpLoc));
1564}
1565
1566Action::OwningExprResult
1567Sema::ActOnArraySubscriptExpr(Scope *S, ExprArg Base, SourceLocation LLoc,
1568                              ExprArg Idx, SourceLocation RLoc) {
1569  Expr *LHSExp = static_cast<Expr*>(Base.get()),
1570       *RHSExp = static_cast<Expr*>(Idx.get());
1571
1572  if (getLangOptions().CPlusPlus &&
1573      (LHSExp->getType()->isRecordType() ||
1574       LHSExp->getType()->isEnumeralType() ||
1575       RHSExp->getType()->isRecordType() ||
1576       RHSExp->getType()->isEnumeralType())) {
1577    // Add the appropriate overloaded operators (C++ [over.match.oper])
1578    // to the candidate set.
1579    OverloadCandidateSet CandidateSet;
1580    Expr *Args[2] = { LHSExp, RHSExp };
1581    AddOperatorCandidates(OO_Subscript, S, LLoc, Args, 2, CandidateSet,
1582                          SourceRange(LLoc, RLoc));
1583
1584    // Perform overload resolution.
1585    OverloadCandidateSet::iterator Best;
1586    switch (BestViableFunction(CandidateSet, Best)) {
1587    case OR_Success: {
1588      // We found a built-in operator or an overloaded operator.
1589      FunctionDecl *FnDecl = Best->Function;
1590
1591      if (FnDecl) {
1592        // We matched an overloaded operator. Build a call to that
1593        // operator.
1594
1595        // Convert the arguments.
1596        if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
1597          if (PerformObjectArgumentInitialization(LHSExp, Method) ||
1598              PerformCopyInitialization(RHSExp,
1599                                        FnDecl->getParamDecl(0)->getType(),
1600                                        "passing"))
1601            return ExprError();
1602        } else {
1603          // Convert the arguments.
1604          if (PerformCopyInitialization(LHSExp,
1605                                        FnDecl->getParamDecl(0)->getType(),
1606                                        "passing") ||
1607              PerformCopyInitialization(RHSExp,
1608                                        FnDecl->getParamDecl(1)->getType(),
1609                                        "passing"))
1610            return ExprError();
1611        }
1612
1613        // Determine the result type
1614        QualType ResultTy
1615          = FnDecl->getType()->getAsFunctionType()->getResultType();
1616        ResultTy = ResultTy.getNonReferenceType();
1617
1618        // Build the actual expression node.
1619        Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
1620                                                 SourceLocation());
1621        UsualUnaryConversions(FnExpr);
1622
1623        Base.release();
1624        Idx.release();
1625        return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
1626                                                       FnExpr, Args, 2,
1627                                                       ResultTy, LLoc));
1628      } else {
1629        // We matched a built-in operator. Convert the arguments, then
1630        // break out so that we will build the appropriate built-in
1631        // operator node.
1632        if (PerformCopyInitialization(LHSExp, Best->BuiltinTypes.ParamTypes[0],
1633                                      "passing") ||
1634            PerformCopyInitialization(RHSExp, Best->BuiltinTypes.ParamTypes[1],
1635                                      "passing"))
1636          return ExprError();
1637
1638        break;
1639      }
1640    }
1641
1642    case OR_No_Viable_Function:
1643      // No viable function; fall through to handling this as a
1644      // built-in operator, which will produce an error message for us.
1645      break;
1646
1647    case OR_Ambiguous:
1648      Diag(LLoc,  diag::err_ovl_ambiguous_oper)
1649          << "[]"
1650          << LHSExp->getSourceRange() << RHSExp->getSourceRange();
1651      PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
1652      return ExprError();
1653
1654    case OR_Deleted:
1655      Diag(LLoc, diag::err_ovl_deleted_oper)
1656        << Best->Function->isDeleted()
1657        << "[]"
1658        << LHSExp->getSourceRange() << RHSExp->getSourceRange();
1659      PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
1660      return ExprError();
1661    }
1662
1663    // Either we found no viable overloaded operator or we matched a
1664    // built-in operator. In either case, fall through to trying to
1665    // build a built-in operation.
1666  }
1667
1668  // Perform default conversions.
1669  DefaultFunctionArrayConversion(LHSExp);
1670  DefaultFunctionArrayConversion(RHSExp);
1671
1672  QualType LHSTy = LHSExp->getType(), RHSTy = RHSExp->getType();
1673
1674  // C99 6.5.2.1p2: the expression e1[e2] is by definition precisely equivalent
1675  // to the expression *((e1)+(e2)). This means the array "Base" may actually be
1676  // in the subscript position. As a result, we need to derive the array base
1677  // and index from the expression types.
1678  Expr *BaseExpr, *IndexExpr;
1679  QualType ResultType;
1680  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {
1681    BaseExpr = LHSExp;
1682    IndexExpr = RHSExp;
1683    ResultType = Context.DependentTy;
1684  } else if (const PointerType *PTy = LHSTy->getAsPointerType()) {
1685    BaseExpr = LHSExp;
1686    IndexExpr = RHSExp;
1687    ResultType = PTy->getPointeeType();
1688  } else if (const PointerType *PTy = RHSTy->getAsPointerType()) {
1689     // Handle the uncommon case of "123[Ptr]".
1690    BaseExpr = RHSExp;
1691    IndexExpr = LHSExp;
1692    ResultType = PTy->getPointeeType();
1693  } else if (const VectorType *VTy = LHSTy->getAsVectorType()) {
1694    BaseExpr = LHSExp;    // vectors: V[123]
1695    IndexExpr = RHSExp;
1696
1697    // FIXME: need to deal with const...
1698    ResultType = VTy->getElementType();
1699  } else if (LHSTy->isArrayType()) {
1700    // If we see an array that wasn't promoted by
1701    // DefaultFunctionArrayConversion, it must be an array that
1702    // wasn't promoted because of the C90 rule that doesn't
1703    // allow promoting non-lvalue arrays.  Warn, then
1704    // force the promotion here.
1705    Diag(LHSExp->getLocStart(), diag::ext_subscript_non_lvalue) <<
1706        LHSExp->getSourceRange();
1707    ImpCastExprToType(LHSExp, Context.getArrayDecayedType(LHSTy));
1708    LHSTy = LHSExp->getType();
1709
1710    BaseExpr = LHSExp;
1711    IndexExpr = RHSExp;
1712    ResultType = LHSTy->getAsPointerType()->getPointeeType();
1713  } else if (RHSTy->isArrayType()) {
1714    // Same as previous, except for 123[f().a] case
1715    Diag(RHSExp->getLocStart(), diag::ext_subscript_non_lvalue) <<
1716        RHSExp->getSourceRange();
1717    ImpCastExprToType(RHSExp, Context.getArrayDecayedType(RHSTy));
1718    RHSTy = RHSExp->getType();
1719
1720    BaseExpr = RHSExp;
1721    IndexExpr = LHSExp;
1722    ResultType = RHSTy->getAsPointerType()->getPointeeType();
1723  } else {
1724    return ExprError(Diag(LLoc, diag::err_typecheck_subscript_value)
1725       << LHSExp->getSourceRange() << RHSExp->getSourceRange());
1726  }
1727  // C99 6.5.2.1p1
1728  if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent())
1729    return ExprError(Diag(LLoc, diag::err_typecheck_subscript_not_integer)
1730                     << IndexExpr->getSourceRange());
1731
1732  // C99 6.5.2.1p1: "shall have type "pointer to *object* type". Similarly,
1733  // C++ [expr.sub]p1: The type "T" shall be a completely-defined object
1734  // type. Note that Functions are not objects, and that (in C99 parlance)
1735  // incomplete types are not object types.
1736  if (ResultType->isFunctionType()) {
1737    Diag(BaseExpr->getLocStart(), diag::err_subscript_function_type)
1738      << ResultType << BaseExpr->getSourceRange();
1739    return ExprError();
1740  }
1741
1742  if (!ResultType->isDependentType() &&
1743      RequireCompleteType(LLoc, ResultType, diag::err_subscript_incomplete_type,
1744                          BaseExpr->getSourceRange()))
1745    return ExprError();
1746
1747  // Diagnose bad cases where we step over interface counts.
1748  if (ResultType->isObjCInterfaceType() && LangOpts.ObjCNonFragileABI) {
1749    Diag(LLoc, diag::err_subscript_nonfragile_interface)
1750      << ResultType << BaseExpr->getSourceRange();
1751    return ExprError();
1752  }
1753
1754  Base.release();
1755  Idx.release();
1756  return Owned(new (Context) ArraySubscriptExpr(LHSExp, RHSExp,
1757                                                ResultType, RLoc));
1758}
1759
1760QualType Sema::
1761CheckExtVectorComponent(QualType baseType, SourceLocation OpLoc,
1762                        IdentifierInfo &CompName, SourceLocation CompLoc) {
1763  const ExtVectorType *vecType = baseType->getAsExtVectorType();
1764
1765  // The vector accessor can't exceed the number of elements.
1766  const char *compStr = CompName.getName();
1767
1768  // This flag determines whether or not the component is one of the four
1769  // special names that indicate a subset of exactly half the elements are
1770  // to be selected.
1771  bool HalvingSwizzle = false;
1772
1773  // This flag determines whether or not CompName has an 's' char prefix,
1774  // indicating that it is a string of hex values to be used as vector indices.
1775  bool HexSwizzle = *compStr == 's';
1776
1777  // Check that we've found one of the special components, or that the component
1778  // names must come from the same set.
1779  if (!strcmp(compStr, "hi") || !strcmp(compStr, "lo") ||
1780      !strcmp(compStr, "even") || !strcmp(compStr, "odd")) {
1781    HalvingSwizzle = true;
1782  } else if (vecType->getPointAccessorIdx(*compStr) != -1) {
1783    do
1784      compStr++;
1785    while (*compStr && vecType->getPointAccessorIdx(*compStr) != -1);
1786  } else if (HexSwizzle || vecType->getNumericAccessorIdx(*compStr) != -1) {
1787    do
1788      compStr++;
1789    while (*compStr && vecType->getNumericAccessorIdx(*compStr) != -1);
1790  }
1791
1792  if (!HalvingSwizzle && *compStr) {
1793    // We didn't get to the end of the string. This means the component names
1794    // didn't come from the same set *or* we encountered an illegal name.
1795    Diag(OpLoc, diag::err_ext_vector_component_name_illegal)
1796      << std::string(compStr,compStr+1) << SourceRange(CompLoc);
1797    return QualType();
1798  }
1799
1800  // Ensure no component accessor exceeds the width of the vector type it
1801  // operates on.
1802  if (!HalvingSwizzle) {
1803    compStr = CompName.getName();
1804
1805    if (HexSwizzle)
1806      compStr++;
1807
1808    while (*compStr) {
1809      if (!vecType->isAccessorWithinNumElements(*compStr++)) {
1810        Diag(OpLoc, diag::err_ext_vector_component_exceeds_length)
1811          << baseType << SourceRange(CompLoc);
1812        return QualType();
1813      }
1814    }
1815  }
1816
1817  // If this is a halving swizzle, verify that the base type has an even
1818  // number of elements.
1819  if (HalvingSwizzle && (vecType->getNumElements() & 1U)) {
1820    Diag(OpLoc, diag::err_ext_vector_component_requires_even)
1821      << baseType << SourceRange(CompLoc);
1822    return QualType();
1823  }
1824
1825  // The component accessor looks fine - now we need to compute the actual type.
1826  // The vector type is implied by the component accessor. For example,
1827  // vec4.b is a float, vec4.xy is a vec2, vec4.rgb is a vec3, etc.
1828  // vec4.s0 is a float, vec4.s23 is a vec3, etc.
1829  // vec4.hi, vec4.lo, vec4.e, and vec4.o all return vec2.
1830  unsigned CompSize = HalvingSwizzle ? vecType->getNumElements() / 2
1831                                     : CompName.getLength();
1832  if (HexSwizzle)
1833    CompSize--;
1834
1835  if (CompSize == 1)
1836    return vecType->getElementType();
1837
1838  QualType VT = Context.getExtVectorType(vecType->getElementType(), CompSize);
1839  // Now look up the TypeDefDecl from the vector type. Without this,
1840  // diagostics look bad. We want extended vector types to appear built-in.
1841  for (unsigned i = 0, E = ExtVectorDecls.size(); i != E; ++i) {
1842    if (ExtVectorDecls[i]->getUnderlyingType() == VT)
1843      return Context.getTypedefType(ExtVectorDecls[i]);
1844  }
1845  return VT; // should never get here (a typedef type should always be found).
1846}
1847
1848static Decl *FindGetterNameDeclFromProtocolList(const ObjCProtocolDecl*PDecl,
1849                                                IdentifierInfo &Member,
1850                                                const Selector &Sel,
1851                                                ASTContext &Context) {
1852
1853  if (ObjCPropertyDecl *PD = PDecl->FindPropertyDeclaration(Context, &Member))
1854    return PD;
1855  if (ObjCMethodDecl *OMD = PDecl->getInstanceMethod(Context, Sel))
1856    return OMD;
1857
1858  for (ObjCProtocolDecl::protocol_iterator I = PDecl->protocol_begin(),
1859       E = PDecl->protocol_end(); I != E; ++I) {
1860    if (Decl *D = FindGetterNameDeclFromProtocolList(*I, Member, Sel,
1861                                                     Context))
1862      return D;
1863  }
1864  return 0;
1865}
1866
1867static Decl *FindGetterNameDecl(const ObjCQualifiedIdType *QIdTy,
1868                                IdentifierInfo &Member,
1869                                const Selector &Sel,
1870                                ASTContext &Context) {
1871  // Check protocols on qualified interfaces.
1872  Decl *GDecl = 0;
1873  for (ObjCQualifiedIdType::qual_iterator I = QIdTy->qual_begin(),
1874       E = QIdTy->qual_end(); I != E; ++I) {
1875    if (ObjCPropertyDecl *PD = (*I)->FindPropertyDeclaration(Context, &Member)) {
1876      GDecl = PD;
1877      break;
1878    }
1879    // Also must look for a getter name which uses property syntax.
1880    if (ObjCMethodDecl *OMD = (*I)->getInstanceMethod(Context, Sel)) {
1881      GDecl = OMD;
1882      break;
1883    }
1884  }
1885  if (!GDecl) {
1886    for (ObjCQualifiedIdType::qual_iterator I = QIdTy->qual_begin(),
1887         E = QIdTy->qual_end(); I != E; ++I) {
1888      // Search in the protocol-qualifier list of current protocol.
1889      GDecl = FindGetterNameDeclFromProtocolList(*I, Member, Sel, Context);
1890      if (GDecl)
1891        return GDecl;
1892    }
1893  }
1894  return GDecl;
1895}
1896
1897/// FindMethodInNestedImplementations - Look up a method in current and
1898/// all base class implementations.
1899///
1900ObjCMethodDecl *Sema::FindMethodInNestedImplementations(
1901                                              const ObjCInterfaceDecl *IFace,
1902                                              const Selector &Sel) {
1903  ObjCMethodDecl *Method = 0;
1904  if (ObjCImplementationDecl *ImpDecl
1905        = LookupObjCImplementation(IFace->getIdentifier()))
1906    Method = ImpDecl->getInstanceMethod(Context, Sel);
1907
1908  if (!Method && IFace->getSuperClass())
1909    return FindMethodInNestedImplementations(IFace->getSuperClass(), Sel);
1910  return Method;
1911}
1912
1913Action::OwningExprResult
1914Sema::ActOnMemberReferenceExpr(Scope *S, ExprArg Base, SourceLocation OpLoc,
1915                               tok::TokenKind OpKind, SourceLocation MemberLoc,
1916                               IdentifierInfo &Member,
1917                               DeclPtrTy ObjCImpDecl) {
1918  Expr *BaseExpr = Base.takeAs<Expr>();
1919  assert(BaseExpr && "no record expression");
1920
1921  // Perform default conversions.
1922  DefaultFunctionArrayConversion(BaseExpr);
1923
1924  QualType BaseType = BaseExpr->getType();
1925  assert(!BaseType.isNull() && "no type for member expression");
1926
1927  // Get the type being accessed in BaseType.  If this is an arrow, the BaseExpr
1928  // must have pointer type, and the accessed type is the pointee.
1929  if (OpKind == tok::arrow) {
1930    if (const PointerType *PT = BaseType->getAsPointerType())
1931      BaseType = PT->getPointeeType();
1932    else if (getLangOptions().CPlusPlus && BaseType->isRecordType())
1933      return Owned(BuildOverloadedArrowExpr(S, BaseExpr, OpLoc,
1934                                            MemberLoc, Member));
1935    else
1936      return ExprError(Diag(MemberLoc,
1937                            diag::err_typecheck_member_reference_arrow)
1938        << BaseType << BaseExpr->getSourceRange());
1939  }
1940
1941  // Handle field access to simple records.  This also handles access to fields
1942  // of the ObjC 'id' struct.
1943  if (const RecordType *RTy = BaseType->getAsRecordType()) {
1944    RecordDecl *RDecl = RTy->getDecl();
1945    if (RequireCompleteType(OpLoc, BaseType,
1946                               diag::err_typecheck_incomplete_tag,
1947                               BaseExpr->getSourceRange()))
1948      return ExprError();
1949
1950    // The record definition is complete, now make sure the member is valid.
1951    // FIXME: Qualified name lookup for C++ is a bit more complicated
1952    // than this.
1953    LookupResult Result
1954      = LookupQualifiedName(RDecl, DeclarationName(&Member),
1955                            LookupMemberName, false);
1956
1957    if (!Result)
1958      return ExprError(Diag(MemberLoc, diag::err_typecheck_no_member)
1959               << &Member << BaseExpr->getSourceRange());
1960    if (Result.isAmbiguous()) {
1961      DiagnoseAmbiguousLookup(Result, DeclarationName(&Member),
1962                              MemberLoc, BaseExpr->getSourceRange());
1963      return ExprError();
1964    }
1965
1966    NamedDecl *MemberDecl = Result;
1967
1968    // If the decl being referenced had an error, return an error for this
1969    // sub-expr without emitting another error, in order to avoid cascading
1970    // error cases.
1971    if (MemberDecl->isInvalidDecl())
1972      return ExprError();
1973
1974    // Check the use of this field
1975    if (DiagnoseUseOfDecl(MemberDecl, MemberLoc))
1976      return ExprError();
1977
1978    if (FieldDecl *FD = dyn_cast<FieldDecl>(MemberDecl)) {
1979      // We may have found a field within an anonymous union or struct
1980      // (C++ [class.union]).
1981      if (cast<RecordDecl>(FD->getDeclContext())->isAnonymousStructOrUnion())
1982        return BuildAnonymousStructUnionMemberReference(MemberLoc, FD,
1983                                                        BaseExpr, OpLoc);
1984
1985      // Figure out the type of the member; see C99 6.5.2.3p3, C++ [expr.ref]
1986      // FIXME: Handle address space modifiers
1987      QualType MemberType = FD->getType();
1988      if (const ReferenceType *Ref = MemberType->getAsReferenceType())
1989        MemberType = Ref->getPointeeType();
1990      else {
1991        unsigned combinedQualifiers =
1992          MemberType.getCVRQualifiers() | BaseType.getCVRQualifiers();
1993        if (FD->isMutable())
1994          combinedQualifiers &= ~QualType::Const;
1995        MemberType = MemberType.getQualifiedType(combinedQualifiers);
1996      }
1997
1998      return Owned(new (Context) MemberExpr(BaseExpr, OpKind == tok::arrow, FD,
1999                                            MemberLoc, MemberType));
2000    }
2001
2002    if (VarDecl *Var = dyn_cast<VarDecl>(MemberDecl))
2003      return Owned(new (Context) MemberExpr(BaseExpr, OpKind == tok::arrow,
2004                                            Var, MemberLoc,
2005                                         Var->getType().getNonReferenceType()));
2006    if (FunctionDecl *MemberFn = dyn_cast<FunctionDecl>(MemberDecl))
2007      return Owned(new (Context) MemberExpr(BaseExpr, OpKind == tok::arrow,
2008                                            MemberFn, MemberLoc,
2009                                            MemberFn->getType()));
2010    if (OverloadedFunctionDecl *Ovl
2011          = dyn_cast<OverloadedFunctionDecl>(MemberDecl))
2012      return Owned(new (Context) MemberExpr(BaseExpr, OpKind == tok::arrow, Ovl,
2013                                            MemberLoc, Context.OverloadTy));
2014    if (EnumConstantDecl *Enum = dyn_cast<EnumConstantDecl>(MemberDecl))
2015      return Owned(new (Context) MemberExpr(BaseExpr, OpKind == tok::arrow,
2016                                            Enum, MemberLoc, Enum->getType()));
2017    if (isa<TypeDecl>(MemberDecl))
2018      return ExprError(Diag(MemberLoc,diag::err_typecheck_member_reference_type)
2019        << DeclarationName(&Member) << int(OpKind == tok::arrow));
2020
2021    // We found a declaration kind that we didn't expect. This is a
2022    // generic error message that tells the user that she can't refer
2023    // to this member with '.' or '->'.
2024    return ExprError(Diag(MemberLoc,
2025                          diag::err_typecheck_member_reference_unknown)
2026      << DeclarationName(&Member) << int(OpKind == tok::arrow));
2027  }
2028
2029  // Handle access to Objective-C instance variables, such as "Obj->ivar" and
2030  // (*Obj).ivar.
2031  if (const ObjCInterfaceType *IFTy = BaseType->getAsObjCInterfaceType()) {
2032    ObjCInterfaceDecl *ClassDeclared;
2033    if (ObjCIvarDecl *IV = IFTy->getDecl()->lookupInstanceVariable(Context,
2034                                                                   &Member,
2035                                                             ClassDeclared)) {
2036      // If the decl being referenced had an error, return an error for this
2037      // sub-expr without emitting another error, in order to avoid cascading
2038      // error cases.
2039      if (IV->isInvalidDecl())
2040        return ExprError();
2041
2042      // Check whether we can reference this field.
2043      if (DiagnoseUseOfDecl(IV, MemberLoc))
2044        return ExprError();
2045      if (IV->getAccessControl() != ObjCIvarDecl::Public &&
2046          IV->getAccessControl() != ObjCIvarDecl::Package) {
2047        ObjCInterfaceDecl *ClassOfMethodDecl = 0;
2048        if (ObjCMethodDecl *MD = getCurMethodDecl())
2049          ClassOfMethodDecl =  MD->getClassInterface();
2050        else if (ObjCImpDecl && getCurFunctionDecl()) {
2051          // Case of a c-function declared inside an objc implementation.
2052          // FIXME: For a c-style function nested inside an objc implementation
2053          // class, there is no implementation context available, so we pass down
2054          // the context as argument to this routine. Ideally, this context need
2055          // be passed down in the AST node and somehow calculated from the AST
2056          // for a function decl.
2057          Decl *ImplDecl = ObjCImpDecl.getAs<Decl>();
2058          if (ObjCImplementationDecl *IMPD =
2059              dyn_cast<ObjCImplementationDecl>(ImplDecl))
2060            ClassOfMethodDecl = IMPD->getClassInterface();
2061          else if (ObjCCategoryImplDecl* CatImplClass =
2062                      dyn_cast<ObjCCategoryImplDecl>(ImplDecl))
2063            ClassOfMethodDecl = CatImplClass->getClassInterface();
2064        }
2065
2066        if (IV->getAccessControl() == ObjCIvarDecl::Private) {
2067          if (ClassDeclared != IFTy->getDecl() ||
2068              ClassOfMethodDecl != ClassDeclared)
2069            Diag(MemberLoc, diag::error_private_ivar_access) << IV->getDeclName();
2070        }
2071        // @protected
2072        else if (!IFTy->getDecl()->isSuperClassOf(ClassOfMethodDecl))
2073          Diag(MemberLoc, diag::error_protected_ivar_access) << IV->getDeclName();
2074      }
2075
2076      return Owned(new (Context) ObjCIvarRefExpr(IV, IV->getType(),
2077                                                 MemberLoc, BaseExpr,
2078                                                 OpKind == tok::arrow));
2079    }
2080    return ExprError(Diag(MemberLoc, diag::err_typecheck_member_reference_ivar)
2081                       << IFTy->getDecl()->getDeclName() << &Member
2082                       << BaseExpr->getSourceRange());
2083  }
2084
2085  // Handle Objective-C property access, which is "Obj.property" where Obj is a
2086  // pointer to a (potentially qualified) interface type.
2087  const PointerType *PTy;
2088  const ObjCInterfaceType *IFTy;
2089  if (OpKind == tok::period && (PTy = BaseType->getAsPointerType()) &&
2090      (IFTy = PTy->getPointeeType()->getAsObjCInterfaceType())) {
2091    ObjCInterfaceDecl *IFace = IFTy->getDecl();
2092
2093    // Search for a declared property first.
2094    if (ObjCPropertyDecl *PD = IFace->FindPropertyDeclaration(Context,
2095                                                              &Member)) {
2096      // Check whether we can reference this property.
2097      if (DiagnoseUseOfDecl(PD, MemberLoc))
2098        return ExprError();
2099
2100      return Owned(new (Context) ObjCPropertyRefExpr(PD, PD->getType(),
2101                                                     MemberLoc, BaseExpr));
2102    }
2103
2104    // Check protocols on qualified interfaces.
2105    for (ObjCInterfaceType::qual_iterator I = IFTy->qual_begin(),
2106         E = IFTy->qual_end(); I != E; ++I)
2107      if (ObjCPropertyDecl *PD = (*I)->FindPropertyDeclaration(Context,
2108                                                               &Member)) {
2109        // Check whether we can reference this property.
2110        if (DiagnoseUseOfDecl(PD, MemberLoc))
2111          return ExprError();
2112
2113        return Owned(new (Context) ObjCPropertyRefExpr(PD, PD->getType(),
2114                                                       MemberLoc, BaseExpr));
2115      }
2116
2117    // If that failed, look for an "implicit" property by seeing if the nullary
2118    // selector is implemented.
2119
2120    // FIXME: The logic for looking up nullary and unary selectors should be
2121    // shared with the code in ActOnInstanceMessage.
2122
2123    Selector Sel = PP.getSelectorTable().getNullarySelector(&Member);
2124    ObjCMethodDecl *Getter = IFace->lookupInstanceMethod(Context, Sel);
2125
2126    // If this reference is in an @implementation, check for 'private' methods.
2127    if (!Getter)
2128      Getter = FindMethodInNestedImplementations(IFace, Sel);
2129
2130    // Look through local category implementations associated with the class.
2131    if (!Getter) {
2132      for (unsigned i = 0; i < ObjCCategoryImpls.size() && !Getter; i++) {
2133        if (ObjCCategoryImpls[i]->getClassInterface() == IFace)
2134          Getter = ObjCCategoryImpls[i]->getInstanceMethod(Context, Sel);
2135      }
2136    }
2137    if (Getter) {
2138      // Check if we can reference this property.
2139      if (DiagnoseUseOfDecl(Getter, MemberLoc))
2140        return ExprError();
2141    }
2142    // If we found a getter then this may be a valid dot-reference, we
2143    // will look for the matching setter, in case it is needed.
2144    Selector SetterSel =
2145      SelectorTable::constructSetterName(PP.getIdentifierTable(),
2146                                         PP.getSelectorTable(), &Member);
2147    ObjCMethodDecl *Setter = IFace->lookupInstanceMethod(Context, SetterSel);
2148    if (!Setter) {
2149      // If this reference is in an @implementation, also check for 'private'
2150      // methods.
2151      Setter = FindMethodInNestedImplementations(IFace, SetterSel);
2152    }
2153    // Look through local category implementations associated with the class.
2154    if (!Setter) {
2155      for (unsigned i = 0; i < ObjCCategoryImpls.size() && !Setter; i++) {
2156        if (ObjCCategoryImpls[i]->getClassInterface() == IFace)
2157          Setter = ObjCCategoryImpls[i]->getInstanceMethod(Context, SetterSel);
2158      }
2159    }
2160
2161    if (Setter && DiagnoseUseOfDecl(Setter, MemberLoc))
2162      return ExprError();
2163
2164    if (Getter || Setter) {
2165      QualType PType;
2166
2167      if (Getter)
2168        PType = Getter->getResultType();
2169      else {
2170        for (ObjCMethodDecl::param_iterator PI = Setter->param_begin(),
2171             E = Setter->param_end(); PI != E; ++PI)
2172          PType = (*PI)->getType();
2173      }
2174      // FIXME: we must check that the setter has property type.
2175      return Owned(new (Context) ObjCKVCRefExpr(Getter, PType,
2176                                      Setter, MemberLoc, BaseExpr));
2177    }
2178    return ExprError(Diag(MemberLoc, diag::err_property_not_found)
2179      << &Member << BaseType);
2180  }
2181  // Handle properties on qualified "id" protocols.
2182  const ObjCQualifiedIdType *QIdTy;
2183  if (OpKind == tok::period && (QIdTy = BaseType->getAsObjCQualifiedIdType())) {
2184    // Check protocols on qualified interfaces.
2185    Selector Sel = PP.getSelectorTable().getNullarySelector(&Member);
2186    if (Decl *PMDecl = FindGetterNameDecl(QIdTy, Member, Sel, Context)) {
2187      if (ObjCPropertyDecl *PD = dyn_cast<ObjCPropertyDecl>(PMDecl)) {
2188        // Check the use of this declaration
2189        if (DiagnoseUseOfDecl(PD, MemberLoc))
2190          return ExprError();
2191
2192        return Owned(new (Context) ObjCPropertyRefExpr(PD, PD->getType(),
2193                                                       MemberLoc, BaseExpr));
2194      }
2195      if (ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(PMDecl)) {
2196        // Check the use of this method.
2197        if (DiagnoseUseOfDecl(OMD, MemberLoc))
2198          return ExprError();
2199
2200        return Owned(new (Context) ObjCMessageExpr(BaseExpr, Sel,
2201                                                   OMD->getResultType(),
2202                                                   OMD, OpLoc, MemberLoc,
2203                                                   NULL, 0));
2204      }
2205    }
2206
2207    return ExprError(Diag(MemberLoc, diag::err_property_not_found)
2208                       << &Member << BaseType);
2209  }
2210  // Handle properties on ObjC 'Class' types.
2211  if (OpKind == tok::period && (BaseType == Context.getObjCClassType())) {
2212    // Also must look for a getter name which uses property syntax.
2213    Selector Sel = PP.getSelectorTable().getNullarySelector(&Member);
2214    if (ObjCMethodDecl *MD = getCurMethodDecl()) {
2215      ObjCInterfaceDecl *IFace = MD->getClassInterface();
2216      ObjCMethodDecl *Getter;
2217      // FIXME: need to also look locally in the implementation.
2218      if ((Getter = IFace->lookupClassMethod(Context, Sel))) {
2219        // Check the use of this method.
2220        if (DiagnoseUseOfDecl(Getter, MemberLoc))
2221          return ExprError();
2222      }
2223      // If we found a getter then this may be a valid dot-reference, we
2224      // will look for the matching setter, in case it is needed.
2225      Selector SetterSel =
2226        SelectorTable::constructSetterName(PP.getIdentifierTable(),
2227                                           PP.getSelectorTable(), &Member);
2228      ObjCMethodDecl *Setter = IFace->lookupClassMethod(Context, SetterSel);
2229      if (!Setter) {
2230        // If this reference is in an @implementation, also check for 'private'
2231        // methods.
2232        Setter = FindMethodInNestedImplementations(IFace, SetterSel);
2233      }
2234      // Look through local category implementations associated with the class.
2235      if (!Setter) {
2236        for (unsigned i = 0; i < ObjCCategoryImpls.size() && !Setter; i++) {
2237          if (ObjCCategoryImpls[i]->getClassInterface() == IFace)
2238            Setter = ObjCCategoryImpls[i]->getClassMethod(Context, SetterSel);
2239        }
2240      }
2241
2242      if (Setter && DiagnoseUseOfDecl(Setter, MemberLoc))
2243        return ExprError();
2244
2245      if (Getter || Setter) {
2246        QualType PType;
2247
2248        if (Getter)
2249          PType = Getter->getResultType();
2250        else {
2251          for (ObjCMethodDecl::param_iterator PI = Setter->param_begin(),
2252               E = Setter->param_end(); PI != E; ++PI)
2253            PType = (*PI)->getType();
2254        }
2255        // FIXME: we must check that the setter has property type.
2256        return Owned(new (Context) ObjCKVCRefExpr(Getter, PType,
2257                                        Setter, MemberLoc, BaseExpr));
2258      }
2259      return ExprError(Diag(MemberLoc, diag::err_property_not_found)
2260        << &Member << BaseType);
2261    }
2262  }
2263
2264  // Handle 'field access' to vectors, such as 'V.xx'.
2265  if (BaseType->isExtVectorType()) {
2266    QualType ret = CheckExtVectorComponent(BaseType, OpLoc, Member, MemberLoc);
2267    if (ret.isNull())
2268      return ExprError();
2269    return Owned(new (Context) ExtVectorElementExpr(ret, BaseExpr, Member,
2270                                                    MemberLoc));
2271  }
2272
2273  Diag(MemberLoc, diag::err_typecheck_member_reference_struct_union)
2274    << BaseType << BaseExpr->getSourceRange();
2275
2276  // If the user is trying to apply -> or . to a function or function
2277  // pointer, it's probably because they forgot parentheses to call
2278  // the function. Suggest the addition of those parentheses.
2279  if (BaseType == Context.OverloadTy ||
2280      BaseType->isFunctionType() ||
2281      (BaseType->isPointerType() &&
2282       BaseType->getAsPointerType()->isFunctionType())) {
2283    SourceLocation Loc = PP.getLocForEndOfToken(BaseExpr->getLocEnd());
2284    Diag(Loc, diag::note_member_reference_needs_call)
2285      << CodeModificationHint::CreateInsertion(Loc, "()");
2286  }
2287
2288  return ExprError();
2289}
2290
2291/// ConvertArgumentsForCall - Converts the arguments specified in
2292/// Args/NumArgs to the parameter types of the function FDecl with
2293/// function prototype Proto. Call is the call expression itself, and
2294/// Fn is the function expression. For a C++ member function, this
2295/// routine does not attempt to convert the object argument. Returns
2296/// true if the call is ill-formed.
2297bool
2298Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
2299                              FunctionDecl *FDecl,
2300                              const FunctionProtoType *Proto,
2301                              Expr **Args, unsigned NumArgs,
2302                              SourceLocation RParenLoc) {
2303  // C99 6.5.2.2p7 - the arguments are implicitly converted, as if by
2304  // assignment, to the types of the corresponding parameter, ...
2305  unsigned NumArgsInProto = Proto->getNumArgs();
2306  unsigned NumArgsToCheck = NumArgs;
2307  bool Invalid = false;
2308
2309  // If too few arguments are available (and we don't have default
2310  // arguments for the remaining parameters), don't make the call.
2311  if (NumArgs < NumArgsInProto) {
2312    if (!FDecl || NumArgs < FDecl->getMinRequiredArguments())
2313      return Diag(RParenLoc, diag::err_typecheck_call_too_few_args)
2314        << Fn->getType()->isBlockPointerType() << Fn->getSourceRange();
2315    // Use default arguments for missing arguments
2316    NumArgsToCheck = NumArgsInProto;
2317    Call->setNumArgs(Context, NumArgsInProto);
2318  }
2319
2320  // If too many are passed and not variadic, error on the extras and drop
2321  // them.
2322  if (NumArgs > NumArgsInProto) {
2323    if (!Proto->isVariadic()) {
2324      Diag(Args[NumArgsInProto]->getLocStart(),
2325           diag::err_typecheck_call_too_many_args)
2326        << Fn->getType()->isBlockPointerType() << Fn->getSourceRange()
2327        << SourceRange(Args[NumArgsInProto]->getLocStart(),
2328                       Args[NumArgs-1]->getLocEnd());
2329      // This deletes the extra arguments.
2330      Call->setNumArgs(Context, NumArgsInProto);
2331      Invalid = true;
2332    }
2333    NumArgsToCheck = NumArgsInProto;
2334  }
2335
2336  // Continue to check argument types (even if we have too few/many args).
2337  for (unsigned i = 0; i != NumArgsToCheck; i++) {
2338    QualType ProtoArgType = Proto->getArgType(i);
2339
2340    Expr *Arg;
2341    if (i < NumArgs) {
2342      Arg = Args[i];
2343
2344      if (RequireCompleteType(Arg->getSourceRange().getBegin(),
2345                              ProtoArgType,
2346                              diag::err_call_incomplete_argument,
2347                              Arg->getSourceRange()))
2348        return true;
2349
2350      // Pass the argument.
2351      if (PerformCopyInitialization(Arg, ProtoArgType, "passing"))
2352        return true;
2353    } else
2354      // We already type-checked the argument, so we know it works.
2355      Arg = new (Context) CXXDefaultArgExpr(FDecl->getParamDecl(i));
2356    QualType ArgType = Arg->getType();
2357
2358    Call->setArg(i, Arg);
2359  }
2360
2361  // If this is a variadic call, handle args passed through "...".
2362  if (Proto->isVariadic()) {
2363    VariadicCallType CallType = VariadicFunction;
2364    if (Fn->getType()->isBlockPointerType())
2365      CallType = VariadicBlock; // Block
2366    else if (isa<MemberExpr>(Fn))
2367      CallType = VariadicMethod;
2368
2369    // Promote the arguments (C99 6.5.2.2p7).
2370    for (unsigned i = NumArgsInProto; i != NumArgs; i++) {
2371      Expr *Arg = Args[i];
2372      Invalid |= DefaultVariadicArgumentPromotion(Arg, CallType);
2373      Call->setArg(i, Arg);
2374    }
2375  }
2376
2377  return Invalid;
2378}
2379
2380/// ActOnCallExpr - Handle a call to Fn with the specified array of arguments.
2381/// This provides the location of the left/right parens and a list of comma
2382/// locations.
2383Action::OwningExprResult
2384Sema::ActOnCallExpr(Scope *S, ExprArg fn, SourceLocation LParenLoc,
2385                    MultiExprArg args,
2386                    SourceLocation *CommaLocs, SourceLocation RParenLoc) {
2387  unsigned NumArgs = args.size();
2388  Expr *Fn = fn.takeAs<Expr>();
2389  Expr **Args = reinterpret_cast<Expr**>(args.release());
2390  assert(Fn && "no function call expression");
2391  FunctionDecl *FDecl = NULL;
2392  DeclarationName UnqualifiedName;
2393
2394  if (getLangOptions().CPlusPlus) {
2395    // Determine whether this is a dependent call inside a C++ template,
2396    // in which case we won't do any semantic analysis now.
2397    // FIXME: Will need to cache the results of name lookup (including ADL) in Fn.
2398    bool Dependent = false;
2399    if (Fn->isTypeDependent())
2400      Dependent = true;
2401    else if (Expr::hasAnyTypeDependentArguments(Args, NumArgs))
2402      Dependent = true;
2403
2404    if (Dependent)
2405      return Owned(new (Context) CallExpr(Context, Fn, Args, NumArgs,
2406                                          Context.DependentTy, RParenLoc));
2407
2408    // Determine whether this is a call to an object (C++ [over.call.object]).
2409    if (Fn->getType()->isRecordType())
2410      return Owned(BuildCallToObjectOfClassType(S, Fn, LParenLoc, Args, NumArgs,
2411                                                CommaLocs, RParenLoc));
2412
2413    // Determine whether this is a call to a member function.
2414    if (MemberExpr *MemExpr = dyn_cast<MemberExpr>(Fn->IgnoreParens()))
2415      if (isa<OverloadedFunctionDecl>(MemExpr->getMemberDecl()) ||
2416          isa<CXXMethodDecl>(MemExpr->getMemberDecl()))
2417        return Owned(BuildCallToMemberFunction(S, Fn, LParenLoc, Args, NumArgs,
2418                                               CommaLocs, RParenLoc));
2419  }
2420
2421  // If we're directly calling a function, get the appropriate declaration.
2422  DeclRefExpr *DRExpr = NULL;
2423  Expr *FnExpr = Fn;
2424  bool ADL = true;
2425  while (true) {
2426    if (ImplicitCastExpr *IcExpr = dyn_cast<ImplicitCastExpr>(FnExpr))
2427      FnExpr = IcExpr->getSubExpr();
2428    else if (ParenExpr *PExpr = dyn_cast<ParenExpr>(FnExpr)) {
2429      // Parentheses around a function disable ADL
2430      // (C++0x [basic.lookup.argdep]p1).
2431      ADL = false;
2432      FnExpr = PExpr->getSubExpr();
2433    } else if (isa<UnaryOperator>(FnExpr) &&
2434               cast<UnaryOperator>(FnExpr)->getOpcode()
2435                 == UnaryOperator::AddrOf) {
2436      FnExpr = cast<UnaryOperator>(FnExpr)->getSubExpr();
2437    } else if ((DRExpr = dyn_cast<DeclRefExpr>(FnExpr))) {
2438      // Qualified names disable ADL (C++0x [basic.lookup.argdep]p1).
2439      ADL &= !isa<QualifiedDeclRefExpr>(DRExpr);
2440      break;
2441    } else if (UnresolvedFunctionNameExpr *DepName
2442                 = dyn_cast<UnresolvedFunctionNameExpr>(FnExpr)) {
2443      UnqualifiedName = DepName->getName();
2444      break;
2445    } else {
2446      // Any kind of name that does not refer to a declaration (or
2447      // set of declarations) disables ADL (C++0x [basic.lookup.argdep]p3).
2448      ADL = false;
2449      break;
2450    }
2451  }
2452
2453  OverloadedFunctionDecl *Ovl = 0;
2454  if (DRExpr) {
2455    FDecl = dyn_cast<FunctionDecl>(DRExpr->getDecl());
2456    Ovl = dyn_cast<OverloadedFunctionDecl>(DRExpr->getDecl());
2457  }
2458
2459  if (Ovl || (getLangOptions().CPlusPlus && (FDecl || UnqualifiedName))) {
2460    // We don't perform ADL for implicit declarations of builtins.
2461    if (FDecl && FDecl->getBuiltinID(Context) && FDecl->isImplicit())
2462      ADL = false;
2463
2464    // We don't perform ADL in C.
2465    if (!getLangOptions().CPlusPlus)
2466      ADL = false;
2467
2468    if (Ovl || ADL) {
2469      FDecl = ResolveOverloadedCallFn(Fn, DRExpr? DRExpr->getDecl() : 0,
2470                                      UnqualifiedName, LParenLoc, Args,
2471                                      NumArgs, CommaLocs, RParenLoc, ADL);
2472      if (!FDecl)
2473        return ExprError();
2474
2475      // Update Fn to refer to the actual function selected.
2476      Expr *NewFn = 0;
2477      if (QualifiedDeclRefExpr *QDRExpr
2478            = dyn_cast_or_null<QualifiedDeclRefExpr>(DRExpr))
2479        NewFn = new (Context) QualifiedDeclRefExpr(FDecl, FDecl->getType(),
2480                                                   QDRExpr->getLocation(),
2481                                                   false, false,
2482                                                 QDRExpr->getQualifierRange(),
2483                                                   QDRExpr->getQualifier());
2484      else
2485        NewFn = new (Context) DeclRefExpr(FDecl, FDecl->getType(),
2486                                          Fn->getSourceRange().getBegin());
2487      Fn->Destroy(Context);
2488      Fn = NewFn;
2489    }
2490  }
2491
2492  // Promote the function operand.
2493  UsualUnaryConversions(Fn);
2494
2495  // Make the call expr early, before semantic checks.  This guarantees cleanup
2496  // of arguments and function on error.
2497  ExprOwningPtr<CallExpr> TheCall(this, new (Context) CallExpr(Context, Fn,
2498                                                               Args, NumArgs,
2499                                                               Context.BoolTy,
2500                                                               RParenLoc));
2501
2502  const FunctionType *FuncT;
2503  if (!Fn->getType()->isBlockPointerType()) {
2504    // C99 6.5.2.2p1 - "The expression that denotes the called function shall
2505    // have type pointer to function".
2506    const PointerType *PT = Fn->getType()->getAsPointerType();
2507    if (PT == 0)
2508      return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function)
2509        << Fn->getType() << Fn->getSourceRange());
2510    FuncT = PT->getPointeeType()->getAsFunctionType();
2511  } else { // This is a block call.
2512    FuncT = Fn->getType()->getAsBlockPointerType()->getPointeeType()->
2513                getAsFunctionType();
2514  }
2515  if (FuncT == 0)
2516    return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function)
2517      << Fn->getType() << Fn->getSourceRange());
2518
2519  // Check for a valid return type
2520  if (!FuncT->getResultType()->isVoidType() &&
2521      RequireCompleteType(Fn->getSourceRange().getBegin(),
2522                          FuncT->getResultType(),
2523                          diag::err_call_incomplete_return,
2524                          TheCall->getSourceRange()))
2525    return ExprError();
2526
2527  // We know the result type of the call, set it.
2528  TheCall->setType(FuncT->getResultType().getNonReferenceType());
2529
2530  if (const FunctionProtoType *Proto = dyn_cast<FunctionProtoType>(FuncT)) {
2531    if (ConvertArgumentsForCall(&*TheCall, Fn, FDecl, Proto, Args, NumArgs,
2532                                RParenLoc))
2533      return ExprError();
2534  } else {
2535    assert(isa<FunctionNoProtoType>(FuncT) && "Unknown FunctionType!");
2536
2537    if (FDecl) {
2538      // Check if we have too few/too many template arguments, based
2539      // on our knowledge of the function definition.
2540      const FunctionDecl *Def = 0;
2541      if (FDecl->getBody(Context, Def) && NumArgs != Def->param_size())
2542        Diag(RParenLoc, diag::warn_call_wrong_number_of_arguments)
2543          << (NumArgs > Def->param_size()) << FDecl << Fn->getSourceRange();
2544    }
2545
2546    // Promote the arguments (C99 6.5.2.2p6).
2547    for (unsigned i = 0; i != NumArgs; i++) {
2548      Expr *Arg = Args[i];
2549      DefaultArgumentPromotion(Arg);
2550      if (RequireCompleteType(Arg->getSourceRange().getBegin(),
2551                              Arg->getType(),
2552                              diag::err_call_incomplete_argument,
2553                              Arg->getSourceRange()))
2554        return ExprError();
2555      TheCall->setArg(i, Arg);
2556    }
2557  }
2558
2559  if (CXXMethodDecl *Method = dyn_cast_or_null<CXXMethodDecl>(FDecl))
2560    if (!Method->isStatic())
2561      return ExprError(Diag(LParenLoc, diag::err_member_call_without_object)
2562        << Fn->getSourceRange());
2563
2564  // Do special checking on direct calls to functions.
2565  if (FDecl)
2566    return CheckFunctionCall(FDecl, TheCall.take());
2567
2568  return Owned(TheCall.take());
2569}
2570
2571Action::OwningExprResult
2572Sema::ActOnCompoundLiteral(SourceLocation LParenLoc, TypeTy *Ty,
2573                           SourceLocation RParenLoc, ExprArg InitExpr) {
2574  assert((Ty != 0) && "ActOnCompoundLiteral(): missing type");
2575  QualType literalType = QualType::getFromOpaquePtr(Ty);
2576  // FIXME: put back this assert when initializers are worked out.
2577  //assert((InitExpr != 0) && "ActOnCompoundLiteral(): missing expression");
2578  Expr *literalExpr = static_cast<Expr*>(InitExpr.get());
2579
2580  if (literalType->isArrayType()) {
2581    if (literalType->isVariableArrayType())
2582      return ExprError(Diag(LParenLoc, diag::err_variable_object_no_init)
2583        << SourceRange(LParenLoc, literalExpr->getSourceRange().getEnd()));
2584  } else if (RequireCompleteType(LParenLoc, literalType,
2585                                    diag::err_typecheck_decl_incomplete_type,
2586                SourceRange(LParenLoc, literalExpr->getSourceRange().getEnd())))
2587    return ExprError();
2588
2589  if (CheckInitializerTypes(literalExpr, literalType, LParenLoc,
2590                            DeclarationName(), /*FIXME:DirectInit=*/false))
2591    return ExprError();
2592
2593  bool isFileScope = getCurFunctionOrMethodDecl() == 0;
2594  if (isFileScope) { // 6.5.2.5p3
2595    if (CheckForConstantInitializer(literalExpr, literalType))
2596      return ExprError();
2597  }
2598  InitExpr.release();
2599  return Owned(new (Context) CompoundLiteralExpr(LParenLoc, literalType,
2600                                                 literalExpr, isFileScope));
2601}
2602
2603Action::OwningExprResult
2604Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg initlist,
2605                    SourceLocation RBraceLoc) {
2606  unsigned NumInit = initlist.size();
2607  Expr **InitList = reinterpret_cast<Expr**>(initlist.release());
2608
2609  // Semantic analysis for initializers is done by ActOnDeclarator() and
2610  // CheckInitializer() - it requires knowledge of the object being intialized.
2611
2612  InitListExpr *E = new (Context) InitListExpr(LBraceLoc, InitList, NumInit,
2613                                               RBraceLoc);
2614  E->setType(Context.VoidTy); // FIXME: just a place holder for now.
2615  return Owned(E);
2616}
2617
2618/// CheckCastTypes - Check type constraints for casting between types.
2619bool Sema::CheckCastTypes(SourceRange TyR, QualType castType, Expr *&castExpr) {
2620  UsualUnaryConversions(castExpr);
2621
2622  // C99 6.5.4p2: the cast type needs to be void or scalar and the expression
2623  // type needs to be scalar.
2624  if (castType->isVoidType()) {
2625    // Cast to void allows any expr type.
2626  } else if (castType->isDependentType() || castExpr->isTypeDependent()) {
2627    // We can't check any more until template instantiation time.
2628  } else if (!castType->isScalarType() && !castType->isVectorType()) {
2629    if (Context.getCanonicalType(castType).getUnqualifiedType() ==
2630        Context.getCanonicalType(castExpr->getType().getUnqualifiedType()) &&
2631        (castType->isStructureType() || castType->isUnionType())) {
2632      // GCC struct/union extension: allow cast to self.
2633      // FIXME: Check that the cast destination type is complete.
2634      Diag(TyR.getBegin(), diag::ext_typecheck_cast_nonscalar)
2635        << castType << castExpr->getSourceRange();
2636    } else if (castType->isUnionType()) {
2637      // GCC cast to union extension
2638      RecordDecl *RD = castType->getAsRecordType()->getDecl();
2639      RecordDecl::field_iterator Field, FieldEnd;
2640      for (Field = RD->field_begin(Context), FieldEnd = RD->field_end(Context);
2641           Field != FieldEnd; ++Field) {
2642        if (Context.getCanonicalType(Field->getType()).getUnqualifiedType() ==
2643            Context.getCanonicalType(castExpr->getType()).getUnqualifiedType()) {
2644          Diag(TyR.getBegin(), diag::ext_typecheck_cast_to_union)
2645            << castExpr->getSourceRange();
2646          break;
2647        }
2648      }
2649      if (Field == FieldEnd)
2650        return Diag(TyR.getBegin(), diag::err_typecheck_cast_to_union_no_type)
2651          << castExpr->getType() << castExpr->getSourceRange();
2652    } else {
2653      // Reject any other conversions to non-scalar types.
2654      return Diag(TyR.getBegin(), diag::err_typecheck_cond_expect_scalar)
2655        << castType << castExpr->getSourceRange();
2656    }
2657  } else if (!castExpr->getType()->isScalarType() &&
2658             !castExpr->getType()->isVectorType()) {
2659    return Diag(castExpr->getLocStart(),
2660                diag::err_typecheck_expect_scalar_operand)
2661      << castExpr->getType() << castExpr->getSourceRange();
2662  } else if (castExpr->getType()->isVectorType()) {
2663    if (CheckVectorCast(TyR, castExpr->getType(), castType))
2664      return true;
2665  } else if (castType->isVectorType()) {
2666    if (CheckVectorCast(TyR, castType, castExpr->getType()))
2667      return true;
2668  } else if (getLangOptions().ObjC1 && isa<ObjCSuperExpr>(castExpr)) {
2669    return Diag(castExpr->getLocStart(), diag::err_illegal_super_cast) << TyR;
2670  } else if (!castType->isArithmeticType()) {
2671    QualType castExprType = castExpr->getType();
2672    if (!castExprType->isIntegralType() && castExprType->isArithmeticType())
2673      return Diag(castExpr->getLocStart(),
2674                  diag::err_cast_pointer_from_non_pointer_int)
2675        << castExprType << castExpr->getSourceRange();
2676  } else if (!castExpr->getType()->isArithmeticType()) {
2677    if (!castType->isIntegralType() && castType->isArithmeticType())
2678      return Diag(castExpr->getLocStart(),
2679                  diag::err_cast_pointer_to_non_pointer_int)
2680        << castType << castExpr->getSourceRange();
2681  }
2682  return false;
2683}
2684
2685bool Sema::CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty) {
2686  assert(VectorTy->isVectorType() && "Not a vector type!");
2687
2688  if (Ty->isVectorType() || Ty->isIntegerType()) {
2689    if (Context.getTypeSize(VectorTy) != Context.getTypeSize(Ty))
2690      return Diag(R.getBegin(),
2691                  Ty->isVectorType() ?
2692                  diag::err_invalid_conversion_between_vectors :
2693                  diag::err_invalid_conversion_between_vector_and_integer)
2694        << VectorTy << Ty << R;
2695  } else
2696    return Diag(R.getBegin(),
2697                diag::err_invalid_conversion_between_vector_and_scalar)
2698      << VectorTy << Ty << R;
2699
2700  return false;
2701}
2702
2703Action::OwningExprResult
2704Sema::ActOnCastExpr(SourceLocation LParenLoc, TypeTy *Ty,
2705                    SourceLocation RParenLoc, ExprArg Op) {
2706  assert((Ty != 0) && (Op.get() != 0) &&
2707         "ActOnCastExpr(): missing type or expr");
2708
2709  Expr *castExpr = Op.takeAs<Expr>();
2710  QualType castType = QualType::getFromOpaquePtr(Ty);
2711
2712  if (CheckCastTypes(SourceRange(LParenLoc, RParenLoc), castType, castExpr))
2713    return ExprError();
2714  return Owned(new (Context) CStyleCastExpr(castType, castExpr, castType,
2715                                            LParenLoc, RParenLoc));
2716}
2717
2718/// Note that lhs is not null here, even if this is the gnu "x ?: y" extension.
2719/// In that case, lhs = cond.
2720/// C99 6.5.15
2721QualType Sema::CheckConditionalOperands(Expr *&Cond, Expr *&LHS, Expr *&RHS,
2722                                        SourceLocation QuestionLoc) {
2723  // C++ is sufficiently different to merit its own checker.
2724  if (getLangOptions().CPlusPlus)
2725    return CXXCheckConditionalOperands(Cond, LHS, RHS, QuestionLoc);
2726
2727  UsualUnaryConversions(Cond);
2728  UsualUnaryConversions(LHS);
2729  UsualUnaryConversions(RHS);
2730  QualType CondTy = Cond->getType();
2731  QualType LHSTy = LHS->getType();
2732  QualType RHSTy = RHS->getType();
2733
2734  // first, check the condition.
2735  if (!CondTy->isScalarType()) { // C99 6.5.15p2
2736    Diag(Cond->getLocStart(), diag::err_typecheck_cond_expect_scalar)
2737      << CondTy;
2738    return QualType();
2739  }
2740
2741  // Now check the two expressions.
2742
2743  // If both operands have arithmetic type, do the usual arithmetic conversions
2744  // to find a common type: C99 6.5.15p3,5.
2745  if (LHSTy->isArithmeticType() && RHSTy->isArithmeticType()) {
2746    UsualArithmeticConversions(LHS, RHS);
2747    return LHS->getType();
2748  }
2749
2750  // If both operands are the same structure or union type, the result is that
2751  // type.
2752  if (const RecordType *LHSRT = LHSTy->getAsRecordType()) {    // C99 6.5.15p3
2753    if (const RecordType *RHSRT = RHSTy->getAsRecordType())
2754      if (LHSRT->getDecl() == RHSRT->getDecl())
2755        // "If both the operands have structure or union type, the result has
2756        // that type."  This implies that CV qualifiers are dropped.
2757        return LHSTy.getUnqualifiedType();
2758    // FIXME: Type of conditional expression must be complete in C mode.
2759  }
2760
2761  // C99 6.5.15p5: "If both operands have void type, the result has void type."
2762  // The following || allows only one side to be void (a GCC-ism).
2763  if (LHSTy->isVoidType() || RHSTy->isVoidType()) {
2764    if (!LHSTy->isVoidType())
2765      Diag(RHS->getLocStart(), diag::ext_typecheck_cond_one_void)
2766        << RHS->getSourceRange();
2767    if (!RHSTy->isVoidType())
2768      Diag(LHS->getLocStart(), diag::ext_typecheck_cond_one_void)
2769        << LHS->getSourceRange();
2770    ImpCastExprToType(LHS, Context.VoidTy);
2771    ImpCastExprToType(RHS, Context.VoidTy);
2772    return Context.VoidTy;
2773  }
2774  // C99 6.5.15p6 - "if one operand is a null pointer constant, the result has
2775  // the type of the other operand."
2776  if ((LHSTy->isPointerType() || LHSTy->isBlockPointerType() ||
2777       Context.isObjCObjectPointerType(LHSTy)) &&
2778      RHS->isNullPointerConstant(Context)) {
2779    ImpCastExprToType(RHS, LHSTy); // promote the null to a pointer.
2780    return LHSTy;
2781  }
2782  if ((RHSTy->isPointerType() || RHSTy->isBlockPointerType() ||
2783       Context.isObjCObjectPointerType(RHSTy)) &&
2784      LHS->isNullPointerConstant(Context)) {
2785    ImpCastExprToType(LHS, RHSTy); // promote the null to a pointer.
2786    return RHSTy;
2787  }
2788
2789  // Handle the case where both operands are pointers before we handle null
2790  // pointer constants in case both operands are null pointer constants.
2791  if (const PointerType *LHSPT = LHSTy->getAsPointerType()) { // C99 6.5.15p3,6
2792    if (const PointerType *RHSPT = RHSTy->getAsPointerType()) {
2793      // get the "pointed to" types
2794      QualType lhptee = LHSPT->getPointeeType();
2795      QualType rhptee = RHSPT->getPointeeType();
2796
2797      // ignore qualifiers on void (C99 6.5.15p3, clause 6)
2798      if (lhptee->isVoidType() &&
2799          rhptee->isIncompleteOrObjectType()) {
2800        // Figure out necessary qualifiers (C99 6.5.15p6)
2801        QualType destPointee=lhptee.getQualifiedType(rhptee.getCVRQualifiers());
2802        QualType destType = Context.getPointerType(destPointee);
2803        ImpCastExprToType(LHS, destType); // add qualifiers if necessary
2804        ImpCastExprToType(RHS, destType); // promote to void*
2805        return destType;
2806      }
2807      if (rhptee->isVoidType() && lhptee->isIncompleteOrObjectType()) {
2808        QualType destPointee=rhptee.getQualifiedType(lhptee.getCVRQualifiers());
2809        QualType destType = Context.getPointerType(destPointee);
2810        ImpCastExprToType(LHS, destType); // add qualifiers if necessary
2811        ImpCastExprToType(RHS, destType); // promote to void*
2812        return destType;
2813      }
2814
2815      if (Context.getCanonicalType(LHSTy) == Context.getCanonicalType(RHSTy)) {
2816        // Two identical pointer types are always compatible.
2817        return LHSTy;
2818      }
2819
2820      QualType compositeType = LHSTy;
2821
2822      // If either type is an Objective-C object type then check
2823      // compatibility according to Objective-C.
2824      if (Context.isObjCObjectPointerType(LHSTy) ||
2825          Context.isObjCObjectPointerType(RHSTy)) {
2826        // If both operands are interfaces and either operand can be
2827        // assigned to the other, use that type as the composite
2828        // type. This allows
2829        //   xxx ? (A*) a : (B*) b
2830        // where B is a subclass of A.
2831        //
2832        // Additionally, as for assignment, if either type is 'id'
2833        // allow silent coercion. Finally, if the types are
2834        // incompatible then make sure to use 'id' as the composite
2835        // type so the result is acceptable for sending messages to.
2836
2837        // FIXME: Consider unifying with 'areComparableObjCPointerTypes'.
2838        // It could return the composite type.
2839        const ObjCInterfaceType* LHSIface = lhptee->getAsObjCInterfaceType();
2840        const ObjCInterfaceType* RHSIface = rhptee->getAsObjCInterfaceType();
2841        if (LHSIface && RHSIface &&
2842            Context.canAssignObjCInterfaces(LHSIface, RHSIface)) {
2843          compositeType = LHSTy;
2844        } else if (LHSIface && RHSIface &&
2845                   Context.canAssignObjCInterfaces(RHSIface, LHSIface)) {
2846          compositeType = RHSTy;
2847        } else if (Context.isObjCIdStructType(lhptee) ||
2848                   Context.isObjCIdStructType(rhptee)) {
2849          compositeType = Context.getObjCIdType();
2850        } else {
2851          Diag(QuestionLoc, diag::ext_typecheck_comparison_of_distinct_pointers)
2852               << LHSTy << RHSTy
2853               << LHS->getSourceRange() << RHS->getSourceRange();
2854          QualType incompatTy = Context.getObjCIdType();
2855          ImpCastExprToType(LHS, incompatTy);
2856          ImpCastExprToType(RHS, incompatTy);
2857          return incompatTy;
2858        }
2859      } else if (!Context.typesAreCompatible(lhptee.getUnqualifiedType(),
2860                                             rhptee.getUnqualifiedType())) {
2861        Diag(QuestionLoc, diag::warn_typecheck_cond_incompatible_pointers)
2862          << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
2863        // In this situation, we assume void* type. No especially good
2864        // reason, but this is what gcc does, and we do have to pick
2865        // to get a consistent AST.
2866        QualType incompatTy = Context.getPointerType(Context.VoidTy);
2867        ImpCastExprToType(LHS, incompatTy);
2868        ImpCastExprToType(RHS, incompatTy);
2869        return incompatTy;
2870      }
2871      // The pointer types are compatible.
2872      // C99 6.5.15p6: If both operands are pointers to compatible types *or* to
2873      // differently qualified versions of compatible types, the result type is
2874      // a pointer to an appropriately qualified version of the *composite*
2875      // type.
2876      // FIXME: Need to calculate the composite type.
2877      // FIXME: Need to add qualifiers
2878      ImpCastExprToType(LHS, compositeType);
2879      ImpCastExprToType(RHS, compositeType);
2880      return compositeType;
2881    }
2882  }
2883
2884  // GCC compatibility: soften pointer/integer mismatch.
2885  if (RHSTy->isPointerType() && LHSTy->isIntegerType()) {
2886    Diag(QuestionLoc, diag::warn_typecheck_cond_pointer_integer_mismatch)
2887      << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
2888    ImpCastExprToType(LHS, RHSTy); // promote the integer to a pointer.
2889    return RHSTy;
2890  }
2891  if (LHSTy->isPointerType() && RHSTy->isIntegerType()) {
2892    Diag(QuestionLoc, diag::warn_typecheck_cond_pointer_integer_mismatch)
2893      << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
2894    ImpCastExprToType(RHS, LHSTy); // promote the integer to a pointer.
2895    return LHSTy;
2896  }
2897
2898  // Selection between block pointer types is ok as long as they are the same.
2899  if (LHSTy->isBlockPointerType() && RHSTy->isBlockPointerType() &&
2900      Context.getCanonicalType(LHSTy) == Context.getCanonicalType(RHSTy))
2901    return LHSTy;
2902
2903  // Need to handle "id<xx>" explicitly. Unlike "id", whose canonical type
2904  // evaluates to "struct objc_object *" (and is handled above when comparing
2905  // id with statically typed objects).
2906  if (LHSTy->isObjCQualifiedIdType() || RHSTy->isObjCQualifiedIdType()) {
2907    // GCC allows qualified id and any Objective-C type to devolve to
2908    // id. Currently localizing to here until clear this should be
2909    // part of ObjCQualifiedIdTypesAreCompatible.
2910    if (ObjCQualifiedIdTypesAreCompatible(LHSTy, RHSTy, true) ||
2911        (LHSTy->isObjCQualifiedIdType() &&
2912         Context.isObjCObjectPointerType(RHSTy)) ||
2913        (RHSTy->isObjCQualifiedIdType() &&
2914         Context.isObjCObjectPointerType(LHSTy))) {
2915      // FIXME: This is not the correct composite type. This only
2916      // happens to work because id can more or less be used anywhere,
2917      // however this may change the type of method sends.
2918      // FIXME: gcc adds some type-checking of the arguments and emits
2919      // (confusing) incompatible comparison warnings in some
2920      // cases. Investigate.
2921      QualType compositeType = Context.getObjCIdType();
2922      ImpCastExprToType(LHS, compositeType);
2923      ImpCastExprToType(RHS, compositeType);
2924      return compositeType;
2925    }
2926  }
2927
2928  // Otherwise, the operands are not compatible.
2929  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands)
2930    << LHSTy << RHSTy << LHS->getSourceRange() << RHS->getSourceRange();
2931  return QualType();
2932}
2933
2934/// ActOnConditionalOp - Parse a ?: operation.  Note that 'LHS' may be null
2935/// in the case of a the GNU conditional expr extension.
2936Action::OwningExprResult Sema::ActOnConditionalOp(SourceLocation QuestionLoc,
2937                                                  SourceLocation ColonLoc,
2938                                                  ExprArg Cond, ExprArg LHS,
2939                                                  ExprArg RHS) {
2940  Expr *CondExpr = (Expr *) Cond.get();
2941  Expr *LHSExpr = (Expr *) LHS.get(), *RHSExpr = (Expr *) RHS.get();
2942
2943  // If this is the gnu "x ?: y" extension, analyze the types as though the LHS
2944  // was the condition.
2945  bool isLHSNull = LHSExpr == 0;
2946  if (isLHSNull)
2947    LHSExpr = CondExpr;
2948
2949  QualType result = CheckConditionalOperands(CondExpr, LHSExpr,
2950                                             RHSExpr, QuestionLoc);
2951  if (result.isNull())
2952    return ExprError();
2953
2954  Cond.release();
2955  LHS.release();
2956  RHS.release();
2957  return Owned(new (Context) ConditionalOperator(CondExpr,
2958                                                 isLHSNull ? 0 : LHSExpr,
2959                                                 RHSExpr, result));
2960}
2961
2962
2963// CheckPointerTypesForAssignment - This is a very tricky routine (despite
2964// being closely modeled after the C99 spec:-). The odd characteristic of this
2965// routine is it effectively iqnores the qualifiers on the top level pointee.
2966// This circumvents the usual type rules specified in 6.2.7p1 & 6.7.5.[1-3].
2967// FIXME: add a couple examples in this comment.
2968Sema::AssignConvertType
2969Sema::CheckPointerTypesForAssignment(QualType lhsType, QualType rhsType) {
2970  QualType lhptee, rhptee;
2971
2972  // get the "pointed to" type (ignoring qualifiers at the top level)
2973  lhptee = lhsType->getAsPointerType()->getPointeeType();
2974  rhptee = rhsType->getAsPointerType()->getPointeeType();
2975
2976  // make sure we operate on the canonical type
2977  lhptee = Context.getCanonicalType(lhptee);
2978  rhptee = Context.getCanonicalType(rhptee);
2979
2980  AssignConvertType ConvTy = Compatible;
2981
2982  // C99 6.5.16.1p1: This following citation is common to constraints
2983  // 3 & 4 (below). ...and the type *pointed to* by the left has all the
2984  // qualifiers of the type *pointed to* by the right;
2985  // FIXME: Handle ExtQualType
2986  if (!lhptee.isAtLeastAsQualifiedAs(rhptee))
2987    ConvTy = CompatiblePointerDiscardsQualifiers;
2988
2989  // C99 6.5.16.1p1 (constraint 4): If one operand is a pointer to an object or
2990  // incomplete type and the other is a pointer to a qualified or unqualified
2991  // version of void...
2992  if (lhptee->isVoidType()) {
2993    if (rhptee->isIncompleteOrObjectType())
2994      return ConvTy;
2995
2996    // As an extension, we allow cast to/from void* to function pointer.
2997    assert(rhptee->isFunctionType());
2998    return FunctionVoidPointer;
2999  }
3000
3001  if (rhptee->isVoidType()) {
3002    if (lhptee->isIncompleteOrObjectType())
3003      return ConvTy;
3004
3005    // As an extension, we allow cast to/from void* to function pointer.
3006    assert(lhptee->isFunctionType());
3007    return FunctionVoidPointer;
3008  }
3009  // C99 6.5.16.1p1 (constraint 3): both operands are pointers to qualified or
3010  // unqualified versions of compatible types, ...
3011  lhptee = lhptee.getUnqualifiedType();
3012  rhptee = rhptee.getUnqualifiedType();
3013  if (!Context.typesAreCompatible(lhptee, rhptee)) {
3014    // Check if the pointee types are compatible ignoring the sign.
3015    // We explicitly check for char so that we catch "char" vs
3016    // "unsigned char" on systems where "char" is unsigned.
3017    if (lhptee->isCharType()) {
3018      lhptee = Context.UnsignedCharTy;
3019    } else if (lhptee->isSignedIntegerType()) {
3020      lhptee = Context.getCorrespondingUnsignedType(lhptee);
3021    }
3022    if (rhptee->isCharType()) {
3023      rhptee = Context.UnsignedCharTy;
3024    } else if (rhptee->isSignedIntegerType()) {
3025      rhptee = Context.getCorrespondingUnsignedType(rhptee);
3026    }
3027    if (lhptee == rhptee) {
3028      // Types are compatible ignoring the sign. Qualifier incompatibility
3029      // takes priority over sign incompatibility because the sign
3030      // warning can be disabled.
3031      if (ConvTy != Compatible)
3032        return ConvTy;
3033      return IncompatiblePointerSign;
3034    }
3035    // General pointer incompatibility takes priority over qualifiers.
3036    return IncompatiblePointer;
3037  }
3038  return ConvTy;
3039}
3040
3041/// CheckBlockPointerTypesForAssignment - This routine determines whether two
3042/// block pointer types are compatible or whether a block and normal pointer
3043/// are compatible. It is more restrict than comparing two function pointer
3044// types.
3045Sema::AssignConvertType
3046Sema::CheckBlockPointerTypesForAssignment(QualType lhsType,
3047                                          QualType rhsType) {
3048  QualType lhptee, rhptee;
3049
3050  // get the "pointed to" type (ignoring qualifiers at the top level)
3051  lhptee = lhsType->getAsBlockPointerType()->getPointeeType();
3052  rhptee = rhsType->getAsBlockPointerType()->getPointeeType();
3053
3054  // make sure we operate on the canonical type
3055  lhptee = Context.getCanonicalType(lhptee);
3056  rhptee = Context.getCanonicalType(rhptee);
3057
3058  AssignConvertType ConvTy = Compatible;
3059
3060  // For blocks we enforce that qualifiers are identical.
3061  if (lhptee.getCVRQualifiers() != rhptee.getCVRQualifiers())
3062    ConvTy = CompatiblePointerDiscardsQualifiers;
3063
3064  if (!Context.typesAreBlockCompatible(lhptee, rhptee))
3065    return IncompatibleBlockPointer;
3066  return ConvTy;
3067}
3068
3069/// CheckAssignmentConstraints (C99 6.5.16) - This routine currently
3070/// has code to accommodate several GCC extensions when type checking
3071/// pointers. Here are some objectionable examples that GCC considers warnings:
3072///
3073///  int a, *pint;
3074///  short *pshort;
3075///  struct foo *pfoo;
3076///
3077///  pint = pshort; // warning: assignment from incompatible pointer type
3078///  a = pint; // warning: assignment makes integer from pointer without a cast
3079///  pint = a; // warning: assignment makes pointer from integer without a cast
3080///  pint = pfoo; // warning: assignment from incompatible pointer type
3081///
3082/// As a result, the code for dealing with pointers is more complex than the
3083/// C99 spec dictates.
3084///
3085Sema::AssignConvertType
3086Sema::CheckAssignmentConstraints(QualType lhsType, QualType rhsType) {
3087  // Get canonical types.  We're not formatting these types, just comparing
3088  // them.
3089  lhsType = Context.getCanonicalType(lhsType).getUnqualifiedType();
3090  rhsType = Context.getCanonicalType(rhsType).getUnqualifiedType();
3091
3092  if (lhsType == rhsType)
3093    return Compatible; // Common case: fast path an exact match.
3094
3095  // If the left-hand side is a reference type, then we are in a
3096  // (rare!) case where we've allowed the use of references in C,
3097  // e.g., as a parameter type in a built-in function. In this case,
3098  // just make sure that the type referenced is compatible with the
3099  // right-hand side type. The caller is responsible for adjusting
3100  // lhsType so that the resulting expression does not have reference
3101  // type.
3102  if (const ReferenceType *lhsTypeRef = lhsType->getAsReferenceType()) {
3103    if (Context.typesAreCompatible(lhsTypeRef->getPointeeType(), rhsType))
3104      return Compatible;
3105    return Incompatible;
3106  }
3107
3108  if (lhsType->isObjCQualifiedIdType() || rhsType->isObjCQualifiedIdType()) {
3109    if (ObjCQualifiedIdTypesAreCompatible(lhsType, rhsType, false))
3110      return Compatible;
3111    // Relax integer conversions like we do for pointers below.
3112    if (rhsType->isIntegerType())
3113      return IntToPointer;
3114    if (lhsType->isIntegerType())
3115      return PointerToInt;
3116    return IncompatibleObjCQualifiedId;
3117  }
3118
3119  if (lhsType->isVectorType() || rhsType->isVectorType()) {
3120    // For ExtVector, allow vector splats; float -> <n x float>
3121    if (const ExtVectorType *LV = lhsType->getAsExtVectorType())
3122      if (LV->getElementType() == rhsType)
3123        return Compatible;
3124
3125    // If we are allowing lax vector conversions, and LHS and RHS are both
3126    // vectors, the total size only needs to be the same. This is a bitcast;
3127    // no bits are changed but the result type is different.
3128    if (getLangOptions().LaxVectorConversions &&
3129        lhsType->isVectorType() && rhsType->isVectorType()) {
3130      if (Context.getTypeSize(lhsType) == Context.getTypeSize(rhsType))
3131        return IncompatibleVectors;
3132    }
3133    return Incompatible;
3134  }
3135
3136  if (lhsType->isArithmeticType() && rhsType->isArithmeticType())
3137    return Compatible;
3138
3139  if (isa<PointerType>(lhsType)) {
3140    if (rhsType->isIntegerType())
3141      return IntToPointer;
3142
3143    if (isa<PointerType>(rhsType))
3144      return CheckPointerTypesForAssignment(lhsType, rhsType);
3145
3146    if (rhsType->getAsBlockPointerType()) {
3147      if (lhsType->getAsPointerType()->getPointeeType()->isVoidType())
3148        return Compatible;
3149
3150      // Treat block pointers as objects.
3151      if (getLangOptions().ObjC1 &&
3152          lhsType == Context.getCanonicalType(Context.getObjCIdType()))
3153        return Compatible;
3154    }
3155    return Incompatible;
3156  }
3157
3158  if (isa<BlockPointerType>(lhsType)) {
3159    if (rhsType->isIntegerType())
3160      return IntToBlockPointer;
3161
3162    // Treat block pointers as objects.
3163    if (getLangOptions().ObjC1 &&
3164        rhsType == Context.getCanonicalType(Context.getObjCIdType()))
3165      return Compatible;
3166
3167    if (rhsType->isBlockPointerType())
3168      return CheckBlockPointerTypesForAssignment(lhsType, rhsType);
3169
3170    if (const PointerType *RHSPT = rhsType->getAsPointerType()) {
3171      if (RHSPT->getPointeeType()->isVoidType())
3172        return Compatible;
3173    }
3174    return Incompatible;
3175  }
3176
3177  if (isa<PointerType>(rhsType)) {
3178    // C99 6.5.16.1p1: the left operand is _Bool and the right is a pointer.
3179    if (lhsType == Context.BoolTy)
3180      return Compatible;
3181
3182    if (lhsType->isIntegerType())
3183      return PointerToInt;
3184
3185    if (isa<PointerType>(lhsType))
3186      return CheckPointerTypesForAssignment(lhsType, rhsType);
3187
3188    if (isa<BlockPointerType>(lhsType) &&
3189        rhsType->getAsPointerType()->getPointeeType()->isVoidType())
3190      return Compatible;
3191    return Incompatible;
3192  }
3193
3194  if (isa<TagType>(lhsType) && isa<TagType>(rhsType)) {
3195    if (Context.typesAreCompatible(lhsType, rhsType))
3196      return Compatible;
3197  }
3198  return Incompatible;
3199}
3200
3201/// \brief Constructs a transparent union from an expression that is
3202/// used to initialize the transparent union.
3203static void ConstructTransparentUnion(ASTContext &C, Expr *&E,
3204                                      QualType UnionType, FieldDecl *Field) {
3205  // Build an initializer list that designates the appropriate member
3206  // of the transparent union.
3207  InitListExpr *Initializer = new (C) InitListExpr(SourceLocation(),
3208                                                   &E, 1,
3209                                                   SourceLocation());
3210  Initializer->setType(UnionType);
3211  Initializer->setInitializedFieldInUnion(Field);
3212
3213  // Build a compound literal constructing a value of the transparent
3214  // union type from this initializer list.
3215  E = new (C) CompoundLiteralExpr(SourceLocation(), UnionType, Initializer,
3216                                  false);
3217}
3218
3219Sema::AssignConvertType
3220Sema::CheckTransparentUnionArgumentConstraints(QualType ArgType, Expr *&rExpr) {
3221  QualType FromType = rExpr->getType();
3222
3223  // If the ArgType is a Union type, we want to handle a potential
3224  // transparent_union GCC extension.
3225  const RecordType *UT = ArgType->getAsUnionType();
3226  if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
3227    return Incompatible;
3228
3229  // The field to initialize within the transparent union.
3230  RecordDecl *UD = UT->getDecl();
3231  FieldDecl *InitField = 0;
3232  // It's compatible if the expression matches any of the fields.
3233  for (RecordDecl::field_iterator it = UD->field_begin(Context),
3234         itend = UD->field_end(Context);
3235       it != itend; ++it) {
3236    if (it->getType()->isPointerType()) {
3237      // If the transparent union contains a pointer type, we allow:
3238      // 1) void pointer
3239      // 2) null pointer constant
3240      if (FromType->isPointerType())
3241        if (FromType->getAsPointerType()->getPointeeType()->isVoidType()) {
3242          ImpCastExprToType(rExpr, it->getType());
3243          InitField = *it;
3244          break;
3245        }
3246
3247      if (rExpr->isNullPointerConstant(Context)) {
3248        ImpCastExprToType(rExpr, it->getType());
3249        InitField = *it;
3250        break;
3251      }
3252    }
3253
3254    if (CheckAssignmentConstraints(it->getType(), rExpr->getType())
3255          == Compatible) {
3256      InitField = *it;
3257      break;
3258    }
3259  }
3260
3261  if (!InitField)
3262    return Incompatible;
3263
3264  ConstructTransparentUnion(Context, rExpr, ArgType, InitField);
3265  return Compatible;
3266}
3267
3268Sema::AssignConvertType
3269Sema::CheckSingleAssignmentConstraints(QualType lhsType, Expr *&rExpr) {
3270  if (getLangOptions().CPlusPlus) {
3271    if (!lhsType->isRecordType()) {
3272      // C++ 5.17p3: If the left operand is not of class type, the
3273      // expression is implicitly converted (C++ 4) to the
3274      // cv-unqualified type of the left operand.
3275      if (PerformImplicitConversion(rExpr, lhsType.getUnqualifiedType(),
3276                                    "assigning"))
3277        return Incompatible;
3278      return Compatible;
3279    }
3280
3281    // FIXME: Currently, we fall through and treat C++ classes like C
3282    // structures.
3283  }
3284
3285  // C99 6.5.16.1p1: the left operand is a pointer and the right is
3286  // a null pointer constant.
3287  if ((lhsType->isPointerType() ||
3288       lhsType->isObjCQualifiedIdType() ||
3289       lhsType->isBlockPointerType())
3290      && rExpr->isNullPointerConstant(Context)) {
3291    ImpCastExprToType(rExpr, lhsType);
3292    return Compatible;
3293  }
3294
3295  // This check seems unnatural, however it is necessary to ensure the proper
3296  // conversion of functions/arrays. If the conversion were done for all
3297  // DeclExpr's (created by ActOnIdentifierExpr), it would mess up the unary
3298  // expressions that surpress this implicit conversion (&, sizeof).
3299  //
3300  // Suppress this for references: C++ 8.5.3p5.
3301  if (!lhsType->isReferenceType())
3302    DefaultFunctionArrayConversion(rExpr);
3303
3304  Sema::AssignConvertType result =
3305    CheckAssignmentConstraints(lhsType, rExpr->getType());
3306
3307  // C99 6.5.16.1p2: The value of the right operand is converted to the
3308  // type of the assignment expression.
3309  // CheckAssignmentConstraints allows the left-hand side to be a reference,
3310  // so that we can use references in built-in functions even in C.
3311  // The getNonReferenceType() call makes sure that the resulting expression
3312  // does not have reference type.
3313  if (result != Incompatible && rExpr->getType() != lhsType)
3314    ImpCastExprToType(rExpr, lhsType.getNonReferenceType());
3315  return result;
3316}
3317
3318Sema::AssignConvertType
3319Sema::CheckCompoundAssignmentConstraints(QualType lhsType, QualType rhsType) {
3320  return CheckAssignmentConstraints(lhsType, rhsType);
3321}
3322
3323QualType Sema::InvalidOperands(SourceLocation Loc, Expr *&lex, Expr *&rex) {
3324  Diag(Loc, diag::err_typecheck_invalid_operands)
3325    << lex->getType() << rex->getType()
3326    << lex->getSourceRange() << rex->getSourceRange();
3327  return QualType();
3328}
3329
3330inline QualType Sema::CheckVectorOperands(SourceLocation Loc, Expr *&lex,
3331                                                              Expr *&rex) {
3332  // For conversion purposes, we ignore any qualifiers.
3333  // For example, "const float" and "float" are equivalent.
3334  QualType lhsType =
3335    Context.getCanonicalType(lex->getType()).getUnqualifiedType();
3336  QualType rhsType =
3337    Context.getCanonicalType(rex->getType()).getUnqualifiedType();
3338
3339  // If the vector types are identical, return.
3340  if (lhsType == rhsType)
3341    return lhsType;
3342
3343  // Handle the case of a vector & extvector type of the same size and element
3344  // type.  It would be nice if we only had one vector type someday.
3345  if (getLangOptions().LaxVectorConversions) {
3346    // FIXME: Should we warn here?
3347    if (const VectorType *LV = lhsType->getAsVectorType()) {
3348      if (const VectorType *RV = rhsType->getAsVectorType())
3349        if (LV->getElementType() == RV->getElementType() &&
3350            LV->getNumElements() == RV->getNumElements()) {
3351          return lhsType->isExtVectorType() ? lhsType : rhsType;
3352        }
3353    }
3354  }
3355
3356  // If the lhs is an extended vector and the rhs is a scalar of the same type
3357  // or a literal, promote the rhs to the vector type.
3358  if (const ExtVectorType *V = lhsType->getAsExtVectorType()) {
3359    QualType eltType = V->getElementType();
3360
3361    if ((eltType->getAsBuiltinType() == rhsType->getAsBuiltinType()) ||
3362        (eltType->isIntegerType() && isa<IntegerLiteral>(rex)) ||
3363        (eltType->isFloatingType() && isa<FloatingLiteral>(rex))) {
3364      ImpCastExprToType(rex, lhsType);
3365      return lhsType;
3366    }
3367  }
3368
3369  // If the rhs is an extended vector and the lhs is a scalar of the same type,
3370  // promote the lhs to the vector type.
3371  if (const ExtVectorType *V = rhsType->getAsExtVectorType()) {
3372    QualType eltType = V->getElementType();
3373
3374    if ((eltType->getAsBuiltinType() == lhsType->getAsBuiltinType()) ||
3375        (eltType->isIntegerType() && isa<IntegerLiteral>(lex)) ||
3376        (eltType->isFloatingType() && isa<FloatingLiteral>(lex))) {
3377      ImpCastExprToType(lex, rhsType);
3378      return rhsType;
3379    }
3380  }
3381
3382  // You cannot convert between vector values of different size.
3383  Diag(Loc, diag::err_typecheck_vector_not_convertable)
3384    << lex->getType() << rex->getType()
3385    << lex->getSourceRange() << rex->getSourceRange();
3386  return QualType();
3387}
3388
3389inline QualType Sema::CheckMultiplyDivideOperands(
3390  Expr *&lex, Expr *&rex, SourceLocation Loc, bool isCompAssign)
3391{
3392  if (lex->getType()->isVectorType() || rex->getType()->isVectorType())
3393    return CheckVectorOperands(Loc, lex, rex);
3394
3395  QualType compType = UsualArithmeticConversions(lex, rex, isCompAssign);
3396
3397  if (lex->getType()->isArithmeticType() && rex->getType()->isArithmeticType())
3398    return compType;
3399  return InvalidOperands(Loc, lex, rex);
3400}
3401
3402inline QualType Sema::CheckRemainderOperands(
3403  Expr *&lex, Expr *&rex, SourceLocation Loc, bool isCompAssign)
3404{
3405  if (lex->getType()->isVectorType() || rex->getType()->isVectorType()) {
3406    if (lex->getType()->isIntegerType() && rex->getType()->isIntegerType())
3407      return CheckVectorOperands(Loc, lex, rex);
3408    return InvalidOperands(Loc, lex, rex);
3409  }
3410
3411  QualType compType = UsualArithmeticConversions(lex, rex, isCompAssign);
3412
3413  if (lex->getType()->isIntegerType() && rex->getType()->isIntegerType())
3414    return compType;
3415  return InvalidOperands(Loc, lex, rex);
3416}
3417
3418inline QualType Sema::CheckAdditionOperands( // C99 6.5.6
3419  Expr *&lex, Expr *&rex, SourceLocation Loc, QualType* CompLHSTy)
3420{
3421  if (lex->getType()->isVectorType() || rex->getType()->isVectorType()) {
3422    QualType compType = CheckVectorOperands(Loc, lex, rex);
3423    if (CompLHSTy) *CompLHSTy = compType;
3424    return compType;
3425  }
3426
3427  QualType compType = UsualArithmeticConversions(lex, rex, CompLHSTy);
3428
3429  // handle the common case first (both operands are arithmetic).
3430  if (lex->getType()->isArithmeticType() &&
3431      rex->getType()->isArithmeticType()) {
3432    if (CompLHSTy) *CompLHSTy = compType;
3433    return compType;
3434  }
3435
3436  // Put any potential pointer into PExp
3437  Expr* PExp = lex, *IExp = rex;
3438  if (IExp->getType()->isPointerType())
3439    std::swap(PExp, IExp);
3440
3441  if (const PointerType *PTy = PExp->getType()->getAsPointerType()) {
3442    if (IExp->getType()->isIntegerType()) {
3443      QualType PointeeTy = PTy->getPointeeType();
3444      // Check for arithmetic on pointers to incomplete types.
3445      if (PointeeTy->isVoidType()) {
3446        if (getLangOptions().CPlusPlus) {
3447          Diag(Loc, diag::err_typecheck_pointer_arith_void_type)
3448            << lex->getSourceRange() << rex->getSourceRange();
3449          return QualType();
3450        }
3451
3452        // GNU extension: arithmetic on pointer to void
3453        Diag(Loc, diag::ext_gnu_void_ptr)
3454          << lex->getSourceRange() << rex->getSourceRange();
3455      } else if (PointeeTy->isFunctionType()) {
3456        if (getLangOptions().CPlusPlus) {
3457          Diag(Loc, diag::err_typecheck_pointer_arith_function_type)
3458            << lex->getType() << lex->getSourceRange();
3459          return QualType();
3460        }
3461
3462        // GNU extension: arithmetic on pointer to function
3463        Diag(Loc, diag::ext_gnu_ptr_func_arith)
3464          << lex->getType() << lex->getSourceRange();
3465      } else if (!PTy->isDependentType() &&
3466                 RequireCompleteType(Loc, PointeeTy,
3467                                diag::err_typecheck_arithmetic_incomplete_type,
3468                                     PExp->getSourceRange(), SourceRange(),
3469                                     PExp->getType()))
3470        return QualType();
3471
3472      // Diagnose bad cases where we step over interface counts.
3473      if (PointeeTy->isObjCInterfaceType() && LangOpts.ObjCNonFragileABI) {
3474        Diag(Loc, diag::err_arithmetic_nonfragile_interface)
3475          << PointeeTy << PExp->getSourceRange();
3476        return QualType();
3477      }
3478
3479      if (CompLHSTy) {
3480        QualType LHSTy = lex->getType();
3481        if (LHSTy->isPromotableIntegerType())
3482          LHSTy = Context.IntTy;
3483        else {
3484          QualType T = isPromotableBitField(lex, Context);
3485          if (!T.isNull())
3486            LHSTy = T;
3487        }
3488
3489        *CompLHSTy = LHSTy;
3490      }
3491      return PExp->getType();
3492    }
3493  }
3494
3495  return InvalidOperands(Loc, lex, rex);
3496}
3497
3498// C99 6.5.6
3499QualType Sema::CheckSubtractionOperands(Expr *&lex, Expr *&rex,
3500                                        SourceLocation Loc, QualType* CompLHSTy) {
3501  if (lex->getType()->isVectorType() || rex->getType()->isVectorType()) {
3502    QualType compType = CheckVectorOperands(Loc, lex, rex);
3503    if (CompLHSTy) *CompLHSTy = compType;
3504    return compType;
3505  }
3506
3507  QualType compType = UsualArithmeticConversions(lex, rex, CompLHSTy);
3508
3509  // Enforce type constraints: C99 6.5.6p3.
3510
3511  // Handle the common case first (both operands are arithmetic).
3512  if (lex->getType()->isArithmeticType() && rex->getType()->isArithmeticType()) {
3513    if (CompLHSTy) *CompLHSTy = compType;
3514    return compType;
3515  }
3516
3517  // Either ptr - int   or   ptr - ptr.
3518  if (const PointerType *LHSPTy = lex->getType()->getAsPointerType()) {
3519    QualType lpointee = LHSPTy->getPointeeType();
3520
3521    // The LHS must be an completely-defined object type.
3522
3523    bool ComplainAboutVoid = false;
3524    Expr *ComplainAboutFunc = 0;
3525    if (lpointee->isVoidType()) {
3526      if (getLangOptions().CPlusPlus) {
3527        Diag(Loc, diag::err_typecheck_pointer_arith_void_type)
3528          << lex->getSourceRange() << rex->getSourceRange();
3529        return QualType();
3530      }
3531
3532      // GNU C extension: arithmetic on pointer to void
3533      ComplainAboutVoid = true;
3534    } else if (lpointee->isFunctionType()) {
3535      if (getLangOptions().CPlusPlus) {
3536        Diag(Loc, diag::err_typecheck_pointer_arith_function_type)
3537          << lex->getType() << lex->getSourceRange();
3538        return QualType();
3539      }
3540
3541      // GNU C extension: arithmetic on pointer to function
3542      ComplainAboutFunc = lex;
3543    } else if (!lpointee->isDependentType() &&
3544               RequireCompleteType(Loc, lpointee,
3545                                   diag::err_typecheck_sub_ptr_object,
3546                                   lex->getSourceRange(),
3547                                   SourceRange(),
3548                                   lex->getType()))
3549      return QualType();
3550
3551    // Diagnose bad cases where we step over interface counts.
3552    if (lpointee->isObjCInterfaceType() && LangOpts.ObjCNonFragileABI) {
3553      Diag(Loc, diag::err_arithmetic_nonfragile_interface)
3554        << lpointee << lex->getSourceRange();
3555      return QualType();
3556    }
3557
3558    // The result type of a pointer-int computation is the pointer type.
3559    if (rex->getType()->isIntegerType()) {
3560      if (ComplainAboutVoid)
3561        Diag(Loc, diag::ext_gnu_void_ptr)
3562          << lex->getSourceRange() << rex->getSourceRange();
3563      if (ComplainAboutFunc)
3564        Diag(Loc, diag::ext_gnu_ptr_func_arith)
3565          << ComplainAboutFunc->getType()
3566          << ComplainAboutFunc->getSourceRange();
3567
3568      if (CompLHSTy) *CompLHSTy = lex->getType();
3569      return lex->getType();
3570    }
3571
3572    // Handle pointer-pointer subtractions.
3573    if (const PointerType *RHSPTy = rex->getType()->getAsPointerType()) {
3574      QualType rpointee = RHSPTy->getPointeeType();
3575
3576      // RHS must be a completely-type object type.
3577      // Handle the GNU void* extension.
3578      if (rpointee->isVoidType()) {
3579        if (getLangOptions().CPlusPlus) {
3580          Diag(Loc, diag::err_typecheck_pointer_arith_void_type)
3581            << lex->getSourceRange() << rex->getSourceRange();
3582          return QualType();
3583        }
3584
3585        ComplainAboutVoid = true;
3586      } else if (rpointee->isFunctionType()) {
3587        if (getLangOptions().CPlusPlus) {
3588          Diag(Loc, diag::err_typecheck_pointer_arith_function_type)
3589            << rex->getType() << rex->getSourceRange();
3590          return QualType();
3591        }
3592
3593        // GNU extension: arithmetic on pointer to function
3594        if (!ComplainAboutFunc)
3595          ComplainAboutFunc = rex;
3596      } else if (!rpointee->isDependentType() &&
3597                 RequireCompleteType(Loc, rpointee,
3598                                     diag::err_typecheck_sub_ptr_object,
3599                                     rex->getSourceRange(),
3600                                     SourceRange(),
3601                                     rex->getType()))
3602        return QualType();
3603
3604      // Pointee types must be compatible.
3605      if (!Context.typesAreCompatible(
3606              Context.getCanonicalType(lpointee).getUnqualifiedType(),
3607              Context.getCanonicalType(rpointee).getUnqualifiedType())) {
3608        Diag(Loc, diag::err_typecheck_sub_ptr_compatible)
3609          << lex->getType() << rex->getType()
3610          << lex->getSourceRange() << rex->getSourceRange();
3611        return QualType();
3612      }
3613
3614      if (ComplainAboutVoid)
3615        Diag(Loc, diag::ext_gnu_void_ptr)
3616          << lex->getSourceRange() << rex->getSourceRange();
3617      if (ComplainAboutFunc)
3618        Diag(Loc, diag::ext_gnu_ptr_func_arith)
3619          << ComplainAboutFunc->getType()
3620          << ComplainAboutFunc->getSourceRange();
3621
3622      if (CompLHSTy) *CompLHSTy = lex->getType();
3623      return Context.getPointerDiffType();
3624    }
3625  }
3626
3627  return InvalidOperands(Loc, lex, rex);
3628}
3629
3630// C99 6.5.7
3631QualType Sema::CheckShiftOperands(Expr *&lex, Expr *&rex, SourceLocation Loc,
3632                                  bool isCompAssign) {
3633  // C99 6.5.7p2: Each of the operands shall have integer type.
3634  if (!lex->getType()->isIntegerType() || !rex->getType()->isIntegerType())
3635    return InvalidOperands(Loc, lex, rex);
3636
3637  // Shifts don't perform usual arithmetic conversions, they just do integer
3638  // promotions on each operand. C99 6.5.7p3
3639  QualType LHSTy;
3640  if (lex->getType()->isPromotableIntegerType())
3641    LHSTy = Context.IntTy;
3642  else {
3643    LHSTy = isPromotableBitField(lex, Context);
3644    if (LHSTy.isNull())
3645      LHSTy = lex->getType();
3646  }
3647  if (!isCompAssign)
3648    ImpCastExprToType(lex, LHSTy);
3649
3650  UsualUnaryConversions(rex);
3651
3652  // "The type of the result is that of the promoted left operand."
3653  return LHSTy;
3654}
3655
3656// C99 6.5.8
3657QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc,
3658                                    unsigned OpaqueOpc, bool isRelational) {
3659  BinaryOperator::Opcode Opc = (BinaryOperator::Opcode)OpaqueOpc;
3660
3661  if (lex->getType()->isVectorType() || rex->getType()->isVectorType())
3662    return CheckVectorCompareOperands(lex, rex, Loc, isRelational);
3663
3664  // C99 6.5.8p3 / C99 6.5.9p4
3665  if (lex->getType()->isArithmeticType() && rex->getType()->isArithmeticType())
3666    UsualArithmeticConversions(lex, rex);
3667  else {
3668    UsualUnaryConversions(lex);
3669    UsualUnaryConversions(rex);
3670  }
3671  QualType lType = lex->getType();
3672  QualType rType = rex->getType();
3673
3674  if (!lType->isFloatingType()) {
3675    // For non-floating point types, check for self-comparisons of the form
3676    // x == x, x != x, x < x, etc.  These always evaluate to a constant, and
3677    // often indicate logic errors in the program.
3678    // NOTE: Don't warn about comparisons of enum constants. These can arise
3679    //  from macro expansions, and are usually quite deliberate.
3680    Expr *LHSStripped = lex->IgnoreParens();
3681    Expr *RHSStripped = rex->IgnoreParens();
3682    if (DeclRefExpr* DRL = dyn_cast<DeclRefExpr>(LHSStripped))
3683      if (DeclRefExpr* DRR = dyn_cast<DeclRefExpr>(RHSStripped))
3684        if (DRL->getDecl() == DRR->getDecl() &&
3685            !isa<EnumConstantDecl>(DRL->getDecl()))
3686          Diag(Loc, diag::warn_selfcomparison);
3687
3688    if (isa<CastExpr>(LHSStripped))
3689      LHSStripped = LHSStripped->IgnoreParenCasts();
3690    if (isa<CastExpr>(RHSStripped))
3691      RHSStripped = RHSStripped->IgnoreParenCasts();
3692
3693    // Warn about comparisons against a string constant (unless the other
3694    // operand is null), the user probably wants strcmp.
3695    Expr *literalString = 0;
3696    Expr *literalStringStripped = 0;
3697    if ((isa<StringLiteral>(LHSStripped) || isa<ObjCEncodeExpr>(LHSStripped)) &&
3698        !RHSStripped->isNullPointerConstant(Context)) {
3699      literalString = lex;
3700      literalStringStripped = LHSStripped;
3701    }
3702    else if ((isa<StringLiteral>(RHSStripped) ||
3703              isa<ObjCEncodeExpr>(RHSStripped)) &&
3704             !LHSStripped->isNullPointerConstant(Context)) {
3705      literalString = rex;
3706      literalStringStripped = RHSStripped;
3707    }
3708
3709    if (literalString) {
3710      std::string resultComparison;
3711      switch (Opc) {
3712      case BinaryOperator::LT: resultComparison = ") < 0"; break;
3713      case BinaryOperator::GT: resultComparison = ") > 0"; break;
3714      case BinaryOperator::LE: resultComparison = ") <= 0"; break;
3715      case BinaryOperator::GE: resultComparison = ") >= 0"; break;
3716      case BinaryOperator::EQ: resultComparison = ") == 0"; break;
3717      case BinaryOperator::NE: resultComparison = ") != 0"; break;
3718      default: assert(false && "Invalid comparison operator");
3719      }
3720      Diag(Loc, diag::warn_stringcompare)
3721        << isa<ObjCEncodeExpr>(literalStringStripped)
3722        << literalString->getSourceRange()
3723        << CodeModificationHint::CreateReplacement(SourceRange(Loc), ", ")
3724        << CodeModificationHint::CreateInsertion(lex->getLocStart(),
3725                                                 "strcmp(")
3726        << CodeModificationHint::CreateInsertion(
3727                                       PP.getLocForEndOfToken(rex->getLocEnd()),
3728                                       resultComparison);
3729    }
3730  }
3731
3732  // The result of comparisons is 'bool' in C++, 'int' in C.
3733  QualType ResultTy = getLangOptions().CPlusPlus? Context.BoolTy :Context.IntTy;
3734
3735  if (isRelational) {
3736    if (lType->isRealType() && rType->isRealType())
3737      return ResultTy;
3738  } else {
3739    // Check for comparisons of floating point operands using != and ==.
3740    if (lType->isFloatingType()) {
3741      assert(rType->isFloatingType());
3742      CheckFloatComparison(Loc,lex,rex);
3743    }
3744
3745    if (lType->isArithmeticType() && rType->isArithmeticType())
3746      return ResultTy;
3747  }
3748
3749  bool LHSIsNull = lex->isNullPointerConstant(Context);
3750  bool RHSIsNull = rex->isNullPointerConstant(Context);
3751
3752  // All of the following pointer related warnings are GCC extensions, except
3753  // when handling null pointer constants. One day, we can consider making them
3754  // errors (when -pedantic-errors is enabled).
3755  if (lType->isPointerType() && rType->isPointerType()) { // C99 6.5.8p2
3756    QualType LCanPointeeTy =
3757      Context.getCanonicalType(lType->getAsPointerType()->getPointeeType());
3758    QualType RCanPointeeTy =
3759      Context.getCanonicalType(rType->getAsPointerType()->getPointeeType());
3760
3761    if (!LHSIsNull && !RHSIsNull &&                       // C99 6.5.9p2
3762        !LCanPointeeTy->isVoidType() && !RCanPointeeTy->isVoidType() &&
3763        !Context.typesAreCompatible(LCanPointeeTy.getUnqualifiedType(),
3764                                    RCanPointeeTy.getUnqualifiedType()) &&
3765        !Context.areComparableObjCPointerTypes(lType, rType)) {
3766      Diag(Loc, diag::ext_typecheck_comparison_of_distinct_pointers)
3767        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
3768    }
3769    ImpCastExprToType(rex, lType); // promote the pointer to pointer
3770    return ResultTy;
3771  }
3772  // Handle block pointer types.
3773  if (lType->isBlockPointerType() && rType->isBlockPointerType()) {
3774    QualType lpointee = lType->getAsBlockPointerType()->getPointeeType();
3775    QualType rpointee = rType->getAsBlockPointerType()->getPointeeType();
3776
3777    if (!LHSIsNull && !RHSIsNull &&
3778        !Context.typesAreBlockCompatible(lpointee, rpointee)) {
3779      Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks)
3780        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
3781    }
3782    ImpCastExprToType(rex, lType); // promote the pointer to pointer
3783    return ResultTy;
3784  }
3785  // Allow block pointers to be compared with null pointer constants.
3786  if ((lType->isBlockPointerType() && rType->isPointerType()) ||
3787      (lType->isPointerType() && rType->isBlockPointerType())) {
3788    if (!LHSIsNull && !RHSIsNull) {
3789      Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks)
3790        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
3791    }
3792    ImpCastExprToType(rex, lType); // promote the pointer to pointer
3793    return ResultTy;
3794  }
3795
3796  if ((lType->isObjCQualifiedIdType() || rType->isObjCQualifiedIdType())) {
3797    if (lType->isPointerType() || rType->isPointerType()) {
3798      const PointerType *LPT = lType->getAsPointerType();
3799      const PointerType *RPT = rType->getAsPointerType();
3800      bool LPtrToVoid = LPT ?
3801        Context.getCanonicalType(LPT->getPointeeType())->isVoidType() : false;
3802      bool RPtrToVoid = RPT ?
3803        Context.getCanonicalType(RPT->getPointeeType())->isVoidType() : false;
3804
3805      if (!LPtrToVoid && !RPtrToVoid &&
3806          !Context.typesAreCompatible(lType, rType)) {
3807        Diag(Loc, diag::ext_typecheck_comparison_of_distinct_pointers)
3808          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
3809        ImpCastExprToType(rex, lType);
3810        return ResultTy;
3811      }
3812      ImpCastExprToType(rex, lType);
3813      return ResultTy;
3814    }
3815    if (ObjCQualifiedIdTypesAreCompatible(lType, rType, true)) {
3816      ImpCastExprToType(rex, lType);
3817      return ResultTy;
3818    } else {
3819      if ((lType->isObjCQualifiedIdType() && rType->isObjCQualifiedIdType())) {
3820        Diag(Loc, diag::warn_incompatible_qualified_id_operands)
3821          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
3822        ImpCastExprToType(rex, lType);
3823        return ResultTy;
3824      }
3825    }
3826  }
3827  if ((lType->isPointerType() || lType->isObjCQualifiedIdType()) &&
3828       rType->isIntegerType()) {
3829    if (!RHSIsNull)
3830      Diag(Loc, diag::ext_typecheck_comparison_of_pointer_integer)
3831        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
3832    ImpCastExprToType(rex, lType); // promote the integer to pointer
3833    return ResultTy;
3834  }
3835  if (lType->isIntegerType() &&
3836      (rType->isPointerType() || rType->isObjCQualifiedIdType())) {
3837    if (!LHSIsNull)
3838      Diag(Loc, diag::ext_typecheck_comparison_of_pointer_integer)
3839        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
3840    ImpCastExprToType(lex, rType); // promote the integer to pointer
3841    return ResultTy;
3842  }
3843  // Handle block pointers.
3844  if (lType->isBlockPointerType() && rType->isIntegerType()) {
3845    if (!RHSIsNull)
3846      Diag(Loc, diag::ext_typecheck_comparison_of_pointer_integer)
3847        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
3848    ImpCastExprToType(rex, lType); // promote the integer to pointer
3849    return ResultTy;
3850  }
3851  if (lType->isIntegerType() && rType->isBlockPointerType()) {
3852    if (!LHSIsNull)
3853      Diag(Loc, diag::ext_typecheck_comparison_of_pointer_integer)
3854        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
3855    ImpCastExprToType(lex, rType); // promote the integer to pointer
3856    return ResultTy;
3857  }
3858  return InvalidOperands(Loc, lex, rex);
3859}
3860
3861/// CheckVectorCompareOperands - vector comparisons are a clang extension that
3862/// operates on extended vector types.  Instead of producing an IntTy result,
3863/// like a scalar comparison, a vector comparison produces a vector of integer
3864/// types.
3865QualType Sema::CheckVectorCompareOperands(Expr *&lex, Expr *&rex,
3866                                          SourceLocation Loc,
3867                                          bool isRelational) {
3868  // Check to make sure we're operating on vectors of the same type and width,
3869  // Allowing one side to be a scalar of element type.
3870  QualType vType = CheckVectorOperands(Loc, lex, rex);
3871  if (vType.isNull())
3872    return vType;
3873
3874  QualType lType = lex->getType();
3875  QualType rType = rex->getType();
3876
3877  // For non-floating point types, check for self-comparisons of the form
3878  // x == x, x != x, x < x, etc.  These always evaluate to a constant, and
3879  // often indicate logic errors in the program.
3880  if (!lType->isFloatingType()) {
3881    if (DeclRefExpr* DRL = dyn_cast<DeclRefExpr>(lex->IgnoreParens()))
3882      if (DeclRefExpr* DRR = dyn_cast<DeclRefExpr>(rex->IgnoreParens()))
3883        if (DRL->getDecl() == DRR->getDecl())
3884          Diag(Loc, diag::warn_selfcomparison);
3885  }
3886
3887  // Check for comparisons of floating point operands using != and ==.
3888  if (!isRelational && lType->isFloatingType()) {
3889    assert (rType->isFloatingType());
3890    CheckFloatComparison(Loc,lex,rex);
3891  }
3892
3893  // FIXME: Vector compare support in the LLVM backend is not fully reliable,
3894  // just reject all vector comparisons for now.
3895  if (1) {
3896    Diag(Loc, diag::err_typecheck_vector_comparison)
3897      << lType << rType << lex->getSourceRange() << rex->getSourceRange();
3898    return QualType();
3899  }
3900
3901  // Return the type for the comparison, which is the same as vector type for
3902  // integer vectors, or an integer type of identical size and number of
3903  // elements for floating point vectors.
3904  if (lType->isIntegerType())
3905    return lType;
3906
3907  const VectorType *VTy = lType->getAsVectorType();
3908  unsigned TypeSize = Context.getTypeSize(VTy->getElementType());
3909  if (TypeSize == Context.getTypeSize(Context.IntTy))
3910    return Context.getExtVectorType(Context.IntTy, VTy->getNumElements());
3911  if (TypeSize == Context.getTypeSize(Context.LongTy))
3912    return Context.getExtVectorType(Context.LongTy, VTy->getNumElements());
3913
3914  assert(TypeSize == Context.getTypeSize(Context.LongLongTy) &&
3915         "Unhandled vector element size in vector compare");
3916  return Context.getExtVectorType(Context.LongLongTy, VTy->getNumElements());
3917}
3918
3919inline QualType Sema::CheckBitwiseOperands(
3920  Expr *&lex, Expr *&rex, SourceLocation Loc, bool isCompAssign)
3921{
3922  if (lex->getType()->isVectorType() || rex->getType()->isVectorType())
3923    return CheckVectorOperands(Loc, lex, rex);
3924
3925  QualType compType = UsualArithmeticConversions(lex, rex, isCompAssign);
3926
3927  if (lex->getType()->isIntegerType() && rex->getType()->isIntegerType())
3928    return compType;
3929  return InvalidOperands(Loc, lex, rex);
3930}
3931
3932inline QualType Sema::CheckLogicalOperands( // C99 6.5.[13,14]
3933  Expr *&lex, Expr *&rex, SourceLocation Loc)
3934{
3935  UsualUnaryConversions(lex);
3936  UsualUnaryConversions(rex);
3937
3938  if (lex->getType()->isScalarType() && rex->getType()->isScalarType())
3939    return Context.IntTy;
3940  return InvalidOperands(Loc, lex, rex);
3941}
3942
3943/// IsReadonlyProperty - Verify that otherwise a valid l-value expression
3944/// is a read-only property; return true if so. A readonly property expression
3945/// depends on various declarations and thus must be treated specially.
3946///
3947static bool IsReadonlyProperty(Expr *E, Sema &S)
3948{
3949  if (E->getStmtClass() == Expr::ObjCPropertyRefExprClass) {
3950    const ObjCPropertyRefExpr* PropExpr = cast<ObjCPropertyRefExpr>(E);
3951    if (ObjCPropertyDecl *PDecl = PropExpr->getProperty()) {
3952      QualType BaseType = PropExpr->getBase()->getType();
3953      if (const PointerType *PTy = BaseType->getAsPointerType())
3954        if (const ObjCInterfaceType *IFTy =
3955            PTy->getPointeeType()->getAsObjCInterfaceType())
3956          if (ObjCInterfaceDecl *IFace = IFTy->getDecl())
3957            if (S.isPropertyReadonly(PDecl, IFace))
3958              return true;
3959    }
3960  }
3961  return false;
3962}
3963
3964/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,
3965/// emit an error and return true.  If so, return false.
3966static bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {
3967  SourceLocation OrigLoc = Loc;
3968  Expr::isModifiableLvalueResult IsLV = E->isModifiableLvalue(S.Context,
3969                                                              &Loc);
3970  if (IsLV == Expr::MLV_Valid && IsReadonlyProperty(E, S))
3971    IsLV = Expr::MLV_ReadonlyProperty;
3972  if (IsLV == Expr::MLV_Valid)
3973    return false;
3974
3975  unsigned Diag = 0;
3976  bool NeedType = false;
3977  switch (IsLV) { // C99 6.5.16p2
3978  default: assert(0 && "Unknown result from isModifiableLvalue!");
3979  case Expr::MLV_ConstQualified: Diag = diag::err_typecheck_assign_const; break;
3980  case Expr::MLV_ArrayType:
3981    Diag = diag::err_typecheck_array_not_modifiable_lvalue;
3982    NeedType = true;
3983    break;
3984  case Expr::MLV_NotObjectType:
3985    Diag = diag::err_typecheck_non_object_not_modifiable_lvalue;
3986    NeedType = true;
3987    break;
3988  case Expr::MLV_LValueCast:
3989    Diag = diag::err_typecheck_lvalue_casts_not_supported;
3990    break;
3991  case Expr::MLV_InvalidExpression:
3992    Diag = diag::err_typecheck_expression_not_modifiable_lvalue;
3993    break;
3994  case Expr::MLV_IncompleteType:
3995  case Expr::MLV_IncompleteVoidType:
3996    return S.RequireCompleteType(Loc, E->getType(),
3997                      diag::err_typecheck_incomplete_type_not_modifiable_lvalue,
3998                                    E->getSourceRange());
3999  case Expr::MLV_DuplicateVectorComponents:
4000    Diag = diag::err_typecheck_duplicate_vector_components_not_mlvalue;
4001    break;
4002  case Expr::MLV_NotBlockQualified:
4003    Diag = diag::err_block_decl_ref_not_modifiable_lvalue;
4004    break;
4005  case Expr::MLV_ReadonlyProperty:
4006    Diag = diag::error_readonly_property_assignment;
4007    break;
4008  case Expr::MLV_NoSetterProperty:
4009    Diag = diag::error_nosetter_property_assignment;
4010    break;
4011  }
4012
4013  SourceRange Assign;
4014  if (Loc != OrigLoc)
4015    Assign = SourceRange(OrigLoc, OrigLoc);
4016  if (NeedType)
4017    S.Diag(Loc, Diag) << E->getType() << E->getSourceRange() << Assign;
4018  else
4019    S.Diag(Loc, Diag) << E->getSourceRange() << Assign;
4020  return true;
4021}
4022
4023
4024
4025// C99 6.5.16.1
4026QualType Sema::CheckAssignmentOperands(Expr *LHS, Expr *&RHS,
4027                                       SourceLocation Loc,
4028                                       QualType CompoundType) {
4029  // Verify that LHS is a modifiable lvalue, and emit error if not.
4030  if (CheckForModifiableLvalue(LHS, Loc, *this))
4031    return QualType();
4032
4033  QualType LHSType = LHS->getType();
4034  QualType RHSType = CompoundType.isNull() ? RHS->getType() : CompoundType;
4035
4036  AssignConvertType ConvTy;
4037  if (CompoundType.isNull()) {
4038    // Simple assignment "x = y".
4039    ConvTy = CheckSingleAssignmentConstraints(LHSType, RHS);
4040    // Special case of NSObject attributes on c-style pointer types.
4041    if (ConvTy == IncompatiblePointer &&
4042        ((Context.isObjCNSObjectType(LHSType) &&
4043          Context.isObjCObjectPointerType(RHSType)) ||
4044         (Context.isObjCNSObjectType(RHSType) &&
4045          Context.isObjCObjectPointerType(LHSType))))
4046      ConvTy = Compatible;
4047
4048    // If the RHS is a unary plus or minus, check to see if they = and + are
4049    // right next to each other.  If so, the user may have typo'd "x =+ 4"
4050    // instead of "x += 4".
4051    Expr *RHSCheck = RHS;
4052    if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(RHSCheck))
4053      RHSCheck = ICE->getSubExpr();
4054    if (UnaryOperator *UO = dyn_cast<UnaryOperator>(RHSCheck)) {
4055      if ((UO->getOpcode() == UnaryOperator::Plus ||
4056           UO->getOpcode() == UnaryOperator::Minus) &&
4057          Loc.isFileID() && UO->getOperatorLoc().isFileID() &&
4058          // Only if the two operators are exactly adjacent.
4059          Loc.getFileLocWithOffset(1) == UO->getOperatorLoc() &&
4060          // And there is a space or other character before the subexpr of the
4061          // unary +/-.  We don't want to warn on "x=-1".
4062          Loc.getFileLocWithOffset(2) != UO->getSubExpr()->getLocStart() &&
4063          UO->getSubExpr()->getLocStart().isFileID()) {
4064        Diag(Loc, diag::warn_not_compound_assign)
4065          << (UO->getOpcode() == UnaryOperator::Plus ? "+" : "-")
4066          << SourceRange(UO->getOperatorLoc(), UO->getOperatorLoc());
4067      }
4068    }
4069  } else {
4070    // Compound assignment "x += y"
4071    ConvTy = CheckCompoundAssignmentConstraints(LHSType, RHSType);
4072  }
4073
4074  if (DiagnoseAssignmentResult(ConvTy, Loc, LHSType, RHSType,
4075                               RHS, "assigning"))
4076    return QualType();
4077
4078  // C99 6.5.16p3: The type of an assignment expression is the type of the
4079  // left operand unless the left operand has qualified type, in which case
4080  // it is the unqualified version of the type of the left operand.
4081  // C99 6.5.16.1p2: In simple assignment, the value of the right operand
4082  // is converted to the type of the assignment expression (above).
4083  // C++ 5.17p1: the type of the assignment expression is that of its left
4084  // operand.
4085  return LHSType.getUnqualifiedType();
4086}
4087
4088// C99 6.5.17
4089QualType Sema::CheckCommaOperands(Expr *LHS, Expr *&RHS, SourceLocation Loc) {
4090  // Comma performs lvalue conversion (C99 6.3.2.1), but not unary conversions.
4091  DefaultFunctionArrayConversion(RHS);
4092
4093  // FIXME: Check that RHS type is complete in C mode (it's legal for it to be
4094  // incomplete in C++).
4095
4096  return RHS->getType();
4097}
4098
4099/// CheckIncrementDecrementOperand - unlike most "Check" methods, this routine
4100/// doesn't need to call UsualUnaryConversions or UsualArithmeticConversions.
4101QualType Sema::CheckIncrementDecrementOperand(Expr *Op, SourceLocation OpLoc,
4102                                              bool isInc) {
4103  if (Op->isTypeDependent())
4104    return Context.DependentTy;
4105
4106  QualType ResType = Op->getType();
4107  assert(!ResType.isNull() && "no type for increment/decrement expression");
4108
4109  if (getLangOptions().CPlusPlus && ResType->isBooleanType()) {
4110    // Decrement of bool is not allowed.
4111    if (!isInc) {
4112      Diag(OpLoc, diag::err_decrement_bool) << Op->getSourceRange();
4113      return QualType();
4114    }
4115    // Increment of bool sets it to true, but is deprecated.
4116    Diag(OpLoc, diag::warn_increment_bool) << Op->getSourceRange();
4117  } else if (ResType->isRealType()) {
4118    // OK!
4119  } else if (const PointerType *PT = ResType->getAsPointerType()) {
4120    // C99 6.5.2.4p2, 6.5.6p2
4121    if (PT->getPointeeType()->isVoidType()) {
4122      if (getLangOptions().CPlusPlus) {
4123        Diag(OpLoc, diag::err_typecheck_pointer_arith_void_type)
4124          << Op->getSourceRange();
4125        return QualType();
4126      }
4127
4128      // Pointer to void is a GNU extension in C.
4129      Diag(OpLoc, diag::ext_gnu_void_ptr) << Op->getSourceRange();
4130    } else if (PT->getPointeeType()->isFunctionType()) {
4131      if (getLangOptions().CPlusPlus) {
4132        Diag(OpLoc, diag::err_typecheck_pointer_arith_function_type)
4133          << Op->getType() << Op->getSourceRange();
4134        return QualType();
4135      }
4136
4137      Diag(OpLoc, diag::ext_gnu_ptr_func_arith)
4138        << ResType << Op->getSourceRange();
4139    } else if (RequireCompleteType(OpLoc, PT->getPointeeType(),
4140                               diag::err_typecheck_arithmetic_incomplete_type,
4141                                   Op->getSourceRange(), SourceRange(),
4142                                   ResType))
4143      return QualType();
4144  } else if (ResType->isComplexType()) {
4145    // C99 does not support ++/-- on complex types, we allow as an extension.
4146    Diag(OpLoc, diag::ext_integer_increment_complex)
4147      << ResType << Op->getSourceRange();
4148  } else {
4149    Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement)
4150      << ResType << Op->getSourceRange();
4151    return QualType();
4152  }
4153  // At this point, we know we have a real, complex or pointer type.
4154  // Now make sure the operand is a modifiable lvalue.
4155  if (CheckForModifiableLvalue(Op, OpLoc, *this))
4156    return QualType();
4157  return ResType;
4158}
4159
4160/// getPrimaryDecl - Helper function for CheckAddressOfOperand().
4161/// This routine allows us to typecheck complex/recursive expressions
4162/// where the declaration is needed for type checking. We only need to
4163/// handle cases when the expression references a function designator
4164/// or is an lvalue. Here are some examples:
4165///  - &(x) => x
4166///  - &*****f => f for f a function designator.
4167///  - &s.xx => s
4168///  - &s.zz[1].yy -> s, if zz is an array
4169///  - *(x + 1) -> x, if x is an array
4170///  - &"123"[2] -> 0
4171///  - & __real__ x -> x
4172static NamedDecl *getPrimaryDecl(Expr *E) {
4173  switch (E->getStmtClass()) {
4174  case Stmt::DeclRefExprClass:
4175  case Stmt::QualifiedDeclRefExprClass:
4176    return cast<DeclRefExpr>(E)->getDecl();
4177  case Stmt::MemberExprClass:
4178    // If this is an arrow operator, the address is an offset from
4179    // the base's value, so the object the base refers to is
4180    // irrelevant.
4181    if (cast<MemberExpr>(E)->isArrow())
4182      return 0;
4183    // Otherwise, the expression refers to a part of the base
4184    return getPrimaryDecl(cast<MemberExpr>(E)->getBase());
4185  case Stmt::ArraySubscriptExprClass: {
4186    // FIXME: This code shouldn't be necessary!  We should catch the
4187    // implicit promotion of register arrays earlier.
4188    Expr* Base = cast<ArraySubscriptExpr>(E)->getBase();
4189    if (ImplicitCastExpr* ICE = dyn_cast<ImplicitCastExpr>(Base)) {
4190      if (ICE->getSubExpr()->getType()->isArrayType())
4191        return getPrimaryDecl(ICE->getSubExpr());
4192    }
4193    return 0;
4194  }
4195  case Stmt::UnaryOperatorClass: {
4196    UnaryOperator *UO = cast<UnaryOperator>(E);
4197
4198    switch(UO->getOpcode()) {
4199    case UnaryOperator::Real:
4200    case UnaryOperator::Imag:
4201    case UnaryOperator::Extension:
4202      return getPrimaryDecl(UO->getSubExpr());
4203    default:
4204      return 0;
4205    }
4206  }
4207  case Stmt::ParenExprClass:
4208    return getPrimaryDecl(cast<ParenExpr>(E)->getSubExpr());
4209  case Stmt::ImplicitCastExprClass:
4210    // If the result of an implicit cast is an l-value, we care about
4211    // the sub-expression; otherwise, the result here doesn't matter.
4212    return getPrimaryDecl(cast<ImplicitCastExpr>(E)->getSubExpr());
4213  default:
4214    return 0;
4215  }
4216}
4217
4218/// CheckAddressOfOperand - The operand of & must be either a function
4219/// designator or an lvalue designating an object. If it is an lvalue, the
4220/// object cannot be declared with storage class register or be a bit field.
4221/// Note: The usual conversions are *not* applied to the operand of the &
4222/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.
4223/// In C++, the operand might be an overloaded function name, in which case
4224/// we allow the '&' but retain the overloaded-function type.
4225QualType Sema::CheckAddressOfOperand(Expr *op, SourceLocation OpLoc) {
4226  // Make sure to ignore parentheses in subsequent checks
4227  op = op->IgnoreParens();
4228
4229  if (op->isTypeDependent())
4230    return Context.DependentTy;
4231
4232  if (getLangOptions().C99) {
4233    // Implement C99-only parts of addressof rules.
4234    if (UnaryOperator* uOp = dyn_cast<UnaryOperator>(op)) {
4235      if (uOp->getOpcode() == UnaryOperator::Deref)
4236        // Per C99 6.5.3.2, the address of a deref always returns a valid result
4237        // (assuming the deref expression is valid).
4238        return uOp->getSubExpr()->getType();
4239    }
4240    // Technically, there should be a check for array subscript
4241    // expressions here, but the result of one is always an lvalue anyway.
4242  }
4243  NamedDecl *dcl = getPrimaryDecl(op);
4244  Expr::isLvalueResult lval = op->isLvalue(Context);
4245
4246  if (lval != Expr::LV_Valid) { // C99 6.5.3.2p1
4247    // The operand must be either an l-value or a function designator
4248    if (!op->getType()->isFunctionType()) {
4249      // FIXME: emit more specific diag...
4250      Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof)
4251        << op->getSourceRange();
4252      return QualType();
4253    }
4254  } else if (op->getBitField()) { // C99 6.5.3.2p1
4255    // The operand cannot be a bit-field
4256    Diag(OpLoc, diag::err_typecheck_address_of)
4257      << "bit-field" << op->getSourceRange();
4258        return QualType();
4259  } else if (isa<ExtVectorElementExpr>(op) || (isa<ArraySubscriptExpr>(op) &&
4260           cast<ArraySubscriptExpr>(op)->getBase()->getType()->isVectorType())){
4261    // The operand cannot be an element of a vector
4262    Diag(OpLoc, diag::err_typecheck_address_of)
4263      << "vector element" << op->getSourceRange();
4264    return QualType();
4265  } else if (dcl) { // C99 6.5.3.2p1
4266    // We have an lvalue with a decl. Make sure the decl is not declared
4267    // with the register storage-class specifier.
4268    if (const VarDecl *vd = dyn_cast<VarDecl>(dcl)) {
4269      if (vd->getStorageClass() == VarDecl::Register) {
4270        Diag(OpLoc, diag::err_typecheck_address_of)
4271          << "register variable" << op->getSourceRange();
4272        return QualType();
4273      }
4274    } else if (isa<OverloadedFunctionDecl>(dcl)) {
4275      return Context.OverloadTy;
4276    } else if (isa<FieldDecl>(dcl)) {
4277      // Okay: we can take the address of a field.
4278      // Could be a pointer to member, though, if there is an explicit
4279      // scope qualifier for the class.
4280      if (isa<QualifiedDeclRefExpr>(op)) {
4281        DeclContext *Ctx = dcl->getDeclContext();
4282        if (Ctx && Ctx->isRecord())
4283          return Context.getMemberPointerType(op->getType(),
4284                Context.getTypeDeclType(cast<RecordDecl>(Ctx)).getTypePtr());
4285      }
4286    } else if (isa<FunctionDecl>(dcl)) {
4287      // Okay: we can take the address of a function.
4288      // As above.
4289      if (isa<QualifiedDeclRefExpr>(op)) {
4290        DeclContext *Ctx = dcl->getDeclContext();
4291        if (Ctx && Ctx->isRecord())
4292          return Context.getMemberPointerType(op->getType(),
4293                Context.getTypeDeclType(cast<RecordDecl>(Ctx)).getTypePtr());
4294      }
4295    }
4296    else
4297      assert(0 && "Unknown/unexpected decl type");
4298  }
4299
4300  // If the operand has type "type", the result has type "pointer to type".
4301  return Context.getPointerType(op->getType());
4302}
4303
4304QualType Sema::CheckIndirectionOperand(Expr *Op, SourceLocation OpLoc) {
4305  if (Op->isTypeDependent())
4306    return Context.DependentTy;
4307
4308  UsualUnaryConversions(Op);
4309  QualType Ty = Op->getType();
4310
4311  // Note that per both C89 and C99, this is always legal, even if ptype is an
4312  // incomplete type or void.  It would be possible to warn about dereferencing
4313  // a void pointer, but it's completely well-defined, and such a warning is
4314  // unlikely to catch any mistakes.
4315  if (const PointerType *PT = Ty->getAsPointerType())
4316    return PT->getPointeeType();
4317
4318  Diag(OpLoc, diag::err_typecheck_indirection_requires_pointer)
4319    << Ty << Op->getSourceRange();
4320  return QualType();
4321}
4322
4323static inline BinaryOperator::Opcode ConvertTokenKindToBinaryOpcode(
4324  tok::TokenKind Kind) {
4325  BinaryOperator::Opcode Opc;
4326  switch (Kind) {
4327  default: assert(0 && "Unknown binop!");
4328  case tok::periodstar:           Opc = BinaryOperator::PtrMemD; break;
4329  case tok::arrowstar:            Opc = BinaryOperator::PtrMemI; break;
4330  case tok::star:                 Opc = BinaryOperator::Mul; break;
4331  case tok::slash:                Opc = BinaryOperator::Div; break;
4332  case tok::percent:              Opc = BinaryOperator::Rem; break;
4333  case tok::plus:                 Opc = BinaryOperator::Add; break;
4334  case tok::minus:                Opc = BinaryOperator::Sub; break;
4335  case tok::lessless:             Opc = BinaryOperator::Shl; break;
4336  case tok::greatergreater:       Opc = BinaryOperator::Shr; break;
4337  case tok::lessequal:            Opc = BinaryOperator::LE; break;
4338  case tok::less:                 Opc = BinaryOperator::LT; break;
4339  case tok::greaterequal:         Opc = BinaryOperator::GE; break;
4340  case tok::greater:              Opc = BinaryOperator::GT; break;
4341  case tok::exclaimequal:         Opc = BinaryOperator::NE; break;
4342  case tok::equalequal:           Opc = BinaryOperator::EQ; break;
4343  case tok::amp:                  Opc = BinaryOperator::And; break;
4344  case tok::caret:                Opc = BinaryOperator::Xor; break;
4345  case tok::pipe:                 Opc = BinaryOperator::Or; break;
4346  case tok::ampamp:               Opc = BinaryOperator::LAnd; break;
4347  case tok::pipepipe:             Opc = BinaryOperator::LOr; break;
4348  case tok::equal:                Opc = BinaryOperator::Assign; break;
4349  case tok::starequal:            Opc = BinaryOperator::MulAssign; break;
4350  case tok::slashequal:           Opc = BinaryOperator::DivAssign; break;
4351  case tok::percentequal:         Opc = BinaryOperator::RemAssign; break;
4352  case tok::plusequal:            Opc = BinaryOperator::AddAssign; break;
4353  case tok::minusequal:           Opc = BinaryOperator::SubAssign; break;
4354  case tok::lesslessequal:        Opc = BinaryOperator::ShlAssign; break;
4355  case tok::greatergreaterequal:  Opc = BinaryOperator::ShrAssign; break;
4356  case tok::ampequal:             Opc = BinaryOperator::AndAssign; break;
4357  case tok::caretequal:           Opc = BinaryOperator::XorAssign; break;
4358  case tok::pipeequal:            Opc = BinaryOperator::OrAssign; break;
4359  case tok::comma:                Opc = BinaryOperator::Comma; break;
4360  }
4361  return Opc;
4362}
4363
4364static inline UnaryOperator::Opcode ConvertTokenKindToUnaryOpcode(
4365  tok::TokenKind Kind) {
4366  UnaryOperator::Opcode Opc;
4367  switch (Kind) {
4368  default: assert(0 && "Unknown unary op!");
4369  case tok::plusplus:     Opc = UnaryOperator::PreInc; break;
4370  case tok::minusminus:   Opc = UnaryOperator::PreDec; break;
4371  case tok::amp:          Opc = UnaryOperator::AddrOf; break;
4372  case tok::star:         Opc = UnaryOperator::Deref; break;
4373  case tok::plus:         Opc = UnaryOperator::Plus; break;
4374  case tok::minus:        Opc = UnaryOperator::Minus; break;
4375  case tok::tilde:        Opc = UnaryOperator::Not; break;
4376  case tok::exclaim:      Opc = UnaryOperator::LNot; break;
4377  case tok::kw___real:    Opc = UnaryOperator::Real; break;
4378  case tok::kw___imag:    Opc = UnaryOperator::Imag; break;
4379  case tok::kw___extension__: Opc = UnaryOperator::Extension; break;
4380  }
4381  return Opc;
4382}
4383
4384/// CreateBuiltinBinOp - Creates a new built-in binary operation with
4385/// operator @p Opc at location @c TokLoc. This routine only supports
4386/// built-in operations; ActOnBinOp handles overloaded operators.
4387Action::OwningExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc,
4388                                                  unsigned Op,
4389                                                  Expr *lhs, Expr *rhs) {
4390  QualType ResultTy;     // Result type of the binary operator.
4391  BinaryOperator::Opcode Opc = (BinaryOperator::Opcode)Op;
4392  // The following two variables are used for compound assignment operators
4393  QualType CompLHSTy;    // Type of LHS after promotions for computation
4394  QualType CompResultTy; // Type of computation result
4395
4396  switch (Opc) {
4397  case BinaryOperator::Assign:
4398    ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, QualType());
4399    break;
4400  case BinaryOperator::PtrMemD:
4401  case BinaryOperator::PtrMemI:
4402    ResultTy = CheckPointerToMemberOperands(lhs, rhs, OpLoc,
4403                                            Opc == BinaryOperator::PtrMemI);
4404    break;
4405  case BinaryOperator::Mul:
4406  case BinaryOperator::Div:
4407    ResultTy = CheckMultiplyDivideOperands(lhs, rhs, OpLoc);
4408    break;
4409  case BinaryOperator::Rem:
4410    ResultTy = CheckRemainderOperands(lhs, rhs, OpLoc);
4411    break;
4412  case BinaryOperator::Add:
4413    ResultTy = CheckAdditionOperands(lhs, rhs, OpLoc);
4414    break;
4415  case BinaryOperator::Sub:
4416    ResultTy = CheckSubtractionOperands(lhs, rhs, OpLoc);
4417    break;
4418  case BinaryOperator::Shl:
4419  case BinaryOperator::Shr:
4420    ResultTy = CheckShiftOperands(lhs, rhs, OpLoc);
4421    break;
4422  case BinaryOperator::LE:
4423  case BinaryOperator::LT:
4424  case BinaryOperator::GE:
4425  case BinaryOperator::GT:
4426    ResultTy = CheckCompareOperands(lhs, rhs, OpLoc, Opc, true);
4427    break;
4428  case BinaryOperator::EQ:
4429  case BinaryOperator::NE:
4430    ResultTy = CheckCompareOperands(lhs, rhs, OpLoc, Opc, false);
4431    break;
4432  case BinaryOperator::And:
4433  case BinaryOperator::Xor:
4434  case BinaryOperator::Or:
4435    ResultTy = CheckBitwiseOperands(lhs, rhs, OpLoc);
4436    break;
4437  case BinaryOperator::LAnd:
4438  case BinaryOperator::LOr:
4439    ResultTy = CheckLogicalOperands(lhs, rhs, OpLoc);
4440    break;
4441  case BinaryOperator::MulAssign:
4442  case BinaryOperator::DivAssign:
4443    CompResultTy = CheckMultiplyDivideOperands(lhs, rhs, OpLoc, true);
4444    CompLHSTy = CompResultTy;
4445    if (!CompResultTy.isNull())
4446      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
4447    break;
4448  case BinaryOperator::RemAssign:
4449    CompResultTy = CheckRemainderOperands(lhs, rhs, OpLoc, true);
4450    CompLHSTy = CompResultTy;
4451    if (!CompResultTy.isNull())
4452      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
4453    break;
4454  case BinaryOperator::AddAssign:
4455    CompResultTy = CheckAdditionOperands(lhs, rhs, OpLoc, &CompLHSTy);
4456    if (!CompResultTy.isNull())
4457      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
4458    break;
4459  case BinaryOperator::SubAssign:
4460    CompResultTy = CheckSubtractionOperands(lhs, rhs, OpLoc, &CompLHSTy);
4461    if (!CompResultTy.isNull())
4462      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
4463    break;
4464  case BinaryOperator::ShlAssign:
4465  case BinaryOperator::ShrAssign:
4466    CompResultTy = CheckShiftOperands(lhs, rhs, OpLoc, true);
4467    CompLHSTy = CompResultTy;
4468    if (!CompResultTy.isNull())
4469      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
4470    break;
4471  case BinaryOperator::AndAssign:
4472  case BinaryOperator::XorAssign:
4473  case BinaryOperator::OrAssign:
4474    CompResultTy = CheckBitwiseOperands(lhs, rhs, OpLoc, true);
4475    CompLHSTy = CompResultTy;
4476    if (!CompResultTy.isNull())
4477      ResultTy = CheckAssignmentOperands(lhs, rhs, OpLoc, CompResultTy);
4478    break;
4479  case BinaryOperator::Comma:
4480    ResultTy = CheckCommaOperands(lhs, rhs, OpLoc);
4481    break;
4482  }
4483  if (ResultTy.isNull())
4484    return ExprError();
4485  if (CompResultTy.isNull())
4486    return Owned(new (Context) BinaryOperator(lhs, rhs, Opc, ResultTy, OpLoc));
4487  else
4488    return Owned(new (Context) CompoundAssignOperator(lhs, rhs, Opc, ResultTy,
4489                                                      CompLHSTy, CompResultTy,
4490                                                      OpLoc));
4491}
4492
4493// Binary Operators.  'Tok' is the token for the operator.
4494Action::OwningExprResult Sema::ActOnBinOp(Scope *S, SourceLocation TokLoc,
4495                                          tok::TokenKind Kind,
4496                                          ExprArg LHS, ExprArg RHS) {
4497  BinaryOperator::Opcode Opc = ConvertTokenKindToBinaryOpcode(Kind);
4498  Expr *lhs = LHS.takeAs<Expr>(), *rhs = RHS.takeAs<Expr>();
4499
4500  assert((lhs != 0) && "ActOnBinOp(): missing left expression");
4501  assert((rhs != 0) && "ActOnBinOp(): missing right expression");
4502
4503  if (getLangOptions().CPlusPlus &&
4504      (lhs->getType()->isOverloadableType() ||
4505       rhs->getType()->isOverloadableType())) {
4506    // Find all of the overloaded operators visible from this
4507    // point. We perform both an operator-name lookup from the local
4508    // scope and an argument-dependent lookup based on the types of
4509    // the arguments.
4510    FunctionSet Functions;
4511    OverloadedOperatorKind OverOp = BinaryOperator::getOverloadedOperator(Opc);
4512    if (OverOp != OO_None) {
4513      LookupOverloadedOperatorName(OverOp, S, lhs->getType(), rhs->getType(),
4514                                   Functions);
4515      Expr *Args[2] = { lhs, rhs };
4516      DeclarationName OpName
4517        = Context.DeclarationNames.getCXXOperatorName(OverOp);
4518      ArgumentDependentLookup(OpName, Args, 2, Functions);
4519    }
4520
4521    // Build the (potentially-overloaded, potentially-dependent)
4522    // binary operation.
4523    return CreateOverloadedBinOp(TokLoc, Opc, Functions, lhs, rhs);
4524  }
4525
4526  // Build a built-in binary operation.
4527  return CreateBuiltinBinOp(TokLoc, Opc, lhs, rhs);
4528}
4529
4530Action::OwningExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc,
4531                                                    unsigned OpcIn,
4532                                                    ExprArg InputArg) {
4533  UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
4534
4535  // FIXME: Input is modified below, but InputArg is not updated
4536  // appropriately.
4537  Expr *Input = (Expr *)InputArg.get();
4538  QualType resultType;
4539  switch (Opc) {
4540  case UnaryOperator::PostInc:
4541  case UnaryOperator::PostDec:
4542  case UnaryOperator::OffsetOf:
4543    assert(false && "Invalid unary operator");
4544    break;
4545
4546  case UnaryOperator::PreInc:
4547  case UnaryOperator::PreDec:
4548    resultType = CheckIncrementDecrementOperand(Input, OpLoc,
4549                                                Opc == UnaryOperator::PreInc);
4550    break;
4551  case UnaryOperator::AddrOf:
4552    resultType = CheckAddressOfOperand(Input, OpLoc);
4553    break;
4554  case UnaryOperator::Deref:
4555    DefaultFunctionArrayConversion(Input);
4556    resultType = CheckIndirectionOperand(Input, OpLoc);
4557    break;
4558  case UnaryOperator::Plus:
4559  case UnaryOperator::Minus:
4560    UsualUnaryConversions(Input);
4561    resultType = Input->getType();
4562    if (resultType->isDependentType())
4563      break;
4564    if (resultType->isArithmeticType()) // C99 6.5.3.3p1
4565      break;
4566    else if (getLangOptions().CPlusPlus && // C++ [expr.unary.op]p6-7
4567             resultType->isEnumeralType())
4568      break;
4569    else if (getLangOptions().CPlusPlus && // C++ [expr.unary.op]p6
4570             Opc == UnaryOperator::Plus &&
4571             resultType->isPointerType())
4572      break;
4573
4574    return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr)
4575      << resultType << Input->getSourceRange());
4576  case UnaryOperator::Not: // bitwise complement
4577    UsualUnaryConversions(Input);
4578    resultType = Input->getType();
4579    if (resultType->isDependentType())
4580      break;
4581    // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.
4582    if (resultType->isComplexType() || resultType->isComplexIntegerType())
4583      // C99 does not support '~' for complex conjugation.
4584      Diag(OpLoc, diag::ext_integer_complement_complex)
4585        << resultType << Input->getSourceRange();
4586    else if (!resultType->isIntegerType())
4587      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr)
4588        << resultType << Input->getSourceRange());
4589    break;
4590  case UnaryOperator::LNot: // logical negation
4591    // Unlike +/-/~, integer promotions aren't done here (C99 6.5.3.3p5).
4592    DefaultFunctionArrayConversion(Input);
4593    resultType = Input->getType();
4594    if (resultType->isDependentType())
4595      break;
4596    if (!resultType->isScalarType()) // C99 6.5.3.3p1
4597      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr)
4598        << resultType << Input->getSourceRange());
4599    // LNot always has type int. C99 6.5.3.3p5.
4600    // In C++, it's bool. C++ 5.3.1p8
4601    resultType = getLangOptions().CPlusPlus ? Context.BoolTy : Context.IntTy;
4602    break;
4603  case UnaryOperator::Real:
4604  case UnaryOperator::Imag:
4605    resultType = CheckRealImagOperand(Input, OpLoc, Opc == UnaryOperator::Real);
4606    break;
4607  case UnaryOperator::Extension:
4608    resultType = Input->getType();
4609    break;
4610  }
4611  if (resultType.isNull())
4612    return ExprError();
4613
4614  InputArg.release();
4615  return Owned(new (Context) UnaryOperator(Input, Opc, resultType, OpLoc));
4616}
4617
4618// Unary Operators.  'Tok' is the token for the operator.
4619Action::OwningExprResult Sema::ActOnUnaryOp(Scope *S, SourceLocation OpLoc,
4620                                            tok::TokenKind Op, ExprArg input) {
4621  Expr *Input = (Expr*)input.get();
4622  UnaryOperator::Opcode Opc = ConvertTokenKindToUnaryOpcode(Op);
4623
4624  if (getLangOptions().CPlusPlus && Input->getType()->isOverloadableType()) {
4625    // Find all of the overloaded operators visible from this
4626    // point. We perform both an operator-name lookup from the local
4627    // scope and an argument-dependent lookup based on the types of
4628    // the arguments.
4629    FunctionSet Functions;
4630    OverloadedOperatorKind OverOp = UnaryOperator::getOverloadedOperator(Opc);
4631    if (OverOp != OO_None) {
4632      LookupOverloadedOperatorName(OverOp, S, Input->getType(), QualType(),
4633                                   Functions);
4634      DeclarationName OpName
4635        = Context.DeclarationNames.getCXXOperatorName(OverOp);
4636      ArgumentDependentLookup(OpName, &Input, 1, Functions);
4637    }
4638
4639    return CreateOverloadedUnaryOp(OpLoc, Opc, Functions, move(input));
4640  }
4641
4642  return CreateBuiltinUnaryOp(OpLoc, Opc, move(input));
4643}
4644
4645/// ActOnAddrLabel - Parse the GNU address of label extension: "&&foo".
4646Sema::OwningExprResult Sema::ActOnAddrLabel(SourceLocation OpLoc,
4647                                            SourceLocation LabLoc,
4648                                            IdentifierInfo *LabelII) {
4649  // Look up the record for this label identifier.
4650  LabelStmt *&LabelDecl = getLabelMap()[LabelII];
4651
4652  // If we haven't seen this label yet, create a forward reference. It
4653  // will be validated and/or cleaned up in ActOnFinishFunctionBody.
4654  if (LabelDecl == 0)
4655    LabelDecl = new (Context) LabelStmt(LabLoc, LabelII, 0);
4656
4657  // Create the AST node.  The address of a label always has type 'void*'.
4658  return Owned(new (Context) AddrLabelExpr(OpLoc, LabLoc, LabelDecl,
4659                                       Context.getPointerType(Context.VoidTy)));
4660}
4661
4662Sema::OwningExprResult
4663Sema::ActOnStmtExpr(SourceLocation LPLoc, StmtArg substmt,
4664                    SourceLocation RPLoc) { // "({..})"
4665  Stmt *SubStmt = static_cast<Stmt*>(substmt.get());
4666  assert(SubStmt && isa<CompoundStmt>(SubStmt) && "Invalid action invocation!");
4667  CompoundStmt *Compound = cast<CompoundStmt>(SubStmt);
4668
4669  bool isFileScope = getCurFunctionOrMethodDecl() == 0;
4670  if (isFileScope)
4671    return ExprError(Diag(LPLoc, diag::err_stmtexpr_file_scope));
4672
4673  // FIXME: there are a variety of strange constraints to enforce here, for
4674  // example, it is not possible to goto into a stmt expression apparently.
4675  // More semantic analysis is needed.
4676
4677  // If there are sub stmts in the compound stmt, take the type of the last one
4678  // as the type of the stmtexpr.
4679  QualType Ty = Context.VoidTy;
4680
4681  if (!Compound->body_empty()) {
4682    Stmt *LastStmt = Compound->body_back();
4683    // If LastStmt is a label, skip down through into the body.
4684    while (LabelStmt *Label = dyn_cast<LabelStmt>(LastStmt))
4685      LastStmt = Label->getSubStmt();
4686
4687    if (Expr *LastExpr = dyn_cast<Expr>(LastStmt))
4688      Ty = LastExpr->getType();
4689  }
4690
4691  // FIXME: Check that expression type is complete/non-abstract; statement
4692  // expressions are not lvalues.
4693
4694  substmt.release();
4695  return Owned(new (Context) StmtExpr(Compound, Ty, LPLoc, RPLoc));
4696}
4697
4698Sema::OwningExprResult Sema::ActOnBuiltinOffsetOf(Scope *S,
4699                                                  SourceLocation BuiltinLoc,
4700                                                  SourceLocation TypeLoc,
4701                                                  TypeTy *argty,
4702                                                  OffsetOfComponent *CompPtr,
4703                                                  unsigned NumComponents,
4704                                                  SourceLocation RPLoc) {
4705  // FIXME: This function leaks all expressions in the offset components on
4706  // error.
4707  QualType ArgTy = QualType::getFromOpaquePtr(argty);
4708  assert(!ArgTy.isNull() && "Missing type argument!");
4709
4710  bool Dependent = ArgTy->isDependentType();
4711
4712  // We must have at least one component that refers to the type, and the first
4713  // one is known to be a field designator.  Verify that the ArgTy represents
4714  // a struct/union/class.
4715  if (!Dependent && !ArgTy->isRecordType())
4716    return ExprError(Diag(TypeLoc, diag::err_offsetof_record_type) << ArgTy);
4717
4718  // FIXME: Type must be complete per C99 7.17p3 because a declaring a variable
4719  // with an incomplete type would be illegal.
4720
4721  // Otherwise, create a null pointer as the base, and iteratively process
4722  // the offsetof designators.
4723  QualType ArgTyPtr = Context.getPointerType(ArgTy);
4724  Expr* Res = new (Context) ImplicitValueInitExpr(ArgTyPtr);
4725  Res = new (Context) UnaryOperator(Res, UnaryOperator::Deref,
4726                                    ArgTy, SourceLocation());
4727
4728  // offsetof with non-identifier designators (e.g. "offsetof(x, a.b[c])") are a
4729  // GCC extension, diagnose them.
4730  // FIXME: This diagnostic isn't actually visible because the location is in
4731  // a system header!
4732  if (NumComponents != 1)
4733    Diag(BuiltinLoc, diag::ext_offsetof_extended_field_designator)
4734      << SourceRange(CompPtr[1].LocStart, CompPtr[NumComponents-1].LocEnd);
4735
4736  if (!Dependent) {
4737    bool DidWarnAboutNonPOD = false;
4738
4739    // FIXME: Dependent case loses a lot of information here. And probably
4740    // leaks like a sieve.
4741    for (unsigned i = 0; i != NumComponents; ++i) {
4742      const OffsetOfComponent &OC = CompPtr[i];
4743      if (OC.isBrackets) {
4744        // Offset of an array sub-field.  TODO: Should we allow vector elements?
4745        const ArrayType *AT = Context.getAsArrayType(Res->getType());
4746        if (!AT) {
4747          Res->Destroy(Context);
4748          return ExprError(Diag(OC.LocEnd, diag::err_offsetof_array_type)
4749            << Res->getType());
4750        }
4751
4752        // FIXME: C++: Verify that operator[] isn't overloaded.
4753
4754        // Promote the array so it looks more like a normal array subscript
4755        // expression.
4756        DefaultFunctionArrayConversion(Res);
4757
4758        // C99 6.5.2.1p1
4759        Expr *Idx = static_cast<Expr*>(OC.U.E);
4760        // FIXME: Leaks Res
4761        if (!Idx->isTypeDependent() && !Idx->getType()->isIntegerType())
4762          return ExprError(Diag(Idx->getLocStart(),
4763                                diag::err_typecheck_subscript_not_integer)
4764            << Idx->getSourceRange());
4765
4766        Res = new (Context) ArraySubscriptExpr(Res, Idx, AT->getElementType(),
4767                                               OC.LocEnd);
4768        continue;
4769      }
4770
4771      const RecordType *RC = Res->getType()->getAsRecordType();
4772      if (!RC) {
4773        Res->Destroy(Context);
4774        return ExprError(Diag(OC.LocEnd, diag::err_offsetof_record_type)
4775          << Res->getType());
4776      }
4777
4778      // Get the decl corresponding to this.
4779      RecordDecl *RD = RC->getDecl();
4780      if (CXXRecordDecl *CRD = dyn_cast<CXXRecordDecl>(RD)) {
4781        if (!CRD->isPOD() && !DidWarnAboutNonPOD) {
4782          ExprError(Diag(BuiltinLoc, diag::warn_offsetof_non_pod_type)
4783            << SourceRange(CompPtr[0].LocStart, OC.LocEnd)
4784            << Res->getType());
4785          DidWarnAboutNonPOD = true;
4786        }
4787      }
4788
4789      FieldDecl *MemberDecl
4790        = dyn_cast_or_null<FieldDecl>(LookupQualifiedName(RD, OC.U.IdentInfo,
4791                                                          LookupMemberName)
4792                                        .getAsDecl());
4793      // FIXME: Leaks Res
4794      if (!MemberDecl)
4795        return ExprError(Diag(BuiltinLoc, diag::err_typecheck_no_member)
4796         << OC.U.IdentInfo << SourceRange(OC.LocStart, OC.LocEnd));
4797
4798      // FIXME: C++: Verify that MemberDecl isn't a static field.
4799      // FIXME: Verify that MemberDecl isn't a bitfield.
4800      if (cast<RecordDecl>(MemberDecl->getDeclContext())->isAnonymousStructOrUnion()) {
4801        Res = BuildAnonymousStructUnionMemberReference(
4802            SourceLocation(), MemberDecl, Res, SourceLocation()).takeAs<Expr>();
4803      } else {
4804        // MemberDecl->getType() doesn't get the right qualifiers, but it
4805        // doesn't matter here.
4806        Res = new (Context) MemberExpr(Res, false, MemberDecl, OC.LocEnd,
4807                MemberDecl->getType().getNonReferenceType());
4808      }
4809    }
4810  }
4811
4812  return Owned(new (Context) UnaryOperator(Res, UnaryOperator::OffsetOf,
4813                                           Context.getSizeType(), BuiltinLoc));
4814}
4815
4816
4817Sema::OwningExprResult Sema::ActOnTypesCompatibleExpr(SourceLocation BuiltinLoc,
4818                                                      TypeTy *arg1,TypeTy *arg2,
4819                                                      SourceLocation RPLoc) {
4820  QualType argT1 = QualType::getFromOpaquePtr(arg1);
4821  QualType argT2 = QualType::getFromOpaquePtr(arg2);
4822
4823  assert((!argT1.isNull() && !argT2.isNull()) && "Missing type argument(s)");
4824
4825  return Owned(new (Context) TypesCompatibleExpr(Context.IntTy, BuiltinLoc,
4826                                                 argT1, argT2, RPLoc));
4827}
4828
4829Sema::OwningExprResult Sema::ActOnChooseExpr(SourceLocation BuiltinLoc,
4830                                             ExprArg cond,
4831                                             ExprArg expr1, ExprArg expr2,
4832                                             SourceLocation RPLoc) {
4833  Expr *CondExpr = static_cast<Expr*>(cond.get());
4834  Expr *LHSExpr = static_cast<Expr*>(expr1.get());
4835  Expr *RHSExpr = static_cast<Expr*>(expr2.get());
4836
4837  assert((CondExpr && LHSExpr && RHSExpr) && "Missing type argument(s)");
4838
4839  QualType resType;
4840  if (CondExpr->isValueDependent()) {
4841    resType = Context.DependentTy;
4842  } else {
4843    // The conditional expression is required to be a constant expression.
4844    llvm::APSInt condEval(32);
4845    SourceLocation ExpLoc;
4846    if (!CondExpr->isIntegerConstantExpr(condEval, Context, &ExpLoc))
4847      return ExprError(Diag(ExpLoc,
4848                       diag::err_typecheck_choose_expr_requires_constant)
4849        << CondExpr->getSourceRange());
4850
4851    // If the condition is > zero, then the AST type is the same as the LSHExpr.
4852    resType = condEval.getZExtValue() ? LHSExpr->getType() : RHSExpr->getType();
4853  }
4854
4855  cond.release(); expr1.release(); expr2.release();
4856  return Owned(new (Context) ChooseExpr(BuiltinLoc, CondExpr, LHSExpr, RHSExpr,
4857                                        resType, RPLoc));
4858}
4859
4860//===----------------------------------------------------------------------===//
4861// Clang Extensions.
4862//===----------------------------------------------------------------------===//
4863
4864/// ActOnBlockStart - This callback is invoked when a block literal is started.
4865void Sema::ActOnBlockStart(SourceLocation CaretLoc, Scope *BlockScope) {
4866  // Analyze block parameters.
4867  BlockSemaInfo *BSI = new BlockSemaInfo();
4868
4869  // Add BSI to CurBlock.
4870  BSI->PrevBlockInfo = CurBlock;
4871  CurBlock = BSI;
4872
4873  BSI->ReturnType = 0;
4874  BSI->TheScope = BlockScope;
4875  BSI->hasBlockDeclRefExprs = false;
4876  BSI->SavedFunctionNeedsScopeChecking = CurFunctionNeedsScopeChecking;
4877  CurFunctionNeedsScopeChecking = false;
4878
4879  BSI->TheDecl = BlockDecl::Create(Context, CurContext, CaretLoc);
4880  PushDeclContext(BlockScope, BSI->TheDecl);
4881}
4882
4883void Sema::ActOnBlockArguments(Declarator &ParamInfo, Scope *CurScope) {
4884  assert(ParamInfo.getIdentifier() == 0 && "block-id should have no identifier!");
4885
4886  ProcessDeclAttributes(CurBlock->TheDecl, ParamInfo);
4887
4888  if (ParamInfo.getNumTypeObjects() == 0
4889      || ParamInfo.getTypeObject(0).Kind != DeclaratorChunk::Function) {
4890    QualType T = GetTypeForDeclarator(ParamInfo, CurScope);
4891
4892    if (T->isArrayType()) {
4893      Diag(ParamInfo.getSourceRange().getBegin(),
4894           diag::err_block_returns_array);
4895      return;
4896    }
4897
4898    // The parameter list is optional, if there was none, assume ().
4899    if (!T->isFunctionType())
4900      T = Context.getFunctionType(T, NULL, 0, 0, 0);
4901
4902    CurBlock->hasPrototype = true;
4903    CurBlock->isVariadic = false;
4904
4905    QualType RetTy = T.getTypePtr()->getAsFunctionType()->getResultType();
4906
4907    // Do not allow returning a objc interface by-value.
4908    if (RetTy->isObjCInterfaceType()) {
4909      Diag(ParamInfo.getSourceRange().getBegin(),
4910           diag::err_object_cannot_be_passed_returned_by_value) << 0 << RetTy;
4911      return;
4912    }
4913    return;
4914  }
4915
4916  // Analyze arguments to block.
4917  assert(ParamInfo.getTypeObject(0).Kind == DeclaratorChunk::Function &&
4918         "Not a function declarator!");
4919  DeclaratorChunk::FunctionTypeInfo &FTI = ParamInfo.getTypeObject(0).Fun;
4920
4921  CurBlock->hasPrototype = FTI.hasPrototype;
4922  CurBlock->isVariadic = true;
4923
4924  // Check for C99 6.7.5.3p10 - foo(void) is a non-varargs function that takes
4925  // no arguments, not a function that takes a single void argument.
4926  if (FTI.hasPrototype &&
4927      FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
4928     (!FTI.ArgInfo[0].Param.getAs<ParmVarDecl>()->getType().getCVRQualifiers()&&
4929        FTI.ArgInfo[0].Param.getAs<ParmVarDecl>()->getType()->isVoidType())) {
4930    // empty arg list, don't push any params.
4931    CurBlock->isVariadic = false;
4932  } else if (FTI.hasPrototype) {
4933    for (unsigned i = 0, e = FTI.NumArgs; i != e; ++i)
4934      CurBlock->Params.push_back(FTI.ArgInfo[i].Param.getAs<ParmVarDecl>());
4935    CurBlock->isVariadic = FTI.isVariadic;
4936  }
4937  CurBlock->TheDecl->setParams(Context, &CurBlock->Params[0],
4938                               CurBlock->Params.size());
4939
4940  for (BlockDecl::param_iterator AI = CurBlock->TheDecl->param_begin(),
4941       E = CurBlock->TheDecl->param_end(); AI != E; ++AI)
4942    // If this has an identifier, add it to the scope stack.
4943    if ((*AI)->getIdentifier())
4944      PushOnScopeChains(*AI, CurBlock->TheScope);
4945
4946  // Analyze the return type.
4947  QualType T = GetTypeForDeclarator(ParamInfo, CurScope);
4948  QualType RetTy = T->getAsFunctionType()->getResultType();
4949
4950  // Do not allow returning a objc interface by-value.
4951  if (RetTy->isObjCInterfaceType()) {
4952    Diag(ParamInfo.getSourceRange().getBegin(),
4953         diag::err_object_cannot_be_passed_returned_by_value) << 0 << RetTy;
4954  } else if (!RetTy->isDependentType())
4955    CurBlock->ReturnType = RetTy.getTypePtr();
4956}
4957
4958/// ActOnBlockError - If there is an error parsing a block, this callback
4959/// is invoked to pop the information about the block from the action impl.
4960void Sema::ActOnBlockError(SourceLocation CaretLoc, Scope *CurScope) {
4961  // Ensure that CurBlock is deleted.
4962  llvm::OwningPtr<BlockSemaInfo> CC(CurBlock);
4963
4964  CurFunctionNeedsScopeChecking = CurBlock->SavedFunctionNeedsScopeChecking;
4965
4966  // Pop off CurBlock, handle nested blocks.
4967  PopDeclContext();
4968  CurBlock = CurBlock->PrevBlockInfo;
4969  // FIXME: Delete the ParmVarDecl objects as well???
4970}
4971
4972/// ActOnBlockStmtExpr - This is called when the body of a block statement
4973/// literal was successfully completed.  ^(int x){...}
4974Sema::OwningExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc,
4975                                                StmtArg body, Scope *CurScope) {
4976  // If blocks are disabled, emit an error.
4977  if (!LangOpts.Blocks)
4978    Diag(CaretLoc, diag::err_blocks_disable);
4979
4980  // Ensure that CurBlock is deleted.
4981  llvm::OwningPtr<BlockSemaInfo> BSI(CurBlock);
4982
4983  PopDeclContext();
4984
4985  // Pop off CurBlock, handle nested blocks.
4986  CurBlock = CurBlock->PrevBlockInfo;
4987
4988  QualType RetTy = Context.VoidTy;
4989  if (BSI->ReturnType)
4990    RetTy = QualType(BSI->ReturnType, 0);
4991
4992  llvm::SmallVector<QualType, 8> ArgTypes;
4993  for (unsigned i = 0, e = BSI->Params.size(); i != e; ++i)
4994    ArgTypes.push_back(BSI->Params[i]->getType());
4995
4996  QualType BlockTy;
4997  if (!BSI->hasPrototype)
4998    BlockTy = Context.getFunctionNoProtoType(RetTy);
4999  else
5000    BlockTy = Context.getFunctionType(RetTy, &ArgTypes[0], ArgTypes.size(),
5001                                      BSI->isVariadic, 0);
5002
5003  // FIXME: Check that return/parameter types are complete/non-abstract
5004
5005  BlockTy = Context.getBlockPointerType(BlockTy);
5006
5007  // If needed, diagnose invalid gotos and switches in the block.
5008  if (CurFunctionNeedsScopeChecking)
5009    DiagnoseInvalidJumps(static_cast<CompoundStmt*>(body.get()));
5010  CurFunctionNeedsScopeChecking = BSI->SavedFunctionNeedsScopeChecking;
5011
5012  BSI->TheDecl->setBody(body.takeAs<CompoundStmt>());
5013  return Owned(new (Context) BlockExpr(BSI->TheDecl, BlockTy,
5014                                       BSI->hasBlockDeclRefExprs));
5015}
5016
5017Sema::OwningExprResult Sema::ActOnVAArg(SourceLocation BuiltinLoc,
5018                                        ExprArg expr, TypeTy *type,
5019                                        SourceLocation RPLoc) {
5020  QualType T = QualType::getFromOpaquePtr(type);
5021  Expr *E = static_cast<Expr*>(expr.get());
5022  Expr *OrigExpr = E;
5023
5024  InitBuiltinVaListType();
5025
5026  // Get the va_list type
5027  QualType VaListType = Context.getBuiltinVaListType();
5028  // Deal with implicit array decay; for example, on x86-64,
5029  // va_list is an array, but it's supposed to decay to
5030  // a pointer for va_arg.
5031  if (VaListType->isArrayType())
5032    VaListType = Context.getArrayDecayedType(VaListType);
5033  // Make sure the input expression also decays appropriately.
5034  UsualUnaryConversions(E);
5035
5036  if (CheckAssignmentConstraints(VaListType, E->getType()) != Compatible) {
5037    return ExprError(Diag(E->getLocStart(),
5038                         diag::err_first_argument_to_va_arg_not_of_type_va_list)
5039      << OrigExpr->getType() << E->getSourceRange());
5040  }
5041
5042  // FIXME: Check that type is complete/non-abstract
5043  // FIXME: Warn if a non-POD type is passed in.
5044
5045  expr.release();
5046  return Owned(new (Context) VAArgExpr(BuiltinLoc, E, T.getNonReferenceType(),
5047                                       RPLoc));
5048}
5049
5050Sema::OwningExprResult Sema::ActOnGNUNullExpr(SourceLocation TokenLoc) {
5051  // The type of __null will be int or long, depending on the size of
5052  // pointers on the target.
5053  QualType Ty;
5054  if (Context.Target.getPointerWidth(0) == Context.Target.getIntWidth())
5055    Ty = Context.IntTy;
5056  else
5057    Ty = Context.LongTy;
5058
5059  return Owned(new (Context) GNUNullExpr(Ty, TokenLoc));
5060}
5061
5062bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy,
5063                                    SourceLocation Loc,
5064                                    QualType DstType, QualType SrcType,
5065                                    Expr *SrcExpr, const char *Flavor) {
5066  // Decode the result (notice that AST's are still created for extensions).
5067  bool isInvalid = false;
5068  unsigned DiagKind;
5069  switch (ConvTy) {
5070  default: assert(0 && "Unknown conversion type");
5071  case Compatible: return false;
5072  case PointerToInt:
5073    DiagKind = diag::ext_typecheck_convert_pointer_int;
5074    break;
5075  case IntToPointer:
5076    DiagKind = diag::ext_typecheck_convert_int_pointer;
5077    break;
5078  case IncompatiblePointer:
5079    DiagKind = diag::ext_typecheck_convert_incompatible_pointer;
5080    break;
5081  case IncompatiblePointerSign:
5082    DiagKind = diag::ext_typecheck_convert_incompatible_pointer_sign;
5083    break;
5084  case FunctionVoidPointer:
5085    DiagKind = diag::ext_typecheck_convert_pointer_void_func;
5086    break;
5087  case CompatiblePointerDiscardsQualifiers:
5088    // If the qualifiers lost were because we were applying the
5089    // (deprecated) C++ conversion from a string literal to a char*
5090    // (or wchar_t*), then there was no error (C++ 4.2p2).  FIXME:
5091    // Ideally, this check would be performed in
5092    // CheckPointerTypesForAssignment. However, that would require a
5093    // bit of refactoring (so that the second argument is an
5094    // expression, rather than a type), which should be done as part
5095    // of a larger effort to fix CheckPointerTypesForAssignment for
5096    // C++ semantics.
5097    if (getLangOptions().CPlusPlus &&
5098        IsStringLiteralToNonConstPointerConversion(SrcExpr, DstType))
5099      return false;
5100    DiagKind = diag::ext_typecheck_convert_discards_qualifiers;
5101    break;
5102  case IntToBlockPointer:
5103    DiagKind = diag::err_int_to_block_pointer;
5104    break;
5105  case IncompatibleBlockPointer:
5106    DiagKind = diag::err_typecheck_convert_incompatible_block_pointer;
5107    break;
5108  case IncompatibleObjCQualifiedId:
5109    // FIXME: Diagnose the problem in ObjCQualifiedIdTypesAreCompatible, since
5110    // it can give a more specific diagnostic.
5111    DiagKind = diag::warn_incompatible_qualified_id;
5112    break;
5113  case IncompatibleVectors:
5114    DiagKind = diag::warn_incompatible_vectors;
5115    break;
5116  case Incompatible:
5117    DiagKind = diag::err_typecheck_convert_incompatible;
5118    isInvalid = true;
5119    break;
5120  }
5121
5122  Diag(Loc, DiagKind) << DstType << SrcType << Flavor
5123    << SrcExpr->getSourceRange();
5124  return isInvalid;
5125}
5126
5127bool Sema::VerifyIntegerConstantExpression(const Expr *E, llvm::APSInt *Result){
5128  llvm::APSInt ICEResult;
5129  if (E->isIntegerConstantExpr(ICEResult, Context)) {
5130    if (Result)
5131      *Result = ICEResult;
5132    return false;
5133  }
5134
5135  Expr::EvalResult EvalResult;
5136
5137  if (!E->Evaluate(EvalResult, Context) || !EvalResult.Val.isInt() ||
5138      EvalResult.HasSideEffects) {
5139    Diag(E->getExprLoc(), diag::err_expr_not_ice) << E->getSourceRange();
5140
5141    if (EvalResult.Diag) {
5142      // We only show the note if it's not the usual "invalid subexpression"
5143      // or if it's actually in a subexpression.
5144      if (EvalResult.Diag != diag::note_invalid_subexpr_in_ice ||
5145          E->IgnoreParens() != EvalResult.DiagExpr->IgnoreParens())
5146        Diag(EvalResult.DiagLoc, EvalResult.Diag);
5147    }
5148
5149    return true;
5150  }
5151
5152  Diag(E->getExprLoc(), diag::ext_expr_not_ice) <<
5153    E->getSourceRange();
5154
5155  if (EvalResult.Diag &&
5156      Diags.getDiagnosticLevel(diag::ext_expr_not_ice) != Diagnostic::Ignored)
5157    Diag(EvalResult.DiagLoc, EvalResult.Diag);
5158
5159  if (Result)
5160    *Result = EvalResult.Val.getInt();
5161  return false;
5162}
5163