- Mar 28, 2009
-
-
Anders Carlsson authored
SemaCXX//overload-member-call.cpp SemaCXX//overloaded-operator.cpp SemaTemplate//instantiate-method.cpp llvm-svn: 67912
-
- Mar 27, 2009
-
-
Sebastian Redl authored
llvm-svn: 67870
-
Anders Carlsson authored
llvm-svn: 67820
-
Douglas Gregor authored
llvm-svn: 67818
-
Douglas Gregor authored
uniqued representation that should both save some memory and make it far easier to properly build canonical types for types involving dependent nested-name-specifiers, e.g., "typename T::Nested::type". This approach will greatly simplify the representation of CXXScopeSpec. That'll be next. llvm-svn: 67799
-
Anders Carlsson authored
const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, AccessSpecifier AS); so we can easily add access specifiers to diagnostics. llvm-svn: 67795
-
- Mar 26, 2009
-
-
Anders Carlsson authored
Factor the member access specifier setting code into its own function. No intended functionality change. llvm-svn: 67725
-
- Mar 25, 2009
-
-
Anders Carlsson authored
class C { C() { } int a; }; C::C() : a(10) { } We also diagnose when initializers are used on declarations that aren't constructors: t.cpp:1:10: error: only constructors take base initializers void f() : a(10) { } ^ Doug and/or Sebastian: I'd appreciate a review, especially the nested-name-spec test results (from the looks of it we now match gcc in that test.) llvm-svn: 67672
-
- Mar 24, 2009
-
-
Sebastian Redl authored
llvm-svn: 67653
-
Anders Carlsson authored
Fix the bug that Eli noticed where we wouldn't look at function decls outside the class declaration. llvm-svn: 67627
-
Douglas Gregor authored
llvm-svn: 67623
-
Anders Carlsson authored
llvm-svn: 67598
-
Anders Carlsson authored
class C { void g(C c); virtual void f() = 0; }; In this case, C is not known to be abstract when doing semantic analysis on g. This is done by recursively traversing the abstract class and checking the types of member functions. llvm-svn: 67594
-
- Mar 23, 2009
-
-
Anders Carlsson authored
More improvements to abstract type checking. Handle arrays correctly, and make sure to check parameter types before they decay. llvm-svn: 67550
-
Anders Carlsson authored
llvm-svn: 67542
-
Sebastian Redl authored
llvm-svn: 67492
-
- Mar 22, 2009
-
-
Sebastian Redl authored
llvm-svn: 67480
-
Anders Carlsson authored
llvm-svn: 67476
-
Anders Carlsson authored
Keep track of whether a class is abstract or not. This is currently only used for the __is_abstract type trait. llvm-svn: 67461
-
- Mar 19, 2009
-
-
Douglas Gregor authored
qualified name, e.g., foo::x so that we retain the nested-name-specifier as written in the source code and can reproduce that qualified name when printing the types back (e.g., in diagnostics). This is PR3493, which won't be complete until finished the other tasks mentioned near the end of this commit. The parser's representation of nested-name-specifiers, CXXScopeSpec, is now a bit fatter, because it needs to contain the scopes that precede each '::' and keep track of whether the global scoping operator '::' was at the beginning. For example, we need to keep track of the leading '::', 'foo', and 'bar' in ::foo::bar::x The Action's CXXScopeTy * is no longer a DeclContext *. It's now the opaque version of the new NestedNameSpecifier, which contains a single component of a nested-name-specifier (either a DeclContext * or a Type *, bitmangled). The new sugar type QualifiedNameType composes a sequence of NestedNameSpecifiers with a representation of the type we're actually referring to. At present, we only build QualifiedNameType nodes within Sema::getTypeName. This will be extended to other type-constructing actions (e.g., ActOnClassTemplateId). Also on the way: QualifiedDeclRefExprs will also store a sequence of NestedNameSpecifiers, so that we can print out the property nested-name-specifier. I expect to also use this for handling dependent names like Fibonacci<I - 1>::value. llvm-svn: 67265
-
- Mar 18, 2009
-
-
Douglas Gregor authored
Type pointer. This allows our nested-name-specifiers to retain more information about the actual spelling (e.g., which typedef did the user name, or what exact template arguments were used in the template-id?). It will also allow us to have dependent nested-name-specifiers that don't map to any DeclContext. llvm-svn: 67140
-
- Mar 17, 2009
-
-
Sebastian Redl authored
Almost complete implementation of rvalue references. One bug, and a few unclear areas. Maybe Doug can shed some light on some of the fixmes. llvm-svn: 67059
-
- Mar 15, 2009
-
-
Anders Carlsson authored
llvm-svn: 67031
-
Sebastian Redl authored
Convert a bunch of actions to smart pointers, and also bring PrintParserCallbacks a bit more in line with reality. llvm-svn: 67029
-
Anders Carlsson authored
llvm-svn: 67027
-
- Mar 14, 2009
-
-
Anders Carlsson authored
llvm-svn: 66997
-
Anders Carlsson authored
More static_assert work. Check that the assert expr is valid and show an error if it's false. Create the declaration and add it to the current context. llvm-svn: 66995
-
- Mar 13, 2009
-
-
Douglas Gregor authored
instantiation for binary operators. This change moves most of the operator-overloading code from the parser action ActOnBinOp to a new, parser-independent semantic checking routine CreateOverloadedBinOp. Of particular importance is the fact that CreateOverloadedBinOp does *not* perform any name lookup based on the current parsing context (it doesn't take a Scope*), since it has to be usable during template instantiation, when there is no scope information. Rather, it takes a pre-computed set of functions that are visible from the context or via argument-dependent lookup, and adds to that set any member operators and built-in operator candidates. The set of functions is computed in the parser action ActOnBinOp based on the current context (both operator name lookup and argument-dependent lookup). Within a template, the set computed by ActOnBinOp is saved within the type-dependent AST node and is augmented with the results of argument-dependent name lookup at instantiation time (see TemplateExprInstantiator::VisitCXXOperatorCallExpr). Sadly, we can't fully test this yet. I'll follow up with template instantiation for sizeof so that the real fun can begin. llvm-svn: 66923
-
- Mar 12, 2009
-
-
Douglas Gregor authored
Move most of the checking from ActOnCXXMemberDeclarator to other, more general routines. This is a step toward separating the checking logic from Declarators, which in turn is required for template instantiation. llvm-svn: 66734
-
- Mar 11, 2009
-
-
Douglas Gregor authored
Make sure that we set the access specifier for an instantiated FieldDecl, and that the aggregate and POD flags for an instantiated class template are updated based on instantiation of a FieldDecl llvm-svn: 66701
-
Douglas Gregor authored
llvm-svn: 66698
-
Douglas Gregor authored
llvm-svn: 66696
-
Douglas Gregor authored
for FieldDecls so that the parser and the template instantiation make use of the same semantic checking module. llvm-svn: 66685
-
- Mar 10, 2009
-
-
Douglas Gregor authored
(default: 99). Beyond this limit, produce an error and consider the current template instantiation a failure. The stack we're building to track the instantiations will, eventually, be used to produce instantiation backtraces from diagnostics within template instantiation. However, we're not quite there yet. This adds a new Clang driver option -ftemplate-depth=NNN, which should eventually be generated from the GCC command-line operation -ftemplate-depth-NNN (note the '-' rather than the '='!). I did not make the driver changes to do this mapping. llvm-svn: 66513
-
Douglas Gregor authored
such as replacing 'T' in vector<T>. There are a few aspects to this: - Extend TemplateArgument to allow arbitrary expressions (an Expr*), and switch ClassTemplateSpecializationType to store TemplateArguments rather than it's own type-or-expression representation. - ClassTemplateSpecializationType can now store dependent types. In that case, the canonical type is another ClassTemplateSpecializationType (with default template arguments expanded) rather than a declaration (we don't build Decls for dependent types). - Split ActOnClassTemplateId into ActOnClassTemplateId (called from the parser) and CheckClassTemplateId (called from ActOnClassTemplateId and InstantiateType). They're smart enough to handle dependent types, now. llvm-svn: 66509
-
- Mar 09, 2009
-
-
Douglas Gregor authored
Rename DiagnoseIncompleteType to RequireCompleteType, and update the documentation to reflect the fact that we can instantiate templates here llvm-svn: 66421
-
- Mar 06, 2009
-
-
Chris Lattner authored
llvm-svn: 66214
-
Chris Lattner authored
llvm-svn: 66213
-
- Mar 05, 2009
-
-
Chris Lattner authored
more consistently. llvm-svn: 66210
-
- Mar 03, 2009
-
-
Douglas Gregor authored
response to attempts to diagnose an "incomplete" type. This will force us to use DiagnoseIncompleteType more regularly (rather than looking at isIncompleteType), but that's also a good thing. Implicit instantiation is still very simplistic, and will create a new definition for the class template specialization (as it should) but it only actually instantiates the base classes and attaches those. Actually instantiating class members will follow. Also, instantiate the types of non-type template parameters before checking them, allowing, e.g., template<typename T, T Value> struct Constant; to work properly. llvm-svn: 65924
-