summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaExpr.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Tighten the rules when deciding if an ivar must beFariborz Jahanian2010-07-301-3/+15
| | | | | | | auto-synthesized (nonfragile-abi2 specific). Fixes radar 8251648. llvm-svn: 109866
* Tigthen the condition for issung ivar shadowingFariborz Jahanian2010-07-291-1/+2
| | | | | | | variables to those in file scope (nonfragile-abi2). Fixes radar 8248681. llvm-svn: 109758
* When taking the address of a value of Objective-C object type (e.g.,Douglas Gregor2010-07-291-0/+2
| | | | | | | one because we're referencing a variable of type NSString &), the resulting type is an ObjCObjectPointerType. llvm-svn: 109753
* Don't die when a member access refers to a non-class member via aDouglas Gregor2010-07-281-0/+3
| | | | | | qualified name. Fixes <rdar://problem/8231724>. llvm-svn: 109682
* Fix a minor crash bug with constructs like Obj.Class::ENUM_VALUE.Eli Friedman2010-07-271-4/+4
| | | | llvm-svn: 109537
* PR7724: Don't try to evaluate value-dependent expressions.Eli Friedman2010-07-271-1/+1
| | | | llvm-svn: 109532
* Remove the vast majority of the Destroy methods from the AST library,Douglas Gregor2010-07-251-13/+3
| | | | | | since we aren't going to be calling them ever. llvm-svn: 109377
* turn down the logical bitwise confusion warning to not warn Chris Lattner2010-07-241-11/+14
| | | | | | | | | when the RHS of the ||/&& is ever 0 or 1. This handles a variety of creative idioms for "true" used in C programs and fixes many false positives at the expense of a few false negatives. This fixes rdar://8230351. llvm-svn: 109314
* Allow __func__ and __FUNCTION__ and __PRETTY_FUNCTION__ inside blocks.Fariborz Jahanian2010-07-231-0/+2
| | | | | | Radar 8218839. llvm-svn: 109272
* Vectors are not integer types, so the type system should not classifyDouglas Gregor2010-07-231-10/+16
| | | | | | | | | | | them as such. Type::is(Signed|Unsigned|)IntegerType() now return false for vector types, and new functions has(Signed|Unsigned|)IntegerRepresentation() cover integer types and vector-of-integer types. This fixes a bunch of latent bugs. Patch from Anton Yartsev! llvm-svn: 109229
* Warn when property ivar lookup finds a global variableFariborz Jahanian2010-07-221-2/+31
| | | | | | | of same name. In nonfragile-abi2, lookup accesses a synthesized ivar. This is a transition warning. Radar 8225011. llvm-svn: 109197
* Upgrade "'X' is unavailable" from a warning to an error. This matches GCC's ↵Ted Kremenek2010-07-211-1/+1
| | | | | | | | | | | | behavior. Note that GCC emits a warning instead of an error when using an unavailable Objective-C protocol, so now Clang's behavior is more strict in this case, but more consistent. We will need to see how much this fires on real code and determine whether this case should be downgraded to a warning. Fixes <rdar://problem/8213093>. llvm-svn: 109033
* Update ImplicitCastExpr to be able to represent an XValue.Sebastian Redl2010-07-201-6/+5
| | | | llvm-svn: 108807
* Categories cannot synthesize property ivars,Fariborz Jahanian2010-07-191-5/+5
| | | | | | and a minor cleanup. llvm-svn: 108707
* Check for casts to an incomplete type in C. Improves diagnostics for cast toEli Friedman2010-07-171-0/+4
| | | | | | | incomplete union (PR5692) and incomplete enum, and fixes obscure accepts-invalid on cast to incomplete struct. llvm-svn: 108630
* Patch to synthesize property ivars on demand asFariborz Jahanian2010-07-171-0/+38
| | | | | | | part of the new property synthesis by default. wip. llvm-svn: 108599
* restrict the && -> & warning to cover a case daniel noted.Chris Lattner2010-07-151-0/+4
| | | | | | | Don't warn about "logically bool" expressions on the RHS, even if they fold to a constant. llvm-svn: 108388
* Consider obective-c pointer arguments as valid sentinel argsFariborz Jahanian2010-07-141-1/+1
| | | | | | as well. Fixes radar 7975788. llvm-svn: 108333
* Add a warning to catch a bug recently caught by code review, like this:Chris Lattner2010-07-131-2/+16
| | | | | | | | | | | t2.c:2:12: warning: use of logical && with constant operand; switch to bitwise & or remove constant [-Wlogical-bitwise-confusion] return x && 4; ^ ~ wording improvement suggestions are welcome. llvm-svn: 108260
* Whenever we're creating an expression that is typically an rvalueDouglas Gregor2010-07-131-3/+6
| | | | | | | | | | | | | | | | (e.g., a call, cast, etc.), immediately adjust the expression's type to strip cv-qualifiers off of all non-class types (in C++) or all types (in C). This effectively extends my previous fix for PR7463, which was restricted to calls, to other kinds of expressions within similar characteristics. I've audited every use of getNonReferenceType() in the code base, switching to the newly-renamed getNonLValueExprType() where necessary. Big thanks to Eli for pointing out just how incomplete my original fix for PR7463 actually was. We've been handling cv-qualifiers on rvalues wrong for a very, very long time. Fixes PR7463. llvm-svn: 108253
* When forming a function call or message send expression, be sure toDouglas Gregor2010-07-131-4/+4
| | | | | | | | | | | | | | | | | strip cv-qualifiers from the expression's type when the language calls for it: in C, that's all the time, while C++ only does it for non-class types. Centralized the computation of the call expression type in QualType::getCallResultType() and some helper functions in other nodes (FunctionDecl, ObjCMethodDecl, FunctionType), and updated all relevant callers of getResultType() to getCallResultType(). Fixes PR7598 and PR7463, along with a bunch of getResultType() call sites that weren't stripping references off the result type (nothing stripped cv-qualifiers properly before this change). llvm-svn: 108234
* Compute Type dependent-ness of BlockDeclRefExprFariborz Jahanian2010-07-121-2/+1
| | | | | | on the fly when constructing it. llvm-svn: 108166
* Move setting of Dependent Type to BlockDeclRefExpr'sFariborz Jahanian2010-07-121-4/+3
| | | | | | constructor. llvm-svn: 108157
* Fix another aspect of PR7047, macro expansions. Previously, this was hackedChandler Carruth2010-07-121-7/+8
| | | | | | | | | | | | around by exempting enums from the check, but this doesn't handle a lot of cases. A better approach is to directly check if the operator comes from a macro expansion. I've removed a reference to the rdar that originally led to the enum suppression when removing it's overly contrived test case. Let me know if that number or a more reasilistic test case involving enums is still needed. llvm-svn: 108128
* Lay the ground work for resoving PR7047. This doesn't actually fix it becauseChandler Carruth2010-07-101-3/+18
| | | | | | | | | | default arguments to template parameters don't have a DeclContext when instantiated, and so we can't detect that we're in an instantiation context as opposed to the definition context. However, it fixes the more commonly-occuring cases in TMP code that use devolve to this type of tautology after substitution. llvm-svn: 108044
* BlockDeclRefExpr of a dependent type mustFariborz Jahanian2010-07-091-13/+16
| | | | | | be a dependent expression when its is built. llvm-svn: 108026
* Instantiation of block literal expressions. wip.Fariborz Jahanian2010-07-091-2/+5
| | | | llvm-svn: 108000
* When performing substitution of template arguments within the body ofDouglas Gregor2010-07-081-3/+4
| | | | | | | a template, be sure to include the template arguments from the injected-class-name. Fixes PR7587. llvm-svn: 107895
* Introduce Decl::hasBody() and FunctionDecl::hasBody() and use them instead ↵Argyrios Kyrtzidis2010-07-071-1/+1
| | | | | | | | of getBody() when we are just checking the existence of a body, to avoid de-serialization of the body from PCH. Makes de-serialization of the function body even more "lazier". llvm-svn: 107768
* implement PR7569, warning about assignment to null, which Chris Lattner2010-07-071-0/+17
| | | | | | | | people seem to write when they want a deterministic trap. Suggest instead that they use a volatile pointer or __builtin_trap. llvm-svn: 107756
* Fix multiple emission of the this-> fixit for each instantiation by fixing theNick Lewycky2010-07-061-5/+23
| | | | | | AST during the instantiation. Fixes PR7417! llvm-svn: 107690
* fix a bug I introduced in r107624Chris Lattner2010-07-051-5/+2
| | | | llvm-svn: 107626
* rearrange some logic, no functionality change.Chris Lattner2010-07-051-19/+30
| | | | llvm-svn: 107624
* Fix vector literal/cast confusion - bug 6895.John Thompson2010-06-301-2/+13
| | | | llvm-svn: 107347
* Fix rdar://8139785 "implement warning on dead expression in comma operator"Argyrios Kyrtzidis2010-06-301-0/+2
| | | | | | | | | | As a bonus, fix the warning for || and && operators; it was emitted even if one of the operands had side effects, e.g: x || test_logical_foo1(); emitted a bogus "expression result unused" for 'x'. llvm-svn: 107274
* When typo correction produces a result that is not of the kind we'reDouglas Gregor2010-06-291-0/+4
| | | | | | | looking for, reset the name within the LookupResult structure in addition to clearing out the results. Fixes PR7508. llvm-svn: 107197
* Vector types are not arithmetic types, either. Note that we now banDouglas Gregor2010-06-221-2/+3
| | | | | | | | | __real myvec and __imag myvec, since they aren't all that useful (it's just an identity function) but we might want to use them in more restricted cases in the future (e.g., "__real mycomplexvec" could extract the real parts of a vector of complex numbers). llvm-svn: 106601
* Change Type::isFloatingType() to reflect the actual definition of aDouglas Gregor2010-06-221-6/+6
| | | | | | | | | | | "floating type" in C, which does not include vector types. Introduce Type::hasFloatingRepresentation() for the places where we want to know whether the underlying representation is one or more floating-point values. Remove some hacks we had where the former behavior of Type::isFloatingType() was at odds with the language definition of the term. llvm-svn: 106584
* Zero out a stale pointerDouglas Gregor2010-06-211-0/+1
| | | | llvm-svn: 106497
* Given Decl::isUsed() a flag indicating when to consider the "used"Douglas Gregor2010-06-171-5/+5
| | | | | | | | | attribute as part of the calculation. Sema::MarkDeclReferenced(), and a few other places, want only to consider the "used" bit to determine, e.g, whether to perform template instantiation. Fixes a linkage issue with Boost.Serialization. llvm-svn: 106252
* Do not treat @selector as lvalue (unlike g++).Fariborz Jahanian2010-06-171-0/+2
| | | | | | Patch by Nico Weber (pr7390). llvm-svn: 106242
* Fix a point of semantics with using declaration hiding: method templatesJohn McCall2010-06-161-60/+30
| | | | | | | | | | | | | | | | | introduced by using decls are hidden even if their template parameter lists or return types differ from the "overriding" declaration. Propagate using shadow declarations around more effectively when looking up template-ids. Reperform lookup for template-ids in member expressions so that access control is properly set up. Fix some number of latent bugs involving template-ids with totally invalid base types. You can only actually get these with a scope specifier, since otherwise the template-id won't parse as a template-id. Fixes PR7384. llvm-svn: 106093
* Give Type::isIntegralType() an ASTContext parameter, so that itDouglas Gregor2010-06-161-3/+3
| | | | | | | | | | | | provides C "integer type" semantics in C and C++ "integral type" semantics in C++. Note that I still need to update isIntegerType (and possibly other predicates) using the same approach I've taken for isIntegralType(). The two should have the same meaning, but currently don't (!). llvm-svn: 106074
* Introduce Type::isIntegralOrEnumerationType(), to cover those placesDouglas Gregor2010-06-161-1/+2
| | | | | | | | | | in C++ that involve both integral and enumeration types. Convert all of the callers to Type::isIntegralType() that are meant to work with both integral and enumeration types over to Type::isIntegralOrEnumerationType(), to prepare to eliminate enumeration types as integral types. llvm-svn: 106071
* Update equality and relationship comparisons of pointers to reflectDouglas Gregor2010-06-151-26/+30
| | | | | | | | | C++ semantics, eliminating an extension diagnostic that doesn't match C++ semantics (ordered comparison with NULL) and tightening some extwarns to errors in C++ to match GCC and maintain conformance in SFINAE contexts. Fixes <rdar://problem/7941392>. llvm-svn: 106050
* tidy upChris Lattner2010-06-151-1/+1
| | | | llvm-svn: 106011
* Another chunk of the new RecursiveASTVisitor implementation: switch the returnChandler Carruth2010-06-101-1/+1
| | | | | | | value semantics such that we recurse while the visitors return true, and halt as soon as one returns false. Patch by csilvers. llvm-svn: 105787
* Major redesign of the RecursiveASTVisitor. This implements the majority of theChandler Carruth2010-06-091-14/+15
| | | | | | | | | | new design discussed on cfe-dev, with further steps in that direction to come. It is already much more complete than the previous visitor. Patch by Zhanyong and Craig with 80 column wraps and one missing declaration added by me. llvm-svn: 105709
* Warn about comparisons between arrays and improve self-comparisonDouglas Gregor2010-06-081-11/+45
| | | | | | warnings, from Troy Straszheim! Fixes PR6163. llvm-svn: 105631
* Fixes a typo which prevented proper code gen. forFariborz Jahanian2010-06-081-2/+1
| | | | | | copy-in of c++ class objects into blocks. llvm-svn: 105622
OpenPOWER on IntegriCloud