- Mar 27, 2009
-
-
Douglas Gregor authored
llvm-svn: 67800
-
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
-
-
rdar://problem/6697053Steve Naroff authored
Treat @package the same as @public. The documentation for @package says it is analogous to private_extern for variables/functions. Fully implementing this requires some kind of linker support (so access is denied to code outside the classes executable image). I don't believe GCC fully implements this semantic. Will discuss with Fariborz offline. llvm-svn: 67755
-
Eli Friedman authored
llvm-svn: 67746
-
Anders Carlsson authored
llvm-svn: 67726
-
Anders Carlsson authored
Factor the member access specifier setting code into its own function. No intended functionality change. llvm-svn: 67725
-
Anders Carlsson authored
Handle parsing of templates in member declarations. Pass the AccessSpecifier all the way down to ActOnClassTemplate. Doug, Sebastian: Plz review! :) llvm-svn: 67723
-
Anders Carlsson authored
llvm-svn: 67722
-
Eli Friedman authored
is of type void*. I'll try to add the appropriate checking later. llvm-svn: 67721
-
Douglas Gregor authored
specializations can be treated as a template. Finally, we can parse and process the first implementation of Fibonacci I wrote! Note that this code does not handle all of the cases where injected-class-names can be treated as templates. In particular, there's an ambiguity case that we should be able to handle (but can't), e.g., template <class T> struct Base { }; template <class T> struct Derived : Base<int>, Base<char> { typename Derived::Base b; // error: ambiguous typename Derived::Base<double> d; // OK }; llvm-svn: 67720
-
Anders Carlsson authored
Also, fix fallout from the change. llvm-svn: 67717
-
Douglas Gregor authored
templates, including in-class initializers. For example: template<typename T, T Divisor> class X { public: static const T value = 10 / Divisor; }; instantiated with, e.g., X<int, 5>::value to get the value '2'. llvm-svn: 67715
-
- Mar 25, 2009
-
-
Douglas Gregor authored
llvm-svn: 67710
-
Douglas Gregor authored
llvm-svn: 67708
-
Douglas Gregor authored
the declarations of member classes are instantiated when the owning class template is instantiated. The definitions of such member classes are instantiated when a complete type is required. This change also introduces the injected-class-name into a class template specialization. llvm-svn: 67707
-
Douglas Gregor authored
llvm-svn: 67687
-
Douglas Gregor authored
llvm-svn: 67686
-
Douglas Gregor authored
llvm-svn: 67684
-
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
-
Douglas Gregor authored
llvm-svn: 67664
-
Douglas Gregor authored
llvm-svn: 67660
-
Douglas Gregor authored
failure to perform a declaration. Instead, explicitly note semantic failures that occur during template parsing with a DeclResult. Fixes PR3872. llvm-svn: 67659
-
- Mar 24, 2009
-
-
Sebastian Redl authored
llvm-svn: 67653
-
Douglas Gregor authored
of "object type" rather than the C definition of "object type". The difference is that C's "object type" excludes incomplete types such as struct X; However, C's definition also makes it far too easy to use isObjectType as a means to detect incomplete types when in fact we should use other means (e.g., Sema::RequireCompleteType) that cope with C++ semantics, including template instantiation. I've already audited every use of isObjectType and isIncompleteType to ensure that they are doing the right thing for both C and C++, so this is patch does not change any functionality. llvm-svn: 67648
-
Douglas Gregor authored
types; add another use of RequireCompleteType. llvm-svn: 67644
-
Douglas Gregor authored
incomplete types. RequireCompleteType is needed when the type may be completed by instantiating a template. llvm-svn: 67643
-
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
-
Douglas Gregor authored
llvm-svn: 67585
-
Douglas Gregor authored
eliminating the duplication is next on the list. llvm-svn: 67579
-
Douglas Gregor authored
always get ParmVarDecls with already-adjusted types. Assert it. Thanks, Anders! llvm-svn: 67576
-
Douglas Gregor authored
a class template. At present, we can only instantiation normal methods, but not constructors, destructors, or conversion operators. As ever, this contains a bit of refactoring in Sema's type-checking. In particular: - Split ActOnFunctionDeclarator into ActOnFunctionDeclarator (handling the declarator itself) and CheckFunctionDeclaration (checking for the the function declaration), the latter of which is also used by template instantiation. - We were performing the adjustment of function parameter types in three places; collect those into a single new routine. - When the type of a parameter is adjusted, allocate an OriginalParmVarDecl to keep track of the type as it was written. - Eliminate a redundant check for out-of-line declarations of member functions; hide more C++-specific checks on function declarations behind if(getLangOptions().CPlusPlus). llvm-svn: 67575
-
- Mar 23, 2009
-
-
Ted Kremenek authored
llvm-svn: 67573
-
Ted Kremenek authored
llvm-svn: 67569
-
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
-
Douglas Gregor authored
library function, accept this declaration and pretend that we do not know that this is a library function. autoconf depends on this (broken) behavior. llvm-svn: 67541
-