aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaExprCXX.cpp
AgeCommit message (Collapse)Author
2009-09-25Fix the AST tree so ir-gen can do the conversion via copy construction.Fariborz Jahanian
Fixed pr5050. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82783 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-25Fix checking for a null pointer constant when the expression itself isDouglas Gregor
value-dependent. Audit (and fixed) all calls to Expr::isNullPointerConstant() to provide the correct behavior with value-dependent expressions. Fixes PR5041 and a crash in libstdc++ <locale>. In the same vein, properly compute value- and type-dependence for ChooseExpr. Fixes PR4996. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82748 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-24Refactor the representation of qualifiers to bring ExtQualType out of theJohn McCall
Type hierarchy. Demote 'volatile' to extended-qualifier status. Audit our use of qualifiers and fix a few places that weren't dealing with qualifiers quite right; many more remain. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82705 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-23Improve diagnostic location information when checking the initialization of ↵Douglas Gregor
a reference git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82666 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-23This patch addresses a few issues related to 8.5.3 [dcl.init.ref]Fariborz Jahanian
It uses a recent API to find inherited conversion functions to do the initializer to reference lvalue conversion (and removes a FIXME). It issues the ambiguity diagnostics when multiple conversions are found. WIP. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82649 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-23Cast the array size expr to a size_tAnders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82594 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-21Change all the Type::getAsFoo() methods to specializations of Type::getAs().John McCall
Several of the existing methods were identical to their respective specializations, and so have been removed entirely. Several more 'leaf' optimizations were introduced. The getAsFoo() methods which imposed extra conditions, like getAsObjCInterfacePointerType(), have been left in place. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82501 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-15When implicitly declaring operators new, new[], delete, and delete[],Douglas Gregor
give them the appropriate exception specifications. This, unfortunately, requires us to maintain and/or implicitly generate handles to namespace "std" and the class "std::bad_alloc". However, every other approach I've come up with was more hackish, and this standard requirement itself is quite the hack. Fixes PR4829. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81939 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-151) don't do overload resolution in selecting conversionFariborz Jahanian
to pointer function for delete expression. 2) Treat type conversion function and its 'const' version as identical in building the visible conversion list. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81930 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-15Perform overload resolution when selecting a pointer conversionFariborz Jahanian
function for delete of a class expression and issue good diagnostic when result is ambiguous. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81870 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-15If a conversion operator exists in a base class, make sure to cast the ↵Anders Carlsson
object to that base class. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81852 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-15When performing an user defined conversion sequence, perform the initial ↵Anders Carlsson
standard conversion sequence. This lets us remove a workaround in SemaCompleteConstructorCall. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81847 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-15Revert for real.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81844 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-15Whoops, didn't mean to commit this.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81842 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-15Only reuse an already existing ImplicitCastExpr if the cast kinds are the same.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81841 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-14If a function call returns a reference, don't bind it to a temporary.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81743 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-12More work toward having an access method for visibleFariborz Jahanian
conversion functions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81618 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-12Use the correct CastKind for derived-to-base pointer conversions.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81608 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-11Patch to build visible conversion function list lazily and make its Fariborz Jahanian
first use in calling the conversion function on delete statements. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81576 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-11Diagnose VLAs as an error in C++.Douglas Gregor
Also, treat the GNU __null as an integral constant expression to match GCC's behavior. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81490 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-09For a C++ delete expression where the operand is of class type thatDouglas Gregor
has a single conversion to pointer-to-object type, implicitly convert to that pointer-to-object type (C++ [expr.delete]p1). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81401 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-09Improve handling of initialization by constructor, by ensuring thatDouglas Gregor
such initializations properly convert constructor arguments and fill in default arguments where necessary. This also makes the ownership model more clear. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81394 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-09If a cast expression needs either a conversion function or a constructor to ↵Anders Carlsson
be called, generate implicit child expressions that call them. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81383 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-09Remove tabs, and whitespace cleanups.Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81346 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-07BuildCXXConstructExpr now takes a MultiExprArg.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81160 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-05Pass the ConstructLoc to BuildCXXConstructExpr.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81068 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-04If a destructor is referenced or a pseudo-destructor expression isDouglas Gregor
formed without a trailing '(', diagnose the error (these expressions must be immediately called), emit a fix-it hint, and fix the code. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81015 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-04Implement AST, semantics, and CodeGen for C++ pseudo-destructorDouglas Gregor
expressions, e.g., p->~T() when p is a pointer to a scalar type. We don't currently diagnose errors when pseudo-destructor expressions are used in any way other than by forming a call. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81009 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-03Patch to instantiate destructors used to destructFariborz Jahanian
base and data members when they are needed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80967 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-03Improve template instantiation for member access expressions thatDouglas Gregor
involve qualified names, e.g., x->Base::f. We now maintain enough information in the AST to compare the results of the name lookup of "Base" in the scope of the postfix-expression (determined at template definition time) and in the type of the object expression. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80953 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-02Rewrite of our handling of name lookup in C++ member access expressions, e.g.,Douglas Gregor
x->Base::f We no longer try to "enter" the context of the type that "x" points to. Instead, we drag that object type through the parser and pass it into the Sema routines that need to know how to perform lookup within member access expressions. We now implement most of the crazy name lookup rules in C++ [basic.lookup.classref] for non-templated code, including performing lookup both in the context of the type referred to by the member access and in the scope of the member access itself and then detecting ambiguities when the two lookups collide (p1 and p4; p3 and p7 are still TODO). This change also corrects our handling of name lookup within template arguments of template-ids inside the nested-name-specifier (p6; we used to look into the scope of the object expression for them) and fixes PR4703. I have disabled some tests that involve member access expressions where the object expression has dependent type, because we don't yet have the ability to describe dependent nested-name-specifiers starting with an identifier. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80843 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-01Add a CK_FunctionToPointerDecay cast kind.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80719 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-01Preliminary AST representation and semantic analysis forDouglas Gregor
explicitly-specified template argument lists in member reference expressions, e.g., x->f<int>() git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80646 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-31Add parsing for references to member function templates with explicitDouglas Gregor
template argument lists, e.g., x.f<int>(). Semantic analysis will be a separate commit. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80624 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-31Support explicit C++ member operator syntax, from James Porter!Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80608 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-29Patch for code gen. for c-style cast which ends inFariborz Jahanian
using class's conversion functions [12.3.2-p2] git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80433 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-28path to ir-gen 12.3.1 Conversion by constructorFariborz Jahanian
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80398 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-28Pass InOverloadResolution all the way down to IsPointerConversion.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80368 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-28ir-gen related patch for type conversionFariborz Jahanian
with class type conversion methods. WIP. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80365 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-27Add an InOverloadResolution flag to TryCopyInitialization.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80261 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-27Remove more default arguments.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80260 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-27Remove default arguments from TryImplicitConversion and fix a bug found in ↵Anders Carlsson
the process. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80258 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-27Remove default argument from TryCopyInitialization.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80256 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-27Revert the flags change for now, I have a better idea for this.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80255 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-27Add a OverloadResolutionFlags and start converting some of the overload ↵Anders Carlsson
methods over to using it instead of bools arguments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80248 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-27Add a BuildCXXTemporaryObjectExpr and use it so default arguments will be ↵Anders Carlsson
instantiated correctly for temporary object expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80206 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-27In ActOnCXXTypeConstructExpr, check that the type is complete and ↵Anders Carlsson
non-abstract before creating any expressions. This assures that any templates are instantiated if necessary. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80200 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-26Bye-bye old RequireCompleteType.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80182 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-26Remove the PrintType argument from RequireCompleteType.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80174 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-26AST for conversion by conversion functions. WIP.Fariborz Jahanian
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80135 91177308-0d34-0410-b5e6-96231b3b80d8