Commit Graph

3405 Commits

Author SHA1 Message Date
Ted Kremenek 1c91a67086 Added transfer functions for pre- and post- increment/decrement operators.
llvm-svn: 46300
2008-01-24 02:28:56 +00:00
Ted Kremenek 33d8285b8d Added passing "ASTContext" to both GREngine and GRConstants.
Added initial support for integer casting operations to GRConstants.

llvm-svn: 46298
2008-01-24 02:02:54 +00:00
Ted Kremenek 4f1da522ca Minor tweak in GetValue to avoid an extra check for ParenExprs.
llvm-svn: 46294
2008-01-24 00:50:08 +00:00
Ted Kremenek 2517423c3c Implemented value tracking support for '*' and '*='.
Added "multiplication" support for equality sets.

llvm-svn: 46289
2008-01-23 23:42:27 +00:00
Ted Kremenek 5e02dc1b46 Implemented value tracking support for '+=' and '-='.
llvm-svn: 46288
2008-01-23 23:38:00 +00:00
Chris Lattner 2dd606839d add some assertions so that the rewriter dies violently with a useful
error instead of subtly with a mysterious one.

llvm-svn: 46287
2008-01-23 23:37:15 +00:00
Ted Kremenek cefae084a3 Removed extra GraphViz node attributes for GRConstants, as some of them were
causing problems with Dot.

llvm-svn: 46285
2008-01-23 22:54:57 +00:00
Ted Kremenek 930191c011 some prettying of the GraphViz visualization of GRConstants analysis results.
llvm-svn: 46284
2008-01-23 22:30:44 +00:00
Fariborz Jahanian 60a901621f Fixed a nasty bug which took a while to come up with a test case,
diagnose, and took even longer to fix. It has to do with rewriting of a message
receiver which is an 'ivar' reference. Fix, however, is to remove a code which
was not doing the right thing and no longer needed.

llvm-svn: 46279
2008-01-23 20:34:40 +00:00
Ted Kremenek 0a8d3767a3 Major "architectural" changes to the GRConstants analysis. We now reason about
abstract "L-values" and "R-values" when doing value tracking, and expanding
constant tracking to encompass tracking disjunctive sets of possible constants.
Further, the tree-walking is more efficient, as we don't blindly recurse the
tree if we won't generate new states.

llvm-svn: 46278
2008-01-23 19:59:44 +00:00
Chris Lattner 7238225c28 add support for -Wundef.
llvm-svn: 46274
2008-01-23 17:19:46 +00:00
Fariborz Jahanian 54e42318c0 Missing ObjC stuff. Patch by Mike Stump.
llvm-svn: 46268
2008-01-23 01:34:33 +00:00
Fariborz Jahanian 0a71ad2e07 Problem with ObjC's type-encoding of nested structs causing infinit recursion.
llvm-svn: 46260
2008-01-22 22:44:46 +00:00
Lauro Ramos Venancio db449040aa Fix a typo.
llvm-svn: 46259
2008-01-22 22:38:35 +00:00
Lauro Ramos Venancio 09af71c2a6 Implement bitfield write.
llvm-svn: 46258
2008-01-22 22:36:45 +00:00
Lauro Ramos Venancio 2ddcb25a3b Implement bitfield read.
llvm-svn: 46257
2008-01-22 20:17:04 +00:00
Chris Lattner 97ff7763dc Fix PR1936, a crash on malformed #if. Thanks to Neil for
noticing this!

llvm-svn: 46256
2008-01-22 19:34:51 +00:00
Lauro Ramos Venancio 0ae6cd5219 Fix two bugs in bitfield codegen.
llvm-svn: 46255
2008-01-22 19:15:30 +00:00
Gordon Henriksen f52da44530 Fix grammar.
llvm-svn: 46253
2008-01-22 18:46:25 +00:00
Chris Lattner d0d28b913e clarify wording.
llvm-svn: 46252
2008-01-22 17:14:30 +00:00
Steve Naroff af2a022563 - Add Sema::CheckStringLiteralInit, Sema::IsStringLiteralInit.
- Use previous hooks to simplify Sema::CheckInitializerTypes()...

llvm-svn: 46235
2008-01-22 00:55:40 +00:00
Steve Naroff f9eb598de3 Sema::CheckInitializerTypes(). Start simpliying and cleaning up...
llvm-svn: 46234
2008-01-21 23:53:58 +00:00
Lauro Ramos Venancio 111b3ba670 Add Ubuntu 7.10 include path.
llvm-svn: 46233
2008-01-21 23:08:35 +00:00
Fariborz Jahanian 7718e36e25 Elimate bogus warning when va_start is correctly used in
a method.

llvm-svn: 46232
2008-01-21 22:59:53 +00:00
Steve Naroff c505c6792c Add a predicate/getter when checking for incomplete array types ("[]").
llvm-svn: 46231
2008-01-21 22:59:18 +00:00
Lauro Ramos Venancio 37bae3e8aa Simplify the bitfield codegen.
llvm-svn: 46230
2008-01-21 22:54:57 +00:00
Fariborz Jahanian eab81cd03f Synthesize methods with va-arg list correctly.
llvm-svn: 46212
2008-01-21 20:14:23 +00:00
Lauro Ramos Venancio 71a9bb2b48 Fix the __SIZE_TYPE__ definition on x86_32. This fixes the alloca.c (wget 1.10.2) compilation.
llvm-svn: 46196
2008-01-20 04:02:16 +00:00
Fariborz Jahanian 137d693e09 Fixed comment.
llvm-svn: 46185
2008-01-19 01:03:17 +00:00
Steve Naroff c7d2df23f8 Fix two bugs with an @throw that doesn't have a statement.
- ObjCAtThrowStmt::getSourceRange() needs to check if it has a statement (and not go "boom":-)
- RewriteTest::RewriteObjCThrowStmt() needs to generate refer to the current exception. 

llvm-svn: 46184
2008-01-19 00:42:38 +00:00
Fariborz Jahanian 802583656e Patch to replace #import with #include.
llvm-svn: 46183
2008-01-19 00:30:35 +00:00
Steve Naroff 31c89f2bb0 Add Basic/Targets.cpp to the Xcode project...
llvm-svn: 46182
2008-01-18 23:34:17 +00:00
Steve Naroff acb6fa6bea Sema::FinalizeDeclaratorGroup(): Tighten up the tentative definition rule when dealing with arrays.
Bug submitted by Eli.

llvm-svn: 46179
2008-01-18 20:40:52 +00:00
Anders Carlsson 60bfc161a0 Assert that the type of the cast is equal to the _unqualified_ type of the subexpression. Fixes a problem spotted by Nuno Lopes.
llvm-svn: 46158
2008-01-18 02:25:57 +00:00
Fariborz Jahanian 159ee39f4d Insert #pragma once when rewriting a header file.
llvm-svn: 46155
2008-01-18 01:15:54 +00:00
Ted Kremenek 111ede6c00 Fixed bug in 'GetBinding' when doing the lookup of stored values. We now
use ImmutableMap::SlimFind(), which returns the correct value.

Added pruning of dead block-level expressions and Decls from our value map
using liveness information.

llvm-svn: 46154
2008-01-18 00:41:32 +00:00
Ted Kremenek 05ecfddfc3 Fixed bug in 'LiveVariables' analysis where we incorrectly marked a variable
dead at an assignment without taking into account if the variable was used in
the RHS of the assignment.

llvm-svn: 46153
2008-01-18 00:40:21 +00:00
Steve Naroff b716fbab44 Sema::FinalizeDeclaratorGroup()...make sure we emit an diagnostic for tentative definitions with incomplete types. Touch up all test cases that are effected.
llvm-svn: 46152
2008-01-18 00:39:39 +00:00
Ted Kremenek 1989d2569b Changed DataflowSolver to always associated recorded dataflow values with
the position *before* a statement, regardless of whether we are doing a
forward or backwards analysis.

llvm-svn: 46151
2008-01-18 00:38:55 +00:00
Ted Kremenek 85be7cf8ca Modified the notion of "Block-level expressions" in CFGs to include Stmt*. This
is because GNU-style Statement-expressions cause the last statement in the
statement-expression to act like an expression.

We now have two notions: block-level statements and block-level expressions.

The former are all Stmt* that appear in the list of statements in CFGBlocks. The
latter is the subset of the former; these block-level statements are used as
subexpressions somewhere in the AST. CFG::isBlockExpr() returns true for the
latter, not the former (previously isBlockExpr() always returned true for
non-Expr Stmt*).

Modified the LiveVariables analysis to also track liveness state for block-level
expressions (using the updated definition of block-level expressions).

Modified the dataflow solver so that when it records values for block-level
statements, it records the dataflow value *before* the transfer function for a
Stmt* is evaluated (not after). This is more in sync in what clients will want.

Modified CFGStmtVisitor to record the current block-level statement.

llvm-svn: 46143
2008-01-17 20:48:37 +00:00
Fariborz Jahanian 9a5124a67e Don't ICE on missing interface declaration when declaring one of its protocols.
llvm-svn: 46141
2008-01-17 20:33:24 +00:00
Steve Naroff e7ea2f43bf Improve diagnostic wording...
llvm-svn: 46138
2008-01-17 19:24:05 +00:00
Ted Kremenek b4b65e6319 Added support to dataflow solver to (when requested) also record dataflow
values for the block-level expressions.

Modified 'LiveVariables' to provide the option to clients to record
liveness information for block-level expressions (using the above feature).

Modified 'DeadStores' to conform to the new interface of 'LiveVariables'.

Modified 'GRConstants' to compute liveness information for block-level
expressions.

llvm-svn: 46137
2008-01-17 18:25:22 +00:00
Nate Begeman 1c075a1c9d Match change in EmitCallExpr
llvm-svn: 46136
2008-01-17 18:06:09 +00:00
Nate Begeman d5b534e16f Fix for EmitCallExpr changed in OverloadExpr patch
llvm-svn: 46135
2008-01-17 18:03:22 +00:00
Ted Kremenek 32a3358eab Fixed typo introduced by r46133 that caused -Wfloat-equal to break.
llvm-svn: 46134
2008-01-17 17:55:13 +00:00
Ted Kremenek f1dae23b68 Removed FindDeclRef, and used Expr::IgnoreParens instead (code refactoring).
llvm-svn: 46133
2008-01-17 17:50:49 +00:00
Nate Begeman 1e36a85f64 Implement basic overload support via a new builtin, __builtin_overload.
__builtin_overload takes 2 or more arguments:
0) a non-zero constant-expr for the number of arguments the overloaded 
   functions will take
1) the arguments to pass to the matching overloaded function
2) a list of functions to match.

The return type of __builtin_overload is inferred from the function whose args
match the types of the arguments passed to the builtin.  For example:

float a;
float sinf(float);
int   sini(int);

float b = __builtin_overload(1, a, sini, sinf);

Says that we are overloading functions that take one argument, and trying to 
pass an argument of the same type as 'a'.  sini() does not match since it takes
and argument of type int.  sinf does match, so at codegen time this will turn
into float b = sinf(a);

llvm-svn: 46132
2008-01-17 17:46:27 +00:00
Fariborz Jahanian ad134b987e Renamed getSynthesizedSelectorSize to getSynthesizedMethodSize. Compute method name
size in accordance with how rewriter synthesizes method name.

llvm-svn: 46131
2008-01-17 17:37:26 +00:00
Ted Kremenek fff70962bb Added method Expr::IgnoreParens(), which returns the first non-ParenExpr Expr*.
Refactored the use of this method into both the Sema module and Analysis module,
which were using their own static functions that did the same thing.

llvm-svn: 46129
2008-01-17 16:57:34 +00:00