summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/Expr.cpp
Commit message (Collapse)AuthorAgeFilesLines
* StringRef-ify Binary/UnaryOperator::getOpcodeStrDavid Blaikie2012-10-081-2/+2
| | | | llvm-svn: 165383
* Move isObjCSelf into Expr.Anna Zaks2012-10-011-0/+18
| | | | llvm-svn: 164966
* Handle C++ functional casts in a similar way to C-style casts inEli Friedman2012-09-241-0/+1
| | | | | | unused expression warnings. <rdar://problem/12359208>. llvm-svn: 164569
* In StringLiteral::setString make sure that we copy the number ofArgyrios Kyrtzidis2012-09-141-3/+3
| | | | | | | | | | | bytes of the buffer and not the size of the string, otherwise we may overwrite the buffer if there is a mismatch between the size of the string and the CharByteWidth, and assertions are disabled. The bug where this could occur was fixed in r163931. Related to rdar://12069503 llvm-svn: 163939
* PR13811: Add a FunctionParmPackExpr node to handle references to functionRichard Smith2012-09-121-0/+1
| | | | | | | parameter packs where the reference is not being expanded but the pack has been. Previously, Clang would segfault in such cases. llvm-svn: 163672
* Change the representation of builtin functions in the ASTEli Friedman2012-08-311-2/+9
| | | | | | | | | (__builtin_* etc.) so that it isn't possible to take their address. Specifically, introduce a new type to represent a reference to a builtin function, and a new cast kind to convert it to a function pointer in the operand of a call. Fixes PR13195. llvm-svn: 162962
* Push ArrayRef through the Expr hierarchy.Benjamin Kramer2012-08-241-63/+64
| | | | | | No functionality change. llvm-svn: 162552
* Fix InitListExpr::isStringLiteralInit so it handles various edge cases ↵Eli Friedman2012-08-201-3/+3
| | | | | | correctly. PR13643. llvm-svn: 162226
* Factor out computation of whether a typeid's expression is potentiallyRichard Smith2012-08-131-16/+4
| | | | | | evaluated into a CXXTypeid member function. No functionality change. llvm-svn: 161779
* Provide isConst/Volatile on CXXMethodDecl.David Blaikie2012-08-101-4/+4
| | | | | | | | | This also provides isConst/Volatile/Restrict on FunctionTypes to coalesce the implementation with other callers (& update those other callers). Patch contributed by Sam Panzer (panzer@google.com). llvm-svn: 161647
* Implement warning for integral null pointer constants other than the literal 0.David Blaikie2012-08-081-2/+7
| | | | | | | | | | | | | | | | | | | | This is effectively a warning for code that violates core issue 903 & thus will become standard error in the future, hopefully. It catches strange null pointers such as: '\0', 1 - 1, const int null = 0; etc... There's currently a flaw in this warning (& the warning for 'false' as a null pointer literal as well) where it doesn't trigger on comparisons (ptr == '\0' for example). Fix to come in a future patch. Also, due to this only being a warning, not an error, it triggers quite frequently on gtest code which tests expressions for null-pointer-ness in a SFINAE context (so it wouldn't be a problem if this was an error as in an actual implementation of core issue 903). To workaround this for now, the diagnostic does not fire in unevaluated contexts. Review by Sean Silva and Richard Smith. llvm-svn: 161501
* Update documentation of HasSideEffects to match its callers' expectations, andRichard Smith2012-08-071-20/+18
| | | | | | | | | | | | update implementation to match. An elidable, non-trivial constructor call is a side-effect under this definition, but wasn't under the old one, because we are not required to evaluate it even though it may have an effect. Also rationalize checking for volatile reads: just look for lvalue-to-rvalue conversions on volatile glvalues, and ignore whether a DeclRefExpr etc is for a volatile variable. llvm-svn: 161393
* Teach Expr::HasSideEffects about all the Expr types, and fix a bug where itRichard Smith2012-08-071-0/+215
| | | | | | | | | | | | | | | | | | | was mistakenly classifying dynamic_casts which might throw as having no side effects. Switch it from a visitor to a switch, so it is kept up-to-date as future Expr nodes are added. Move it from ExprConstant.cpp to Expr.cpp, since it's not really related to constant expression evaluation. Since we use HasSideEffect to determine whether to emit an unused global with internal linkage, this has the effect of suppressing emission of globals in some cases. I've left many of the Objective-C cases conservatively assuming that the expression has side-effects. I'll leave it to someone with better knowledge of Objective-C than mine to improve them. llvm-svn: 161388
* Handle the case where the base type is not dependent, but the derived one is.Rafael Espindola2012-07-171-0/+3
| | | | | | Fixes pr13353.cpp. llvm-svn: 160393
* Drop the ASTContext.h include from Stmt.h and fix up transitive users.Benjamin Kramer2012-07-041-0/+28
| | | | | | | | | | | | | | This required moving the ctors for IntegerLiteral and FloatingLiteral out of line which shouldn't change anything as they are usually called through Create methods that are already out of line. ASTContext::Deallocate has been a nop for a long time, drop it from ASTVector and make it independent from ASTContext.h Pass the StorageAllocator directly to AccessedEntity so it doesn't need to have a definition of ASTContext around. llvm-svn: 159718
* Fix another issue with devirtualizing calls to final methods by passing themRafael Espindola2012-06-281-16/+22
| | | | | | | | the correct this pointer. There is some potential for sharing a bit more code with canDevirtualizeMemberFunctionCalls, but that can be done in an independent patch. llvm-svn: 159326
* Implement John McCall's review of r159212 other than the this pointer notRafael Espindola2012-06-271-6/+1
| | | | | | being updated. Will fix that in a second. llvm-svn: 159280
* During codegen of a virtual call we would extract any casts in the expressionRafael Espindola2012-06-261-0/+31
| | | | | | | | to see if we had an underlying final class or method, but we would then use the cast type to do the call, resulting in a direct call to the wrong method. llvm-svn: 159212
* Make the ".*" operator work correctly when the base is a prvalue and the ↵Eli Friedman2012-06-151-0/+4
| | | | | | field has a non-trivial copy constructor. PR13097. llvm-svn: 158578
* Moved the StringLiteral printing code from StmtPrinter into the StringLiteralRichard Trieu2012-06-131-0/+93
| | | | | | | class and have StmtPrinter and StmtDumper refer to it. This fixes an assertion failure when dumping wchar string literals. llvm-svn: 158417
* PR13099: Teach -Wformat about raw string literals, UTF-8 strings and Unicode ↵Richard Smith2012-06-131-1/+2
| | | | | | escape sequences. llvm-svn: 158390
* Remove unused variable.Dmitri Gribenko2012-06-121-5/+0
| | | | llvm-svn: 158343
* A minor tweak to the new volatile lvalue warning: don't warn on "(void)x", ↵Eli Friedman2012-05-241-25/+22
| | | | | | where "x" refers to a local variable. This should silence a useless warning in compiler-rt and other places. llvm-svn: 157414
* Add a warning to diagnose statements in C++ like "*(volatile int*)x;". ↵Eli Friedman2012-05-241-48/+73
| | | | | | Conceptually, this is part of -Wunused-value, but I added a separate flag -Wunused-volatile-lvalue so it doesn't get turned off by accident with -Wno-unused-value. I also made a few minor improvements to existing unused value warnings in the process. <rdar://problem/11516811>. llvm-svn: 157362
* The Lexer constructor expects a source location at the start of theArgyrios Kyrtzidis2012-05-111-2/+2
| | | | | | | | file buffer, not at the start of lexing. Fixes assertion hit in format diagnostics. rdar://11418366 llvm-svn: 156647
* Use raw_ostream in TypePrinter and eliminate uses of temporary std::strings.Argyrios Kyrtzidis2012-05-051-3/+1
| | | | | | Part of rdar://10796159 llvm-svn: 156228
* Implement DR1330 in C++11 mode, to support libstdc++4.7 which uses it.Richard Smith2012-04-171-325/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | We have a new flavor of exception specification, EST_Uninstantiated. A function type with this exception specification carries a pointer to a FunctionDecl, and the exception specification for that FunctionDecl is instantiated (if needed) and used in the place of the function type's exception specification. When a function template declaration with a non-trivial exception specification is instantiated, the specialization's exception specification is set to this new 'uninstantiated' kind rather than being instantiated immediately. Expr::CanThrow has migrated onto Sema, so it can instantiate exception specs on-demand. Also, any odr-use of a function triggers the instantiation of its exception specification (the exception specification could be needed by IRGen). In passing, fix two places where a DeclRefExpr was created but the corresponding function was not actually marked odr-used. We used to get away with this, but don't any more. Also fix a bug where instantiating an exception specification which refers to function parameters resulted in a crash. We still have the same bug in default arguments, which I'll be looking into next. This, plus a tiny patch to fix libstdc++'s common_type, is enough for clang to parse (and, in very limited testing, support) all of libstdc++4.7's standard headers. llvm-svn: 154886
* PR12226: don't generate wrong code if a braced string literal is used toRichard Smith2012-04-151-0/+10
| | | | | | | | | initialize an array of unsigned char. Outside C++11 mode, this bug was benign, and just resulted in us emitting a constant which was double the required length, padded with 0s. In C++11, it resulted in us generating an array whose first element was something like i8 ptrtoint ([n x i8]* @str to i8). llvm-svn: 154756
* Implement __atomic_fetch_nand and __atomic_nand_fetch to complete our set ofRichard Smith2012-04-131-0/+2
| | | | | | GNU __atomic builtins. llvm-svn: 154659
* Implement support for 18 of the GNU-compatible __atomic builtins.Richard Smith2012-04-121-11/+35
| | | | | | | | | | | | This is not quite sufficient for libstdc++'s <atomic>: we still need __atomic_test_and_set and __atomic_clear, and may need a more complete __atomic_is_lock_free implementation. We are also missing an implementation of __atomic_always_lock_free, __atomic_nand_fetch, and __atomic_fetch_nand, but those aren't needed for libstdc++. llvm-svn: 154579
* AtomicExpr: make ASTStmtReader a friend and remove setters. Also fix savingRichard Smith2012-04-101-0/+21
| | | | | | | of an uninitialized Stmt* in serialization of __atomic_init and add a test of atomics serialization. llvm-svn: 154448
* Improve the printing of __PRETTY_FUNCTION__ more provide moreDouglas Gregor2012-04-101-9/+69
| | | | | | information and more closely match GCC's, from Nikola Smiljanic! llvm-svn: 154430
* ObjCBoolLiterals (__objc_yes/__objc_no) behave like C++ booleans ↵Jordy Rose2012-03-121-1/+1
| | | | | | (true/false). They are NOT objects. llvm-svn: 152564
* Unify naming of LangOptions variable/get function across the Clang stack ↵David Blaikie2012-03-111-6/+6
| | | | | | | | | | (Lex to AST). The member variable is always "LangOpts" and the member function is always "getLangOpts". Reviewed by Chris Lattner llvm-svn: 152536
* Remove BlockDeclRefExpr and introduce a bit on DeclRefExpr toJohn McCall2012-03-101-27/+8
| | | | | | | | track whether the referenced declaration comes from an enclosing local context. I'm amenable to suggestions about the exact meaning of this bit. llvm-svn: 152491
* [AST] Define a few more key getLocStart() implementations.Daniel Dunbar2012-03-091-0/+18
| | | | | | | - This cuts the # of getSourceRange calls by 60% on OGF/NSBezierPath-OAExtensions.m. llvm-svn: 152412
* [AST] Reimplement Stmt::getLoc{Start,End} to dispatch to subclass overloads.Daniel Dunbar2012-03-091-1/+3
| | | | | | | | - getSourceRange() can be very expensive, we should try to avoid it if at all possible. In conjunction with the previous commit I measured a ~2% speedup on 403.gcc/combine.c and a 3% speedup on OmniGroupFrameworks/NSBezierPath-OAExtensions.m. llvm-svn: 152411
* [AST] Add {DeclRefExpr,MemberExpr,ImplicitCastExpr}::{getLocStart,getLocEnd} ↵Daniel Dunbar2012-03-091-14/+26
| | | | | | | | methods. - There are probably a lot more of these worth adding, but these are a start at hitting some of the exprs for which getSourceRange().getBegin() is a poor substitute for getLocStart(). llvm-svn: 152410
* [AST] Reduce Decl::getASTContext() calls.Daniel Dunbar2012-03-091-11/+12
| | | | | | | - This function is not at all free; pass it around along some hot paths instead of recomputing it deep inside various VarDecl methods. llvm-svn: 152363
* AST representation for user-defined literals, plus just enough of semanticRichard Smith2012-03-071-2/+4
| | | | | | | | | | | | | | | | | | | | | analysis to make the AST representation testable. They are represented by a new UserDefinedLiteral AST node, which is a sugared CallExpr. All semantic properties, including full CodeGen support, are achieved for free by this representation. UserDefinedLiterals can never be dependent, so no custom instantiation behavior is required. They are mangled as if they were direct calls to the underlying literal operator. This matches g++'s apparent behavior (but not its actual mangling, which is broken for literal-operator-ids). User-defined *string* literals are now fully-operational, but the semantic analysis is quite hacky and needs more work. No other forms of user-defined literal are created yet, but the AST support for them is present. This patch committed after midnight because we had already hit the quota for new kinds of literal yesterday. llvm-svn: 152211
* Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,Ted Kremenek2012-03-061-0/+121
| | | | | | | | | | | | | NSNumber, and boolean literals. This includes both Sema and Codegen support. Included is also support for new Objective-C container subscripting. My apologies for the large patch. It was very difficult to break apart. The patch introduces changes to the driver as well to cause clang to link in additional runtime support when needed to support the new language features. Docs are forthcoming to document the implementation and behavior of these features. llvm-svn: 152137
* Fix a couple -Wuninitialized warnings from gcc. Reported by David Greene.Eli Friedman2012-02-291-1/+2
| | | | llvm-svn: 151754
* ArrayRef'ize various functions in the AST/Parser/Sema.Ahmed Charles2012-02-251-12/+2
| | | | llvm-svn: 151447
* Revert r151357. That unreachable is reachable...Nick Lewycky2012-02-241-11/+8
| | | | llvm-svn: 151359
* Silence gcc warnings pointing out that CharByteWidth could be usedNick Lewycky2012-02-241-8/+11
| | | | | | uninitialized. While there, restyle this function! No functionality change. llvm-svn: 151357
* Implement a new type trait __is_trivially_constructible(T, Args...)Douglas Gregor2012-02-241-0/+1
| | | | | | | | | | | | | | | | that provides the behavior of the C++11 library trait std::is_trivially_constructible<T, Args...>, which can't be implemented purely as a library. Since __is_trivially_constructible can have zero or more arguments, I needed to add Yet Another Type Trait Expression Class, this one handling arbitrary arguments. The next step will be to migrate UnaryTypeTrait and BinaryTypeTrait over to this new, more general TypeTrait class. Fixes the Clang side of <rdar://problem/10895483> / PR12038. llvm-svn: 151352
* Seriously, are injected-class-names that hard?Douglas Gregor2012-02-231-1/+1
| | | | llvm-svn: 151241
* Provide the __is_trivially_assignable type trait, which providesDouglas Gregor2012-02-231-0/+55
| | | | | | | compiler support for the std::is_trivially_assignable library type trait. llvm-svn: 151240
* Generate an AST for the conversion from a lambda closure type to aDouglas Gregor2012-02-221-0/+7
| | | | | | | | | | | | | | | block pointer that returns a block literal which captures (by copy) the lambda closure itself. Some aspects of the block literal are left unspecified, namely the capture variable (which doesn't actually exist) and the body (which will be filled in by IRgen because it can't be written as an AST). Because we're switching to this model, this patch also eliminates tracking the copy-initialization expression for the block capture of the conversion function, since that information is now embedded in the synthesized block literal. -1 side tables FTW. llvm-svn: 151131
* ObjCMessageExpr: Don't leave SelLocsKind uninitialized when the send is ↵Benjamin Kramer2012-02-201-1/+1
| | | | | | | | implicit. Fixes PR11929. Found by valgrind. llvm-svn: 150943
OpenPOWER on IntegriCloud