]>
granicus.if.org Git - clang/log
Steve Naroff [Thu, 23 Aug 2007 22:06:40 +0000 (22:06 +0000)]
Support '~' for complex conjugation. This is a GCC extension.
This following now compiles without error...
_Complex unsigned X, Y;
_Complex double x, y;
void test2(int c) {
X = ~Y;
x = ~y;
}
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41341
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 23 Aug 2007 21:58:08 +0000 (21:58 +0000)]
fix a bug where we would type 0ULL as unsigned instead of unsigned long long
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41340
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 23 Aug 2007 21:46:40 +0000 (21:46 +0000)]
Pretty print as:
"case sizeof x:"
instead of:
"case sizeofx:"
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41339
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 23 Aug 2007 21:42:50 +0000 (21:42 +0000)]
sizeof(x) doesn't require x to be an i-c-e for sizeof to be an i-c-e. Thanks to Neil for pointing this out.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41338
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 23 Aug 2007 21:42:29 +0000 (21:42 +0000)]
No functionality change. Moved visitor methods for CFGBuilder out-of-line
from the class declaration. This enables a nice view of what visitor methods
have been implemented.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41337
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 23 Aug 2007 21:38:16 +0000 (21:38 +0000)]
add support for codegen of calls returning complex.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41336
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Thu, 23 Aug 2007 21:37:33 +0000 (21:37 +0000)]
Remove a FIXME, allowing ++/-- on Complex types (a GCC extension).
Now, the following test case succeeds...
_Complex double x, y;
void test2(int c) {
++x;
}
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41335
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 23 Aug 2007 21:26:19 +0000 (21:26 +0000)]
moved CFGBuilder into an anonymous namespace
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41334
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Thu, 23 Aug 2007 19:56:30 +0000 (19:56 +0000)]
- Cleanup "hack" comment and fix typos.
- Use getLang().ObjC2 when appropriate.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41333
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 23 Aug 2007 18:43:24 +0000 (18:43 +0000)]
Added support for switch, default, and case statements in source-level CFGs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41332
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 23 Aug 2007 18:29:20 +0000 (18:29 +0000)]
finish off switch case overlap checking, adding support for
verifying case ranges.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41331
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Thu, 23 Aug 2007 18:16:40 +0000 (18:16 +0000)]
Add helper functions Token::isObjCAtKeyword() and Token::getObjCKeywordID().
Convert all clients to the new cleaner, more robust API.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41330
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 23 Aug 2007 18:04:38 +0000 (18:04 +0000)]
Refactored "getSubStmt" and "SubStmt" from the CaseStmt and DefaultStmt
class to their common parent class SwitchCase.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41329
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 23 Aug 2007 17:48:14 +0000 (17:48 +0000)]
detect and diagnose empty case ranges:
switch.c:16:8: warning: empty case range specified
case 100 ... 99: ; // expected-warning {{empty case range}}
^~~~~~~~~~
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41328
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 23 Aug 2007 17:29:58 +0000 (17:29 +0000)]
For gotos, breaks, and continues where we cannot find a target successor
block (because we are creating a CFG from an incomplete AST) we now
(gracefully) have a block ending with such statements not have any successors
instead of firing an assertion.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41327
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 23 Aug 2007 17:15:32 +0000 (17:15 +0000)]
Added support for do..while loops in CFG construction.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41325
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 23 Aug 2007 16:51:52 +0000 (16:51 +0000)]
Modified CFG to have explicit "Exit" pointer for exit block. This should
have been committed with my previous patch.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41324
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Thu, 23 Aug 2007 16:51:22 +0000 (16:51 +0000)]
Renamed "CFG::BuildCFG" to "CFG::buildCFG" to have more consistent capitalization.
Added explicit "Exit" CFGBlock pointer to the source-level CFG.
Changed the construction of blocks with "return" statements to have the
return statement appear both as a statement in the list of statements for
a CFGBlock as well as appear as a control-flow terminator. Also removed
the implicit linearization of "return" so that the return value and the
return statement did not appear as separate statements in the block.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41323
91177308 -0d34-0410-b5e6-
96231b3b80d8
Anders Carlsson [Thu, 23 Aug 2007 15:31:37 +0000 (15:31 +0000)]
As suggested by Chris, use MatchRHSPunctuation instead of manually looking for a right parenthesis when parsing @encode() and @protocol().
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41321
91177308 -0d34-0410-b5e6-
96231b3b80d8
Anders Carlsson [Thu, 23 Aug 2007 15:25:28 +0000 (15:25 +0000)]
Parse ObjC @protocol expressions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41320
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 23 Aug 2007 14:29:07 +0000 (14:29 +0000)]
fix a segfault in cases where there are no cases.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41317
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 23 Aug 2007 06:23:56 +0000 (06:23 +0000)]
report duplicate case values. TODO: report duplicate/overlapping ranges.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41315
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 23 Aug 2007 05:47:53 +0000 (05:47 +0000)]
this test is passing, though it is generating bogus code at the moment.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41314
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 23 Aug 2007 05:46:52 +0000 (05:46 +0000)]
start checking case values of switch stmts more closely. Emit overflow
warnings when converting case values to the expression type.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41313
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 23 Aug 2007 05:22:10 +0000 (05:22 +0000)]
Update to match the API from LLVM mainline.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41312
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 23 Aug 2007 01:09:45 +0000 (01:09 +0000)]
run .m files as tests
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41308
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 23 Aug 2007 01:08:54 +0000 (01:08 +0000)]
Test that cocoa parses with -parse-noop. In the future
(when ready) this test should change to test -fsyntax-only.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41307
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Wed, 22 Aug 2007 23:18:22 +0000 (23:18 +0000)]
With this commit, we now successfully parse "Cocoa.h"!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41303
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Wed, 22 Aug 2007 22:35:28 +0000 (22:35 +0000)]
Fixed bugs in source-level CFG construction for "for" and "while" loops
where break targets weren't being set and restored properly. Also
cleaned up CFGBuilder code for "for" and "while" to use less reliance
on globals and to have clearer semantics.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41302
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Wed, 22 Aug 2007 22:19:13 +0000 (22:19 +0000)]
Fix a misleading comment...
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41301
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Wed, 22 Aug 2007 22:17:26 +0000 (22:17 +0000)]
Add support for parsing protocols.
Now we can parse quite a bit of "Foundation.h" (a couple bugs remain).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41300
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Wed, 22 Aug 2007 21:51:58 +0000 (21:51 +0000)]
Added support for "break" statements in source-level ASTs.
Some comment cleanups.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41299
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Wed, 22 Aug 2007 21:36:54 +0000 (21:36 +0000)]
Added support for "continue" statements in source-level CFGs
Cleaned up some code for "for" and "while" loops by making their
implementations more symmetrical (and added a few comments).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41298
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Wed, 22 Aug 2007 21:05:42 +0000 (21:05 +0000)]
Added preliminary support for while loops within source-level CFGs.
Adjusted printing of source-level CFGs to account that the entry block
may not be the first block in the list of blocks a CFG object maintains.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41294
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Wed, 22 Aug 2007 21:03:50 +0000 (21:03 +0000)]
Added explicit pointer within class CFG to the Entry block.
Before we assumed that the first block in the list of blocks was the entry
block, but this has posed hurdles during CFG construction.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41293
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Wed, 22 Aug 2007 18:35:33 +0000 (18:35 +0000)]
Finish up method prototype parsing.
Next step...starting installing class names into the type namespace (so we can start parsing Cocoa headers).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41283
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Wed, 22 Aug 2007 18:22:34 +0000 (18:22 +0000)]
Added CFG support for: for loops
In CFG dumper, refactored the code to print block terminators into a
StmtVisitor.
Added the method "FinishBlock" to CFGBuilder to do the reversal of statements
in a block instead of calling "reverseStmts" for a block directly. This
was necessary to fix a bug in how blocks with labels were being processed
(some cases would cause the statements to be reversed twice). FinishBlock
detects blocks that start with labels and doesn't do a second reversal.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41281
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Wed, 22 Aug 2007 16:35:03 +0000 (16:35 +0000)]
Add support for parsing method prototypes (and other stuff required by @interface).
Still need to finish Parser::ParseObjCMethodDecl(). Before I do, I need to do a minor
refactoring of ParseDeclarationOrFunctionDefinition(), to disallow function definitions.
At the moment, @inteface allows function defs (which is incorrect).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41275
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Wed, 22 Aug 2007 15:40:58 +0000 (15:40 +0000)]
Changed data structure recording the CFG blocks that need to be backpatched
to labeled blocks from a list to a vector.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41274
91177308 -0d34-0410-b5e6-
96231b3b80d8
Anders Carlsson [Wed, 22 Aug 2007 15:14:15 +0000 (15:14 +0000)]
Parse @encode expressions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41273
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 22 Aug 2007 06:06:56 +0000 (06:06 +0000)]
update todo markers
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41267
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 22 Aug 2007 05:33:11 +0000 (05:33 +0000)]
optimize scope push/pop to avoid work in the common case.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41265
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 22 Aug 2007 05:28:50 +0000 (05:28 +0000)]
Fix the scoping issue Neil pointed out for the rest of
the selection statements and iteration statements. Add
spec citations.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41264
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 22 Aug 2007 05:16:28 +0000 (05:16 +0000)]
Fix a nasty C99 scope issue that Neil pointed out (for ifs)
This fixes test/Parser/control-scope.c
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41263
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Tue, 21 Aug 2007 23:26:17 +0000 (23:26 +0000)]
Added CFG support for gotos and labels.
Modified CFG so that getEntry(), getExit(), front() and back() return
CFGBlock& instead of CFGBlock*.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41258
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 22:33:41 +0000 (22:33 +0000)]
add some fixme's, implement complex struct members.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41256
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 22:25:29 +0000 (22:25 +0000)]
implement codegen for --/++
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41255
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Tue, 21 Aug 2007 22:06:14 +0000 (22:06 +0000)]
Converted CFGBuilder to use StmtVisitor instead of doing a switch
dispatch to walk the AST.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41254
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 21:44:59 +0000 (21:44 +0000)]
add cfg.h/cfg.cpp to the xcode project at Ted's request.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41253
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Tue, 21 Aug 2007 21:42:03 +0000 (21:42 +0000)]
Added CFG infrastructure (CFG.cpp and CFG.h) for clang ASTs.
Added builder code to translate ASTs to CFGs. This currently supports
if, return, and non-control flow statements.
Added pretty-printer to debug CFGs.
Added a "-dump-cfg" option to the clang driver to dump CFGs for code
sent through the frontend.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41252
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Tue, 21 Aug 2007 21:17:12 +0000 (21:17 +0000)]
Implement parsing for objc instance variables.
Next step, method...
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41251
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 20:41:44 +0000 (20:41 +0000)]
implement __extension__ and unary~ for complex.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41249
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Tue, 21 Aug 2007 20:29:50 +0000 (20:29 +0000)]
Added reverse iterators for the body of CompountStmt. These are useful for
CFG construction (among other potential uses).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41248
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 20:08:23 +0000 (20:08 +0000)]
implement codegen for complex unary +/-
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41247
91177308 -0d34-0410-b5e6-
96231b3b80d8
Anders Carlsson [Tue, 21 Aug 2007 19:18:49 +0000 (19:18 +0000)]
Don't remove the grammar construct, just the TODO.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41245
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 18:51:13 +0000 (18:51 +0000)]
minor nicities.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41244
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 18:36:18 +0000 (18:36 +0000)]
Tweak error recovery for missing semicolon after decl. For this:
void foo() {
int x
if (x) {
}
}
We now emit:
a.c:5:3: error: parse error
if (x) {
^
1 diagnostic generated.
instead of:
a.c:5:3: error: parse error
if (x) {
^
a.c:9:1: error: expected '}'
^
2 diagnostics generated.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41243
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 18:18:25 +0000 (18:18 +0000)]
add unary operator support to the stmtvisitor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41242
91177308 -0d34-0410-b5e6-
96231b3b80d8
Anders Carlsson [Tue, 21 Aug 2007 18:14:25 +0000 (18:14 +0000)]
Remove objc-string-literal since it's been implemented now.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41241
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 18:03:58 +0000 (18:03 +0000)]
implement support for complex subscripts.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41240
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 18:02:02 +0000 (18:02 +0000)]
allow support for volatile lvalues even though it's still not right.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41239
91177308 -0d34-0410-b5e6-
96231b3b80d8
Anders Carlsson [Tue, 21 Aug 2007 17:43:55 +0000 (17:43 +0000)]
Implement parsing and code generation of Objective-C string literals.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41238
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 17:39:38 +0000 (17:39 +0000)]
add a new builder ivar.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41237
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 17:28:34 +0000 (17:28 +0000)]
move EmitLoadOfComplex/EmitStoreOfComplex into ComplexExprEmitter.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41236
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 17:15:50 +0000 (17:15 +0000)]
implement comma for complex.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41235
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 17:12:50 +0000 (17:12 +0000)]
and/or/xor are invalid for complex, even integer complex apparently.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41234
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 17:03:38 +0000 (17:03 +0000)]
simplify code slightly
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41233
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 17:02:28 +0000 (17:02 +0000)]
add sema support for complex integer types
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41232
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 16:57:55 +0000 (16:57 +0000)]
reimplement support for complex comparisons, add support for integer complex compares.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41231
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 16:54:08 +0000 (16:54 +0000)]
add getAsComplexType() for consistency
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41229
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 16:38:51 +0000 (16:38 +0000)]
Add the comparisons and logical binops to the visitor.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41227
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 16:34:16 +0000 (16:34 +0000)]
reimplement complex mul
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41226
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 05:56:30 +0000 (05:56 +0000)]
add a testcase I forgot to check in long ago
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41219
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 05:54:53 +0000 (05:54 +0000)]
update some comments.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41218
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 05:54:00 +0000 (05:54 +0000)]
Split complex arithmetic codegen out from aggregate codegen.
This means that we get rid of tons of intermediate allocas. For
example:
void foo(double _Complex a, double _Complex b) {
a = b+a+a;
}
this used to have 4 temporary allocas, now it has zero of them.
This also simplifies the individual visitor methods because they
now can all operate on real/imag pairs instead of having to
load/store all over the place.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41217
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 05:02:10 +0000 (05:02 +0000)]
simplify this a bit to remove indirection
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41216
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 04:59:27 +0000 (04:59 +0000)]
reimplement addition of complex numbers.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41215
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 04:43:17 +0000 (04:43 +0000)]
Add the ability to visit binary operators without having to
match on binop then explicitly switching again.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41214
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 04:25:47 +0000 (04:25 +0000)]
switch aggregate expr codegen to use a visitor to localize most of the nasty
details in its own file.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41213
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 04:06:29 +0000 (04:06 +0000)]
Now that the visitor is defined in one place, it is nice and easy to allow clients
to have visitors that return non-void.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41212
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 04:04:25 +0000 (04:04 +0000)]
Switch StmtVisitor from using dynamic to static dispatch. This makes it
significantly faster and actually reduces the amount of code in the system.
This also allows for future visitor changes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41211
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 21 Aug 2007 01:19:46 +0000 (01:19 +0000)]
we now correctly emit:
unused-expr.c:8:6: warning: comparison of distinct pointer types ('int volatile *' and 'int *')
VP == P;
~~ ^ ~
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41210
91177308 -0d34-0410-b5e6-
96231b3b80d8
Anders Carlsson [Tue, 21 Aug 2007 00:21:21 +0000 (00:21 +0000)]
Implement code generation for constant CFStrings.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41206
91177308 -0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 20 Aug 2007 22:37:10 +0000 (22:37 +0000)]
Fix array->pointer decay. This unbreaks test/CodeGen/array.c
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41202
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Mon, 20 Aug 2007 22:28:22 +0000 (22:28 +0000)]
Added Parser::ParseStructDeclaration() as a result of refactoring Parser::ParseStructUnionBody().
Motivation: Objective-C can now share this rule. It also makes Parser::ParseStructUnionBody()
a bit smaller/cleaner..
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41201
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Mon, 20 Aug 2007 21:31:48 +0000 (21:31 +0000)]
Start parsing ObjC classes/categories!
Next step, refactor Parser::ParseStructUnionBody() so that struct declarations can
be shared with Objective-C (for declaring instance variables).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41200
91177308 -0d34-0410-b5e6-
96231b3b80d8
Anders Carlsson [Mon, 20 Aug 2007 18:05:56 +0000 (18:05 +0000)]
Add support for code generation of builtins.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41188
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Mon, 20 Aug 2007 16:28:05 +0000 (16:28 +0000)]
Added test cases for the return-stack-address checker to test support
for the following C++ casts: static_cast, reinterpret_cast, and const_cast.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41181
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Mon, 20 Aug 2007 16:18:38 +0000 (16:18 +0000)]
Modified ArraySubscriptExpr to have accessors getLHS and getRHS in addition
to getBase and getIdx. getBase and getIdx now return a "normalized" view
of the expression (e.g., always "A[4]" instead of possibly "4[A]"). getLHS
and getRHS return the expressions with syntactic fidelity to the original
source code.
Also modified client code of ArraySubscriptExpr, including the AST dumper
and pretty printer, the return-stack value checker, and the LLVM code
generator.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41180
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Sat, 18 Aug 2007 04:59:12 +0000 (04:59 +0000)]
Fixed bug in VarDecl::hasAutoStorage: function parameters implicitly have
auto storage, but this routine would incorrectly return false.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41162
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Fri, 17 Aug 2007 22:17:23 +0000 (22:17 +0000)]
Added extra test case to check proper handling of archaic array indexing: 4[A]
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41147
91177308 -0d34-0410-b5e6-
96231b3b80d8
Anders Carlsson [Fri, 17 Aug 2007 22:00:32 +0000 (22:00 +0000)]
Add preliminary support for converting struct types.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41145
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Fri, 17 Aug 2007 16:46:58 +0000 (16:46 +0000)]
Added extra semantic checking to do basic detection of
"return of stack addresses." ParseReturnStmt now calls CheckReturnStackAddr
to determine if the expression in the return statement evaluates to an
address of a stack variable. If so, we issue a warning.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41141
91177308 -0d34-0410-b5e6-
96231b3b80d8
Anders Carlsson [Fri, 17 Aug 2007 15:44:17 +0000 (15:44 +0000)]
Return true in case of error, which is what other functions do.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41140
91177308 -0d34-0410-b5e6-
96231b3b80d8
Anders Carlsson [Fri, 17 Aug 2007 05:31:46 +0000 (05:31 +0000)]
Add initial support for constant CFStrings.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41136
91177308 -0d34-0410-b5e6-
96231b3b80d8
Steve Naroff [Thu, 16 Aug 2007 21:48:38 +0000 (21:48 +0000)]
Fixed Sema::CheckEqualityOperands() and Sema::CheckRelationalOperands() to deal more
thoughtfully with incompatible pointers. This includes:
- Emit a diagnostic when two pointers aren't compatible!
- Promote one of the pointers/integers so we maintain the invariant expected by the
code generator (i.e. that the left/right types match).
- Upgrade the pointer/integer comparison diagnostic to include the types.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41127
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Wed, 15 Aug 2007 22:33:19 +0000 (22:33 +0000)]
Added a comment to ArraySubscriptExpr to note that the expressions like
"A[4]" are equivalent to "4[A]", and that a test that the expression
returned by "getBase()" has a pointer type is required to resolve which
subexpression is the "true" base expression of the array index.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41113
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Wed, 15 Aug 2007 00:03:46 +0000 (00:03 +0000)]
Added the following utility methods to VarDecl that provide
canonicalized queries of a variable's storage:
hasAutoStorage - Does a variable have (implicit) auto storage?
hasStaticStorage - Does a variable have (implicit) static storage?
hasLocalStorage - Is the variable a non-static local variable?
hasGlobalStorage - Is the variable a global variable or a static
local variable?
Additional comments documenting these functions are included in the
source.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41092
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Tue, 14 Aug 2007 18:14:14 +0000 (18:14 +0000)]
Removed dead variable "hadError" in ParseReturnStmt.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41079
91177308 -0d34-0410-b5e6-
96231b3b80d8
Ted Kremenek [Tue, 14 Aug 2007 17:39:48 +0000 (17:39 +0000)]
Added support for additional format string checking for the printf
family of functions. Previous functionality only included checking to
see if the format string was a string literal. Now we check parse the
format string (if it is a literal) and perform the following checks:
(1) Warn if: number conversions (e.g. "%d") != number data arguments.
(2) Warn about missing format strings (e.g., "printf()").
(3) Warn if the format string is not a string literal.
(4) Warn about the use se of '%n' conversion. This conversion is
discouraged for security reasons.
(5) Warn about malformed conversions. For example '%;', '%v'; these
are not valid.
(6) Warn about empty format strings; e.g. printf(""). Although these
can be optimized away by the compiler, they can be indicative of
broken programmer logic. We may need to add additional support to
see when such cases occur within macro expansion to avoid false
positives.
(7) Warn if the string literal is wide; e.g. L"%d".
(8) Warn if we detect a '\0' character WITHIN the format string.
Test cases are included.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41076
91177308 -0d34-0410-b5e6-
96231b3b80d8