aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema
AgeCommit message (Collapse)Author
2009-10-01When the return type of a function is dependent, don't perform anyDouglas Gregor
of the flow-control checks for falling off the end of a function, since the return type may instantiate to void. Similarly, if a return statement has an expression and the return type of the function is void, don't complain if the expression is type-dependent, since that type could instantiate to void. Fixes PR5071. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83222 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-01enumerator value of 0 is not a null pointer constant forFariborz Jahanian
deciding const of null pointer conversion. Fixes PR5086. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83217 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-01Patch to implement static casting which requires one Fariborz Jahanian
user-defined type conversion. Fixes PR5040. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83211 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-01Anonymous namespaces, sema + codegen. A lot of semantics are still broken,John McCall
apparently because using directives aren't quite working correctly. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83184 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-30Improve template argument deduction in the case where the parameterDouglas Gregor
type is a template-id (e.g., basic_ostream<CharT, Traits>) and the argument type is a class that has a derived class matching the parameter type. Previously, we were giving up on template argument deduction too early. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83177 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-30When overload resolution fails for an overloaded operator, show theDouglas Gregor
overload candidates (but not the built-in ones). We still rely on the underlying built-in semantic analysis to produce the initial diagnostic, then print the candidates following that diagnostic. One side advantage of this approach is that we can perform more validation of C++'s operator overloading with built-in candidates vs. the semantic analysis for those built-in operators: when there are no viable candidates, we know to expect an error from the built-in operator handling code. Otherwise, we are not modeling the built-in semantics properly within operator overloading. This is checked as: assert(Result.isInvalid() && "C++ binary operator overloading is missing candidates!"); if (Result.isInvalid()) PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false); The assert() catches cases where we're wrong in a +Asserts build. The "if" makes sure that, if this happens in a production clang (-Asserts), we still build the proper built-in operator and continue on our merry way. This is effectively what happened before this change, but we've added the assert() to catch more flies. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83175 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-30Issue good diagnostics when initializing a refernce type withFariborz Jahanian
a bad initializer. Fixes pr4274. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83169 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-30Add an error for function parameters that have a qualified address space ↵Tanya Lattner
since this is not allowed by the embedded c extension spec. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83165 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-30Note location of operators caused the circularity.Fariborz Jahanian
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83153 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-30Spare the processors of those poor wretches who have no choice but to writeJohn McCall
unbounded chains of operator-> delegations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83134 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-30Detect operator-> chains of arbitrary length. Use a terrible data structureJohn McCall
to strike fear into the hearts of CPUs everywhere. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83133 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-30self-referecing operator '->' member function was causingFariborz Jahanian
infinit recursion. This patch fixes it. [13.3.1.2]-p2 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83124 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-30Find operators new/delete in base classes. FIXME -= 2;Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83119 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-29Desugaring optimizations. Add single-step desugaring methods to allJohn McCall
concrete types. Use unqualified desugaring for getAs<> and sundry. Fix a few users to either not desugar or use qualified desugar, as seemed appropriate. Removed Type's qualified desugar method, as it was easy to accidentally use instead of QualType's. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83116 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-29The C++ delete expression strips cv-qualifiers from the pointed-to type. My ↵Douglas Gregor
previous fix eliminated this behavior, so bring it back again. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83113 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-2913.1-p3 Overloadable declarationsFariborz Jahanian
Parameter declarations that differ only in the presence or absence of const and/or volatile are equivalent. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83104 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-29Introduce ObjCInterfaceLoc which provides type source information for ObjC ↵Argyrios Kyrtzidis
interfaces. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83097 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-29Introduce ObjCProtocolListLoc for keeping source location information for ↵Argyrios Kyrtzidis
protocol references. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83094 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-29Introduce ObjCProtocolListType type subclass.Argyrios Kyrtzidis
This is used only for keeping detailed type source information for protocol references, it should not participate in the semantics of the type system. Its protocol list is not canonicalized. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83093 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-29Handle C++ delete expressions when the overloaded delete operator is aDouglas Gregor
"usual deallocation function" with two arguments. CodeGen will have to handle this case specifically, since the value for the second argument (the size of the allocated object) may have to be computed at run time. Fixes the Sema part of PR4782. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83080 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-29Fixes a nasty bug which only turned up in 32bit build of clang andFariborz Jahanian
had to do with an initialized field when multiple type conversions are ambiguous but must be treated as user defined conversion for overload resolution purposes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83079 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-29Make sure to flush raw_string_ostream, from John ThompsonDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83066 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-29Slightly improve the semantics of extern templates for member functions of ↵Douglas Gregor
class templates git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83063 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-28Define and use a helper method to call a type conversionFariborz Jahanian
function. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83027 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-28Minor API change. No change in functionality.Fariborz Jahanian
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83022 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-28Provide a custom diagnostic when code tries to use an unknown builtinDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83014 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-28Multiple conversions to the same type are ambiguous but for theFariborz Jahanian
purpose of overload resolution is to be treated as a uner-defined conversion. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83004 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-28Make sure that out-of-line function and variable definitions are notDouglas Gregor
pushed into scope. Fixes PR5056. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83003 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-28Patch for AST representation for the implicit conversion to a function Fariborz Jahanian
reference/pointer. And a test case for code gen. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83000 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-28Properly match instantiations of member function templates to the function ↵Douglas Gregor
templates from which they were instantiated git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82969 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-28Don't allow the same function to enter the overload candidate setDouglas Gregor
multiple times. This requires to be more careful about re-adding candidates cached from the function template definition. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82967 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-28Determinism is for wimps. <Wimper>Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82962 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-28Teach Sema::isDeclInScope to handle overload sets constructed fromDouglas Gregor
functions that occur in multiple declaration contexts, e.g., because some were found via using declarations. Now, isDeclInScope will build a new overload set (when needed) containing only those declarations that are actually in scope. This eliminates a problem found with libstdc++'s <iostream>, where the presence of using In the longer term, I'd like to eliminate Sema::isDeclInScope in favor of better handling of the RedeclarationOnly flag in the name-lookup routines. That way, name lookup only returns the entities that matter, rather than taking the current two-pass approach of producing too many results and then filtering our the wrong results. It's not efficient, and I'm sure that we aren't filtering everywhere we should be. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82954 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-28Improve handling of friend function templates somewhatDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82950 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-26Simplify the handling of non-dependent friend class templateDouglas Gregor
specializations such as: friend class std::vector<int>; by using the same code path as explicit specializations, customized to reference an existing ClassTemplateSpecializationDecl (or build a new "undeclared" one). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82875 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-26Fix name lookup for friend class templates to consider anything in aDouglas Gregor
scope *up to and including* the innermost namespace scope, rather than just searching in the innermost namespace scope. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82849 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-26Rework the Parse-Sema interaction for friends to better support friendDouglas Gregor
class templates. We now treat friend class templates much more like normal class templates, except that they still get special name lookup rules. Fixes PR5057 and eliminates a bunch of spurious diagnostics in <iostream>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82848 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-26Yet another simplifying use of Sema::getMostSpecializedDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82844 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-26Use Sema::getMostSpecialized to eliminate a redundant implementation of the ↵Douglas Gregor
most-specialized function template git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82840 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-26Cast cleanup.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82826 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-25Use explicitly-specified template argument lists to help namingDouglas Gregor
explicit template specializations, when available. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82824 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-25Declarators can now properly represent template-ids, e.g., forDouglas Gregor
template void f<int>(int); ~~~~~~ Previously, we silently dropped the template arguments. With this change, we now use the template arguments (when available) as the explicitly-specified template arguments used to aid template argument deduction for explicit template instantiations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82806 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-25Refixed pr5050 per Anders comment. Test case enhancedFariborz Jahanian
per Doug's comment. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82791 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-25WIP implementation of explicit instantiation of function templates,Douglas Gregor
member functions of class template specializations, and static data members. The mechanics are (mostly) present, but the semantic analysis is very weak. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82789 91177308-0d34-0410-b5e6-96231b3b80d8
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-25Sigh. Be *really* careful when copying a default function argument during ↵Douglas Gregor
template instantiation git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82761 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-25Be careful about copying uninstantiated default arguments during template ↵Douglas Gregor
instantiation git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82760 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-24When entering the scope of a declarator, make sure that the scope isDouglas Gregor
complete (or, possibly causing template instantiation). Test this via some explicit specializations of member functions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82732 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-24WIP implementation of explicit function template specialization. ThisDouglas Gregor
first implementation recognizes when a function declaration is an explicit function template specialization (based on the presence of a template<> header), performs template argument deduction + ambiguity resolution to determine which template is being specialized, and hooks There are many caveats here: - We completely and totally drop any explicitly-specified template arguments on the floor - We don't diagnose any of the extra semantic things that we should diagnose. - I haven't looked to see that we're getting the right linkage for explicit specializations On a happy note, this silences a bunch of errors that show up in libstdc++'s <iostream>, although Clang still can't get through the entire header. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82728 91177308-0d34-0410-b5e6-96231b3b80d8