Argyrios Kyrtzidis
88e1b97f16
Simplify handling of struct/union/class tags.
...
Instead of using two sets of Decl kinds (Struct/Union/Class and CXXStruct/CXXUnion/CXXClass), use one 'Record' and one 'CXXRecord' Decl kind and make tag kind a property of TagDecl.
Cleans up the code a bit and better reflects that Decl class structure.
llvm-svn: 57541
2008-10-15 00:42:39 +00:00
Daniel Dunbar
cbdf409c2c
Add serialization support in several missing places.
...
llvm-svn: 57502
2008-10-14 16:57:09 +00:00
Daniel Dunbar
d5420e3bef
Move Type::EmitImpl into header, add FIXME to make abstract.
...
llvm-svn: 57501
2008-10-14 16:55:17 +00:00
Daniel Dunbar
1be9f88a2f
Fix test suite regression, getFloatTypeSemantics shouldn't be called
...
on non-float types.
llvm-svn: 57477
2008-10-14 05:41:12 +00:00
Argyrios Kyrtzidis
01622642d3
Improve the const-ness of a few methods.
...
No functionality change.
llvm-svn: 57417
2008-10-12 18:40:01 +00:00
Argyrios Kyrtzidis
3768ad6d58
Implement more efficient Decl <-> DeclContext conversions.
...
When the static type on the Decl side is a subclass of DeclContext the compiler will use a "inlinable" static_cast, instead of always using an out-of-line function call.
Note, though, that the isa<> check still uses an out-of-line function call.
llvm-svn: 57415
2008-10-12 16:14:48 +00:00
Chris Lattner
79ef843533
silence some release-assert warnings.
...
llvm-svn: 57391
2008-10-12 00:28:42 +00:00
Chris Lattner
e05f534628
silence a bunch of warnings in a release-assert build.
...
llvm-svn: 57390
2008-10-12 00:26:57 +00:00
Steve Naroff
1d95e5a531
Final phase of converting BlockDecls over to DeclContext. This is unfortunately a largish/complex diff, however it was necessry to pass all the current block tests.
...
llvm-svn: 57337
2008-10-10 01:28:17 +00:00
Dale Johannesen
c48814bc98
Adjust calls to APFloat conversion for new interface.
...
llvm-svn: 57332
2008-10-09 23:02:32 +00:00
Steve Naroff
44078b95ee
Instantiate the BlockDecl in ActOnBlockStart() so we can use it as a DeclContext.
...
This required changes to attach the compound statement later on (like we do for functions).
llvm-svn: 57304
2008-10-08 18:44:00 +00:00
Steve Naroff
415d3d570a
- Add BlockDecl AST node.
...
- Modify BlockExpr to reference the BlockDecl.
This is "cleanup" necessary to improve our lookup semantics for blocks (to fix <rdar://problem/6272905> clang block rewriter: parameter to function not imported into block?).
Still some follow-up work to finish this (forthcoming).
llvm-svn: 57298
2008-10-08 17:01:13 +00:00
Ted Kremenek
587a44fe3d
A little more tweaking with StmtIterator and SizeOfAlignofExpr. A recent commit actually introduced a regression, not fixed a bug.
...
llvm-svn: 57282
2008-10-07 23:35:42 +00:00
Ted Kremenek
9bb286ff43
Migrate DeclStmt over to using a DeclGroup instead of a pointer to a ScopedDecl*.
...
This also removes the ugly hack needed in CFG.cpp for subclassing DeclStmt to create a DeclStmt with one Decl*.
llvm-svn: 57275
2008-10-07 23:09:49 +00:00
Ted Kremenek
4faf673d7f
Fixed a masked bug when iterating over the child expressions of SizeOfAlignOfTypeExpr. This bug was unmasked by recent changes to StmtIterator.
...
llvm-svn: 57273
2008-10-07 23:07:10 +00:00
Ted Kremenek
12183e25aa
Add const_iterator to DeclGroup.
...
Serialization for OwningDeclGroupRefs now works.
llvm-svn: 57272
2008-10-07 23:06:01 +00:00
Ted Kremenek
f9638bac59
Add StmtIterator support for DeclGroups.
...
llvm-svn: 57271
2008-10-07 23:04:14 +00:00
Ted Kremenek
6553748599
Added prototype serialization code for DeclGroup.
...
llvm-svn: 57222
2008-10-06 23:49:24 +00:00
Ted Kremenek
6d60a4ec19
Modified DeclGroupRef to always load/store the internal pointer value as Decl*. This hopefully will obviate any concerns with violating strict type-aliasing issues.
...
llvm-svn: 57213
2008-10-06 22:17:16 +00:00
Ted Kremenek
ef52c641e7
Use DeclStmt::decl_iterator to walk a group of Decl*'s instead of using the ScopedDecl chain.
...
llvm-svn: 57206
2008-10-06 20:56:19 +00:00
Ted Kremenek
a86db10563
Don't use DeclStmt::getDecl() to serialize out DeclStmt; use TheDecl directly.
...
This patch precedes removing getDecl() DeclStmt::entirely.
llvm-svn: 57205
2008-10-06 20:55:44 +00:00
Ted Kremenek
acf920dd39
Add DeclStmt::hasSolitaryDecl() and DeclStmt::getSolitaryDecl()
...
llvm-svn: 57204
2008-10-06 20:54:44 +00:00
Ted Kremenek
15e6b40832
Added PrintRawDeclStmt; use this method to print out DeclStmt instead of using PrintRawDecl (which falsely assumes DeclStmts have only one Decl).
...
llvm-svn: 57191
2008-10-06 18:39:36 +00:00
Ted Kremenek
62408480d9
Use Decl::decl_iterator instead of walking the ScopedDecl chain (which will soon be removed).
...
llvm-svn: 57190
2008-10-06 18:38:35 +00:00
Chris Lattner
2c091b1ead
ExprConstant should not abort when it sees a pointer constant that isn't.
...
llvm-svn: 57162
2008-10-06 07:20:11 +00:00
Chris Lattner
cb13691a62
Add a Expr::isEvaluatable method, eliminate isBuiltinConstantExpr
...
which is checking for something that can be inconsistent with
what we can constant fold.
llvm-svn: 57159
2008-10-06 06:49:02 +00:00
Chris Lattner
86ee286b09
Move folding of __builtin_classify_type out of the CallExpr
...
interface into the constant folding interface.
llvm-svn: 57158
2008-10-06 06:40:35 +00:00
Chris Lattner
0b7282eafc
Move handling of __builtin_nan("") out of CGBuiltin.cpp into ExprConstant.cpp
...
llvm-svn: 57157
2008-10-06 06:31:58 +00:00
Chris Lattner
37346e081c
Teach FloatExprEvaluator to evaluate __builtin_huge_val and inf.
...
llvm-svn: 57154
2008-10-06 05:53:16 +00:00
Chris Lattner
4deaa4ea24
Add a comment that describes tryEvaluate. Make tryEvaluate fold
...
__builtin_constant_p properly, and add some scaffolding for
FloatExprEvaluator to eventually handle huge_val and inf.
llvm-svn: 57152
2008-10-06 05:28:25 +00:00
Chris Lattner
01ff98a48a
add a new CallExpr::isBuiltinCall() method, and use it to simplify some existing
...
code.
llvm-svn: 57151
2008-10-06 05:00:53 +00:00
Chris Lattner
d1d152a613
a more efficient test for __builtin_classify_type
...
llvm-svn: 57149
2008-10-06 04:48:17 +00:00
Chris Lattner
465fa32cd5
Wrap long lines and other minor cleanups, no functionality change.
...
llvm-svn: 57119
2008-10-05 17:34:18 +00:00
Daniel Dunbar
b8ed192605
Make VectorType printing less broken.
...
- Print size as number of elements times "sizeof(elt type)", not
perfect but better than just printing the completely wrong type.
llvm-svn: 57100
2008-10-05 05:43:11 +00:00
Zhongxing Xu
8d1928a4ca
Reverse the RHSBlock of LogicalOp && and ||
...
llvm-svn: 57041
2008-10-04 05:48:38 +00:00
Daniel Dunbar
4d601119c3
Pass postfix attributes to ActOnFields (mismarked a file).
...
llvm-svn: 56993
2008-10-03 02:05:12 +00:00
Daniel Dunbar
15619c7e4b
Pass postfix attributes to ActOnFields.
...
llvm-svn: 56992
2008-10-03 02:03:53 +00:00
Steve Naroff
2231569f01
Add getTypeSpecStartLoc() to VarDecls and FunctionDecls.
...
This is a temporary solution to help with the block rewriter (though it certainly has general utility).
Once DeclGroup's are implemented, this SourceLocation should be stored with it (since it applies to all the decls).
llvm-svn: 56985
2008-10-03 00:02:03 +00:00
Daniel Dunbar
dc2ab1740a
Add Builtins.def attribute for "can be a constant expression".
...
- Enabled for builtins which are always constant expressions
(__builtin_huge_val*, __builtin_inf*, __builtin_constant_p,
__builtin_classify_type, __builtin___CFStringMakeConstantString).
Added Builtin::Context::isConstantExpr.
- Currently overly simply interface which only works for builtins
whose constantexprness does not depend on their arguments.
CallExpr::isBuiltinConstantExpr now takes an ASTContext argument.
llvm-svn: 56983
2008-10-02 23:30:31 +00:00
Chris Lattner
4a80a59b6e
Fix va_arg handling to do argument decaying at the correct place. This
...
fixes problems handling references of va_list, which happens on x86_64.
This fixes PR2841 and rdar://6252231
llvm-svn: 56809
2008-09-29 22:28:25 +00:00
Chris Lattner
037379d767
Fix rdar://6252231 - cannot call vsnprintf with va_list on x86_64,
...
by decaying __builtin_va_list's type when forming builtins. On
x86-64 (and other targets) __builtin_va_list is a typedef for
an array.
llvm-svn: 56768
2008-09-28 06:05:35 +00:00
Zhongxing Xu
612e0c9604
Delete trailing white space. It's over 80 columns.
...
llvm-svn: 56749
2008-09-27 03:27:29 +00:00
Ted Kremenek
8bafa2cf9f
Internally store the body of a BlockExpr using a Stmt* instead of a CompoundStmt*, and use the getBody() method to do the appropriate checking. This both removes the type-punning warnings in Expr.cpp and also makes BlockExpr have more consistency checks against modifications to its body (via StmtIterator).
...
llvm-svn: 56710
2008-09-26 23:24:14 +00:00
Ted Kremenek
6ed79f0c13
Use a union instead of a bunch of magic casts to implement a variant. This removes the type-punning errors for DeclGroup.
...
llvm-svn: 56708
2008-09-26 23:19:04 +00:00
Ted Kremenek
d86d39cc9e
Add CFG support for implicit-control flow for VLA size expressions within an SizeOfAlignOfTypeExpr.
...
llvm-svn: 56706
2008-09-26 22:58:57 +00:00
Ted Kremenek
ac49ea63c6
Do not create CFGs for functions/methods using blocks (need to add control-flow).
...
llvm-svn: 56672
2008-09-26 18:17:07 +00:00
Ted Kremenek
61a625ff70
Move VLA processing logic from LiveVariables to CFG construction. This way all dataflow analyses "see" the VLA size expressions.
...
llvm-svn: 56655
2008-09-26 16:26:36 +00:00
Steve Naroff
ba756cb3fc
Tweak Expr::isModifiableLvalue() and Expr::isLvalue() to better deal with BlockDeclRef exprs.
...
This fixes <rdar://problem/6248392> clang: Error when using address of stack variable inside block.
llvm-svn: 56652
2008-09-26 14:41:28 +00:00
Daniel Dunbar
2c793a2ecd
Add # of block pointer types to -print-stats.
...
llvm-svn: 56638
2008-09-26 03:23:00 +00:00
Ted Kremenek
a5e23f6b78
Added prototype implementation of the DeclGroup, DeclGroupRef, and DeclGroupOwningRef classes.
...
Documentation and testing are pending.
llvm-svn: 56611
2008-09-25 17:13:40 +00:00