Commit Graph

6731 Commits

Author SHA1 Message Date
Ted Kremenek 4db44b62ad Don't use DeclStmt::getDecl(); this will eventually disappear. Just fetch the first decl using the DeclStmt::decl_iterator.
llvm-svn: 57194
2008-10-06 18:43:53 +00:00
Ted Kremenek 704a2505db In EmitDeclStmt: use DeclStmt::const_decl_iterator instead of walking the scoped decl chain.
llvm-svn: 57192
2008-10-06 18:42:27 +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
Ted Kremenek fae8cb0736 Use DeclStmt::decl_iterator instead of using Decl::getDecl(). Soon DeclStmts will wrap group of Decls.
Added FIXME.

llvm-svn: 57189
2008-10-06 18:37:46 +00:00
Argyrios Kyrtzidis 153d967d14 The current semantic process for direct initializers won't work properly for class types.
Add a FIXME until class constructors are supported.

llvm-svn: 57188
2008-10-06 18:37:09 +00:00
Ted Kremenek f8a2765fb7 Use DeclStmt::decl_iterator instead of walking the ScopedDecl chain (which will soon be removed).
llvm-svn: 57187
2008-10-06 18:36:52 +00:00
Ted Kremenek 151534a197 Add const_decl_iterator to DecStmt.
llvm-svn: 57186
2008-10-06 18:35:55 +00:00
Ted Kremenek c7d5d976bf Update Xcode project.
llvm-svn: 57180
2008-10-06 17:42:44 +00:00
Argyrios Kyrtzidis 9a1191c047 Implement support for C++ direct initializers in declarations, e.g. "int x(1);".
This is how this kind of initializers appear in the AST:
-The Init expression of the VarDecl is a functional type construction (of the VarDecl's type).
-The new VarDecl::hasCXXDirectInitializer() returns true.

e.g, for "int x(1);":
-VarDecl 'x' has Init with expression "int(1)" (CXXFunctionalCastExpr).
-hasCXXDirectInitializer() of VarDecl 'x' returns true.

A major benefit is that clients that don't particularly care about which exactly form was the initializer can handle both cases without special case code.
Note that codegening works now for "int x(1);" without any changes to CodeGen.

llvm-svn: 57178
2008-10-06 17:10:33 +00:00
Ted Kremenek 3b670d1a0c Updated checker build.
llvm-svn: 57176
2008-10-06 15:46:11 +00:00
Chris Lattner 25728d931a fix incorrect rdar number.
llvm-svn: 57165
2008-10-06 07:43:28 +00:00
Chris Lattner 1b0a00a4c9 __CONSTANT_CFSTRINGS__ should be defined even in C mode, otherwise the CFSTR
won't expand to the builtin.  This fixes rdar://6248329

llvm-svn: 57164
2008-10-06 07:43:09 +00:00
Chris Lattner a97132a9c4 Make sema and codegen allow __builtin___CFStringMakeConstantString as a valid
constant lvalue.  Implement this in codegen by moving the code out of CGBuiltin
into EmitConstantExpr.

llvm-svn: 57163
2008-10-06 07:26:43 +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 24355b5240 always try to fold a builtin before emitting it. In the future
it is possible that a builtin could sometimes be folded (e.g. __builtin_clz)
if it's operand is a constant.

llvm-svn: 57161
2008-10-06 06:56:41 +00:00
Chris Lattner b7c86a211c Remove the 'C' / isConstantExpr flag on builtins. Code should never
depend on the value of this flag, it should depend on whether 
tryEvaluate is able to *actually* fold a builtin.

llvm-svn: 57160
2008-10-06 06:51:12 +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 a1518b1dfe remove some code where CGBuiltin folds constants, and use tryEvaluate to
do it instead.  We should still handle __builtin_nan etc, but don't yet.
This fixes incorrect evaluation of __builtin_constant_p, a FIXME.

llvm-svn: 57156
2008-10-06 06:09:18 +00:00
Chris Lattner e50e90142e instead of making codegen try to know about all of the builtins to generate
constants for them, just use the constant evaluator to do the job.  This
also fixes crashes on 'unknown constant builtins'.

llvm-svn: 57155
2008-10-06 05:59:01 +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 c43467526d "Enhance" CheckArithmeticConstantExpression to accept ?: with a constant
condition as a constant even if the unevaluated side is a not a constant.
We don't do this when extensions are off, and we emit a warning when this 
happens:

t.c:22:11: warning: expression is not a constant, but is accepted as one by GNU extensions
short t = __builtin_constant_p(5353) ? 42 : somefunc();
          ^                                 ~~~~~~~~~~

suggestions for improvement are welcome.  This is obviously horrible, but
is required for real-world code.

llvm-svn: 57153
2008-10-06 05:42:39 +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
Anders Carlsson 1e18220dc4 Actually use the mmintrin.h header, it's good enough now.
llvm-svn: 57150
2008-10-06 04:49:00 +00:00
Chris Lattner d1d152a613 a more efficient test for __builtin_classify_type
llvm-svn: 57149
2008-10-06 04:48:17 +00:00
Zhongxing Xu a4bbcd302e Fix typos.
llvm-svn: 57146
2008-10-06 03:03:33 +00:00
Anders Carlsson f407150c06 Apparently gcc uses pi64 for the shift intrinsics.
llvm-svn: 57145
2008-10-06 02:07:50 +00:00
Anders Carlsson 83661acf30 Add the 'y' assembler constraint.
llvm-svn: 57144
2008-10-06 00:41:45 +00:00
Argyrios Kyrtzidis e8addf5e04 Allow variadic arguments without named ones for C++, e.g. "void(...);"
llvm-svn: 57143
2008-10-06 00:07:55 +00:00
Anders Carlsson b83162840f Implement support for the const and pure attributes.
llvm-svn: 57142
2008-10-05 23:32:53 +00:00
Argyrios Kyrtzidis 4217c7ec81 A tiny optimization; use isCXXFunctionDeclarator only when it's appropriate.
llvm-svn: 57141
2008-10-05 23:15:41 +00:00
Chris Lattner 09d98f5d8a miscellaneous cleanups
llvm-svn: 57140
2008-10-05 21:50:58 +00:00
Chris Lattner ac7ed9a71a move __FLT_EVAL_METHOD__, __FLT_RADIX__, and __DECIMAL_DIG__ into
target indep code.

llvm-svn: 57139
2008-10-05 21:49:27 +00:00
Chris Lattner c34a35d56f it helps when I save the file before testing and committing.
llvm-svn: 57138
2008-10-05 21:42:17 +00:00
Chris Lattner 6da2f0dd2e suck the rest of the FP macros out of the targets into the PP
llvm-svn: 57137
2008-10-05 21:40:58 +00:00
Argyrios Kyrtzidis 279d9814e5 Add some text from the C++ standard and additional ambiguity resolution tests.
No funcitonality change.

llvm-svn: 57136
2008-10-05 21:10:08 +00:00
Chris Lattner 5cd8351808 start moving fp macros over
llvm-svn: 57134
2008-10-05 20:40:30 +00:00
Daniel Dunbar 6ba6cc42d4 Add script for checking builtin macros verse another compiler ($CC or
gcc).

llvm-svn: 57133
2008-10-05 20:39:30 +00:00
Chris Lattner 6512a88984 move a bunch more integer sizing out of target-specific code into
target indep code.  

Note that this changes functionality on PIC16: it defines __INT_MAX__
correctly for it, and it changes sizeof(long) to 16-bits (to match
the size of pointer).

llvm-svn: 57132
2008-10-05 20:06:37 +00:00
Argyrios Kyrtzidis 2b1ef227f5 Handle ambiguities between expressions and type-ids that occur inside parentheses, e.g.:
sizeof(int()) -> "int()" is type-id
sizeof(int()+1) -> "int()+1" is expression.

llvm-svn: 57131
2008-10-05 19:56:22 +00:00
Chris Lattner 4ecd753486 eliminate __USER_LABEL_PREFIX__ from the Targets.cpp file, start moving
integer size #defines over to the Preprocessor.

llvm-svn: 57130
2008-10-05 19:44:25 +00:00
Chris Lattner 248d3c4192 gcc no longer defines __block to nothing when blocks aren't enabled.
llvm-svn: 57129
2008-10-05 19:32:52 +00:00
Chris Lattner 1f7e2d5430 rearrange preprocessor macro definitions into language-specific
then target specific.

llvm-svn: 57128
2008-10-05 19:32:22 +00:00
Chris Lattner f37bafc5ca Implement PR2773, support for __USER_LABEL_PREFIX__
llvm-svn: 57127
2008-10-05 19:22:37 +00:00
Chris Lattner 9daca0e561 Fix a problem reported in PR2766 that makes clang reject old versions
of GCC's headers.  This impacts people that run clang in Tiger systems.

llvm-svn: 57126
2008-10-05 19:05:44 +00:00
Argyrios Kyrtzidis df788f4eea Found a subtle bug caused by an implicit enum-to-bool conversion (of the TentativeParsingResult enum).
This was the motivation of the following changes:

-'TentativeParsingResult' enum is replaced by a 'TPResult' class that basically encapsulates the enum.
-TPR_true, TPR_false, TPR_ambiguous, and TPR_error enum constants are replaced by TPResult::True(), TPResult::False(), etc. calls that return a TPResult object.
-Also fixed the subtle bug in Parser::isCXXFunctionDeclarator (caught by the above changes as a compilation error).

llvm-svn: 57125
2008-10-05 18:52:21 +00:00
Anders Carlsson c181b01681 Add parsing of the sentinel attribute. Still need to create the attribute.
llvm-svn: 57121
2008-10-05 18:05:59 +00:00
Anders Carlsson d27a0c2395 Change indentation for a couple of files in the Xcode project.
llvm-svn: 57120
2008-10-05 18:04:30 +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
Anders Carlsson c442c92b6f Remove copyright notice, we decided not to have them.
llvm-svn: 57118
2008-10-05 17:21:08 +00:00
Argyrios Kyrtzidis 5af11b2462 Move the TentativeParsingResult enum closer to where it gets used.
No functionality change.

llvm-svn: 57115
2008-10-05 17:02:44 +00:00
Argyrios Kyrtzidis bc28fefcde Disambiguate between a declaration or an expression, in the 'for-init-statement' part of a 'for' statement.
llvm-svn: 57112
2008-10-05 15:50:46 +00:00
Argyrios Kyrtzidis 2534620b4e Fix Parser::isCXXConditionDeclaration to properly resolve declarations.
llvm-svn: 57111
2008-10-05 15:19:49 +00:00
Argyrios Kyrtzidis 71f3e19df0 Disambiguate between a declaration or expression for the 'condition' part of a if/switch/while/for statement.
llvm-svn: 57109
2008-10-05 15:03:47 +00:00
Argyrios Kyrtzidis 7b87f27438 Consider GNU attributes when doing ambiguity resolution.
llvm-svn: 57108
2008-10-05 14:27:18 +00:00
Zhongxing Xu 8c9771bdf0 Remove redundant parameter and rename StMgr to StateMgr.
llvm-svn: 57107
2008-10-05 12:12:48 +00:00
Daniel Dunbar 93bc49d882 Add X86 builtin code generation test case.
llvm-svn: 57104
2008-10-05 06:38:36 +00:00
Daniel Dunbar 363a5c0a1b Improve C language testing coverage.
llvm-svn: 57103
2008-10-05 06:36:33 +00:00
Daniel Dunbar 35bd17f1a5 Fix X86 palignr[128] builtins to match LLVM.
llvm-svn: 57102
2008-10-05 06:35:41 +00:00
Daniel Dunbar b11d5d65e8 Add some builtins to codegen test case.
llvm-svn: 57101
2008-10-05 06:34:45 +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
Daniel Dunbar e47e96a4a5 Fix another X86 builtin definitions.
- vec_set_v4hi had "v4s" in place of "V4s"

llvm-svn: 57099
2008-10-05 05:21:00 +00:00
Daniel Dunbar 91d8be141b Fix some X86 builtin definitions.
- cmp instructions return int
 - storedqu had bad const qualifier
 - pmuldq128 used invalid type code

llvm-svn: 57098
2008-10-05 05:14:37 +00:00
Daniel Dunbar 0af89ff0fb Add -rewrite-macros test case.
llvm-svn: 57094
2008-10-05 01:39:04 +00:00
Daniel Dunbar 374b8b4269 Allow -verify to be used with -rewrite-macros.
llvm-svn: 57093
2008-10-05 01:38:39 +00:00
Daniel Dunbar 91d085e368 Coverage test for targets.
- This pushes us over 80% coverage of executable LOC.

llvm-svn: 57092
2008-10-05 01:04:25 +00:00
Steve Naroff 47ddedab08 Update VC++ project file
llvm-svn: 57090
2008-10-05 00:52:59 +00:00
Daniel Dunbar 05d93dd73d Improve codegen coverage tests.
- Hit debug info generation.
 - Hit both ObjC runtimes.

llvm-svn: 57088
2008-10-05 00:31:54 +00:00
Daniel Dunbar 6b57b45b4d Add dummy -ast-dump support for ObjC category implementations.
llvm-svn: 57087
2008-10-05 00:31:15 +00:00
Steve Naroff 8f9be42072 Remove old diag that alerted the user to a limitation we no longer have:-)
llvm-svn: 57086
2008-10-05 00:12:46 +00:00
Argyrios Kyrtzidis 72d8149a1e Append the test runs with '&&'.
llvm-svn: 57085
2008-10-05 00:08:56 +00:00
Argyrios Kyrtzidis 2c7137d8d1 Resolve ambiguous C++ statements (C++ 6.8p1).
'ParseTentative.cpp' implements the functionality needed to resolve ambiguous C++ statements, to either a declaration or an expression, by "tentatively parsing" them.

llvm-svn: 57084
2008-10-05 00:06:24 +00:00
Steve Naroff 02da7667d2 Create a function, eliminating some redundancy between SynthesizeBlockInitExpr() and SynthesizeBlockLiterals().
llvm-svn: 57083
2008-10-05 00:06:12 +00:00
Steve Naroff c7a80a5533 Finish implementing copy/dispose helpers for imported block decls.
llvm-svn: 57082
2008-10-04 23:47:37 +00:00
Daniel Dunbar 83f705ac20 Add coverage tests of C and Obj-C language features.
- AST printing, dumping, serialization, codegen.
 - HTML printing.
 - Parser callbacks.

Several of these are XFAIL because they trigger unimplemented code.

llvm-svn: 57081
2008-10-04 23:47:28 +00:00
Daniel Dunbar e773d5ff16 Set exit code properly on "Unexpected program action".
llvm-svn: 57080
2008-10-04 23:42:49 +00:00
Daniel Dunbar 4777ba0102 Desensitize env-include-paths.c to the directory it is running in.
- It would probably be better if TestRunner.sh canonicalized this.

llvm-svn: 57075
2008-10-04 21:05:04 +00:00
Daniel Dunbar 3ca0a634c2 Bug fix, CPATH="" does not add '.' to search path.
llvm-svn: 57072
2008-10-04 20:58:18 +00:00
Daniel Dunbar 23bd6cc156 Add test/Driver.
- env-include-paths.c is XFAIL as it exposed a bug.

Add test/Coverage.
 - For tests which achieve code coverage but don't validate anything.

llvm-svn: 57070
2008-10-04 20:46:41 +00:00
Daniel Dunbar fdfb0a0d5e De-XFAIL test/Parser/pragma-pack.c
llvm-svn: 57069
2008-10-04 19:45:56 +00:00
Chris Lattner 464e17ab20 switch to using -verify
llvm-svn: 57068
2008-10-04 19:43:25 +00:00
Chris Lattner cc498392a2 Move the expected-warning lines to a place that clang -verify will pick them
up.  Speculatularly hacktastic, but strangely beautiful?
Daniel, lines 20/21 are rejected, please investigate.

llvm-svn: 57067
2008-10-04 19:38:15 +00:00
Daniel Dunbar 921b968841 Add Parser support for #pragma pack
- Uses Action::ActOnPragmaPack
 - Test case is XFAIL pending verifier fixes.

llvm-svn: 57066
2008-10-04 19:21:03 +00:00
Daniel Dunbar 405965323d Add Preprocessor::RemovePragmaHandler.
- No functionality change.

llvm-svn: 57065
2008-10-04 19:17:46 +00:00
Steve Naroff 4017d15fed Add indirection required for byref BlockDeclRefExpr's.
llvm-svn: 57063
2008-10-04 18:52:47 +00:00
Steve Naroff 564e97a2de Handle bookkeeping for imported blocks (in SynthesizeBlockImpl).
This code was "lost" with my recent changes to SynthesizeBlockFunc.

llvm-svn: 57056
2008-10-04 18:00:11 +00:00
Ted Kremenek c23dcdbb7f Add MemRegion.cpp to VS project.
llvm-svn: 57055
2008-10-04 17:55:52 +00:00
Steve Naroff 87b9d298b8 Cut/paste error...need to use the expression "name" for member references (or other complex expressions that can embed a block pointer type)
llvm-svn: 57054
2008-10-04 17:45:51 +00:00
Steve Naroff 756efbc7f7 Clear the map that associated the rewritten block with it's corresponding BlockExpr.
llvm-svn: 57053
2008-10-04 17:10:02 +00:00
Steve Naroff 5f96e4dffc Moved main control flow functions to bottom of file.
Reworked control flow to:
- rewrite the block expr body "in place".
- used Chris's new rewriter hook "getRewritenText" to "lift" the text for later use.
- finally, we do the block expr text replacement.

llvm-svn: 57052
2008-10-04 17:06:23 +00:00
Ted Kremenek d1036be0ef Updated checker build.
llvm-svn: 57045
2008-10-04 06:53:56 +00:00
Ted Kremenek 5ca90a244f This is a big patch, but the functionality change is small and the rest of the patch consists of deltas due to API changes.
This patch overhauls the "memory region" abstraction that was prototyped (but never really used) as part of the Store.h.  This patch adds MemRegion.h and MemRegion.cpp, which defines the class MemRegion and its subclasses.  This classes serve to define an abstract representation of memory, with regions being layered on other regions to to capture the relationships between fields and variables, variables and the address space they are allocated in, and so on.  

The main motivation of this patch is that key parts of the analyzer assumed that all value bindings were to VarDecls.  In the future this won't be the case, and this patch removes lval::DeclVal and replaces it with lval::MemRegionVal.  Now all pieces of the analyzer must reason about abstract memory blocks instead of just variables.

There should be no functionality change from this patch, but it opens the door for significant improvements to the analyzer such as field-sensitivity and object-sensitivity, both which were on hold until the memory abstraction got generalized.

The memory region abstraction also allows type-information to literally be affixed to a memory region.  This will allow the some now redundant logic to be removed from the retain/release checker.

llvm-svn: 57042
2008-10-04 05:50:14 +00:00
Zhongxing Xu 8d1928a4ca Reverse the RHSBlock of LogicalOp && and ||
llvm-svn: 57041
2008-10-04 05:48:38 +00:00
Chris Lattner 879876d26a add a disclaimer
llvm-svn: 57038
2008-10-03 23:31:37 +00:00
Chris Lattner 7c306a70b9 add a new Rewriter::getRewritenText method that returns the text for a range
that includes any edits in the range.

llvm-svn: 57037
2008-10-03 23:31:16 +00:00
Steve Naroff 3d5a11c622 Remove an old/vacuous if clause.
llvm-svn: 57036
2008-10-03 23:00:50 +00:00
Steve Naroff e3e45a8c43 More fun & games with the block rewriter.
llvm-svn: 57028
2008-10-03 20:28:15 +00:00