aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaOverload.cpp
AgeCommit message (Collapse)Author
2010-05-25Make sure to strip off top-level cv-qualifiers as part of aDouglas Gregor
derived-to-base conversion on a pointer. Fixes PR7224. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104607 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-23An identity conversion is better than any non-identityDouglas Gregor
conversion. Fixes PR7095. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104476 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-23Provide the overloaded functions for UnresolvedLookupExpr andDouglas Gregor
UnresolvedMemberExpr in their constructors, rather than adding them after the fact. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104468 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-19Implement C++ builtin operator candidates for vector types.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104105 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-18Misc. fixes to bring Objetive-C++'s handling ofFariborz Jahanian
gc attributes to be inline with Objective-C (for radar 7925141). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104084 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-18Implement C++ support for vector and extended vector types. ThisDouglas Gregor
involves extending implicit conversion sequences to model vector conversions and vector splats, along with teaching the C++ conditional operator-checking code about vector types. Fixes <rdar://problem/7983501>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104081 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-18Tweak typo-correction logic a bit regarding "super", so that weDouglas Gregor
consider "super" as a candidate whenever we're parsing an expression within an Objective-C method in an interface that has a superclass. At some point, we'd like to give "super" a little edge over non-local names; that will come later. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104022 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-16fix rdar://7985267 - Don't emit an error about a non-pod argumentChris Lattner
passed to va_start, it doesn't actually pass it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103899 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-15Substantially alter the design of the Objective C type AST by introducingJohn McCall
ObjCObjectType, which is basically just a pair of one of {primitive-id, primitive-Class, user-defined @class} with a list of protocols. An ObjCObjectPointerType is therefore just a pointer which always points to one of these types (possibly sugared). ObjCInterfaceType is now just a kind of ObjCObjectType which happens to not carry any protocols. Alter a rather large number of use sites to use ObjCObjectType instead of ObjCInterfaceType. Store an ObjCInterfaceType as a pointer on the decl rather than hashing them in a FoldingSet. Remove some number of methods that are no longer used, at least after this patch. By simplifying ObjCObjectPointerType, we are now able to easily remove and apply pointers to Objective-C types, which is crucial for a certain kind of ObjC++ metaprogramming common in WebKit. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103870 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-12Objective-C++ Sema. Support for conversion of a C++Fariborz Jahanian
class object used as a receiver to an objective-c pointer via a converwsion function. wip. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103672 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-08Don't complain about an __builtin_va_arg expression's result beingDouglas Gregor
unused, since the operation has side effects. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103360 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-08Don't destroy the data associated with an overload resolution candidate; ↵Douglas Gregor
it's ASTContext-allocated now git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103350 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-08Record template argument deduction failures for member functionDouglas Gregor
templates and conversion function templates. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103349 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-08When printing an overload candidate that failed due to SFINAE, print aDouglas Gregor
specific message that includes the template arguments, e.g., test/SemaTemplate/overload-candidates.cpp:27:20: note: candidate template ignored: substitution failure [with T = int *] typename T::type get_type(const T&); // expected-note{{candidate ... ^ git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103348 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-08Improve overload-candidate diagnostic for a function template thatDouglas Gregor
failed because the explicitly-specified template arguments did not match its template parameters, e.g., test/SemaTemplate/overload-candidates.cpp:18:8: note: candidate template ignored: invalid explicitly-specified argument for template parameter 'I' void get(const T&); ^ test/SemaTemplate/overload-candidates.cpp:20:8: note: candidate template ignored: invalid explicitly-specified argument for 1st template parameter void get(const T&); ^ git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103344 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-08A leak is better than a double-free while I figure out how to addressDouglas Gregor
this issue. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103343 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-08Minor cleanup, and ban copying of OverloadCandidateSets. NoDouglas Gregor
functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103342 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-08When template argument deduction fails because the call had tooDouglas Gregor
many/too few arguments, use the same diagnostic we use for arity mismatches in non-templates (but note that it's a function template). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103341 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-08When printing a non-viable overload candidate that failed due toDouglas Gregor
conflicting deduced template argument values, give a more specific reason along with those values, e.g., test/SemaTemplate/overload-candidates.cpp:4:10: note: candidate template ignored: deduced conflicting types for parameter 'T' ('int' vs. 'long') const T& min(const T&, const T&); ^ git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103339 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-07Reapply the reference-binding patch applied below, along with a fix toDouglas Gregor
ensure that we complete the type when we need to look at constructors during reference binding. When determining whether the two types involved in reference binding are reference-compatible, reference-related, etc., do not complete the type of the reference itself because it is not necessary to determine well-formedness of the program. Complete the type that we are binding to, since that can affect whether we know about a derived-to-base conversion. Re-fixes PR7080. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103283 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-07Revert r103220. It seems to be breaking self-hostDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103259 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-07When determining whether the two types involved in reference bindingDouglas Gregor
are reference-compatible, reference-related, etc., do not complete the type of the reference itself because it is not necessary to determine well-formedness of the program. Complete the type that we are binding to, since that can affect whether we know about a derived-to-base conversion. Fixes PR7080. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103220 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-06Diagnose deprecated/unavailable functions selected by overload resolution.John McCall
Fixes rdar://problem/4232969, or at least the clang parts of it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103191 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-06Silence a pedantic GCC warning by making the grouping of && and || explicit.Chandler Carruth
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103141 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-04When instantiating a function that was declared via a typedef, e.g.,Douglas Gregor
typedef int functype(int, int); functype func; also instantiate the synthesized function parameters for the resulting function declaration. With this change, Boost.Wave builds and passes all of its regression tests. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103025 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-03For the sake of Objective-c++ overload resolution,Fariborz Jahanian
treat argument types of objective-c pointer types which only differ in their protocol qualifiers as the same type (radar 7925668). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102955 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-29When determining a standard conversion sequence involves resolving theDouglas Gregor
address of an overloaded function (or function template), perform that resolution prior to determining the implicit conversion sequence. This resolution is not part of the implicit conversion sequence itself. Previously, we would always consider this resolution to be a function pointer decay, which was a lie: there might be an explicit & in the expression, in which case decay should not occur. This caused the CodeGen assertion in PR6973 (where we created a pointer to a pointer to a function when we should have had a pointer to a function), but it's likely that there are corner cases of overload resolution where this would have failed. Cleaned up the code involved in determining the type that will produced afer resolving the overloaded function reference, and added an assertion to make sure the result is correct. Fixes PR6973. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102650 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-25When copying a temporary object to initialize an entity for which theDouglas Gregor
temporary needs to be bound, bind the copy object. Otherwise, we won't end up calling the destructor for the copy. Fixes Boost.Optional. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102290 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24Add base paths for CK_BaseToDerived and CK_BaseToDerivedMemberPointer.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102261 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24Actually produce base paths for CastExprs of kind CK_DerivedToBase.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102259 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24Pass the base specifiers through to CheckDerivedToBaseConversion. No ↵Anders Carlsson
functionality change yet. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102250 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24CastExpr should not hold a pointer to the base path. More cleanup.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102249 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-23Add an InheritancePath parameter to the ImplicitCastExpr constructor.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102218 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-20Remove dead code.Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101920 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-18Bail out early to avoid comparing the internals of two conversion sequences ofBenjamin Kramer
different kinds (aka garbage). This happens if we're comparing a standard conversion sequence to an ambiguous one which have the same KindRank. Found by valgrind. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101717 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-18When performing reference initialization for the purposes of overloadDouglas Gregor
resolution ([over.ics.ref]), we take some shortcuts required by the standard that effectively permit binding of a const volatile reference to an rvalue. We have to treat lightly here to avoid infinite recursion. Fixes PR6177. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101712 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-18Binding a reference to an rvalue is a direct binding in C++0x but notDouglas Gregor
in C++03. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101707 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-17Improve our handling of user-defined conversions as part of overloadDouglas Gregor
resolution. There are two sources of problems involving user-defined conversions that this change eliminates, along with providing simpler interfaces for checking implicit conversions: - It eliminates a case of infinite recursion found in Boost. - It eliminates the search for the constructor needed to copy a temporary generated by an implicit conversion from overload resolution. Overload resolution assumes that, if it gets a value of the parameter's class type (or a derived class thereof), there is a way to copy if... even if there isn't. We now model this properly. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101680 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-17Add raw_ostream operators to NamedDecl for convenience. Switch over all ↵Benjamin Kramer
users of getNameAsString on a stream. The next step is to print the name directly into the stream, avoiding a temporary std::string copy. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101632 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-16Move Sema::PerformImplicitConversion over to where ↵Douglas Gregor
Sema::TryImplicitConversion is, for my own sanity. No functionality change git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101554 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-16Kill ForceRValue once and for allDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101502 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-16Eliminate the ForceRValue parameter from TryCopyInitialization.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101498 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-16Move Sema::TryCopyInitialization into a static function inDouglas Gregor
SemaOverload.cpp; no functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101497 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-16Eliminate ForceRValue parameters from reference binding. Did I mentionDouglas Gregor
that we aren't using ForceRValue any more? git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101496 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-16Eliminate the ForceRValue parameter to Sema::AddOverloadCandidateDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101494 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-16Eliminate the ForceRValue parameter from most of Sema's Add*CandidateDouglas Gregor
functions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101492 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-16Eliminate the ForceRValue parameter from Sema::IsUserDefinedConversion. It's ↵Douglas Gregor
not the way we're going to handle this. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101483 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-16Eliminate the default value for the UserCast parameter of ↵Douglas Gregor
Sema::IsUserDefinedConversion. No functionality change git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101482 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-14Always diagnose and complain about problems inDouglas Gregor
ResolveAddressOfOverloadedFunction when asked to complain. Previously, we had some weird handshake where ResolveAddressOfOverloadedFunction expected its caller to handle some of the diagnostics but not others, and yet there was no way for the caller to know which case we were in. Eliminate this madness, fixing <rdar://problem/7765884>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101312 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-14Thread a Scope pointer into BuildRecoveryCallExpr to help typoDouglas Gregor
correction find names when a call failed. Fixes <rdar://problem/7853795>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101278 91177308-0d34-0410-b5e6-96231b3b80d8