Fariborz Jahanian
c34c179f4b
Perform overload resolution when selecting a pointer conversion
...
function for delete of a class expression and issue
good diagnostic when result is ambiguous.
llvm-svn: 81870
2009-09-15 17:21:47 +00:00
Anders Carlsson
6b2737d591
If a conversion operator exists in a base class, make sure to cast the object to that base class.
...
llvm-svn: 81852
2009-09-15 07:42:44 +00:00
Anders Carlsson
110b07b848
When performing an user defined conversion sequence, perform the initial standard conversion sequence. This lets us remove a workaround in SemaCompleteConstructorCall.
...
llvm-svn: 81847
2009-09-15 06:28:28 +00:00
Anders Carlsson
611da28725
Revert for real.
...
llvm-svn: 81844
2009-09-15 05:49:31 +00:00
Anders Carlsson
e5506884cc
Whoops, didn't mean to commit this.
...
llvm-svn: 81842
2009-09-15 05:31:01 +00:00
Anders Carlsson
4e66cda3f7
Only reuse an already existing ImplicitCastExpr if the cast kinds are the same.
...
llvm-svn: 81841
2009-09-15 05:28:24 +00:00
Anders Carlsson
aedb46fe21
If a function call returns a reference, don't bind it to a temporary.
...
llvm-svn: 81743
2009-09-14 01:30:44 +00:00
Fariborz Jahanian
b394f50ac9
More work toward having an access method for visible
...
conversion functions.
llvm-svn: 81618
2009-09-12 18:26:03 +00:00
Anders Carlsson
7ec8ccde01
Use the correct CastKind for derived-to-base pointer conversions.
...
llvm-svn: 81608
2009-09-12 04:46:44 +00:00
Fariborz Jahanian
b54ccb2782
Patch to build visible conversion function list lazily and make its
...
first use in calling the conversion function on delete statements.
llvm-svn: 81576
2009-09-11 21:44:33 +00:00
Douglas Gregor
73341c4e63
Diagnose VLAs as an error in C++.
...
Also, treat the GNU __null as an integral constant expression to match
GCC's behavior.
llvm-svn: 81490
2009-09-11 00:18:58 +00:00
Douglas Gregor
0fea62d0c7
For a C++ delete expression where the operand is of class type that
...
has a single conversion to pointer-to-object type, implicitly convert
to that pointer-to-object type (C++ [expr.delete]p1).
llvm-svn: 81401
2009-09-09 23:39:55 +00:00
Douglas Gregor
5d3507d39c
Improve handling of initialization by constructor, by ensuring that
...
such initializations properly convert constructor arguments and fill
in default arguments where necessary. This also makes the ownership
model more clear.
llvm-svn: 81394
2009-09-09 23:08:42 +00:00
Anders Carlsson
e9766d559b
If a cast expression needs either a conversion function or a constructor to be called, generate implicit child expressions that call them.
...
llvm-svn: 81383
2009-09-09 21:33:21 +00:00
Mike Stump
11289f4280
Remove tabs, and whitespace cleanups.
...
llvm-svn: 81346
2009-09-09 15:08:12 +00:00
Anders Carlsson
5995a3e8fa
BuildCXXConstructExpr now takes a MultiExprArg.
...
llvm-svn: 81160
2009-09-07 22:23:31 +00:00
Anders Carlsson
1b4ebfab2b
Pass the ConstructLoc to BuildCXXConstructExpr.
...
llvm-svn: 81068
2009-09-05 07:40:38 +00:00
Douglas Gregor
bddb73fa1d
If a destructor is referenced or a pseudo-destructor expression is
...
formed without a trailing '(', diagnose the error (these expressions
must be immediately called), emit a fix-it hint, and fix the code.
llvm-svn: 81015
2009-09-04 18:29:40 +00:00
Douglas Gregor
ad8a336b40
Implement AST, semantics, and CodeGen for C++ pseudo-destructor
...
expressions, e.g.,
p->~T()
when p is a pointer to a scalar type.
We don't currently diagnose errors when pseudo-destructor expressions
are used in any way other than by forming a call.
llvm-svn: 81009
2009-09-04 17:36:40 +00:00
Fariborz Jahanian
37d065680b
Patch to instantiate destructors used to destruct
...
base and data members when they are needed.
llvm-svn: 80967
2009-09-03 23:18:17 +00:00
Douglas Gregor
2b6ca46c6b
Improve template instantiation for member access expressions that
...
involve qualified names, e.g., x->Base::f. We now maintain enough
information in the AST to compare the results of the name lookup of
"Base" in the scope of the postfix-expression (determined at template
definition time) and in the type of the object expression.
llvm-svn: 80953
2009-09-03 21:38:09 +00:00
Douglas Gregor
b7bfe79412
Rewrite of our handling of name lookup in C++ member access expressions, e.g.,
...
x->Base::f
We no longer try to "enter" the context of the type that "x" points
to. Instead, we drag that object type through the parser and pass it
into the Sema routines that need to know how to perform lookup within
member access expressions.
We now implement most of the crazy name lookup rules in C++
[basic.lookup.classref] for non-templated code, including performing
lookup both in the context of the type referred to by the member
access and in the scope of the member access itself and then detecting
ambiguities when the two lookups collide (p1 and p4; p3 and p7 are
still TODO). This change also corrects our handling of name lookup
within template arguments of template-ids inside the
nested-name-specifier (p6; we used to look into the scope of the
object expression for them) and fixes PR4703.
I have disabled some tests that involve member access expressions
where the object expression has dependent type, because we don't yet
have the ability to describe dependent nested-name-specifiers starting
with an identifier.
llvm-svn: 80843
2009-09-02 22:59:36 +00:00
Anders Carlsson
6904f644e7
Add a CK_FunctionToPointerDecay cast kind.
...
llvm-svn: 80719
2009-09-01 20:37:18 +00:00
Douglas Gregor
84f14dd674
Preliminary AST representation and semantic analysis for
...
explicitly-specified template argument lists in member reference
expressions, e.g.,
x->f<int>()
llvm-svn: 80646
2009-09-01 00:37:14 +00:00
Douglas Gregor
fbc1823451
Add parsing for references to member function templates with explicit
...
template argument lists, e.g., x.f<int>().
Semantic analysis will be a separate commit.
llvm-svn: 80624
2009-08-31 21:16:32 +00:00
Douglas Gregor
522fbc4969
Support explicit C++ member operator syntax, from James Porter!
...
llvm-svn: 80608
2009-08-31 19:52:13 +00:00
Fariborz Jahanian
3df8767869
Patch for code gen. for c-style cast which ends in
...
using class's conversion functions [12.3.2-p2]
llvm-svn: 80433
2009-08-29 19:15:16 +00:00
Fariborz Jahanian
2fee79a9a1
path to ir-gen 12.3.1 Conversion by constructor
...
llvm-svn: 80398
2009-08-28 22:04:50 +00:00
Anders Carlsson
228eea36a3
Pass InOverloadResolution all the way down to IsPointerConversion.
...
llvm-svn: 80368
2009-08-28 15:33:32 +00:00
Fariborz Jahanian
8b899e4247
ir-gen related patch for type conversion
...
with class type conversion methods. WIP.
llvm-svn: 80365
2009-08-28 15:11:24 +00:00
Anders Carlsson
20d1332d76
Add an InOverloadResolution flag to TryCopyInitialization.
...
llvm-svn: 80261
2009-08-27 17:37:39 +00:00
Anders Carlsson
271e3a4d47
Remove more default arguments.
...
llvm-svn: 80260
2009-08-27 17:30:43 +00:00
Anders Carlsson
ef4c72135f
Remove default arguments from TryImplicitConversion and fix a bug found in the process.
...
llvm-svn: 80258
2009-08-27 17:24:15 +00:00
Anders Carlsson
03068aa077
Remove default argument from TryCopyInitialization.
...
llvm-svn: 80256
2009-08-27 17:18:13 +00:00
Anders Carlsson
5ec4abf268
Revert the flags change for now, I have a better idea for this.
...
llvm-svn: 80255
2009-08-27 17:14:02 +00:00
Anders Carlsson
2f7e956f16
Add a OverloadResolutionFlags and start converting some of the overload methods over to using it instead of bools arguments.
...
llvm-svn: 80248
2009-08-27 16:01:18 +00:00
Anders Carlsson
574315a0fa
Add a BuildCXXTemporaryObjectExpr and use it so default arguments will be instantiated correctly for temporary object expressions.
...
llvm-svn: 80206
2009-08-27 05:08:22 +00:00
Anders Carlsson
55243168df
In ActOnCXXTypeConstructExpr, check that the type is complete and non-abstract before creating any expressions. This assures that any templates are instantiated if necessary.
...
llvm-svn: 80200
2009-08-27 03:53:50 +00:00
Anders Carlsson
d624e16833
Bye-bye old RequireCompleteType.
...
llvm-svn: 80182
2009-08-26 23:45:07 +00:00
Anders Carlsson
029fc690d3
Remove the PrintType argument from RequireCompleteType.
...
llvm-svn: 80174
2009-08-26 22:59:12 +00:00
Fariborz Jahanian
d79d5053bd
AST for conversion by conversion functions. WIP.
...
llvm-svn: 80135
2009-08-26 20:34:58 +00:00
Anders Carlsson
c24fc2949e
More support for pseudo dtors.
...
llvm-svn: 80129
2009-08-26 19:22:42 +00:00
Fariborz Jahanian
1cec0c4c94
update to CXXFunctionalCastExpr to support ir-gen for
...
type convesions of class objects [class.conv]. WIP.
llvm-svn: 80127
2009-08-26 18:55:36 +00:00
Anders Carlsson
e7b9d71aab
Address some of Doug's comments.
...
llvm-svn: 80114
2009-08-26 17:36:19 +00:00
Anders Carlsson
7e3f0e4e0d
Parsing of pseudo-destructors.
...
llvm-svn: 80055
2009-08-25 23:46:41 +00:00
Anders Carlsson
6eb55575da
BuildCXXConstructExpr now returns an OwningExprResult.
...
llvm-svn: 79975
2009-08-25 05:12:04 +00:00
Douglas Gregor
b00b10eb2e
Implement support for equality comparisons (!=, ==) of member
...
pointers, by extending the "composite pointer type" logic to include
member pointer types.
Introduce test cases for member pointer comparisons, including those
that involve the builtin operator candidates implemented earlier.
llvm-svn: 79925
2009-08-24 17:42:35 +00:00
Anders Carlsson
d7923c6ed7
Add CK_NullToMemberPointer and CK_BaseToDerivedMemberPointer cast kinds. Make -ast-dump print out the cast kinds of cast expressions.
...
llvm-svn: 79787
2009-08-22 23:33:40 +00:00
Argyrios Kyrtzidis
6032ef1aa3
Remove TypeSpecStartLocation from VarDecl/FunctionDecl/FieldDecl, and use DeclaratorInfo to get this information.
...
llvm-svn: 79584
2009-08-21 00:31:54 +00:00
Argyrios Kyrtzidis
c7148c974d
Use Sema's LocInfoType to pass and preserve type source info through the Parser.
...
llvm-svn: 79395
2009-08-19 01:28:28 +00:00