aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaOverload.cpp
AgeCommit message (Collapse)Author
2012-03-09[AST/Sema/libclang] Replace getSourceRange().getBegin() with getLocStart().Daniel Dunbar
- getSourceRange().getBegin() is about as awesome a pattern as .copy().size(). I already killed the hot paths so this doesn't seem to impact performance on my tests-of-the-day, but it is a much more sensible (and shorter) pattern. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152419 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-09Literal operators can't have default arguments.Richard Smith
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152394 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-09Support for raw and template forms of numeric user-defined literals,Richard Smith
and lots of tidying up. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152392 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-07AST representation for user-defined literals, plus just enough of semanticRichard Smith
analysis to make the AST representation testable. They are represented by a new UserDefinedLiteral AST node, which is a sugared CallExpr. All semantic properties, including full CodeGen support, are achieved for free by this representation. UserDefinedLiterals can never be dependent, so no custom instantiation behavior is required. They are mangled as if they were direct calls to the underlying literal operator. This matches g++'s apparent behavior (but not its actual mangling, which is broken for literal-operator-ids). User-defined *string* literals are now fully-operational, but the semantic analysis is quite hacky and needs more work. No other forms of user-defined literal are created yet, but the AST support for them is present. This patch committed after midnight because we had already hit the quota for new kinds of literal yesterday. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152211 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-28Single- and zero-element initializer lists to scalars are ↵Sebastian Redl
list-initializations. Fixes PR12118. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151666 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-27Implement a FIXME for conversion sequence distinction. Should fix PR12092.Sebastian Redl
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151577 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-25ArrayRef'ize various functions in the AST/Parser/Sema.Ahmed Charles
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151447 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-25Fix a regression from r151117: ADL requires that we attempt to complete anyRichard Smith
associated classes, since it can find friend functions declared within them, but overload resolution does not otherwise require argument types to be complete. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151434 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-24Implement C++11 [over.match.copy]p1b2, which allows the use ofDouglas Gregor
explicit conversion functions to initialize the argument to a copy/move constructor that itself is the subject of direct initialization. Since we don't have that much context in overload resolution, we end up threading more flags :(. Fixes <rdar://problem/10903741> / PR10456. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151409 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-22Teach overload resolution to prefer user-defined conversion via aDouglas Gregor
lambda closure type's function pointer conversion over user-defined conversion via a lambda closure type's block pointer conversion, always. This is a preference for more-standard code (since blocks are an extension) and a nod to efficiency, since function pointers don't require any memory management. Fixes PR12063. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151170 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-22Implement C++11 [expr.call]p11: If the operand to a decltype-specifier is aRichard Smith
function call (or a comma expression with a function call on its right-hand side), possibly parenthesized, then the return type is not required to be complete and a temporary is not bound. Other subexpressions inside a decltype expression do not get this treatment. This is implemented by deferring the relevant checks for all calls immediately within a decltype expression, then, when the expression is fully-parsed, checking the relevant constraints and stripping off any top-level temporary binding. Deferring the completion of the return type exposed a bug in overload resolution where completion of the argument types was not attempted, which is also fixed by this change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151117 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-18Add a bunch of missing calls to DiagnoseSentinelCalls. ↵Eli Friedman
<rdar://problem/10885993>. This should probably be refactored... but it isn't completely obvious what refactoring is best. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150869 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-15When overload resolution picks an implicitly-deleted special memberDouglas Gregor
function, provide a specialized diagnostic that indicates the kind of special member function (default constructor, copy assignment operator, etc.) and that it was implicitly deleted. Add a hook where we can provide more detailed information later. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150611 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-11Fix parsing new expressions using init lists. Probably still do the wrong ↵Sebastian Redl
thing in cases involving array new. Show that many cases using initializer list constructors work, in that they parse and pass semantic analysis. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150316 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-10Implement the conversion to a function pointer for lambda expressions,Douglas Gregor
per C++ [expr.prim.lambda]p6. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150236 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-08[libclang] For CXXOperatorCallExprs, give a valid source location to the ↵Argyrios Kyrtzidis
DeclRefExpr that is referencing the member function, so we can index the referenced function. Fixes rdar://10762375&10324915 & http://llvm.org/PR11192 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150033 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-08Revise the SplitQualType interface to make it its own thing instead ofJohn McCall
a typedef of std::pair. This slightly improves type-safety, but mostly makes code using it clearer to read as well as making it possible to add methods to the type. Add such a method for efficiently single-step desugaring a split type. Add a method to single-step desugaring a locally-unqualified type. Implement both the SplitQualType and QualType methods in terms of that. Also, fix a typo ("ObjCGLifetime"). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150028 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-06Fixed instantiation of DependentScopeDeclRefExpr.Abramo Bagnara
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149868 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-04In C++11 mode, when an integral constant expression is desired and we have aRichard Smith
value of class type, look for a unique conversion operator converting to integral or unscoped enumeration type and use that. Implements [expr.const]p5. Sema::VerifyIntegerConstantExpression now performs the conversion and returns the converted result. Some important callers of Expr::isIntegralConstantExpr have been switched over to using it (including all of those required for C++11 conformance); this switch brings a side-benefit of improved diagnostics and, in several cases, simpler code. However, some language extensions and attributes have not been moved across and will not perform implicit conversions on constant expressions of literal class type where an ICE is required. In passing, fix static_assert to perform a contextual conversion to bool on its argument. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149776 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-04Don't allow a value of a scoped enumeration to be used as the first bound for anRichard Smith
array new expression. This lays some groundwork for the implicit conversion to integral or unscoped enumeration which C++11 ICEs undergo. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149772 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-02Initialize the user defined conversion function to null if this is an ↵Benjamin Kramer
aggregate initialization from an initializer list. Found by valgrind. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149627 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-02Split Sema::MarkDeclarationReferenced into multiple functions; the ↵Eli Friedman
additional entry points are needed to implement C++11 odr-use marking correctly. No functional change in this patch; I'll actually make the change which fixes the odr-use marking in a followup patch. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149586 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-30constexpr: disallow signed integer overflow in integral conversions in constantRichard Smith
expressions in C++11. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149286 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-27Added source location for the template keyword in AST template-id expressions.Abramo Bagnara
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149127 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-26Slight refactoring; catch yet another case where we were missing an ↵Eli Friedman
lvalue-to-rvalue conversion. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149003 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-25Allow typo correction to be disabled in BuildOverloadedCallExpr variant.Kaelyn Uhrain
This suppresses typo correction for auto-generated call expressions such as to 'begin' or 'end' within a C++0x for-range statement. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148979 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-25Add custom callback object for typo correction in BuildRecoveryCallExpr.Kaelyn Uhrain
The new callback, in addition to limiting which keywords to include in the pool of typo correction candidates, also filters out non-keyword candidates that don't refer to (template) functions that accept the number of arguments that are present for the call being recovered. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148962 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-23Minor fixups for auto deduction of initializer lists.Sebastian Redl
Fix some review comments. Add a test for deduction when std::initializer_list isn't available yet. Fix redundant error messages. This fixes and outstanding FIXME too. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148735 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-18constexpr: converted constant expression handling for enumerator values, caseRichard Smith
values and non-type template arguments of integral and enumeration types. This change causes some legal C++98 code to no longer compile in C++11 mode, by enforcing the C++11 rule that narrowing integral conversions are not permitted in the final implicit conversion sequence for the above cases. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148439 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-18Convert DiagnoseEmptyLookup to use correction callbacks.Kaelyn Uhrain
No new unit tests yet as there is no behavioral change (except for slightly more specific filtering in Sema::ActOnStartOfLambdaDefinition). Tests will be added as the code paths are traced in greater depth to determine how to improve the results--there are at least one or two known bugs that require those improvements. This commit lays the groundwork for those changes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148382 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-18Move narrowing conversion detection code from SemaInit to SemaOverload, readyRichard Smith
for it to be used in converted constant expression checking, and fix a couple of issues: - Conversion operators implicitly invoked prior to the narrowing conversion were not being correctly handled when determining whether a constant value was narrowed. - For conversions from floating-point to integral types, the diagnostic text incorrectly always claimed that the source expression was not a constant expression. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148381 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-17Basic overloading support for std::initializer_list.Sebastian Redl
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148350 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-17Remove unreachable code in Clang. (replace with llvm_unreachable where ↵David Blaikie
appropriate or when GCC requires it) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148292 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-14Use a smaller vector than SmallVector.Benjamin Kramer
Shrinks OverloadCandidate from 208 to 168 bytes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148204 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-14Clear ImplicitConversionSequence the obvious way which turns out to be less ↵Benjamin Kramer
fragile. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148200 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-14Give OverloadCandidateSet the responsibility for destroying the implicit ↵Benjamin Kramer
conversion sequences so we don't get double frees when the vector reallocates. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148198 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-14Pool allocate ImplicitConversionSequences.Benjamin Kramer
To avoid malloc thrashing give OverloadCandidateSet an inline capacity for conversion sequences. We use the fact that OverloadCandidates never outlive the OverloadCandidateSet and have a fixed amount of conversion sequences. This eliminates the oversized SmallVector from OverloadCandidate shrinking it from 752 to 208 bytes. On the test case from the "Why is CLANG++ so freaking slow" thread on llvmdev this avoids one gig of vector reallocation (including memcpy) which translates into 5-10% speedup on Lion/x86_64. Overload candidate computation is still the biggest malloc contributor when compiling templated c++ code. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148186 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-14OverloadCandidateSet: Stop exposing SmallVector internalsBenjamin Kramer
Replace push_back with addCandidate which will let us make use of the fixed size of the conversion sequence vector soon. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148185 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-07More lambda work: semantic analysis of capturing 'this'. It's a bit ↵Eli Friedman
complicated, but we have to be careful about when exactly captures are marked given PotentiallyPotentiallyEvaluated contexts. (Actually, it's not 100% correct yet, but it's close enough for the moment.) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147723 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-22Overloading for initializer list construction.Sebastian Redl
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147156 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-15Two null Decl*'s don't refer to the same declaration, because theyDouglas Gregor
don't refer to anything. Amusingly, we were relying on this in one place. Thanks to Chandler for noticing the weirdness in declaresSameEntity. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146659 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-15Replace all comparisons between ObjCInterfaceDecl pointers with callsDouglas Gregor
to declaresSameEntity(), as a baby step toward tracking forward declarations of Objective-C classes precisely. Part of <rdar://problem/10583531>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146618 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-13Make the diagnostic message more consistant. Update the type comparison toRichard Trieu
handle non-pointer types. This is for the extra info printed when function types are compared. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146525 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-03Implement overload resolution for reference-typed parameters supplied with ↵Sebastian Redl
initializer lists. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145769 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-25In Microsoft mode, make "Unqualified lookup into dependent bases of class ↵Francois Pichet
templates" works inside a friend function definition at class scope. Basically we have to look into the parent *lexical* DeclContext for friend functions at class scope. That's because calling GetParent() return the namespace or file DeclContext. This fixes all remaining cases of "Unqualified lookup into dependent bases of class templates" when parsing MFC code with clang. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145127 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-23Add feature to diagnostics that will provide more information on functionRichard Trieu
pointer mismatch. Cases covered are: initialization, assignment, and function arguments. Additional text will give the extra information about the nature of the mismatch: different classes for member functions, wrong number of parameters, different parameter type, different return type, and function qualifier mismatch. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145114 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-19Fixed HadMultipleCandidates loading.Abramo Bagnara
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144995 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-17In Microsoft mode, make "Unqualified lookup into dependent bases of class ↵Francois Pichet
templates" works inside default argument instantiation. This is a little bit tricky because during default argument instantiation the CurContext points to a CXXMethodDecl but we can't use the keyword this or have an implicit member call generated. This fixes 2 errors when parsing MFC code with clang. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144881 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-16Added missing ImplicitCastExpr around conversion operator call.Abramo Bagnara
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144850 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-11Move "Unqualified lookup into dependent bases of class templates" Microsoft ↵Francois Pichet
specific behavior from -fms-extensions to -fms-compatibility. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144341 91177308-0d34-0410-b5e6-96231b3b80d8