blob: e27308a2b43d7cddb59ddeb23a6fa1b0e5e9f8f6 [file] [log] [blame]
Shih-wei Liaof8fd82b2010-02-10 11:10:31 -08001//===--- SemaExprCXX.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 C++ expressions.
11//
12//===----------------------------------------------------------------------===//
13
14#include "Sema.h"
15#include "SemaInit.h"
16#include "Lookup.h"
17#include "clang/AST/ASTContext.h"
18#include "clang/AST/CXXInheritance.h"
19#include "clang/AST/ExprCXX.h"
20#include "clang/Basic/PartialDiagnostic.h"
21#include "clang/Basic/TargetInfo.h"
22#include "clang/Lex/Preprocessor.h"
23#include "clang/Parse/DeclSpec.h"
24#include "llvm/ADT/STLExtras.h"
25using namespace clang;
26
27/// ActOnCXXTypeidOfType - Parse typeid( type-id ).
28Action::OwningExprResult
29Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc,
30 bool isType, void *TyOrExpr, SourceLocation RParenLoc) {
31 if (!StdNamespace)
32 return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));
33
34 if (isType) {
35 // C++ [expr.typeid]p4:
36 // The top-level cv-qualifiers of the lvalue expression or the type-id
37 // that is the operand of typeid are always ignored.
38 // FIXME: Preserve type source info.
39 // FIXME: Preserve the type before we stripped the cv-qualifiers?
40 QualType T = GetTypeFromParser(TyOrExpr);
41 if (T.isNull())
42 return ExprError();
43
44 // C++ [expr.typeid]p4:
45 // If the type of the type-id is a class type or a reference to a class
46 // type, the class shall be completely-defined.
47 QualType CheckT = T;
48 if (const ReferenceType *RefType = CheckT->getAs<ReferenceType>())
49 CheckT = RefType->getPointeeType();
50
51 if (CheckT->getAs<RecordType>() &&
52 RequireCompleteType(OpLoc, CheckT, diag::err_incomplete_typeid))
53 return ExprError();
54
55 TyOrExpr = T.getUnqualifiedType().getAsOpaquePtr();
56 }
57
58 IdentifierInfo *TypeInfoII = &PP.getIdentifierTable().get("type_info");
59 LookupResult R(*this, TypeInfoII, SourceLocation(), LookupTagName);
60 LookupQualifiedName(R, StdNamespace);
61 RecordDecl *TypeInfoRecordDecl = R.getAsSingle<RecordDecl>();
62 if (!TypeInfoRecordDecl)
63 return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));
64
65 QualType TypeInfoType = Context.getTypeDeclType(TypeInfoRecordDecl);
66
67 if (!isType) {
68 bool isUnevaluatedOperand = true;
69 Expr *E = static_cast<Expr *>(TyOrExpr);
70 if (E && !E->isTypeDependent()) {
71 QualType T = E->getType();
72 if (const RecordType *RecordT = T->getAs<RecordType>()) {
73 CXXRecordDecl *RecordD = cast<CXXRecordDecl>(RecordT->getDecl());
74 // C++ [expr.typeid]p3:
75 // [...] If the type of the expression is a class type, the class
76 // shall be completely-defined.
77 if (RequireCompleteType(OpLoc, T, diag::err_incomplete_typeid))
78 return ExprError();
79
80 // C++ [expr.typeid]p3:
81 // When typeid is applied to an expression other than an lvalue of a
82 // polymorphic class type [...] [the] expression is an unevaluated
83 // operand. [...]
84 if (RecordD->isPolymorphic() && E->isLvalue(Context) == Expr::LV_Valid)
85 isUnevaluatedOperand = false;
86 }
87
88 // C++ [expr.typeid]p4:
89 // [...] If the type of the type-id is a reference to a possibly
90 // cv-qualified type, the result of the typeid expression refers to a
91 // std::type_info object representing the cv-unqualified referenced
92 // type.
93 if (T.hasQualifiers()) {
94 ImpCastExprToType(E, T.getUnqualifiedType(), CastExpr::CK_NoOp,
95 E->isLvalue(Context));
96 TyOrExpr = E;
97 }
98 }
99
100 // If this is an unevaluated operand, clear out the set of
101 // declaration references we have been computing and eliminate any
102 // temporaries introduced in its computation.
103 if (isUnevaluatedOperand)
104 ExprEvalContexts.back().Context = Unevaluated;
105 }
106
107 return Owned(new (Context) CXXTypeidExpr(isType, TyOrExpr,
108 TypeInfoType.withConst(),
109 SourceRange(OpLoc, RParenLoc)));
110}
111
112/// ActOnCXXBoolLiteral - Parse {true,false} literals.
113Action::OwningExprResult
114Sema::ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind) {
115 assert((Kind == tok::kw_true || Kind == tok::kw_false) &&
116 "Unknown C++ Boolean value!");
117 return Owned(new (Context) CXXBoolLiteralExpr(Kind == tok::kw_true,
118 Context.BoolTy, OpLoc));
119}
120
121/// ActOnCXXNullPtrLiteral - Parse 'nullptr'.
122Action::OwningExprResult
123Sema::ActOnCXXNullPtrLiteral(SourceLocation Loc) {
124 return Owned(new (Context) CXXNullPtrLiteralExpr(Context.NullPtrTy, Loc));
125}
126
127/// ActOnCXXThrow - Parse throw expressions.
128Action::OwningExprResult
129Sema::ActOnCXXThrow(SourceLocation OpLoc, ExprArg E) {
130 Expr *Ex = E.takeAs<Expr>();
131 if (Ex && !Ex->isTypeDependent() && CheckCXXThrowOperand(OpLoc, Ex))
132 return ExprError();
133 return Owned(new (Context) CXXThrowExpr(Ex, Context.VoidTy, OpLoc));
134}
135
136/// CheckCXXThrowOperand - Validate the operand of a throw.
137bool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, Expr *&E) {
138 // C++ [except.throw]p3:
139 // A throw-expression initializes a temporary object, called the exception
140 // object, the type of which is determined by removing any top-level
141 // cv-qualifiers from the static type of the operand of throw and adjusting
142 // the type from "array of T" or "function returning T" to "pointer to T"
143 // or "pointer to function returning T", [...]
144 if (E->getType().hasQualifiers())
145 ImpCastExprToType(E, E->getType().getUnqualifiedType(), CastExpr::CK_NoOp,
146 E->isLvalue(Context) == Expr::LV_Valid);
147
148 DefaultFunctionArrayConversion(E);
149
150 // If the type of the exception would be an incomplete type or a pointer
151 // to an incomplete type other than (cv) void the program is ill-formed.
152 QualType Ty = E->getType();
153 int isPointer = 0;
154 if (const PointerType* Ptr = Ty->getAs<PointerType>()) {
155 Ty = Ptr->getPointeeType();
156 isPointer = 1;
157 }
158 if (!isPointer || !Ty->isVoidType()) {
159 if (RequireCompleteType(ThrowLoc, Ty,
160 PDiag(isPointer ? diag::err_throw_incomplete_ptr
161 : diag::err_throw_incomplete)
162 << E->getSourceRange()))
163 return true;
164 }
165
166 // FIXME: Construct a temporary here.
167 return false;
168}
169
170Action::OwningExprResult Sema::ActOnCXXThis(SourceLocation ThisLoc) {
171 /// C++ 9.3.2: In the body of a non-static member function, the keyword this
172 /// is a non-lvalue expression whose value is the address of the object for
173 /// which the function is called.
174
175 if (!isa<FunctionDecl>(CurContext))
176 return ExprError(Diag(ThisLoc, diag::err_invalid_this_use));
177
178 if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(CurContext))
179 if (MD->isInstance())
180 return Owned(new (Context) CXXThisExpr(ThisLoc,
181 MD->getThisType(Context),
182 /*isImplicit=*/false));
183
184 return ExprError(Diag(ThisLoc, diag::err_invalid_this_use));
185}
186
187/// ActOnCXXTypeConstructExpr - Parse construction of a specified type.
188/// Can be interpreted either as function-style casting ("int(x)")
189/// or class type construction ("ClassType(x,y,z)")
190/// or creation of a value-initialized type ("int()").
191Action::OwningExprResult
192Sema::ActOnCXXTypeConstructExpr(SourceRange TypeRange, TypeTy *TypeRep,
193 SourceLocation LParenLoc,
194 MultiExprArg exprs,
195 SourceLocation *CommaLocs,
196 SourceLocation RParenLoc) {
197 if (!TypeRep)
198 return ExprError();
199
200 TypeSourceInfo *TInfo;
201 QualType Ty = GetTypeFromParser(TypeRep, &TInfo);
202 if (!TInfo)
203 TInfo = Context.getTrivialTypeSourceInfo(Ty, SourceLocation());
204 unsigned NumExprs = exprs.size();
205 Expr **Exprs = (Expr**)exprs.get();
206 SourceLocation TyBeginLoc = TypeRange.getBegin();
207 SourceRange FullRange = SourceRange(TyBeginLoc, RParenLoc);
208
209 if (Ty->isDependentType() ||
210 CallExpr::hasAnyTypeDependentArguments(Exprs, NumExprs)) {
211 exprs.release();
212
213 return Owned(CXXUnresolvedConstructExpr::Create(Context,
214 TypeRange.getBegin(), Ty,
215 LParenLoc,
216 Exprs, NumExprs,
217 RParenLoc));
218 }
219
220 if (Ty->isArrayType())
221 return ExprError(Diag(TyBeginLoc,
222 diag::err_value_init_for_array_type) << FullRange);
223 if (!Ty->isVoidType() &&
224 RequireCompleteType(TyBeginLoc, Ty,
225 PDiag(diag::err_invalid_incomplete_type_use)
226 << FullRange))
227 return ExprError();
228
229 if (RequireNonAbstractType(TyBeginLoc, Ty,
230 diag::err_allocation_of_abstract_type))
231 return ExprError();
232
233
234 // C++ [expr.type.conv]p1:
235 // If the expression list is a single expression, the type conversion
236 // expression is equivalent (in definedness, and if defined in meaning) to the
237 // corresponding cast expression.
238 //
239 if (NumExprs == 1) {
240 CastExpr::CastKind Kind = CastExpr::CK_Unknown;
241 CXXMethodDecl *Method = 0;
242 if (CheckCastTypes(TypeRange, Ty, Exprs[0], Kind, Method,
243 /*FunctionalStyle=*/true))
244 return ExprError();
245
246 exprs.release();
247 if (Method) {
248 OwningExprResult CastArg
249 = BuildCXXCastArgument(TypeRange.getBegin(), Ty.getNonReferenceType(),
250 Kind, Method, Owned(Exprs[0]));
251 if (CastArg.isInvalid())
252 return ExprError();
253
254 Exprs[0] = CastArg.takeAs<Expr>();
255 }
256
257 return Owned(new (Context) CXXFunctionalCastExpr(Ty.getNonReferenceType(),
258 TInfo, TyBeginLoc, Kind,
259 Exprs[0], RParenLoc));
260 }
261
262 if (const RecordType *RT = Ty->getAs<RecordType>()) {
263 CXXRecordDecl *Record = cast<CXXRecordDecl>(RT->getDecl());
264
265 if (NumExprs > 1 || !Record->hasTrivialConstructor() ||
266 !Record->hasTrivialDestructor()) {
267 InitializedEntity Entity = InitializedEntity::InitializeTemporary(Ty);
268 InitializationKind Kind
269 = NumExprs ? InitializationKind::CreateDirect(TypeRange.getBegin(),
270 LParenLoc, RParenLoc)
271 : InitializationKind::CreateValue(TypeRange.getBegin(),
272 LParenLoc, RParenLoc);
273 InitializationSequence InitSeq(*this, Entity, Kind, Exprs, NumExprs);
274 OwningExprResult Result = InitSeq.Perform(*this, Entity, Kind,
275 move(exprs));
276
277 // FIXME: Improve AST representation?
278 return move(Result);
279 }
280
281 // Fall through to value-initialize an object of class type that
282 // doesn't have a user-declared default constructor.
283 }
284
285 // C++ [expr.type.conv]p1:
286 // If the expression list specifies more than a single value, the type shall
287 // be a class with a suitably declared constructor.
288 //
289 if (NumExprs > 1)
290 return ExprError(Diag(CommaLocs[0],
291 diag::err_builtin_func_cast_more_than_one_arg)
292 << FullRange);
293
294 assert(NumExprs == 0 && "Expected 0 expressions");
295 // C++ [expr.type.conv]p2:
296 // The expression T(), where T is a simple-type-specifier for a non-array
297 // complete object type or the (possibly cv-qualified) void type, creates an
298 // rvalue of the specified type, which is value-initialized.
299 //
300 exprs.release();
301 return Owned(new (Context) CXXZeroInitValueExpr(Ty, TyBeginLoc, RParenLoc));
302}
303
304
305/// ActOnCXXNew - Parsed a C++ 'new' expression (C++ 5.3.4), as in e.g.:
306/// @code new (memory) int[size][4] @endcode
307/// or
308/// @code ::new Foo(23, "hello") @endcode
309/// For the interpretation of this heap of arguments, consult the base version.
310Action::OwningExprResult
311Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal,
312 SourceLocation PlacementLParen, MultiExprArg PlacementArgs,
313 SourceLocation PlacementRParen, bool ParenTypeId,
314 Declarator &D, SourceLocation ConstructorLParen,
315 MultiExprArg ConstructorArgs,
316 SourceLocation ConstructorRParen) {
317 Expr *ArraySize = 0;
318 // If the specified type is an array, unwrap it and save the expression.
319 if (D.getNumTypeObjects() > 0 &&
320 D.getTypeObject(0).Kind == DeclaratorChunk::Array) {
321 DeclaratorChunk &Chunk = D.getTypeObject(0);
322 if (Chunk.Arr.hasStatic)
323 return ExprError(Diag(Chunk.Loc, diag::err_static_illegal_in_new)
324 << D.getSourceRange());
325 if (!Chunk.Arr.NumElts)
326 return ExprError(Diag(Chunk.Loc, diag::err_array_new_needs_size)
327 << D.getSourceRange());
328
329 if (ParenTypeId) {
330 // Can't have dynamic array size when the type-id is in parentheses.
331 Expr *NumElts = (Expr *)Chunk.Arr.NumElts;
332 if (!NumElts->isTypeDependent() && !NumElts->isValueDependent() &&
333 !NumElts->isIntegerConstantExpr(Context)) {
334 Diag(D.getTypeObject(0).Loc, diag::err_new_paren_array_nonconst)
335 << NumElts->getSourceRange();
336 return ExprError();
337 }
338 }
339
340 ArraySize = static_cast<Expr*>(Chunk.Arr.NumElts);
341 D.DropFirstTypeObject();
342 }
343
344 // Every dimension shall be of constant size.
345 if (ArraySize) {
346 for (unsigned I = 0, N = D.getNumTypeObjects(); I < N; ++I) {
347 if (D.getTypeObject(I).Kind != DeclaratorChunk::Array)
348 break;
349
350 DeclaratorChunk::ArrayTypeInfo &Array = D.getTypeObject(I).Arr;
351 if (Expr *NumElts = (Expr *)Array.NumElts) {
352 if (!NumElts->isTypeDependent() && !NumElts->isValueDependent() &&
353 !NumElts->isIntegerConstantExpr(Context)) {
354 Diag(D.getTypeObject(I).Loc, diag::err_new_array_nonconst)
355 << NumElts->getSourceRange();
356 return ExprError();
357 }
358 }
359 }
360 }
361
362 //FIXME: Store TypeSourceInfo in CXXNew expression.
363 TypeSourceInfo *TInfo = 0;
364 QualType AllocType = GetTypeForDeclarator(D, /*Scope=*/0, &TInfo);
365 if (D.isInvalidType())
366 return ExprError();
367
368 return BuildCXXNew(StartLoc, UseGlobal,
369 PlacementLParen,
370 move(PlacementArgs),
371 PlacementRParen,
372 ParenTypeId,
373 AllocType,
374 D.getSourceRange().getBegin(),
375 D.getSourceRange(),
376 Owned(ArraySize),
377 ConstructorLParen,
378 move(ConstructorArgs),
379 ConstructorRParen);
380}
381
382Sema::OwningExprResult
383Sema::BuildCXXNew(SourceLocation StartLoc, bool UseGlobal,
384 SourceLocation PlacementLParen,
385 MultiExprArg PlacementArgs,
386 SourceLocation PlacementRParen,
387 bool ParenTypeId,
388 QualType AllocType,
389 SourceLocation TypeLoc,
390 SourceRange TypeRange,
391 ExprArg ArraySizeE,
392 SourceLocation ConstructorLParen,
393 MultiExprArg ConstructorArgs,
394 SourceLocation ConstructorRParen) {
395 if (CheckAllocatedType(AllocType, TypeLoc, TypeRange))
396 return ExprError();
397
398 QualType ResultType = Context.getPointerType(AllocType);
399
400 // That every array dimension except the first is constant was already
401 // checked by the type check above.
402
403 // C++ 5.3.4p6: "The expression in a direct-new-declarator shall have integral
404 // or enumeration type with a non-negative value."
405 Expr *ArraySize = (Expr *)ArraySizeE.get();
406 if (ArraySize && !ArraySize->isTypeDependent()) {
407 QualType SizeType = ArraySize->getType();
408 if (!SizeType->isIntegralType() && !SizeType->isEnumeralType())
409 return ExprError(Diag(ArraySize->getSourceRange().getBegin(),
410 diag::err_array_size_not_integral)
411 << SizeType << ArraySize->getSourceRange());
412 // Let's see if this is a constant < 0. If so, we reject it out of hand.
413 // We don't care about special rules, so we tell the machinery it's not
414 // evaluated - it gives us a result in more cases.
415 if (!ArraySize->isValueDependent()) {
416 llvm::APSInt Value;
417 if (ArraySize->isIntegerConstantExpr(Value, Context, 0, false)) {
418 if (Value < llvm::APSInt(
419 llvm::APInt::getNullValue(Value.getBitWidth()),
420 Value.isUnsigned()))
421 return ExprError(Diag(ArraySize->getSourceRange().getBegin(),
422 diag::err_typecheck_negative_array_size)
423 << ArraySize->getSourceRange());
424 }
425 }
426
427 ImpCastExprToType(ArraySize, Context.getSizeType(),
428 CastExpr::CK_IntegralCast);
429 }
430
431 FunctionDecl *OperatorNew = 0;
432 FunctionDecl *OperatorDelete = 0;
433 Expr **PlaceArgs = (Expr**)PlacementArgs.get();
434 unsigned NumPlaceArgs = PlacementArgs.size();
435
436 if (!AllocType->isDependentType() &&
437 !Expr::hasAnyTypeDependentArguments(PlaceArgs, NumPlaceArgs) &&
438 FindAllocationFunctions(StartLoc,
439 SourceRange(PlacementLParen, PlacementRParen),
440 UseGlobal, AllocType, ArraySize, PlaceArgs,
441 NumPlaceArgs, OperatorNew, OperatorDelete))
442 return ExprError();
443 llvm::SmallVector<Expr *, 8> AllPlaceArgs;
444 if (OperatorNew) {
445 // Add default arguments, if any.
446 const FunctionProtoType *Proto =
447 OperatorNew->getType()->getAs<FunctionProtoType>();
448 VariadicCallType CallType =
449 Proto->isVariadic() ? VariadicFunction : VariadicDoesNotApply;
450 bool Invalid = GatherArgumentsForCall(PlacementLParen, OperatorNew,
451 Proto, 1, PlaceArgs, NumPlaceArgs,
452 AllPlaceArgs, CallType);
453 if (Invalid)
454 return ExprError();
455
456 NumPlaceArgs = AllPlaceArgs.size();
457 if (NumPlaceArgs > 0)
458 PlaceArgs = &AllPlaceArgs[0];
459 }
460
461 bool Init = ConstructorLParen.isValid();
462 // --- Choosing a constructor ---
463 CXXConstructorDecl *Constructor = 0;
464 Expr **ConsArgs = (Expr**)ConstructorArgs.get();
465 unsigned NumConsArgs = ConstructorArgs.size();
466 ASTOwningVector<&ActionBase::DeleteExpr> ConvertedConstructorArgs(*this);
467
468 if (!AllocType->isDependentType() &&
469 !Expr::hasAnyTypeDependentArguments(ConsArgs, NumConsArgs)) {
470 // C++0x [expr.new]p15:
471 // A new-expression that creates an object of type T initializes that
472 // object as follows:
473 InitializationKind Kind
474 // - If the new-initializer is omitted, the object is default-
475 // initialized (8.5); if no initialization is performed,
476 // the object has indeterminate value
477 = !Init? InitializationKind::CreateDefault(TypeLoc)
478 // - Otherwise, the new-initializer is interpreted according to the
479 // initialization rules of 8.5 for direct-initialization.
480 : InitializationKind::CreateDirect(TypeLoc,
481 ConstructorLParen,
482 ConstructorRParen);
483
484 InitializedEntity Entity
485 = InitializedEntity::InitializeNew(StartLoc, AllocType);
486 InitializationSequence InitSeq(*this, Entity, Kind, ConsArgs, NumConsArgs);
487 OwningExprResult FullInit = InitSeq.Perform(*this, Entity, Kind,
488 move(ConstructorArgs));
489 if (FullInit.isInvalid())
490 return ExprError();
491
492 // FullInit is our initializer; walk through it to determine if it's a
493 // constructor call, which CXXNewExpr handles directly.
494 if (Expr *FullInitExpr = (Expr *)FullInit.get()) {
495 if (CXXBindTemporaryExpr *Binder
496 = dyn_cast<CXXBindTemporaryExpr>(FullInitExpr))
497 FullInitExpr = Binder->getSubExpr();
498 if (CXXConstructExpr *Construct
499 = dyn_cast<CXXConstructExpr>(FullInitExpr)) {
500 Constructor = Construct->getConstructor();
501 for (CXXConstructExpr::arg_iterator A = Construct->arg_begin(),
502 AEnd = Construct->arg_end();
503 A != AEnd; ++A)
504 ConvertedConstructorArgs.push_back(A->Retain());
505 } else {
506 // Take the converted initializer.
507 ConvertedConstructorArgs.push_back(FullInit.release());
508 }
509 } else {
510 // No initialization required.
511 }
512
513 // Take the converted arguments and use them for the new expression.
514 NumConsArgs = ConvertedConstructorArgs.size();
515 ConsArgs = (Expr **)ConvertedConstructorArgs.take();
516 }
517
518 // FIXME: Also check that the destructor is accessible. (C++ 5.3.4p16)
519
520 PlacementArgs.release();
521 ConstructorArgs.release();
522 ArraySizeE.release();
523 return Owned(new (Context) CXXNewExpr(UseGlobal, OperatorNew, PlaceArgs,
524 NumPlaceArgs, ParenTypeId, ArraySize, Constructor, Init,
525 ConsArgs, NumConsArgs, OperatorDelete, ResultType,
526 StartLoc, Init ? ConstructorRParen : SourceLocation()));
527}
528
529/// CheckAllocatedType - Checks that a type is suitable as the allocated type
530/// in a new-expression.
531/// dimension off and stores the size expression in ArraySize.
532bool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc,
533 SourceRange R) {
534 // C++ 5.3.4p1: "[The] type shall be a complete object type, but not an
535 // abstract class type or array thereof.
536 if (AllocType->isFunctionType())
537 return Diag(Loc, diag::err_bad_new_type)
538 << AllocType << 0 << R;
539 else if (AllocType->isReferenceType())
540 return Diag(Loc, diag::err_bad_new_type)
541 << AllocType << 1 << R;
542 else if (!AllocType->isDependentType() &&
543 RequireCompleteType(Loc, AllocType,
544 PDiag(diag::err_new_incomplete_type)
545 << R))
546 return true;
547 else if (RequireNonAbstractType(Loc, AllocType,
548 diag::err_allocation_of_abstract_type))
549 return true;
550
551 return false;
552}
553
554/// FindAllocationFunctions - Finds the overloads of operator new and delete
555/// that are appropriate for the allocation.
556bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range,
557 bool UseGlobal, QualType AllocType,
558 bool IsArray, Expr **PlaceArgs,
559 unsigned NumPlaceArgs,
560 FunctionDecl *&OperatorNew,
561 FunctionDecl *&OperatorDelete) {
562 // --- Choosing an allocation function ---
563 // C++ 5.3.4p8 - 14 & 18
564 // 1) If UseGlobal is true, only look in the global scope. Else, also look
565 // in the scope of the allocated class.
566 // 2) If an array size is given, look for operator new[], else look for
567 // operator new.
568 // 3) The first argument is always size_t. Append the arguments from the
569 // placement form.
570 // FIXME: Also find the appropriate delete operator.
571
572 llvm::SmallVector<Expr*, 8> AllocArgs(1 + NumPlaceArgs);
573 // We don't care about the actual value of this argument.
574 // FIXME: Should the Sema create the expression and embed it in the syntax
575 // tree? Or should the consumer just recalculate the value?
576 IntegerLiteral Size(llvm::APInt::getNullValue(
577 Context.Target.getPointerWidth(0)),
578 Context.getSizeType(),
579 SourceLocation());
580 AllocArgs[0] = &Size;
581 std::copy(PlaceArgs, PlaceArgs + NumPlaceArgs, AllocArgs.begin() + 1);
582
583 DeclarationName NewName = Context.DeclarationNames.getCXXOperatorName(
584 IsArray ? OO_Array_New : OO_New);
585 if (AllocType->isRecordType() && !UseGlobal) {
586 CXXRecordDecl *Record
587 = cast<CXXRecordDecl>(AllocType->getAs<RecordType>()->getDecl());
588 // FIXME: We fail to find inherited overloads.
589 if (FindAllocationOverload(StartLoc, Range, NewName, &AllocArgs[0],
590 AllocArgs.size(), Record, /*AllowMissing=*/true,
591 OperatorNew))
592 return true;
593 }
594 if (!OperatorNew) {
595 // Didn't find a member overload. Look for a global one.
596 DeclareGlobalNewDelete();
597 DeclContext *TUDecl = Context.getTranslationUnitDecl();
598 if (FindAllocationOverload(StartLoc, Range, NewName, &AllocArgs[0],
599 AllocArgs.size(), TUDecl, /*AllowMissing=*/false,
600 OperatorNew))
601 return true;
602 }
603
604 // FindAllocationOverload can change the passed in arguments, so we need to
605 // copy them back.
606 if (NumPlaceArgs > 0)
607 std::copy(&AllocArgs[1], AllocArgs.end(), PlaceArgs);
608
609 return false;
610}
611
612/// FindAllocationOverload - Find an fitting overload for the allocation
613/// function in the specified scope.
614bool Sema::FindAllocationOverload(SourceLocation StartLoc, SourceRange Range,
615 DeclarationName Name, Expr** Args,
616 unsigned NumArgs, DeclContext *Ctx,
617 bool AllowMissing, FunctionDecl *&Operator) {
618 LookupResult R(*this, Name, StartLoc, LookupOrdinaryName);
619 LookupQualifiedName(R, Ctx);
620 if (R.empty()) {
621 if (AllowMissing)
622 return false;
623 return Diag(StartLoc, diag::err_ovl_no_viable_function_in_call)
624 << Name << Range;
625 }
626
627 // FIXME: handle ambiguity
628
629 OverloadCandidateSet Candidates(StartLoc);
630 for (LookupResult::iterator Alloc = R.begin(), AllocEnd = R.end();
631 Alloc != AllocEnd; ++Alloc) {
632 // Even member operator new/delete are implicitly treated as
633 // static, so don't use AddMemberCandidate.
634
635 if (FunctionTemplateDecl *FnTemplate =
636 dyn_cast<FunctionTemplateDecl>((*Alloc)->getUnderlyingDecl())) {
637 AddTemplateOverloadCandidate(FnTemplate, Alloc.getAccess(),
638 /*ExplicitTemplateArgs=*/0, Args, NumArgs,
639 Candidates,
640 /*SuppressUserConversions=*/false);
641 continue;
642 }
643
644 FunctionDecl *Fn = cast<FunctionDecl>((*Alloc)->getUnderlyingDecl());
645 AddOverloadCandidate(Fn, Alloc.getAccess(), Args, NumArgs, Candidates,
646 /*SuppressUserConversions=*/false);
647 }
648
649 // Do the resolution.
650 OverloadCandidateSet::iterator Best;
651 switch(BestViableFunction(Candidates, StartLoc, Best)) {
652 case OR_Success: {
653 // Got one!
654 FunctionDecl *FnDecl = Best->Function;
655 // The first argument is size_t, and the first parameter must be size_t,
656 // too. This is checked on declaration and can be assumed. (It can't be
657 // asserted on, though, since invalid decls are left in there.)
658 // Whatch out for variadic allocator function.
659 unsigned NumArgsInFnDecl = FnDecl->getNumParams();
660 for (unsigned i = 0; (i < NumArgs && i < NumArgsInFnDecl); ++i) {
661 if (PerformCopyInitialization(Args[i],
662 FnDecl->getParamDecl(i)->getType(),
663 AA_Passing))
664 return true;
665 }
666 Operator = FnDecl;
667 return false;
668 }
669
670 case OR_No_Viable_Function:
671 Diag(StartLoc, diag::err_ovl_no_viable_function_in_call)
672 << Name << Range;
673 PrintOverloadCandidates(Candidates, OCD_AllCandidates, Args, NumArgs);
674 return true;
675
676 case OR_Ambiguous:
677 Diag(StartLoc, diag::err_ovl_ambiguous_call)
678 << Name << Range;
679 PrintOverloadCandidates(Candidates, OCD_ViableCandidates, Args, NumArgs);
680 return true;
681
682 case OR_Deleted:
683 Diag(StartLoc, diag::err_ovl_deleted_call)
684 << Best->Function->isDeleted()
685 << Name << Range;
686 PrintOverloadCandidates(Candidates, OCD_AllCandidates, Args, NumArgs);
687 return true;
688 }
689 assert(false && "Unreachable, bad result from BestViableFunction");
690 return true;
691}
692
693
694/// DeclareGlobalNewDelete - Declare the global forms of operator new and
695/// delete. These are:
696/// @code
697/// void* operator new(std::size_t) throw(std::bad_alloc);
698/// void* operator new[](std::size_t) throw(std::bad_alloc);
699/// void operator delete(void *) throw();
700/// void operator delete[](void *) throw();
701/// @endcode
702/// Note that the placement and nothrow forms of new are *not* implicitly
703/// declared. Their use requires including \<new\>.
704void Sema::DeclareGlobalNewDelete() {
705 if (GlobalNewDeleteDeclared)
706 return;
707
708 // C++ [basic.std.dynamic]p2:
709 // [...] The following allocation and deallocation functions (18.4) are
710 // implicitly declared in global scope in each translation unit of a
711 // program
712 //
713 // void* operator new(std::size_t) throw(std::bad_alloc);
714 // void* operator new[](std::size_t) throw(std::bad_alloc);
715 // void operator delete(void*) throw();
716 // void operator delete[](void*) throw();
717 //
718 // These implicit declarations introduce only the function names operator
719 // new, operator new[], operator delete, operator delete[].
720 //
721 // Here, we need to refer to std::bad_alloc, so we will implicitly declare
722 // "std" or "bad_alloc" as necessary to form the exception specification.
723 // However, we do not make these implicit declarations visible to name
724 // lookup.
725 if (!StdNamespace) {
726 // The "std" namespace has not yet been defined, so build one implicitly.
727 StdNamespace = NamespaceDecl::Create(Context,
728 Context.getTranslationUnitDecl(),
729 SourceLocation(),
730 &PP.getIdentifierTable().get("std"));
731 StdNamespace->setImplicit(true);
732 }
733
734 if (!StdBadAlloc) {
735 // The "std::bad_alloc" class has not yet been declared, so build it
736 // implicitly.
737 StdBadAlloc = CXXRecordDecl::Create(Context, TagDecl::TK_class,
738 StdNamespace,
739 SourceLocation(),
740 &PP.getIdentifierTable().get("bad_alloc"),
741 SourceLocation(), 0);
742 StdBadAlloc->setImplicit(true);
743 }
744
745 GlobalNewDeleteDeclared = true;
746
747 QualType VoidPtr = Context.getPointerType(Context.VoidTy);
748 QualType SizeT = Context.getSizeType();
749 bool AssumeSaneOperatorNew = getLangOptions().AssumeSaneOperatorNew;
750
751 DeclareGlobalAllocationFunction(
752 Context.DeclarationNames.getCXXOperatorName(OO_New),
753 VoidPtr, SizeT, AssumeSaneOperatorNew);
754 DeclareGlobalAllocationFunction(
755 Context.DeclarationNames.getCXXOperatorName(OO_Array_New),
756 VoidPtr, SizeT, AssumeSaneOperatorNew);
757 DeclareGlobalAllocationFunction(
758 Context.DeclarationNames.getCXXOperatorName(OO_Delete),
759 Context.VoidTy, VoidPtr);
760 DeclareGlobalAllocationFunction(
761 Context.DeclarationNames.getCXXOperatorName(OO_Array_Delete),
762 Context.VoidTy, VoidPtr);
763}
764
765/// DeclareGlobalAllocationFunction - Declares a single implicit global
766/// allocation function if it doesn't already exist.
767void Sema::DeclareGlobalAllocationFunction(DeclarationName Name,
768 QualType Return, QualType Argument,
769 bool AddMallocAttr) {
770 DeclContext *GlobalCtx = Context.getTranslationUnitDecl();
771
772 // Check if this function is already declared.
773 {
774 DeclContext::lookup_iterator Alloc, AllocEnd;
775 for (llvm::tie(Alloc, AllocEnd) = GlobalCtx->lookup(Name);
776 Alloc != AllocEnd; ++Alloc) {
777 // Only look at non-template functions, as it is the predefined,
778 // non-templated allocation function we are trying to declare here.
779 if (FunctionDecl *Func = dyn_cast<FunctionDecl>(*Alloc)) {
780 QualType InitialParamType =
781 Context.getCanonicalType(
782 Func->getParamDecl(0)->getType().getUnqualifiedType());
783 // FIXME: Do we need to check for default arguments here?
784 if (Func->getNumParams() == 1 && InitialParamType == Argument)
785 return;
786 }
787 }
788 }
789
790 QualType BadAllocType;
791 bool HasBadAllocExceptionSpec
792 = (Name.getCXXOverloadedOperator() == OO_New ||
793 Name.getCXXOverloadedOperator() == OO_Array_New);
794 if (HasBadAllocExceptionSpec) {
795 assert(StdBadAlloc && "Must have std::bad_alloc declared");
796 BadAllocType = Context.getTypeDeclType(StdBadAlloc);
797 }
798
799 QualType FnType = Context.getFunctionType(Return, &Argument, 1, false, 0,
800 true, false,
801 HasBadAllocExceptionSpec? 1 : 0,
802 &BadAllocType);
803 FunctionDecl *Alloc =
804 FunctionDecl::Create(Context, GlobalCtx, SourceLocation(), Name,
805 FnType, /*TInfo=*/0, FunctionDecl::None, false, true);
806 Alloc->setImplicit();
807
808 if (AddMallocAttr)
809 Alloc->addAttr(::new (Context) MallocAttr());
810
811 ParmVarDecl *Param = ParmVarDecl::Create(Context, Alloc, SourceLocation(),
812 0, Argument, /*TInfo=*/0,
813 VarDecl::None, 0);
814 Alloc->setParams(Context, &Param, 1);
815
816 // FIXME: Also add this declaration to the IdentifierResolver, but
817 // make sure it is at the end of the chain to coincide with the
818 // global scope.
819 ((DeclContext *)TUScope->getEntity())->addDecl(Alloc);
820}
821
822bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD,
823 DeclarationName Name,
824 FunctionDecl* &Operator) {
825 LookupResult Found(*this, Name, StartLoc, LookupOrdinaryName);
826 // Try to find operator delete/operator delete[] in class scope.
827 LookupQualifiedName(Found, RD);
828
829 if (Found.isAmbiguous())
830 return true;
831
832 for (LookupResult::iterator F = Found.begin(), FEnd = Found.end();
833 F != FEnd; ++F) {
834 if (CXXMethodDecl *Delete = dyn_cast<CXXMethodDecl>(*F))
835 if (Delete->isUsualDeallocationFunction()) {
836 Operator = Delete;
837 return false;
838 }
839 }
840
841 // We did find operator delete/operator delete[] declarations, but
842 // none of them were suitable.
843 if (!Found.empty()) {
844 Diag(StartLoc, diag::err_no_suitable_delete_member_function_found)
845 << Name << RD;
846
847 for (LookupResult::iterator F = Found.begin(), FEnd = Found.end();
848 F != FEnd; ++F) {
849 Diag((*F)->getLocation(),
850 diag::note_delete_member_function_declared_here)
851 << Name;
852 }
853
854 return true;
855 }
856
857 // Look for a global declaration.
858 DeclareGlobalNewDelete();
859 DeclContext *TUDecl = Context.getTranslationUnitDecl();
860
861 CXXNullPtrLiteralExpr Null(Context.VoidPtrTy, SourceLocation());
862 Expr* DeallocArgs[1];
863 DeallocArgs[0] = &Null;
864 if (FindAllocationOverload(StartLoc, SourceRange(), Name,
865 DeallocArgs, 1, TUDecl, /*AllowMissing=*/false,
866 Operator))
867 return true;
868
869 assert(Operator && "Did not find a deallocation function!");
870 return false;
871}
872
873/// ActOnCXXDelete - Parsed a C++ 'delete' expression (C++ 5.3.5), as in:
874/// @code ::delete ptr; @endcode
875/// or
876/// @code delete [] ptr; @endcode
877Action::OwningExprResult
878Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal,
879 bool ArrayForm, ExprArg Operand) {
880 // C++ [expr.delete]p1:
881 // The operand shall have a pointer type, or a class type having a single
882 // conversion function to a pointer type. The result has type void.
883 //
884 // DR599 amends "pointer type" to "pointer to object type" in both cases.
885
886 FunctionDecl *OperatorDelete = 0;
887
888 Expr *Ex = (Expr *)Operand.get();
889 if (!Ex->isTypeDependent()) {
890 QualType Type = Ex->getType();
891
892 if (const RecordType *Record = Type->getAs<RecordType>()) {
893 llvm::SmallVector<CXXConversionDecl *, 4> ObjectPtrConversions;
894 CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
895 const UnresolvedSetImpl *Conversions = RD->getVisibleConversionFunctions();
896
897 for (UnresolvedSetImpl::iterator I = Conversions->begin(),
898 E = Conversions->end(); I != E; ++I) {
899 // Skip over templated conversion functions; they aren't considered.
900 if (isa<FunctionTemplateDecl>(*I))
901 continue;
902
903 CXXConversionDecl *Conv = cast<CXXConversionDecl>(*I);
904
905 QualType ConvType = Conv->getConversionType().getNonReferenceType();
906 if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
907 if (ConvPtrType->getPointeeType()->isObjectType())
908 ObjectPtrConversions.push_back(Conv);
909 }
910 if (ObjectPtrConversions.size() == 1) {
911 // We have a single conversion to a pointer-to-object type. Perform
912 // that conversion.
913 Operand.release();
914 if (!PerformImplicitConversion(Ex,
915 ObjectPtrConversions.front()->getConversionType(),
916 AA_Converting)) {
917 Operand = Owned(Ex);
918 Type = Ex->getType();
919 }
920 }
921 else if (ObjectPtrConversions.size() > 1) {
922 Diag(StartLoc, diag::err_ambiguous_delete_operand)
923 << Type << Ex->getSourceRange();
924 for (unsigned i= 0; i < ObjectPtrConversions.size(); i++) {
925 CXXConversionDecl *Conv = ObjectPtrConversions[i];
926 NoteOverloadCandidate(Conv);
927 }
928 return ExprError();
929 }
930 }
931
932 if (!Type->isPointerType())
933 return ExprError(Diag(StartLoc, diag::err_delete_operand)
934 << Type << Ex->getSourceRange());
935
936 QualType Pointee = Type->getAs<PointerType>()->getPointeeType();
937 if (Pointee->isFunctionType() || Pointee->isVoidType())
938 return ExprError(Diag(StartLoc, diag::err_delete_operand)
939 << Type << Ex->getSourceRange());
940 else if (!Pointee->isDependentType() &&
941 RequireCompleteType(StartLoc, Pointee,
942 PDiag(diag::warn_delete_incomplete)
943 << Ex->getSourceRange()))
944 return ExprError();
945
946 // C++ [expr.delete]p2:
947 // [Note: a pointer to a const type can be the operand of a
948 // delete-expression; it is not necessary to cast away the constness
949 // (5.2.11) of the pointer expression before it is used as the operand
950 // of the delete-expression. ]
951 ImpCastExprToType(Ex, Context.getPointerType(Context.VoidTy),
952 CastExpr::CK_NoOp);
953
954 // Update the operand.
955 Operand.take();
956 Operand = ExprArg(*this, Ex);
957
958 DeclarationName DeleteName = Context.DeclarationNames.getCXXOperatorName(
959 ArrayForm ? OO_Array_Delete : OO_Delete);
960
961 if (const RecordType *RT = Pointee->getAs<RecordType>()) {
962 CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
963
964 if (!UseGlobal &&
965 FindDeallocationFunction(StartLoc, RD, DeleteName, OperatorDelete))
966 return ExprError();
967
968 if (!RD->hasTrivialDestructor())
969 if (const CXXDestructorDecl *Dtor = RD->getDestructor(Context))
970 MarkDeclarationReferenced(StartLoc,
971 const_cast<CXXDestructorDecl*>(Dtor));
972 }
973
974 if (!OperatorDelete) {
975 // Look for a global declaration.
976 DeclareGlobalNewDelete();
977 DeclContext *TUDecl = Context.getTranslationUnitDecl();
978 if (FindAllocationOverload(StartLoc, SourceRange(), DeleteName,
979 &Ex, 1, TUDecl, /*AllowMissing=*/false,
980 OperatorDelete))
981 return ExprError();
982 }
983
984 // FIXME: Check access and ambiguity of operator delete and destructor.
985 }
986
987 Operand.release();
988 return Owned(new (Context) CXXDeleteExpr(Context.VoidTy, UseGlobal, ArrayForm,
989 OperatorDelete, Ex, StartLoc));
990}
991
992/// \brief Check the use of the given variable as a C++ condition in an if,
993/// while, do-while, or switch statement.
994Action::OwningExprResult Sema::CheckConditionVariable(VarDecl *ConditionVar) {
995 QualType T = ConditionVar->getType();
996
997 // C++ [stmt.select]p2:
998 // The declarator shall not specify a function or an array.
999 if (T->isFunctionType())
1000 return ExprError(Diag(ConditionVar->getLocation(),
1001 diag::err_invalid_use_of_function_type)
1002 << ConditionVar->getSourceRange());
1003 else if (T->isArrayType())
1004 return ExprError(Diag(ConditionVar->getLocation(),
1005 diag::err_invalid_use_of_array_type)
1006 << ConditionVar->getSourceRange());
1007
1008 return Owned(DeclRefExpr::Create(Context, 0, SourceRange(), ConditionVar,
1009 ConditionVar->getLocation(),
1010 ConditionVar->getType().getNonReferenceType()));
1011}
1012
1013/// CheckCXXBooleanCondition - Returns true if a conversion to bool is invalid.
1014bool Sema::CheckCXXBooleanCondition(Expr *&CondExpr) {
1015 // C++ 6.4p4:
1016 // The value of a condition that is an initialized declaration in a statement
1017 // other than a switch statement is the value of the declared variable
1018 // implicitly converted to type bool. If that conversion is ill-formed, the
1019 // program is ill-formed.
1020 // The value of a condition that is an expression is the value of the
1021 // expression, implicitly converted to bool.
1022 //
1023 return PerformContextuallyConvertToBool(CondExpr);
1024}
1025
1026/// Helper function to determine whether this is the (deprecated) C++
1027/// conversion from a string literal to a pointer to non-const char or
1028/// non-const wchar_t (for narrow and wide string literals,
1029/// respectively).
1030bool
1031Sema::IsStringLiteralToNonConstPointerConversion(Expr *From, QualType ToType) {
1032 // Look inside the implicit cast, if it exists.
1033 if (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(From))
1034 From = Cast->getSubExpr();
1035
1036 // A string literal (2.13.4) that is not a wide string literal can
1037 // be converted to an rvalue of type "pointer to char"; a wide
1038 // string literal can be converted to an rvalue of type "pointer
1039 // to wchar_t" (C++ 4.2p2).
1040 if (StringLiteral *StrLit = dyn_cast<StringLiteral>(From))
1041 if (const PointerType *ToPtrType = ToType->getAs<PointerType>())
1042 if (const BuiltinType *ToPointeeType
1043 = ToPtrType->getPointeeType()->getAs<BuiltinType>()) {
1044 // This conversion is considered only when there is an
1045 // explicit appropriate pointer target type (C++ 4.2p2).
1046 if (!ToPtrType->getPointeeType().hasQualifiers() &&
1047 ((StrLit->isWide() && ToPointeeType->isWideCharType()) ||
1048 (!StrLit->isWide() &&
1049 (ToPointeeType->getKind() == BuiltinType::Char_U ||
1050 ToPointeeType->getKind() == BuiltinType::Char_S))))
1051 return true;
1052 }
1053
1054 return false;
1055}
1056
1057/// PerformImplicitConversion - Perform an implicit conversion of the
1058/// expression From to the type ToType. Returns true if there was an
1059/// error, false otherwise. The expression From is replaced with the
1060/// converted expression. Flavor is the kind of conversion we're
1061/// performing, used in the error message. If @p AllowExplicit,
1062/// explicit user-defined conversions are permitted. @p Elidable should be true
1063/// when called for copies which may be elided (C++ 12.8p15). C++0x overload
1064/// resolution works differently in that case.
1065bool
1066Sema::PerformImplicitConversion(Expr *&From, QualType ToType,
1067 AssignmentAction Action, bool AllowExplicit,
1068 bool Elidable) {
1069 ImplicitConversionSequence ICS;
1070 return PerformImplicitConversion(From, ToType, Action, AllowExplicit,
1071 Elidable, ICS);
1072}
1073
1074bool
1075Sema::PerformImplicitConversion(Expr *&From, QualType ToType,
1076 AssignmentAction Action, bool AllowExplicit,
1077 bool Elidable,
1078 ImplicitConversionSequence& ICS) {
1079 ICS.setBad();
1080 ICS.Bad.init(BadConversionSequence::no_conversion, From, ToType);
1081 if (Elidable && getLangOptions().CPlusPlus0x) {
1082 ICS = TryImplicitConversion(From, ToType,
1083 /*SuppressUserConversions=*/false,
1084 AllowExplicit,
1085 /*ForceRValue=*/true,
1086 /*InOverloadResolution=*/false);
1087 }
1088 if (ICS.isBad()) {
1089 ICS = TryImplicitConversion(From, ToType,
1090 /*SuppressUserConversions=*/false,
1091 AllowExplicit,
1092 /*ForceRValue=*/false,
1093 /*InOverloadResolution=*/false);
1094 }
1095 return PerformImplicitConversion(From, ToType, ICS, Action);
1096}
1097
1098/// PerformImplicitConversion - Perform an implicit conversion of the
1099/// expression From to the type ToType using the pre-computed implicit
1100/// conversion sequence ICS. Returns true if there was an error, false
1101/// otherwise. The expression From is replaced with the converted
1102/// expression. Action is the kind of conversion we're performing,
1103/// used in the error message.
1104bool
1105Sema::PerformImplicitConversion(Expr *&From, QualType ToType,
1106 const ImplicitConversionSequence &ICS,
1107 AssignmentAction Action, bool IgnoreBaseAccess) {
1108 switch (ICS.getKind()) {
1109 case ImplicitConversionSequence::StandardConversion:
1110 if (PerformImplicitConversion(From, ToType, ICS.Standard, Action,
1111 IgnoreBaseAccess))
1112 return true;
1113 break;
1114
1115 case ImplicitConversionSequence::UserDefinedConversion: {
1116
1117 FunctionDecl *FD = ICS.UserDefined.ConversionFunction;
1118 CastExpr::CastKind CastKind = CastExpr::CK_Unknown;
1119 QualType BeforeToType;
1120 if (const CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(FD)) {
1121 CastKind = CastExpr::CK_UserDefinedConversion;
1122
1123 // If the user-defined conversion is specified by a conversion function,
1124 // the initial standard conversion sequence converts the source type to
1125 // the implicit object parameter of the conversion function.
1126 BeforeToType = Context.getTagDeclType(Conv->getParent());
1127 } else if (const CXXConstructorDecl *Ctor =
1128 dyn_cast<CXXConstructorDecl>(FD)) {
1129 CastKind = CastExpr::CK_ConstructorConversion;
1130 // Do no conversion if dealing with ... for the first conversion.
1131 if (!ICS.UserDefined.EllipsisConversion) {
1132 // If the user-defined conversion is specified by a constructor, the
1133 // initial standard conversion sequence converts the source type to the
1134 // type required by the argument of the constructor
1135 BeforeToType = Ctor->getParamDecl(0)->getType().getNonReferenceType();
1136 }
1137 }
1138 else
1139 assert(0 && "Unknown conversion function kind!");
1140 // Whatch out for elipsis conversion.
1141 if (!ICS.UserDefined.EllipsisConversion) {
1142 if (PerformImplicitConversion(From, BeforeToType,
1143 ICS.UserDefined.Before, AA_Converting,
1144 IgnoreBaseAccess))
1145 return true;
1146 }
1147
1148 OwningExprResult CastArg
1149 = BuildCXXCastArgument(From->getLocStart(),
1150 ToType.getNonReferenceType(),
1151 CastKind, cast<CXXMethodDecl>(FD),
1152 Owned(From));
1153
1154 if (CastArg.isInvalid())
1155 return true;
1156
1157 From = CastArg.takeAs<Expr>();
1158
1159 return PerformImplicitConversion(From, ToType, ICS.UserDefined.After,
1160 AA_Converting, IgnoreBaseAccess);
1161 }
1162
1163 case ImplicitConversionSequence::AmbiguousConversion:
1164 DiagnoseAmbiguousConversion(ICS, From->getExprLoc(),
1165 PDiag(diag::err_typecheck_ambiguous_condition)
1166 << From->getSourceRange());
1167 return true;
1168
1169 case ImplicitConversionSequence::EllipsisConversion:
1170 assert(false && "Cannot perform an ellipsis conversion");
1171 return false;
1172
1173 case ImplicitConversionSequence::BadConversion:
1174 return true;
1175 }
1176
1177 // Everything went well.
1178 return false;
1179}
1180
1181/// PerformImplicitConversion - Perform an implicit conversion of the
1182/// expression From to the type ToType by following the standard
1183/// conversion sequence SCS. Returns true if there was an error, false
1184/// otherwise. The expression From is replaced with the converted
1185/// expression. Flavor is the context in which we're performing this
1186/// conversion, for use in error messages.
1187bool
1188Sema::PerformImplicitConversion(Expr *&From, QualType ToType,
1189 const StandardConversionSequence& SCS,
1190 AssignmentAction Action, bool IgnoreBaseAccess) {
1191 // Overall FIXME: we are recomputing too many types here and doing far too
1192 // much extra work. What this means is that we need to keep track of more
1193 // information that is computed when we try the implicit conversion initially,
1194 // so that we don't need to recompute anything here.
1195 QualType FromType = From->getType();
1196
1197 if (SCS.CopyConstructor) {
1198 // FIXME: When can ToType be a reference type?
1199 assert(!ToType->isReferenceType());
1200 if (SCS.Second == ICK_Derived_To_Base) {
1201 ASTOwningVector<&ActionBase::DeleteExpr> ConstructorArgs(*this);
1202 if (CompleteConstructorCall(cast<CXXConstructorDecl>(SCS.CopyConstructor),
1203 MultiExprArg(*this, (void **)&From, 1),
1204 /*FIXME:ConstructLoc*/SourceLocation(),
1205 ConstructorArgs))
1206 return true;
1207 OwningExprResult FromResult =
1208 BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(),
1209 ToType, SCS.CopyConstructor,
1210 move_arg(ConstructorArgs));
1211 if (FromResult.isInvalid())
1212 return true;
1213 From = FromResult.takeAs<Expr>();
1214 return false;
1215 }
1216 OwningExprResult FromResult =
1217 BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(),
1218 ToType, SCS.CopyConstructor,
1219 MultiExprArg(*this, (void**)&From, 1));
1220
1221 if (FromResult.isInvalid())
1222 return true;
1223
1224 From = FromResult.takeAs<Expr>();
1225 return false;
1226 }
1227
1228 // Perform the first implicit conversion.
1229 switch (SCS.First) {
1230 case ICK_Identity:
1231 case ICK_Lvalue_To_Rvalue:
1232 // Nothing to do.
1233 break;
1234
1235 case ICK_Array_To_Pointer:
1236 FromType = Context.getArrayDecayedType(FromType);
1237 ImpCastExprToType(From, FromType, CastExpr::CK_ArrayToPointerDecay);
1238 break;
1239
1240 case ICK_Function_To_Pointer:
1241 if (Context.getCanonicalType(FromType) == Context.OverloadTy) {
1242 FunctionDecl *Fn = ResolveAddressOfOverloadedFunction(From, ToType, true);
1243 if (!Fn)
1244 return true;
1245
1246 if (DiagnoseUseOfDecl(Fn, From->getSourceRange().getBegin()))
1247 return true;
1248
1249 From = FixOverloadedFunctionReference(From, Fn);
1250 FromType = From->getType();
1251
1252 // If there's already an address-of operator in the expression, we have
1253 // the right type already, and the code below would just introduce an
1254 // invalid additional pointer level.
1255 if (FromType->isPointerType() || FromType->isMemberFunctionPointerType())
1256 break;
1257 }
1258 FromType = Context.getPointerType(FromType);
1259 ImpCastExprToType(From, FromType, CastExpr::CK_FunctionToPointerDecay);
1260 break;
1261
1262 default:
1263 assert(false && "Improper first standard conversion");
1264 break;
1265 }
1266
1267 // Perform the second implicit conversion
1268 switch (SCS.Second) {
1269 case ICK_Identity:
1270 // If both sides are functions (or pointers/references to them), there could
1271 // be incompatible exception declarations.
1272 if (CheckExceptionSpecCompatibility(From, ToType))
1273 return true;
1274 // Nothing else to do.
1275 break;
1276
1277 case ICK_NoReturn_Adjustment:
1278 // If both sides are functions (or pointers/references to them), there could
1279 // be incompatible exception declarations.
1280 if (CheckExceptionSpecCompatibility(From, ToType))
1281 return true;
1282
1283 ImpCastExprToType(From, Context.getNoReturnType(From->getType(), false),
1284 CastExpr::CK_NoOp);
1285 break;
1286
1287 case ICK_Integral_Promotion:
1288 case ICK_Integral_Conversion:
1289 ImpCastExprToType(From, ToType, CastExpr::CK_IntegralCast);
1290 break;
1291
1292 case ICK_Floating_Promotion:
1293 case ICK_Floating_Conversion:
1294 ImpCastExprToType(From, ToType, CastExpr::CK_FloatingCast);
1295 break;
1296
1297 case ICK_Complex_Promotion:
1298 case ICK_Complex_Conversion:
1299 ImpCastExprToType(From, ToType, CastExpr::CK_Unknown);
1300 break;
1301
1302 case ICK_Floating_Integral:
1303 if (ToType->isFloatingType())
1304 ImpCastExprToType(From, ToType, CastExpr::CK_IntegralToFloating);
1305 else
1306 ImpCastExprToType(From, ToType, CastExpr::CK_FloatingToIntegral);
1307 break;
1308
1309 case ICK_Complex_Real:
1310 ImpCastExprToType(From, ToType, CastExpr::CK_Unknown);
1311 break;
1312
1313 case ICK_Compatible_Conversion:
1314 ImpCastExprToType(From, ToType, CastExpr::CK_NoOp);
1315 break;
1316
1317 case ICK_Pointer_Conversion: {
1318 if (SCS.IncompatibleObjC) {
1319 // Diagnose incompatible Objective-C conversions
1320 Diag(From->getSourceRange().getBegin(),
1321 diag::ext_typecheck_convert_incompatible_pointer)
1322 << From->getType() << ToType << Action
1323 << From->getSourceRange();
1324 }
1325
1326
1327 CastExpr::CastKind Kind = CastExpr::CK_Unknown;
1328 if (CheckPointerConversion(From, ToType, Kind, IgnoreBaseAccess))
1329 return true;
1330 ImpCastExprToType(From, ToType, Kind);
1331 break;
1332 }
1333
1334 case ICK_Pointer_Member: {
1335 CastExpr::CastKind Kind = CastExpr::CK_Unknown;
1336 if (CheckMemberPointerConversion(From, ToType, Kind, IgnoreBaseAccess))
1337 return true;
1338 if (CheckExceptionSpecCompatibility(From, ToType))
1339 return true;
1340 ImpCastExprToType(From, ToType, Kind);
1341 break;
1342 }
1343 case ICK_Boolean_Conversion: {
1344 CastExpr::CastKind Kind = CastExpr::CK_Unknown;
1345 if (FromType->isMemberPointerType())
1346 Kind = CastExpr::CK_MemberPointerToBoolean;
1347
1348 ImpCastExprToType(From, Context.BoolTy, Kind);
1349 break;
1350 }
1351
1352 case ICK_Derived_To_Base:
1353 if (CheckDerivedToBaseConversion(From->getType(),
1354 ToType.getNonReferenceType(),
1355 From->getLocStart(),
1356 From->getSourceRange(),
1357 IgnoreBaseAccess))
1358 return true;
1359 ImpCastExprToType(From, ToType.getNonReferenceType(),
1360 CastExpr::CK_DerivedToBase);
1361 break;
1362
1363 default:
1364 assert(false && "Improper second standard conversion");
1365 break;
1366 }
1367
1368 switch (SCS.Third) {
1369 case ICK_Identity:
1370 // Nothing to do.
1371 break;
1372
1373 case ICK_Qualification:
1374 // FIXME: Not sure about lvalue vs rvalue here in the presence of rvalue
1375 // references.
1376 ImpCastExprToType(From, ToType.getNonReferenceType(),
1377 CastExpr::CK_NoOp,
1378 ToType->isLValueReferenceType());
1379 break;
1380
1381 default:
1382 assert(false && "Improper second standard conversion");
1383 break;
1384 }
1385
1386 return false;
1387}
1388
1389Sema::OwningExprResult Sema::ActOnUnaryTypeTrait(UnaryTypeTrait OTT,
1390 SourceLocation KWLoc,
1391 SourceLocation LParen,
1392 TypeTy *Ty,
1393 SourceLocation RParen) {
1394 QualType T = GetTypeFromParser(Ty);
1395
1396 // According to http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html
1397 // all traits except __is_class, __is_enum and __is_union require a the type
1398 // to be complete.
1399 if (OTT != UTT_IsClass && OTT != UTT_IsEnum && OTT != UTT_IsUnion) {
1400 if (RequireCompleteType(KWLoc, T,
1401 diag::err_incomplete_type_used_in_type_trait_expr))
1402 return ExprError();
1403 }
1404
1405 // There is no point in eagerly computing the value. The traits are designed
1406 // to be used from type trait templates, so Ty will be a template parameter
1407 // 99% of the time.
1408 return Owned(new (Context) UnaryTypeTraitExpr(KWLoc, OTT, T,
1409 RParen, Context.BoolTy));
1410}
1411
1412QualType Sema::CheckPointerToMemberOperands(
1413 Expr *&lex, Expr *&rex, SourceLocation Loc, bool isIndirect) {
1414 const char *OpSpelling = isIndirect ? "->*" : ".*";
1415 // C++ 5.5p2
1416 // The binary operator .* [p3: ->*] binds its second operand, which shall
1417 // be of type "pointer to member of T" (where T is a completely-defined
1418 // class type) [...]
1419 QualType RType = rex->getType();
1420 const MemberPointerType *MemPtr = RType->getAs<MemberPointerType>();
1421 if (!MemPtr) {
1422 Diag(Loc, diag::err_bad_memptr_rhs)
1423 << OpSpelling << RType << rex->getSourceRange();
1424 return QualType();
1425 }
1426
1427 QualType Class(MemPtr->getClass(), 0);
1428
1429 // C++ 5.5p2
1430 // [...] to its first operand, which shall be of class T or of a class of
1431 // which T is an unambiguous and accessible base class. [p3: a pointer to
1432 // such a class]
1433 QualType LType = lex->getType();
1434 if (isIndirect) {
1435 if (const PointerType *Ptr = LType->getAs<PointerType>())
1436 LType = Ptr->getPointeeType().getNonReferenceType();
1437 else {
1438 Diag(Loc, diag::err_bad_memptr_lhs)
1439 << OpSpelling << 1 << LType
1440 << CodeModificationHint::CreateReplacement(SourceRange(Loc), ".*");
1441 return QualType();
1442 }
1443 }
1444
1445 if (!Context.hasSameUnqualifiedType(Class, LType)) {
1446 CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/false,
1447 /*DetectVirtual=*/false);
1448 // FIXME: Would it be useful to print full ambiguity paths, or is that
1449 // overkill?
1450 if (!IsDerivedFrom(LType, Class, Paths) ||
1451 Paths.isAmbiguous(Context.getCanonicalType(Class))) {
1452 Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling
1453 << (int)isIndirect << lex->getType();
1454 return QualType();
1455 }
1456 // Cast LHS to type of use.
1457 QualType UseType = isIndirect ? Context.getPointerType(Class) : Class;
1458 bool isLValue = !isIndirect && lex->isLvalue(Context) == Expr::LV_Valid;
1459 ImpCastExprToType(lex, UseType, CastExpr::CK_DerivedToBase, isLValue);
1460 }
1461
1462 if (isa<CXXZeroInitValueExpr>(rex->IgnoreParens())) {
1463 // Diagnose use of pointer-to-member type which when used as
1464 // the functional cast in a pointer-to-member expression.
1465 Diag(Loc, diag::err_pointer_to_member_type) << isIndirect;
1466 return QualType();
1467 }
1468 // C++ 5.5p2
1469 // The result is an object or a function of the type specified by the
1470 // second operand.
1471 // The cv qualifiers are the union of those in the pointer and the left side,
1472 // in accordance with 5.5p5 and 5.2.5.
1473 // FIXME: This returns a dereferenced member function pointer as a normal
1474 // function type. However, the only operation valid on such functions is
1475 // calling them. There's also a GCC extension to get a function pointer to the
1476 // thing, which is another complication, because this type - unlike the type
1477 // that is the result of this expression - takes the class as the first
1478 // argument.
1479 // We probably need a "MemberFunctionClosureType" or something like that.
1480 QualType Result = MemPtr->getPointeeType();
1481 Result = Context.getCVRQualifiedType(Result, LType.getCVRQualifiers());
1482 return Result;
1483}
1484
1485/// \brief Get the target type of a standard or user-defined conversion.
1486static QualType TargetType(const ImplicitConversionSequence &ICS) {
1487 switch (ICS.getKind()) {
1488 case ImplicitConversionSequence::StandardConversion:
1489 return ICS.Standard.getToType(2);
1490 case ImplicitConversionSequence::UserDefinedConversion:
1491 return ICS.UserDefined.After.getToType(2);
1492 case ImplicitConversionSequence::AmbiguousConversion:
1493 return ICS.Ambiguous.getToType();
1494 case ImplicitConversionSequence::EllipsisConversion:
1495 case ImplicitConversionSequence::BadConversion:
1496 llvm_unreachable("function not valid for ellipsis or bad conversions");
1497 }
1498 return QualType(); // silence warnings
1499}
1500
1501/// \brief Try to convert a type to another according to C++0x 5.16p3.
1502///
1503/// This is part of the parameter validation for the ? operator. If either
1504/// value operand is a class type, the two operands are attempted to be
1505/// converted to each other. This function does the conversion in one direction.
1506/// It emits a diagnostic and returns true only if it finds an ambiguous
1507/// conversion.
1508static bool TryClassUnification(Sema &Self, Expr *From, Expr *To,
1509 SourceLocation QuestionLoc,
1510 ImplicitConversionSequence &ICS) {
1511 // C++0x 5.16p3
1512 // The process for determining whether an operand expression E1 of type T1
1513 // can be converted to match an operand expression E2 of type T2 is defined
1514 // as follows:
1515 // -- If E2 is an lvalue:
1516 if (To->isLvalue(Self.Context) == Expr::LV_Valid) {
1517 // E1 can be converted to match E2 if E1 can be implicitly converted to
1518 // type "lvalue reference to T2", subject to the constraint that in the
1519 // conversion the reference must bind directly to E1.
1520 if (!Self.CheckReferenceInit(From,
1521 Self.Context.getLValueReferenceType(To->getType()),
1522 To->getLocStart(),
1523 /*SuppressUserConversions=*/false,
1524 /*AllowExplicit=*/false,
1525 /*ForceRValue=*/false,
1526 &ICS))
1527 {
1528 assert((ICS.isStandard() || ICS.isUserDefined()) &&
1529 "expected a definite conversion");
1530 bool DirectBinding =
1531 ICS.isStandard() ? ICS.Standard.DirectBinding
1532 : ICS.UserDefined.After.DirectBinding;
1533 if (DirectBinding)
1534 return false;
1535 }
1536 }
1537 ICS.setBad();
1538 // -- If E2 is an rvalue, or if the conversion above cannot be done:
1539 // -- if E1 and E2 have class type, and the underlying class types are
1540 // the same or one is a base class of the other:
1541 QualType FTy = From->getType();
1542 QualType TTy = To->getType();
1543 const RecordType *FRec = FTy->getAs<RecordType>();
1544 const RecordType *TRec = TTy->getAs<RecordType>();
1545 bool FDerivedFromT = FRec && TRec && Self.IsDerivedFrom(FTy, TTy);
1546 if (FRec && TRec && (FRec == TRec ||
1547 FDerivedFromT || Self.IsDerivedFrom(TTy, FTy))) {
1548 // E1 can be converted to match E2 if the class of T2 is the
1549 // same type as, or a base class of, the class of T1, and
1550 // [cv2 > cv1].
1551 if ((FRec == TRec || FDerivedFromT) && TTy.isAtLeastAsQualifiedAs(FTy)) {
1552 // Could still fail if there's no copy constructor.
1553 // FIXME: Is this a hard error then, or just a conversion failure? The
1554 // standard doesn't say.
1555 ICS = Self.TryCopyInitialization(From, TTy,
1556 /*SuppressUserConversions=*/false,
1557 /*ForceRValue=*/false,
1558 /*InOverloadResolution=*/false);
1559 }
1560 } else {
1561 // -- Otherwise: E1 can be converted to match E2 if E1 can be
1562 // implicitly converted to the type that expression E2 would have
1563 // if E2 were converted to an rvalue.
1564 // First find the decayed type.
1565 if (TTy->isFunctionType())
1566 TTy = Self.Context.getPointerType(TTy);
1567 else if (TTy->isArrayType())
1568 TTy = Self.Context.getArrayDecayedType(TTy);
1569
1570 // Now try the implicit conversion.
1571 // FIXME: This doesn't detect ambiguities.
1572 ICS = Self.TryImplicitConversion(From, TTy,
1573 /*SuppressUserConversions=*/false,
1574 /*AllowExplicit=*/false,
1575 /*ForceRValue=*/false,
1576 /*InOverloadResolution=*/false);
1577 }
1578 return false;
1579}
1580
1581/// \brief Try to find a common type for two according to C++0x 5.16p5.
1582///
1583/// This is part of the parameter validation for the ? operator. If either
1584/// value operand is a class type, overload resolution is used to find a
1585/// conversion to a common type.
1586static bool FindConditionalOverload(Sema &Self, Expr *&LHS, Expr *&RHS,
1587 SourceLocation Loc) {
1588 Expr *Args[2] = { LHS, RHS };
1589 OverloadCandidateSet CandidateSet(Loc);
1590 Self.AddBuiltinOperatorCandidates(OO_Conditional, Loc, Args, 2, CandidateSet);
1591
1592 OverloadCandidateSet::iterator Best;
1593 switch (Self.BestViableFunction(CandidateSet, Loc, Best)) {
1594 case OR_Success:
1595 // We found a match. Perform the conversions on the arguments and move on.
1596 if (Self.PerformImplicitConversion(LHS, Best->BuiltinTypes.ParamTypes[0],
1597 Best->Conversions[0], Sema::AA_Converting) ||
1598 Self.PerformImplicitConversion(RHS, Best->BuiltinTypes.ParamTypes[1],
1599 Best->Conversions[1], Sema::AA_Converting))
1600 break;
1601 return false;
1602
1603 case OR_No_Viable_Function:
1604 Self.Diag(Loc, diag::err_typecheck_cond_incompatible_operands)
1605 << LHS->getType() << RHS->getType()
1606 << LHS->getSourceRange() << RHS->getSourceRange();
1607 return true;
1608
1609 case OR_Ambiguous:
1610 Self.Diag(Loc, diag::err_conditional_ambiguous_ovl)
1611 << LHS->getType() << RHS->getType()
1612 << LHS->getSourceRange() << RHS->getSourceRange();
1613 // FIXME: Print the possible common types by printing the return types of
1614 // the viable candidates.
1615 break;
1616
1617 case OR_Deleted:
1618 assert(false && "Conditional operator has only built-in overloads");
1619 break;
1620 }
1621 return true;
1622}
1623
1624/// \brief Perform an "extended" implicit conversion as returned by
1625/// TryClassUnification.
1626///
1627/// TryClassUnification generates ICSs that include reference bindings.
1628/// PerformImplicitConversion is not suitable for this; it chokes if the
1629/// second part of a standard conversion is ICK_DerivedToBase. This function
1630/// handles the reference binding specially.
1631static bool ConvertForConditional(Sema &Self, Expr *&E,
1632 const ImplicitConversionSequence &ICS) {
1633 if (ICS.isStandard() && ICS.Standard.ReferenceBinding) {
1634 assert(ICS.Standard.DirectBinding &&
1635 "TryClassUnification should never generate indirect ref bindings");
1636 // FIXME: CheckReferenceInit should be able to reuse the ICS instead of
1637 // redoing all the work.
1638 return Self.CheckReferenceInit(E, Self.Context.getLValueReferenceType(
1639 TargetType(ICS)),
1640 /*FIXME:*/E->getLocStart(),
1641 /*SuppressUserConversions=*/false,
1642 /*AllowExplicit=*/false,
1643 /*ForceRValue=*/false);
1644 }
1645 if (ICS.isUserDefined() && ICS.UserDefined.After.ReferenceBinding) {
1646 assert(ICS.UserDefined.After.DirectBinding &&
1647 "TryClassUnification should never generate indirect ref bindings");
1648 return Self.CheckReferenceInit(E, Self.Context.getLValueReferenceType(
1649 TargetType(ICS)),
1650 /*FIXME:*/E->getLocStart(),
1651 /*SuppressUserConversions=*/false,
1652 /*AllowExplicit=*/false,
1653 /*ForceRValue=*/false);
1654 }
1655 if (Self.PerformImplicitConversion(E, TargetType(ICS), ICS, Sema::AA_Converting))
1656 return true;
1657 return false;
1658}
1659
1660/// \brief Check the operands of ?: under C++ semantics.
1661///
1662/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y
1663/// extension. In this case, LHS == Cond. (But they're not aliases.)
1664QualType Sema::CXXCheckConditionalOperands(Expr *&Cond, Expr *&LHS, Expr *&RHS,
1665 SourceLocation QuestionLoc) {
1666 // FIXME: Handle C99's complex types, vector types, block pointers and Obj-C++
1667 // interface pointers.
1668
1669 // C++0x 5.16p1
1670 // The first expression is contextually converted to bool.
1671 if (!Cond->isTypeDependent()) {
1672 if (CheckCXXBooleanCondition(Cond))
1673 return QualType();
1674 }
1675
1676 // Either of the arguments dependent?
1677 if (LHS->isTypeDependent() || RHS->isTypeDependent())
1678 return Context.DependentTy;
1679
1680 CheckSignCompare(LHS, RHS, QuestionLoc, diag::warn_mixed_sign_conditional);
1681
1682 // C++0x 5.16p2
1683 // If either the second or the third operand has type (cv) void, ...
1684 QualType LTy = LHS->getType();
1685 QualType RTy = RHS->getType();
1686 bool LVoid = LTy->isVoidType();
1687 bool RVoid = RTy->isVoidType();
1688 if (LVoid || RVoid) {
1689 // ... then the [l2r] conversions are performed on the second and third
1690 // operands ...
1691 DefaultFunctionArrayLvalueConversion(LHS);
1692 DefaultFunctionArrayLvalueConversion(RHS);
1693 LTy = LHS->getType();
1694 RTy = RHS->getType();
1695
1696 // ... and one of the following shall hold:
1697 // -- The second or the third operand (but not both) is a throw-
1698 // expression; the result is of the type of the other and is an rvalue.
1699 bool LThrow = isa<CXXThrowExpr>(LHS);
1700 bool RThrow = isa<CXXThrowExpr>(RHS);
1701 if (LThrow && !RThrow)
1702 return RTy;
1703 if (RThrow && !LThrow)
1704 return LTy;
1705
1706 // -- Both the second and third operands have type void; the result is of
1707 // type void and is an rvalue.
1708 if (LVoid && RVoid)
1709 return Context.VoidTy;
1710
1711 // Neither holds, error.
1712 Diag(QuestionLoc, diag::err_conditional_void_nonvoid)
1713 << (LVoid ? RTy : LTy) << (LVoid ? 0 : 1)
1714 << LHS->getSourceRange() << RHS->getSourceRange();
1715 return QualType();
1716 }
1717
1718 // Neither is void.
1719
1720 // C++0x 5.16p3
1721 // Otherwise, if the second and third operand have different types, and
1722 // either has (cv) class type, and attempt is made to convert each of those
1723 // operands to the other.
1724 if (Context.getCanonicalType(LTy) != Context.getCanonicalType(RTy) &&
1725 (LTy->isRecordType() || RTy->isRecordType())) {
1726 ImplicitConversionSequence ICSLeftToRight, ICSRightToLeft;
1727 // These return true if a single direction is already ambiguous.
1728 if (TryClassUnification(*this, LHS, RHS, QuestionLoc, ICSLeftToRight))
1729 return QualType();
1730 if (TryClassUnification(*this, RHS, LHS, QuestionLoc, ICSRightToLeft))
1731 return QualType();
1732
1733 bool HaveL2R = !ICSLeftToRight.isBad();
1734 bool HaveR2L = !ICSRightToLeft.isBad();
1735 // If both can be converted, [...] the program is ill-formed.
1736 if (HaveL2R && HaveR2L) {
1737 Diag(QuestionLoc, diag::err_conditional_ambiguous)
1738 << LTy << RTy << LHS->getSourceRange() << RHS->getSourceRange();
1739 return QualType();
1740 }
1741
1742 // If exactly one conversion is possible, that conversion is applied to
1743 // the chosen operand and the converted operands are used in place of the
1744 // original operands for the remainder of this section.
1745 if (HaveL2R) {
1746 if (ConvertForConditional(*this, LHS, ICSLeftToRight))
1747 return QualType();
1748 LTy = LHS->getType();
1749 } else if (HaveR2L) {
1750 if (ConvertForConditional(*this, RHS, ICSRightToLeft))
1751 return QualType();
1752 RTy = RHS->getType();
1753 }
1754 }
1755
1756 // C++0x 5.16p4
1757 // If the second and third operands are lvalues and have the same type,
1758 // the result is of that type [...]
1759 bool Same = Context.getCanonicalType(LTy) == Context.getCanonicalType(RTy);
1760 if (Same && LHS->isLvalue(Context) == Expr::LV_Valid &&
1761 RHS->isLvalue(Context) == Expr::LV_Valid)
1762 return LTy;
1763
1764 // C++0x 5.16p5
1765 // Otherwise, the result is an rvalue. If the second and third operands
1766 // do not have the same type, and either has (cv) class type, ...
1767 if (!Same && (LTy->isRecordType() || RTy->isRecordType())) {
1768 // ... overload resolution is used to determine the conversions (if any)
1769 // to be applied to the operands. If the overload resolution fails, the
1770 // program is ill-formed.
1771 if (FindConditionalOverload(*this, LHS, RHS, QuestionLoc))
1772 return QualType();
1773 }
1774
1775 // C++0x 5.16p6
1776 // LValue-to-rvalue, array-to-pointer, and function-to-pointer standard
1777 // conversions are performed on the second and third operands.
1778 DefaultFunctionArrayLvalueConversion(LHS);
1779 DefaultFunctionArrayLvalueConversion(RHS);
1780 LTy = LHS->getType();
1781 RTy = RHS->getType();
1782
1783 // After those conversions, one of the following shall hold:
1784 // -- The second and third operands have the same type; the result
1785 // is of that type.
1786 if (Context.getCanonicalType(LTy) == Context.getCanonicalType(RTy))
1787 return LTy;
1788
1789 // -- The second and third operands have arithmetic or enumeration type;
1790 // the usual arithmetic conversions are performed to bring them to a
1791 // common type, and the result is of that type.
1792 if (LTy->isArithmeticType() && RTy->isArithmeticType()) {
1793 UsualArithmeticConversions(LHS, RHS);
1794 return LHS->getType();
1795 }
1796
1797 // -- The second and third operands have pointer type, or one has pointer
1798 // type and the other is a null pointer constant; pointer conversions
1799 // and qualification conversions are performed to bring them to their
1800 // composite pointer type. The result is of the composite pointer type.
1801 // -- The second and third operands have pointer to member type, or one has
1802 // pointer to member type and the other is a null pointer constant;
1803 // pointer to member conversions and qualification conversions are
1804 // performed to bring them to a common type, whose cv-qualification
1805 // shall match the cv-qualification of either the second or the third
1806 // operand. The result is of the common type.
1807 QualType Composite = FindCompositePointerType(LHS, RHS);
1808 if (!Composite.isNull())
1809 return Composite;
1810
1811 // Similarly, attempt to find composite type of twp objective-c pointers.
1812 Composite = FindCompositeObjCPointerType(LHS, RHS, QuestionLoc);
1813 if (!Composite.isNull())
1814 return Composite;
1815
1816 Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands)
1817 << LHS->getType() << RHS->getType()
1818 << LHS->getSourceRange() << RHS->getSourceRange();
1819 return QualType();
1820}
1821
1822/// \brief Find a merged pointer type and convert the two expressions to it.
1823///
1824/// This finds the composite pointer type (or member pointer type) for @p E1
1825/// and @p E2 according to C++0x 5.9p2. It converts both expressions to this
1826/// type and returns it.
1827/// It does not emit diagnostics.
1828QualType Sema::FindCompositePointerType(Expr *&E1, Expr *&E2) {
1829 assert(getLangOptions().CPlusPlus && "This function assumes C++");
1830 QualType T1 = E1->getType(), T2 = E2->getType();
1831
1832 if (!T1->isAnyPointerType() && !T1->isMemberPointerType() &&
1833 !T2->isAnyPointerType() && !T2->isMemberPointerType())
1834 return QualType();
1835
1836 // C++0x 5.9p2
1837 // Pointer conversions and qualification conversions are performed on
1838 // pointer operands to bring them to their composite pointer type. If
1839 // one operand is a null pointer constant, the composite pointer type is
1840 // the type of the other operand.
1841 if (E1->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
1842 if (T2->isMemberPointerType())
1843 ImpCastExprToType(E1, T2, CastExpr::CK_NullToMemberPointer);
1844 else
1845 ImpCastExprToType(E1, T2, CastExpr::CK_IntegralToPointer);
1846 return T2;
1847 }
1848 if (E2->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {
1849 if (T1->isMemberPointerType())
1850 ImpCastExprToType(E2, T1, CastExpr::CK_NullToMemberPointer);
1851 else
1852 ImpCastExprToType(E2, T1, CastExpr::CK_IntegralToPointer);
1853 return T1;
1854 }
1855
1856 // Now both have to be pointers or member pointers.
1857 if ((!T1->isPointerType() && !T1->isMemberPointerType()) ||
1858 (!T2->isPointerType() && !T2->isMemberPointerType()))
1859 return QualType();
1860
1861 // Otherwise, of one of the operands has type "pointer to cv1 void," then
1862 // the other has type "pointer to cv2 T" and the composite pointer type is
1863 // "pointer to cv12 void," where cv12 is the union of cv1 and cv2.
1864 // Otherwise, the composite pointer type is a pointer type similar to the
1865 // type of one of the operands, with a cv-qualification signature that is
1866 // the union of the cv-qualification signatures of the operand types.
1867 // In practice, the first part here is redundant; it's subsumed by the second.
1868 // What we do here is, we build the two possible composite types, and try the
1869 // conversions in both directions. If only one works, or if the two composite
1870 // types are the same, we have succeeded.
1871 // FIXME: extended qualifiers?
1872 typedef llvm::SmallVector<unsigned, 4> QualifierVector;
1873 QualifierVector QualifierUnion;
1874 typedef llvm::SmallVector<std::pair<const Type *, const Type *>, 4>
1875 ContainingClassVector;
1876 ContainingClassVector MemberOfClass;
1877 QualType Composite1 = Context.getCanonicalType(T1),
1878 Composite2 = Context.getCanonicalType(T2);
1879 do {
1880 const PointerType *Ptr1, *Ptr2;
1881 if ((Ptr1 = Composite1->getAs<PointerType>()) &&
1882 (Ptr2 = Composite2->getAs<PointerType>())) {
1883 Composite1 = Ptr1->getPointeeType();
1884 Composite2 = Ptr2->getPointeeType();
1885 QualifierUnion.push_back(
1886 Composite1.getCVRQualifiers() | Composite2.getCVRQualifiers());
1887 MemberOfClass.push_back(std::make_pair((const Type *)0, (const Type *)0));
1888 continue;
1889 }
1890
1891 const MemberPointerType *MemPtr1, *MemPtr2;
1892 if ((MemPtr1 = Composite1->getAs<MemberPointerType>()) &&
1893 (MemPtr2 = Composite2->getAs<MemberPointerType>())) {
1894 Composite1 = MemPtr1->getPointeeType();
1895 Composite2 = MemPtr2->getPointeeType();
1896 QualifierUnion.push_back(
1897 Composite1.getCVRQualifiers() | Composite2.getCVRQualifiers());
1898 MemberOfClass.push_back(std::make_pair(MemPtr1->getClass(),
1899 MemPtr2->getClass()));
1900 continue;
1901 }
1902
1903 // FIXME: block pointer types?
1904
1905 // Cannot unwrap any more types.
1906 break;
1907 } while (true);
1908
1909 // Rewrap the composites as pointers or member pointers with the union CVRs.
1910 ContainingClassVector::reverse_iterator MOC
1911 = MemberOfClass.rbegin();
1912 for (QualifierVector::reverse_iterator
1913 I = QualifierUnion.rbegin(),
1914 E = QualifierUnion.rend();
1915 I != E; (void)++I, ++MOC) {
1916 Qualifiers Quals = Qualifiers::fromCVRMask(*I);
1917 if (MOC->first && MOC->second) {
1918 // Rebuild member pointer type
1919 Composite1 = Context.getMemberPointerType(
1920 Context.getQualifiedType(Composite1, Quals),
1921 MOC->first);
1922 Composite2 = Context.getMemberPointerType(
1923 Context.getQualifiedType(Composite2, Quals),
1924 MOC->second);
1925 } else {
1926 // Rebuild pointer type
1927 Composite1
1928 = Context.getPointerType(Context.getQualifiedType(Composite1, Quals));
1929 Composite2
1930 = Context.getPointerType(Context.getQualifiedType(Composite2, Quals));
1931 }
1932 }
1933
1934 ImplicitConversionSequence E1ToC1 =
1935 TryImplicitConversion(E1, Composite1,
1936 /*SuppressUserConversions=*/false,
1937 /*AllowExplicit=*/false,
1938 /*ForceRValue=*/false,
1939 /*InOverloadResolution=*/false);
1940 ImplicitConversionSequence E2ToC1 =
1941 TryImplicitConversion(E2, Composite1,
1942 /*SuppressUserConversions=*/false,
1943 /*AllowExplicit=*/false,
1944 /*ForceRValue=*/false,
1945 /*InOverloadResolution=*/false);
1946
1947 ImplicitConversionSequence E1ToC2, E2ToC2;
1948 E1ToC2.setBad();
1949 E2ToC2.setBad();
1950 if (Context.getCanonicalType(Composite1) !=
1951 Context.getCanonicalType(Composite2)) {
1952 E1ToC2 = TryImplicitConversion(E1, Composite2,
1953 /*SuppressUserConversions=*/false,
1954 /*AllowExplicit=*/false,
1955 /*ForceRValue=*/false,
1956 /*InOverloadResolution=*/false);
1957 E2ToC2 = TryImplicitConversion(E2, Composite2,
1958 /*SuppressUserConversions=*/false,
1959 /*AllowExplicit=*/false,
1960 /*ForceRValue=*/false,
1961 /*InOverloadResolution=*/false);
1962 }
1963
1964 bool ToC1Viable = !E1ToC1.isBad() && !E2ToC1.isBad();
1965 bool ToC2Viable = !E1ToC2.isBad() && !E2ToC2.isBad();
1966 if (ToC1Viable && !ToC2Viable) {
1967 if (!PerformImplicitConversion(E1, Composite1, E1ToC1, Sema::AA_Converting) &&
1968 !PerformImplicitConversion(E2, Composite1, E2ToC1, Sema::AA_Converting))
1969 return Composite1;
1970 }
1971 if (ToC2Viable && !ToC1Viable) {
1972 if (!PerformImplicitConversion(E1, Composite2, E1ToC2, Sema::AA_Converting) &&
1973 !PerformImplicitConversion(E2, Composite2, E2ToC2, Sema::AA_Converting))
1974 return Composite2;
1975 }
1976 return QualType();
1977}
1978
1979Sema::OwningExprResult Sema::MaybeBindToTemporary(Expr *E) {
1980 if (!Context.getLangOptions().CPlusPlus)
1981 return Owned(E);
1982
1983 assert(!isa<CXXBindTemporaryExpr>(E) && "Double-bound temporary?");
1984
1985 const RecordType *RT = E->getType()->getAs<RecordType>();
1986 if (!RT)
1987 return Owned(E);
1988
1989 // If this is the result of a call expression, our source might
1990 // actually be a reference, in which case we shouldn't bind.
1991 if (CallExpr *CE = dyn_cast<CallExpr>(E)) {
1992 QualType Ty = CE->getCallee()->getType();
1993 if (const PointerType *PT = Ty->getAs<PointerType>())
1994 Ty = PT->getPointeeType();
1995
1996 const FunctionType *FTy = Ty->getAs<FunctionType>();
1997 if (FTy->getResultType()->isReferenceType())
1998 return Owned(E);
1999 }
2000
2001 // That should be enough to guarantee that this type is complete.
2002 // If it has a trivial destructor, we can avoid the extra copy.
2003 CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
2004 if (RD->hasTrivialDestructor())
2005 return Owned(E);
2006
2007 CXXTemporary *Temp = CXXTemporary::Create(Context,
2008 RD->getDestructor(Context));
2009 ExprTemporaries.push_back(Temp);
2010 if (CXXDestructorDecl *Destructor =
2011 const_cast<CXXDestructorDecl*>(RD->getDestructor(Context)))
2012 MarkDeclarationReferenced(E->getExprLoc(), Destructor);
2013 // FIXME: Add the temporary to the temporaries vector.
2014 return Owned(CXXBindTemporaryExpr::Create(Context, Temp, E));
2015}
2016
2017Expr *Sema::MaybeCreateCXXExprWithTemporaries(Expr *SubExpr) {
2018 assert(SubExpr && "sub expression can't be null!");
2019
2020 unsigned FirstTemporary = ExprEvalContexts.back().NumTemporaries;
2021 assert(ExprTemporaries.size() >= FirstTemporary);
2022 if (ExprTemporaries.size() == FirstTemporary)
2023 return SubExpr;
2024
2025 Expr *E = CXXExprWithTemporaries::Create(Context, SubExpr,
2026 &ExprTemporaries[FirstTemporary],
2027 ExprTemporaries.size() - FirstTemporary);
2028 ExprTemporaries.erase(ExprTemporaries.begin() + FirstTemporary,
2029 ExprTemporaries.end());
2030
2031 return E;
2032}
2033
2034Sema::OwningExprResult
2035Sema::MaybeCreateCXXExprWithTemporaries(OwningExprResult SubExpr) {
2036 if (SubExpr.isInvalid())
2037 return ExprError();
2038
2039 return Owned(MaybeCreateCXXExprWithTemporaries(SubExpr.takeAs<Expr>()));
2040}
2041
2042FullExpr Sema::CreateFullExpr(Expr *SubExpr) {
2043 unsigned FirstTemporary = ExprEvalContexts.back().NumTemporaries;
2044 assert(ExprTemporaries.size() >= FirstTemporary);
2045
2046 unsigned NumTemporaries = ExprTemporaries.size() - FirstTemporary;
2047 CXXTemporary **Temporaries =
2048 NumTemporaries == 0 ? 0 : &ExprTemporaries[FirstTemporary];
2049
2050 FullExpr E = FullExpr::Create(Context, SubExpr, Temporaries, NumTemporaries);
2051
2052 ExprTemporaries.erase(ExprTemporaries.begin() + FirstTemporary,
2053 ExprTemporaries.end());
2054
2055 return E;
2056}
2057
2058Sema::OwningExprResult
2059Sema::ActOnStartCXXMemberReference(Scope *S, ExprArg Base, SourceLocation OpLoc,
2060 tok::TokenKind OpKind, TypeTy *&ObjectType) {
2061 // Since this might be a postfix expression, get rid of ParenListExprs.
2062 Base = MaybeConvertParenListExprToParenExpr(S, move(Base));
2063
2064 Expr *BaseExpr = (Expr*)Base.get();
2065 assert(BaseExpr && "no record expansion");
2066
2067 QualType BaseType = BaseExpr->getType();
2068 if (BaseType->isDependentType()) {
2069 // If we have a pointer to a dependent type and are using the -> operator,
2070 // the object type is the type that the pointer points to. We might still
2071 // have enough information about that type to do something useful.
2072 if (OpKind == tok::arrow)
2073 if (const PointerType *Ptr = BaseType->getAs<PointerType>())
2074 BaseType = Ptr->getPointeeType();
2075
2076 ObjectType = BaseType.getAsOpaquePtr();
2077 return move(Base);
2078 }
2079
2080 // C++ [over.match.oper]p8:
2081 // [...] When operator->returns, the operator-> is applied to the value
2082 // returned, with the original second operand.
2083 if (OpKind == tok::arrow) {
2084 // The set of types we've considered so far.
2085 llvm::SmallPtrSet<CanQualType,8> CTypes;
2086 llvm::SmallVector<SourceLocation, 8> Locations;
2087 CTypes.insert(Context.getCanonicalType(BaseType));
2088
2089 while (BaseType->isRecordType()) {
2090 Base = BuildOverloadedArrowExpr(S, move(Base), OpLoc);
2091 BaseExpr = (Expr*)Base.get();
2092 if (BaseExpr == NULL)
2093 return ExprError();
2094 if (CXXOperatorCallExpr *OpCall = dyn_cast<CXXOperatorCallExpr>(BaseExpr))
2095 Locations.push_back(OpCall->getDirectCallee()->getLocation());
2096 BaseType = BaseExpr->getType();
2097 CanQualType CBaseType = Context.getCanonicalType(BaseType);
2098 if (!CTypes.insert(CBaseType)) {
2099 Diag(OpLoc, diag::err_operator_arrow_circular);
2100 for (unsigned i = 0; i < Locations.size(); i++)
2101 Diag(Locations[i], diag::note_declared_at);
2102 return ExprError();
2103 }
2104 }
2105
2106 if (BaseType->isPointerType())
2107 BaseType = BaseType->getPointeeType();
2108 }
2109
2110 // We could end up with various non-record types here, such as extended
2111 // vector types or Objective-C interfaces. Just return early and let
2112 // ActOnMemberReferenceExpr do the work.
2113 if (!BaseType->isRecordType()) {
2114 // C++ [basic.lookup.classref]p2:
2115 // [...] If the type of the object expression is of pointer to scalar
2116 // type, the unqualified-id is looked up in the context of the complete
2117 // postfix-expression.
2118 ObjectType = 0;
2119 return move(Base);
2120 }
2121
2122 // The object type must be complete (or dependent).
2123 if (!BaseType->isDependentType() &&
2124 RequireCompleteType(OpLoc, BaseType,
2125 PDiag(diag::err_incomplete_member_access)))
2126 return ExprError();
2127
2128 // C++ [basic.lookup.classref]p2:
2129 // If the id-expression in a class member access (5.2.5) is an
2130 // unqualified-id, and the type of the object expression is of a class
2131 // type C (or of pointer to a class type C), the unqualified-id is looked
2132 // up in the scope of class C. [...]
2133 ObjectType = BaseType.getAsOpaquePtr();
2134
2135 return move(Base);
2136}
2137
2138CXXMemberCallExpr *Sema::BuildCXXMemberCallExpr(Expr *Exp,
2139 CXXMethodDecl *Method) {
2140 if (PerformObjectArgumentInitialization(Exp, Method))
2141 assert(0 && "Calling BuildCXXMemberCallExpr with invalid call?");
2142
2143 MemberExpr *ME =
2144 new (Context) MemberExpr(Exp, /*IsArrow=*/false, Method,
2145 SourceLocation(), Method->getType());
2146 QualType ResultType = Method->getResultType().getNonReferenceType();
2147 MarkDeclarationReferenced(Exp->getLocStart(), Method);
2148 CXXMemberCallExpr *CE =
2149 new (Context) CXXMemberCallExpr(Context, ME, 0, 0, ResultType,
2150 Exp->getLocEnd());
2151 return CE;
2152}
2153
2154Sema::OwningExprResult Sema::BuildCXXCastArgument(SourceLocation CastLoc,
2155 QualType Ty,
2156 CastExpr::CastKind Kind,
2157 CXXMethodDecl *Method,
2158 ExprArg Arg) {
2159 Expr *From = Arg.takeAs<Expr>();
2160
2161 switch (Kind) {
2162 default: assert(0 && "Unhandled cast kind!");
2163 case CastExpr::CK_ConstructorConversion: {
2164 ASTOwningVector<&ActionBase::DeleteExpr> ConstructorArgs(*this);
2165
2166 if (CompleteConstructorCall(cast<CXXConstructorDecl>(Method),
2167 MultiExprArg(*this, (void **)&From, 1),
2168 CastLoc, ConstructorArgs))
2169 return ExprError();
2170
2171 OwningExprResult Result =
2172 BuildCXXConstructExpr(CastLoc, Ty, cast<CXXConstructorDecl>(Method),
2173 move_arg(ConstructorArgs));
2174 if (Result.isInvalid())
2175 return ExprError();
2176
2177 return MaybeBindToTemporary(Result.takeAs<Expr>());
2178 }
2179
2180 case CastExpr::CK_UserDefinedConversion: {
2181 assert(!From->getType()->isPointerType() && "Arg can't have pointer type!");
2182
2183 // Create an implicit call expr that calls it.
2184 CXXMemberCallExpr *CE = BuildCXXMemberCallExpr(From, Method);
2185 return MaybeBindToTemporary(CE);
2186 }
2187 }
2188}
2189
2190Sema::OwningExprResult Sema::ActOnFinishFullExpr(ExprArg Arg) {
2191 Expr *FullExpr = Arg.takeAs<Expr>();
2192 if (FullExpr)
2193 FullExpr = MaybeCreateCXXExprWithTemporaries(FullExpr);
2194
2195 return Owned(FullExpr);
2196}