summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaExprCXX.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Fix a horrible bug in our handling of C-style casting, where a C-styleDouglas Gregor2011-01-271-9/+8
| | | | | | | | | | | derived-to-base cast that also casts away constness (one of the cases for static_cast followed by const_cast) would be treated as a bit-cast rather than a derived-to-base class, causing miscompiles and heartburn. Fixes <rdar://problem/8913298>. llvm-svn: 124340
* Reference qualifiers for *this: implement C++0x [expr.mptr.oper]p6,Douglas Gregor2011-01-261-0/+26
| | | | | | | the restrictions on .* and ->* for ref-qualified pointer-to-member functions. llvm-svn: 124294
* Add an attribute to forbid temporary instances of a type. This allows classJeffrey Yasskin2011-01-251-1/+4
| | | | | | | | | | | | | | | authors to write class __attribute__((forbid_temporaries)) Name { ... }; when they want to force users to name all variables of the type. This protects people from doing things like creating a scoped_lock that only lives for a single statement instead of an entire scope. The warning produced by this attribute can be disabled by -Wno-forbid-temporaries. llvm-svn: 124217
* When throwing an elidable object, first try to treat the subexpressionDouglas Gregor2011-01-211-5/+6
| | | | | | | as an rvalue per C++0x [class.copy]p33. If that fails, try again with the original subexpression. llvm-svn: 124002
* Promote the static getNRVOCandidate() function, which computed theDouglas Gregor2011-01-211-1/+1
| | | | | | | | | | | | | NRVO candidate for a return statement, to Sema::getCopyElisionCandidate(), and teach it enough to also determine the NRVO candidate for a throw expression. We still don't use the latter information, however. Along the way, implement core issue 1148, which eliminates copy elision from catch parameters and clarifies that copy elision cannot occur from function parameters (which we already implemented). llvm-svn: 123982
* When building a user-defined conversion sequence, keep track of theDouglas Gregor2011-01-201-3/+4
| | | | | | | declaration that name lookup actually found, so that we can use it for access checking later on. Fixes <rdar://problem/8876150>. llvm-svn: 123867
* Sema::BuildCXXMemberCallExpr() can fail due to access or ambiguities,Douglas Gregor2011-01-201-6/+8
| | | | | | | so allow it to propagate the failure outward. Fixes the crashing part of <rdar://problem/8876150>. llvm-svn: 123863
* Change QualType::getTypePtr() to return a const pointer, then change aJohn McCall2011-01-191-1/+1
| | | | | | thousand other things which were (generally inadvertantly) relying on that. llvm-svn: 123814
* Fix warnings found by gcc-4.6, from -Wunused-but-set-variable andJeffrey Yasskin2011-01-181-1/+0
| | | | | | -Wint-to-pointer-cast. llvm-svn: 123719
* More __uuidof validation:Francois Pichet2010-12-271-18/+23
| | | | | | | 1. Do not validate for uuid attribute if the type is template dependent. 2. Search every class declaration and definition for the uuid attribute. llvm-svn: 122578
* XFAIL vtable-debug-info.cpp on WIN32 and fix curly brace.Francois Pichet2010-12-201-2/+1
| | | | llvm-svn: 122230
* Emit an error if operator __uuidof() is called on a type with no associated ↵Francois Pichet2010-12-201-0/+25
| | | | | | GUID. llvm-svn: 122226
* Motions towards simplifying how we deal with attribute-qualified function types.John McCall2010-12-191-2/+1
| | | | llvm-svn: 122162
* Variadic templates: extend the Expr class with a bit that specifiesDouglas Gregor2010-12-151-1/+2
| | | | | | | | | | | | | | | | | | whether the expression contains an unexpanded parameter pack, in the same vein as the changes to the Type hierarchy. Compute this bit within all of the Expr subclasses. This change required a bunch of reshuffling of dependency calculations, mainly to consolidate them inside the constructors and to fuse multiple loops that iterate over arguments to determine type dependence, value dependence, and (now) containment of unexpanded parameter packs. Again, testing is painfully sparse, because all of the diagnostics will change and it is more important to test the to-be-written visitor that collects unexpanded parameter packs. llvm-svn: 121831
* Restore r121752 without modification.John McCall2010-12-141-9/+15
| | | | llvm-svn: 121763
* Pull out r121752 in case it's causing the selfhost breakage.John McCall2010-12-141-15/+9
| | | | llvm-svn: 121759
* Factor out most of the extra state in a FunctionProtoType into a separateJohn McCall2010-12-141-9/+15
| | | | | | | class to be passed around. The line between argument and return types and everything else is kindof vague, but I think it's justifiable. llvm-svn: 121752
* Variadic templates: extend Type, NestedNameSpecifier, TemplateName,Douglas Gregor2010-12-131-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | and TemplateArgument with an operation that determines whether there are any unexpanded parameter packs within that construct. Use this information to diagnose the appearance of the names of parameter packs that have not been expanded (C++ [temp.variadic]p5). Since this property is checked often (every declaration, ever expression statement, etc.), we extend Type and Expr with a bit storing the result of this computation, rather than walking the AST each time to determine whether any unexpanded parameter packs occur. This commit is deficient in several ways, which will be remedied with future commits: - Expr has a bit to store the presence of an unexpanded parameter pack, but it is never set. - The error messages don't point out where the unexpanded parameter packs were named in the type/expression, but they should. - We don't check for unexpanded parameter packs in all of the places where we should. - Testing is sparse, pending the resolution of the above three issues. llvm-svn: 121724
* Remove the TypesCompatibleExprClass AST node. Merge its functionality into ↵Francois Pichet2010-12-081-1/+18
| | | | | | BinaryTypeTraitExpr. llvm-svn: 121298
* Bump up property conversion earlier in the initialization process. FixesJohn McCall2010-12-071-1/+1
| | | | | | the failed compile in PR8751. llvm-svn: 121192
* Kill FullExpr, as it was not, in fact, used anywhere in the code base.John McCall2010-12-071-16/+0
| | | | | | | I'm not opposed to the idea in concept, but there's no point in preserving abortive experiments. llvm-svn: 121083
* Type traits intrinsic implementation: __is_base_of(T, U)Francois Pichet2010-12-071-0/+71
| | | | | | New AST node introduced: BinaryTypeTraitExpr; to be reused for more intrinsics. llvm-svn: 121074
* Rename CXXExprWithTemporaries -> ExprWithCleanups; there's no theoreticalJohn McCall2010-12-061-10/+10
| | | | | | reason this is limited to C++, and it's certainly not limited to temporaries. llvm-svn: 120996
* First pass at implementing the intent of ANSI C DR106.John McCall2010-12-041-2/+3
| | | | llvm-svn: 120904
* dyn_cast else unreachable -> castJohn McCall2010-12-041-4/+2
| | | | llvm-svn: 120902
* Although we currently have explicit lvalue-to-rvalue conversions, they'reJohn McCall2010-12-041-15/+47
| | | | | | | | | | | | | | | | | | | not actually frequently used, because ImpCastExprToType only creates a node if the types differ. So explicitly create an ICE in the lvalue-to-rvalue conversion code in DefaultFunctionArrayLvalueConversion() as well as several other new places, and consistently deal with the consequences throughout the compiler. In addition, introduce a new cast kind for loading an ObjCProperty l-value, and make sure we emit those nodes whenever an ObjCProperty l-value appears that's not on the LHS of an assignment operator. This breaks a couple of rewriter tests, which I've x-failed until future development occurs on the rewriter. Ted Kremenek kindly contributed the analyzer workarounds in this patch. llvm-svn: 120890
* When we're performing an explicit cast of some sort, don't complainDouglas Gregor2010-12-021-2/+2
| | | | | | | | | about deprecated Objective-C pointer conversions. Plus, make sure to actually set an appropriate AssignmentAction when performing an implicit conversion from an InitializationSequence. Fixes regressions in the GCC DejaGNU testsuite. llvm-svn: 120744
* Perform lvalue-to-rvalue at the end of an expression statement in C.John McCall2010-12-021-0/+12
| | | | llvm-svn: 120646
* Switch a lot of call-sites over to using the new value-kind calculations.John McCall2010-11-241-1/+1
| | | | llvm-svn: 120084
* Add an assertion, fix a whole bunch of bugs, comment the assertionJohn McCall2010-11-181-5/+12
| | | | | | out because there are still bugs left. llvm-svn: 119722
* Calculate the value kind of an expression when it's created andJohn McCall2010-11-181-24/+52
| | | | | | | | | | | | | store it on the expression node. Also store an "object kind", which distinguishes ordinary "addressed" l-values (like variable references and pointer dereferences) and bitfield, @property, and vector-component l-values. Currently we're not using these for much, but I aim to switch pretty much everything calculating l-valueness over to them. For now they shouldn't necessarily be trusted. llvm-svn: 119685
* Assorted work leading towards the elimination of CK_Unknown.John McCall2010-11-151-11/+76
| | | | llvm-svn: 119138
* Introduce a null-to-pointer implicit cast kind.John McCall2010-11-131-2/+2
| | | | llvm-svn: 118966
* Properly handle temporaries that are created in a AsmStmt.Argyrios Kyrtzidis2010-11-021-0/+26
| | | | | | Previously the temporaries would get destroyed before the asm call. llvm-svn: 118001
* Harden Sema::MaybeBindTotemporary.Douglas Gregor2010-11-011-0/+3
| | | | llvm-svn: 117954
* No really, we don't have a retain/release system for statements/expressionsJohn McCall2010-10-261-2/+2
| | | | | | anymore. llvm-svn: 117357
* Improve the tracking of source locations for parentheses in constructor calls.Chandler Carruth2010-10-251-4/+8
| | | | | | | | | | | | This adds them where missing, and traces them through PCH. We fix at least one bug in the extents found by the Index library, and make a lot of refactoring tools which care about the exact formulation of a constructor call easier to write. Also some minor cleanups to more consistently follow the friend pattern instead of the setter pattern when rebuilding a serialized AST. Patch originally by Samuel Benzaquen. llvm-svn: 117254
* There is no reason for dereferencing a pointer-to-member to requireDouglas Gregor2010-10-131-2/+5
| | | | | | | | | that the class type into which the pointer points be complete, even though the standard requires it. GCC/EDG do not require a complete type here, so we're calling this a problem with the standard. Fixes PR8328. llvm-svn: 116429
* Introduce support for emitting diagnostics (warnings + their notes)Douglas Gregor2010-10-121-2/+4
| | | | | | | | | | | | | | | that are suppressed during template argument deduction. This change queues diagnostics computed during template argument deduction. Then, if the resulting function template specialization or partial specialization is chosen by overload resolution or partial ordering (respectively), we will emit the queued diagnostics at that point. This addresses most of PR6784. However, the check for unnamed/local template arguments (which existed before this change) is still only skin-deep, and needs to be extended to look deeper into types. It must be improved to finish PR6784. llvm-svn: 116373
* PR8325: don't do destructor checking when a pointer is thrown.Eli Friedman2010-10-121-0/+4
| | | | llvm-svn: 116336
* Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked aDouglas Gregor2010-10-081-1/+1
| | | | | | bit by me). llvm-svn: 116122
* Track the location of the context requiring an implicit conversion and use itJohn McCall2010-10-081-3/+2
| | | | | | to white-list conversions required by system headers. rdar://problem/8232669 llvm-svn: 116029
* Reject the allocation of variably-modified types in C++ 'new'Douglas Gregor2010-10-061-3/+7
| | | | | | | | expressions. Fixes PR8209 in the narrowest way possible. I'm still considering whether I want to implement the extension that permits the use of VLA types in a 'new' expression. llvm-svn: 115790
* Fix a NYI in IRGen which was due to incorrect ASTFariborz Jahanian2010-09-251-2/+10
| | | | | | | for property reference expression (of c++ object type) in the conditional expression. Fixes // rdar://8291337 llvm-svn: 114783
* Patch implements passing arrays to functions expectingFariborz Jahanian2010-09-241-0/+1
| | | | | | vla. Implements pr7827. llvm-svn: 114737
* Problem with gnu conditional extension with missingFariborz Jahanian2010-09-181-0/+7
| | | | | | | | | | | | | | LHS and when conditional expression is an array. Since it will be decayed, saved expression must be saved with decayed expression. This is necessary to preserve semantics of this extension (and prevent an IRGen crash which expects an array to always be decayed). I am sure there will be other cases in c++ (aggregate conditionals for example) when saving of the expression must happen after some transformation on conditional expression has happened. Doug, please review. Fixes // rdar://8446940 llvm-svn: 114296
* Fix destructor and assignment operator lookup in the has_nothrow traits.Sebastian Redl2010-09-141-14/+18
| | | | llvm-svn: 113897
* The paired 'operator delete' for a placement 'operator new' is always aJohn McCall2010-09-141-1/+8
| | | | | | | placement 'operator delete', even if there are no placement args (i.e. overload resolution selected an operator new with default arguments). llvm-svn: 113861
* Don't crash when using type traits on a class with a constructor template.Sebastian Redl2010-09-131-0/+8
| | | | llvm-svn: 113796
* Remove CXXRecordDecl::getDefaultConstructor(), an inherently unsafe function ↵Sebastian Redl2010-09-131-10/+14
| | | | | | due to lazy declaration of default constructors. Now that __has_nothrow_constructor doesn't use it anymore, part of PR8101 is fixed. llvm-svn: 113794
OpenPOWER on IntegriCloud