Commit Graph

178 Commits

Author SHA1 Message Date
Anders Carlsson 58b19d5310 class.nested.type is done.
llvm-svn: 74034
2009-06-24 00:32:04 +00:00
Douglas Gregor ac1798a859 Note that we've implemented the right angle brackets extension in C++0x
llvm-svn: 73389
2009-06-15 16:50:45 +00:00
Douglas Gregor 33834516f3 Update LLVM.
Implement support for C++ Substitution Failure Is Not An Error
(SFINAE), which says that errors that occur during template argument
deduction do *not* produce diagnostics and do not necessarily make a
program ill-formed. Instead, template argument deduction silently
fails. This is currently implemented for template argument deduction
during matching of class template partial specializations, although
the mechanism will also apply to template argument deduction for
function templates. The scheme is simple:

  - If we are in a template argument deduction context, any diagnostic
    that is considered a SFINAE error (or warning) will be
    suppressed. The error will be propagated up the call stack via the
    normal means.
  - By default, all warnings and errors are SFINAE errors. Add the
    NoSFINAE class to a diagnostic in the .td file to make it a hard
    error (e.g., for access-control violations).

Note that, to make this fully work, every place in Sema that emits an
error *and then immediately recovers* will need to check
Sema::isSFINAEContext() to determine whether it must immediately
return an error rather than recovering.

llvm-svn: 73332
2009-06-14 07:33:30 +00:00
Douglas Gregor 170bc42547 It looks like we've finished off matching of class template partial specializations; add comments and update the C++ status page
llvm-svn: 73263
2009-06-12 22:31:52 +00:00
Douglas Gregor 30b0197169 Finish implementing checking of class template partial specializations
llvm-svn: 73260
2009-06-12 22:21:45 +00:00
Douglas Gregor 09a3023e65 Diagnose C++ [temp.class.spec]p9b3, where a class template partial
specialization's arguments are identical to the implicit template
arguments of the primary template. Typically, this is meant to be a
declaration/definition of the primary template, so we give that
advice.

llvm-svn: 73259
2009-06-12 22:08:06 +00:00
Douglas Gregor dc41eb18e9 Update the C++ status to reflect improvements in template argument deduction and the handling of class template partial specializations
llvm-svn: 73242
2009-06-12 19:15:38 +00:00
Douglas Gregor a1f4997368 Semantic analysis for explicit instantiation of class templates. We
still aren't instantiating the definitions of class template members,
and core issues 275 and 259 will both affect the checking that we do
for explicit instantiations (but are not yet implemented).

llvm-svn: 71613
2009-05-13 00:25:59 +00:00
Douglas Gregor 1b57ff32a8 Implement parsing for explicit instantiations of class templates, e.g.,
template class X<int>;

This also cleans up the propagation of template information through
declaration parsing, which is used to improve some diagnostics.

llvm-svn: 71608
2009-05-12 23:25:50 +00:00
Douglas Gregor 9e0d21a444 Align the N/A in the C++ status table, from Anders Johnsen
llvm-svn: 71576
2009-05-12 18:36:58 +00:00
Douglas Gregor 5a4d12afbf Fill in more C++ status. We're now using the check mark to mean,
"complete, and we have tests for every paragraph".

llvm-svn: 71564
2009-05-12 17:55:28 +00:00
Sebastian Redl 9257b234a5 Update minor points in C++ status table.
llvm-svn: 71406
2009-05-10 20:06:11 +00:00
Sebastian Redl 576fd424df Implement C++0x nullptr.
llvm-svn: 71405
2009-05-10 18:38:11 +00:00
Douglas Gregor 1bbffbceae Big update to the C++ status table to reflect "recent"
development. Still much more to write!

llvm-svn: 71167
2009-05-07 17:50:16 +00:00
Sebastian Redl 2b9cacbffa Have the parser communicate the exception specification to the action.
llvm-svn: 70389
2009-04-29 17:30:04 +00:00
Sebastian Redl 4c018663b2 Track down return statements in the handlers of a function-try-block of constructors. Meh ...
llvm-svn: 70256
2009-04-27 21:33:24 +00:00
Sebastian Redl 4de47b445b Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes.
llvm-svn: 70242
2009-04-27 20:27:31 +00:00
Sebastian Redl 21b349d5ea Fill in the C++ status table for exceptions
llvm-svn: 70217
2009-04-27 18:25:15 +00:00
Sebastian Redl 8ce189f9ce Conditional operator C++ checking complete. What issues remain are in more general code.
llvm-svn: 69555
2009-04-19 21:53:20 +00:00
Sebastian Redl d1309a3c4d Add deleted functions and rvalue references to C++ status.
llvm-svn: 68903
2009-04-12 17:41:24 +00:00
Anders Carlsson 452e1c8a6a We fully support namespace aliases now.
llvm-svn: 68116
2009-03-31 17:17:14 +00:00
Anders Carlsson b6da73f2e0 class.abstract is complete. Anything that doesn't work is a bug.
llvm-svn: 67595
2009-03-24 01:24:06 +00:00
Douglas Gregor 2460c0c37c Link from the C++ status page to the open projects page
llvm-svn: 67399
2009-03-20 20:39:57 +00:00
Anders Carlsson bd1a1d2fa6 We support static_assert.
llvm-svn: 67043
2009-03-16 17:28:26 +00:00
Douglas Gregor 83e9e91479 Note some advances in our C++ support
llvm-svn: 66742
2009-03-12 00:09:31 +00:00
Gabor Greif dd4ddf13a6 fix (hopefully) some validation errors
llvm-svn: 65455
2009-02-25 15:22:45 +00:00
Cedric Venet 08438133da Add svn:eol-style=native to some files
Correct two files with inconsistent lines endings.

llvm-svn: 64564
2009-02-14 20:20:19 +00:00
Sebastian Redl f3b5e27fee Make const-initialized const integral variables I-C-Es in C++.
llvm-svn: 64015
2009-02-07 13:06:23 +00:00
Sebastian Redl 779dd9382d Fill in C++ status table for section 7 (declarations).
llvm-svn: 64013
2009-02-07 12:42:13 +00:00
Sebastian Redl 112a976616 Implement dereferencing of pointers-to-member.
llvm-svn: 63983
2009-02-07 00:15:38 +00:00
Sebastian Redl 18f8ff62a3 Implement taking address of member functions, including overloaded ones.
llvm-svn: 63779
2009-02-04 21:23:32 +00:00
Douglas Gregor 7bad6d1d32 Argument Dependent Lookup is done (for now). Also, update the status
for a few other name-lookup sections.

llvm-svn: 63734
2009-02-04 15:07:16 +00:00
Douglas Gregor d14247a9e5 Implement and test aggregate initialization in C++. Major changes:
- Support initialization of reference members; complain if any
  reference members are left uninitialized.
  - Use C++ copy-initialization for initializing each element (falls
  back to constraint checking in C)
  - Make sure we diagnose when one tries to provide an initializer
  list for a non-aggregate.
  - Don't complain about empty initializers in C++ (they are permitted)
  - Unrelated but necessary: don't bother trying to convert the
  decl-specifier-seq to a type when we're dealing with a C++
  constructor, destructor, or conversion operator; it results in
  spurious warnings.

llvm-svn: 63431
2009-01-30 22:09:00 +00:00
Sebastian Redl ed8f200318 Implement pointer to member handling in static_cast.
Fix a stupid mistake in UnwrapSimilarPointers that made any two member pointers compatible as long as the pointee was the same.
Make a few style corrections as suggested by Chris.

llvm-svn: 63215
2009-01-28 18:33:18 +00:00
Douglas Gregor fb03466388 Complete semantic checking for typedef redeclarations in C++. The
rules are slightly different than in C, and now we handle both
dialects properly.

llvm-svn: 63211
2009-01-28 17:15:10 +00:00
Sebastian Redl a5a77a6dc6 Add handling of member pointers to reinterpret_cast.
llvm-svn: 63150
2009-01-27 23:18:31 +00:00
Sebastian Redl b44ab5f25d Add support for member pointers to const_cast.
llvm-svn: 63055
2009-01-26 22:19:12 +00:00
Sebastian Redl cf8e1fa58e Update C++ status table with new member pointer conversion capabilities.
llvm-svn: 62977
2009-01-26 00:11:25 +00:00
Douglas Gregor 5fb5397238 Introduce support for C++0x explicit conversion operators (N2437)
Small cleanup in the handling of user-defined conversions. 

Also, implement an optimization when constructing a call. We avoid
recomputing implicit conversion sequences and instead use those
conversion sequences that we computed as part of overload resolution.

llvm-svn: 62231
2009-01-14 15:45:31 +00:00
Douglas Gregor c5e61070f6 Add the proper restrictions on the left-hand argument of a built-in
assignment operator candidate (C++ [over.match.oper]p4).

llvm-svn: 62128
2009-01-13 00:52:54 +00:00
Douglas Gregor ae5e28578c Update C++ status and add a few more tests of overloading for member function calls
llvm-svn: 62121
2009-01-12 23:20:38 +00:00
Douglas Gregor f4d332797b Finished semantic analysis of anonymous unions in C++.
Duplicate-member checking within classes is still a little messy, and
anonymous unions are still completely broken in C. We'll need to unify
the handling of fields in C and C++ to make this code applicable in
both languages.

llvm-svn: 61878
2009-01-07 19:46:03 +00:00
Douglas Gregor d7c4d984d0 Parser support for C++ using directives, from Piotr Rak
llvm-svn: 61486
2008-12-30 03:27:21 +00:00
Sebastian Redl 58097c79c2 Fill in C++ status table for statements.
llvm-svn: 61457
2008-12-28 17:18:13 +00:00
Sebastian Redl e10c2c32af Implement checks for bool in increment and decrement.
llvm-svn: 61275
2008-12-20 09:35:34 +00:00
Douglas Gregor dd12c786a0 Added a test for default arguments added to out-of-line member
functions. They work except that name lookup within the default
arguments needs to be deferred until the class definition is complete
(see FIXME in the test).

llvm-svn: 61059
2008-12-16 00:08:34 +00:00
Sebastian Redl e0c2affc5e Fill in C++ status table for expressions.
llvm-svn: 60763
2008-12-09 14:40:01 +00:00
Sebastian Redl 82639aff7b Fill in some parts of cxx_status.html
llvm-svn: 60699
2008-12-08 16:24:08 +00:00
Sebastian Redl 5c6ebcc198 Parsing new and delete is now complete.
llvm-svn: 60425
2008-12-02 17:22:40 +00:00
Sebastian Redl 351bb78a10 Handle new by passing the Declaration to the Action, not a processed type.
llvm-svn: 60413
2008-12-02 14:43:59 +00:00
Douglas Gregor 8e3e16ed2e Update C++ status
llvm-svn: 59735
2008-11-20 16:46:32 +00:00
Douglas Gregor ab7897ac44 Implement the rest of C++ [over.call.object], which permits the object
being called to be converted to a reference-to-function,
pointer-to-function, or reference-to-pointer-to-function. This is done
through "surrogate" candidate functions that model the conversions
from the object to the function (reference/pointer) and the
conversions in the arguments.

llvm-svn: 59674
2008-11-19 22:57:39 +00:00
Douglas Gregor 91cea0ad1e Support for calling overloaded function call operators (operator())
with function call syntax, e.g.,

  Functor f;
  f(x, y);

This is the easy part of handling calls to objects of class type 
(C++ [over.call.object]). The hard part (coping with conversions from
f to function pointer or reference types) will come later. Nobody uses
that stuff anyway, right? :)

llvm-svn: 59663
2008-11-19 21:05:33 +00:00
Douglas Gregor 40412acc02 Support overloading of the subscript operator[], including support for
built-in operator candidates. Test overloading of '&' and ','.

In C++, a comma expression is an lvalue if its right-hand
subexpression is an lvalue. Update Expr::isLvalue accordingly.

llvm-svn: 59643
2008-11-19 17:17:41 +00:00
Douglas Gregor d08452f60a Added operator overloading for unary operators, post-increment, and
post-decrement, including support for generating all of the built-in
operator candidates for these operators. 

C++ and C have different rules for the arguments to the builtin unary
'+' and '-'. Implemented both variants in Sema::ActOnUnaryOp.

In C++, pre-increment and pre-decrement return lvalues. Update
Expr::isLvalue accordingly.

llvm-svn: 59638
2008-11-19 15:42:04 +00:00
Sebastian Redl ccdfabab35 Implement parsing and semantic checking of the 'mutable' keyword.
Thanks to Doug for the review. Actual effects of mutable to follow.

llvm-svn: 59331
2008-11-14 23:42:31 +00:00
Sebastian Redl c470476420 Implement C++ 'typeid' parsing and sema.
llvm-svn: 59042
2008-11-11 11:37:55 +00:00
Douglas Gregor cd695e500d Basic support for taking the address of an overloaded function
llvm-svn: 59000
2008-11-10 20:40:00 +00:00
Sebastian Redl e0b2b1bf8c Update C++ status: class support improved due to nested name parsing.
llvm-svn: 58932
2008-11-09 11:32:32 +00:00
Sebastian Redl f4485de48a Update C++ status to reflect parser capabilities for chapter 9 (classes). Slightly extend the class parser test.
llvm-svn: 58909
2008-11-08 15:40:37 +00:00
Sebastian Redl 2e133e47aa Update C++ status: dynamic_cast is sema-complete.
llvm-svn: 58907
2008-11-08 14:43:13 +00:00
Cedric Venet 571c662350 Use css style instead of hard coded color in cxx_status. No visible change.
llvm-svn: 58867
2008-11-07 22:24:44 +00:00
Douglas Gregor 60e64cfc43 Update C++ status
llvm-svn: 58862
2008-11-07 20:16:04 +00:00
Douglas Gregor 7d5fc7e28b Initial, rudimentary implementation of operator overloading for binary
operators. For example, one can now write "x + y" where x or y is a
class or enumeration type, and Clang will perform overload resolution
for "+" based on the overloaded operators it finds.

The other kinds of overloadable operators in C++ will follow this same
approach. 

Three major issues remain:
  1) We don't find member operators
  2) Since we don't have user-defined conversion operators, we can't
  call any of the built-in overloaded operators in C++ [over.built].
  3) Once we've done the semantic checks, we drop the overloaded
  operator on the floor; it doesn't get into the AST at all.

llvm-svn: 58821
2008-11-06 23:29:22 +00:00
Douglas Gregor 11d0c4c098 Parsing, ASTs, and semantic analysis for the declaration of overloaded
operators in C++. Overloaded operators can be called directly via
their operator-function-ids, e.g., "operator+(foo, bar)", but we don't
yet implement the semantics of operator overloading to handle, e.g.,
"foo + bar".

llvm-svn: 58817
2008-11-06 22:13:31 +00:00
Douglas Gregor 831c93f6c0 Parsing, representation, and preliminary semantic analysis of destructors.
Implicit declaration of destructors (when necessary).

Extended Declarator to store information about parsed constructors
and destructors; this will be extended to deal with declarators that
name overloaded operators (e.g., "operator +") and user-defined
conversion operators (e.g., "operator int").

llvm-svn: 58767
2008-11-05 20:51:48 +00:00
Douglas Gregor e8381c00eb Initial implementation of parsing, semantic analysis, and AST-building
for constructor initializations, e.g.,

  class A { };
  class B : public A { 
    int m;
  public:
    B() : A(), m(17) { };
  };

llvm-svn: 58749
2008-11-05 04:29:56 +00:00
Daniel Dunbar 40346506f1 Remove stray character.
llvm-svn: 58713
2008-11-04 18:44:31 +00:00
Douglas Gregor 242ee9dfae Fine-grained C++ status page
llvm-svn: 58699
2008-11-04 15:52:45 +00:00
Argyrios Kyrtzidis 379d2edc29 Mention 'wchar_t' at the C++ status page.
llvm-svn: 54595
2008-08-09 22:12:36 +00:00
Argyrios Kyrtzidis 5c48a70dad -Added bool feature.
-Set "Named Casts" feature to partial parser/sema support because reinterpret_cast is not properly implemented.
-Removed "Virtual functions" feature because it is already covered by "Class definitions".
-Removed "Templates" because we should either list *all* missing/supported features or just list the features with some support. Mentioning just a few missing features without listing all of them makes little sense.

llvm-svn: 53095
2008-07-03 08:32:59 +00:00
Chris Lattner 5cc931d409 add a description of what sema and parser mean, add C++ style casts.
llvm-svn: 53027
2008-07-02 16:28:43 +00:00
Argyrios Kyrtzidis 1b1a711eb3 Add note that most of C++ is not supported.
llvm-svn: 53023
2008-07-02 15:10:46 +00:00
Argyrios Kyrtzidis fd2012b04d Drop 'C++' from the features; suggestion by Holger Schurig.
llvm-svn: 53020
2008-07-02 14:16:29 +00:00
Argyrios Kyrtzidis d2082befe5 Fix the page title.
llvm-svn: 53017
2008-07-02 13:44:11 +00:00
Gabor Greif dedda503cb minor tweaks, escape < and >
llvm-svn: 53016
2008-07-02 12:34:47 +00:00
Gabor Greif a5cb073c5c add two popular c++ features
llvm-svn: 53015
2008-07-02 12:31:13 +00:00
Argyrios Kyrtzidis ac1c5f925e Add a C++ status report page.
llvm-svn: 53013
2008-07-02 11:38:59 +00:00