Commit Graph

4004 Commits

Author SHA1 Message Date
Chris Lattner 855d024a83 Remove the first layer of support for "portability" warnings. This is
theoretically useful, but not useful in practice.  It adds a bunch of 
complexity, and not much value.  It's best to nuke it.  One big advantage
is that it means the target interfaces will soon lose their SLoc arguments
and target queries can never emit diagnostics anymore (yay).  Removing this
also simplifies some of the core preprocessor which should make it slightly
faster.

Ted, I didn't simplify TripleProcessor, which can now have at most one
triple, and can probably just be removed.  Please poke at it when you have
time.

llvm-svn: 47930
2008-03-05 01:18:20 +00:00
Ted Kremenek f9c67f6056 Added support for ProgramPoints to represent ExplodedNodes in another
ExplodedGraph. This allows us to build "layered" ExplodedGraphs where one
simulation is layered on another.

llvm-svn: 47926
2008-03-05 00:59:43 +00:00
Chris Lattner 43c103ab1b move this into the right file.
llvm-svn: 47925
2008-03-05 00:53:34 +00:00
Ted Kremenek d5804b31c4 Plug-in transfer function "EvalCall" now takes as an argument the current
GRStmtNodeBuilder and is now responsible for adding its own nodes to the graph.

llvm-svn: 47923
2008-03-05 00:33:14 +00:00
Ted Kremenek 31672dbda3 Cleaned up typedefs involving StateTy so that we always use "StateTy*" instead of StateTy.
This is conceptually much cleaner, as it shows that the state is always a pointer.
It also makes it easier to marshall these values around across the internal APIs
of the path-sensitive engine.

llvm-svn: 47921
2008-03-05 00:11:33 +00:00
Ted Kremenek c3c8c5762f Make GRStmtNodeBuilder only depend on StateTy, and not the type definition
of the entire checker.

llvm-svn: 47920
2008-03-04 23:50:00 +00:00
Ted Kremenek a81c9de767 Moved implementation of GRExprEngine::Nodify into GRStmtNodeBuilder. This will
allow us to pass the builder to plug-in transfer functions and allow those
functions to create intermediate nodes.

llvm-svn: 47919
2008-03-04 23:39:43 +00:00
Ted Kremenek 3a3f6e3946 Moved GRExprEngine::NodeSet out of GRExprEngine and made it a standalone class: ExplodedNodeSet.
Made GRExprEngine::NodeSet a typedef of ExplodedNodeSet.

llvm-svn: 47914
2008-03-04 23:13:06 +00:00
Ted Kremenek c76a83f1b6 CallExprs are now no longer block-level expressions in the CFG by construction.
llvm-svn: 47913
2008-03-04 22:29:40 +00:00
Ted Kremenek 9f3f827e65 Added preliminary transfer function support for references.
llvm-svn: 47912
2008-03-04 22:16:08 +00:00
Ted Kremenek 7aedc47285 For the transfer function for CallExpr, invalidate all arguments
passed-by-reference to builtin functions until we have better builtin support.

llvm-svn: 47910
2008-03-04 22:01:56 +00:00
Anders Carlsson c83008a281 Make intrinsics always_inline.
llvm-svn: 47902
2008-03-04 21:11:29 +00:00
Ted Kremenek 229f6773bb For the transfer function of DeclStmt, for now initialize the values of
structs (local variables) to Unknown instead of Undefined.  (added FIXME to initialize *members* of struct to undefined)

llvm-svn: 47901
2008-03-04 20:40:11 +00:00
Ted Kremenek e26c37d37d Fixed another obscure node-caching bug.
llvm-svn: 47898
2008-03-04 19:52:15 +00:00
Ted Kremenek 122a529ab4 Implemented "print" method for ValueState.
llvm-svn: 47894
2008-03-04 18:30:35 +00:00
Chris Lattner 0fdc379475 The operand to the visibility attribute is required to be a quoted string, not a bare identifier.
llvm-svn: 47893
2008-03-04 18:08:48 +00:00
Ted Kremenek c490bdbdb1 TargetInfo objects now own the TargetInfoImpl objects they refer to.
TargetInfo::AddSecondaryTarget is now private, as it is only used during
object construction.

llvm-svn: 47891
2008-03-04 17:47:18 +00:00
Ted Kremenek b9832d3cb4 Add transfer function support for the default initialization of static
variables that are pointers or integers.

llvm-svn: 47880
2008-03-04 04:18:04 +00:00
Ted Kremenek 2a30ea6269 Fixed insidious state propagation bug that would sometimes cause the state
to bifurcate at the wrong places and not propagate at others.

llvm-svn: 47876
2008-03-04 00:56:45 +00:00
Ted Kremenek b2ce263891 Enhanced pretty-printing of undefined-argument errors.
llvm-svn: 47873
2008-03-04 00:42:54 +00:00
Chris Lattner 8e48dfe9a1 move deprecated -> attributes.c
llvm-svn: 47856
2008-03-03 21:17:42 +00:00
Anders Carlsson 1f604a5d6f Temporarily rename mmintrin.h so that it won't clash with the system header. It will be renamed back once the few remaining methods have been implemented.
llvm-svn: 47852
2008-03-03 19:34:30 +00:00
Ted Kremenek 3f06864c25 Fixed subtle caching bug in ExplodedGraph that would cause some nodes to
be incorrectly merged together.

llvm-svn: 47851
2008-03-03 19:29:58 +00:00
Anders Carlsson a5e2e60d69 Add mmintrin.h header
llvm-svn: 47850
2008-03-03 19:29:06 +00:00
Ted Kremenek 98c56677a7 Only allow a "noreturn" attribute to be affixed to a FunctionDecl.
llvm-svn: 47844
2008-03-03 16:52:27 +00:00
Ted Kremenek 7e97ed56e3 Added TODO.
llvm-svn: 47843
2008-03-03 16:50:00 +00:00
Ted Kremenek 8efd6b4ed8 Added FIXME.
llvm-svn: 47842
2008-03-03 16:47:31 +00:00
Gabor Greif e2e5c3f394 The attribute nothrow maps to llvm attribute nounwind. Fix testcase.
llvm-svn: 47841
2008-03-03 14:53:09 +00:00
Gabor Greif 76ac5cf9d3 Chris added this testcase with r47837. The mail only shows one todo-warning but I see 3. Strangeness. Correcting lines 16 and 24.
llvm-svn: 47840
2008-03-03 14:30:39 +00:00
Chris Lattner 028d6d5792 avoid a warning.
llvm-svn: 47839
2008-03-03 05:57:43 +00:00
Chris Lattner 65079bd9be fix codegen support for functions that are nothrow and noreturn.
llvm-svn: 47838
2008-03-03 03:45:26 +00:00
Chris Lattner 8496639787 Add a bunch of attributes, patch by Nuno Lopes.
llvm-svn: 47837
2008-03-03 03:28:21 +00:00
Chris Lattner 184adbfe5b Find clang headers in the clang headers dir, search it before
the system headers dir.  This produces an annoying warning:
clang.cpp:883: warning: ISO C++ forbids casting between pointer-to-function and pointer-to-object

I'm not sure how to remove it. :(

llvm-svn: 47836
2008-03-03 03:16:03 +00:00
Chris Lattner c16b6b2eab Build the clang headers.
llvm-svn: 47834
2008-03-03 01:23:30 +00:00
Chris Lattner 4f838791f8 Add a makefile to build and install headers.
llvm-svn: 47833
2008-03-03 01:22:28 +00:00
Chris Lattner b7256cd1d6 Add codegen support for ObjC message expressions with the GNU runtime.
Patch by David Chisnall!

llvm-svn: 47790
2008-03-01 08:50:34 +00:00
Chris Lattner a087ff9a66 Add codegen support for ObjC message expressions with the GNU runtime.
Patch by David Chisnall!

llvm-svn: 47789
2008-03-01 08:45:05 +00:00
Chris Lattner 9f64b40cbf newline at end of file, by David Chisnall
llvm-svn: 47788
2008-03-01 08:43:22 +00:00
Chris Lattner ef24b38d9c character literals have char type in C++ and int type in C. Patch
by Nuno Lopes for PR2089

llvm-svn: 47787
2008-03-01 08:32:21 +00:00
Chris Lattner c1bc541323 Add support for the CPATH, C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,
OBJC_INCLUDE_PATH, and OBJCPLUS_INCLUDE_PATH environment variables.
Patch by Sam Bishop!

llvm-svn: 47785
2008-03-01 08:07:28 +00:00
Ted Kremenek 51e87ea210 Added extra check for calls to functions where we pass undefined values
as arguments.

llvm-svn: 47778
2008-02-29 23:53:11 +00:00
Steve Naroff b96e4ab649 Fix http://llvm.org/bugs/show_bug.cgi?id=2103.
llvm-svn: 47775
2008-02-29 23:30:25 +00:00
Ted Kremenek 6f5fca78e4 Add checks for function calls via a function pointer that is NULL, Undefined,
or otherwise a constant integer value that doesn't evaluate to an address.

llvm-svn: 47774
2008-02-29 23:14:48 +00:00
Ted Kremenek fcf6863f09 Minor CFG optimization: don't create separate block-level expressions for DeclStmt initializers when the initializer is a literal.
llvm-svn: 47771
2008-02-29 22:32:24 +00:00
Ted Kremenek 36748da5a6 When AST-dumping ObjCMessageExpr, output the selector.
llvm-svn: 47769
2008-02-29 22:04:05 +00:00
Steve Naroff 83777fef1a Fix http://llvm.org/bugs/show_bug.cgi?id=2106.
llvm-svn: 47768
2008-02-29 21:48:07 +00:00
Gabor Greif 05fdaeaed2 Fix a crash where PI.TypeInfo has not been filled in case of missing ObjCInterfaceDecl.
Happens with Xcode 2.4.1 headers on test
Parser/objc-foreach-error-1.m

llvm-svn: 47767
2008-02-29 20:35:55 +00:00
Ted Kremenek 17f4dbde36 "Refinement" of hack to bound loop-traversals: visit any block at a maximum of 3 times along a given path.
llvm-svn: 47766
2008-02-29 20:27:50 +00:00
Chris Lattner f4c1aa67bd testcase for attr deprecated, by Nuno Lopes.
llvm-svn: 47757
2008-02-29 18:11:31 +00:00
Chris Lattner c18bfbb6a6 make include guards more unique.
llvm-svn: 47754
2008-02-29 17:10:38 +00:00
Chris Lattner 8a8558bcd4 Add support for attribute(deprecated), patch by Nuno Lopes!
llvm-svn: 47753
2008-02-29 16:48:43 +00:00
Ted Kremenek b2b50b7bf5 Added simple hack to reduce redundant warnings from the checker:
Cache the location of the error.  Don't emit the same
warning for the same error type that occurs at the same program
location but along a different path.
      

llvm-svn: 47727
2008-02-28 20:38:16 +00:00
Ted Kremenek e0c79380cd Added checking for undefined results of '<<' and '>>' (shifting by too many bits, etc.)
This current implementation only works when both operands are concrete values; later we will add support for symbolic values.

llvm-svn: 47726
2008-02-28 20:32:03 +00:00
Eli Friedman 0c2f26dd17 Implementation of the first clang-native header, stdbool.h. Comments
welcome.

llvm-svn: 47724
2008-02-28 19:45:29 +00:00
Gabor Greif 031a711881 Updated clang webpage to hint at "make update". Also
changed "very early" to "early" when talking about
the state of clang.

llvm-svn: 47718
2008-02-28 14:59:26 +00:00
Ted Kremenek 22c62c1641 Merged ValueState and ValueStateImpl into just ValueState, with GRExprEngine::StateTy just becoming ValueState*.
llvm-svn: 47714
2008-02-28 10:21:43 +00:00
Ted Kremenek 93d1fed5ff Renamed "Uninitialized" -> "Undefined" in path-sensitive value tracking engine.
llvm-svn: 47713
2008-02-28 09:25:22 +00:00
Ted Kremenek 49b61ab6bd Added parsing of attributes for functions.
llvm-svn: 47693
2008-02-27 22:18:07 +00:00
Ted Kremenek 06516b124b Fixed use of an uninitialized variable.
llvm-svn: 47691
2008-02-27 20:47:56 +00:00
Ted Kremenek 5668972630 End paths when calling a function marked "noreturn."
llvm-svn: 47690
2008-02-27 20:43:44 +00:00
Ted Kremenek f7146ca3bc Added support for attribute "noreturn."
llvm-svn: 47689
2008-02-27 20:43:06 +00:00
Ted Kremenek fef05fae67 Small tweaks to the transfer function for DeclStmt: do not mark external global
variables as uninitialized, and only "initialize" static function variables.

llvm-svn: 47683
2008-02-27 19:21:33 +00:00
Lauro Ramos Venancio e1938405fa Disable internalize. Unfortunately, the configure scripts are not ready for some link time optimizations.
llvm-svn: 47682
2008-02-27 18:46:32 +00:00
Ted Kremenek 41dd9d0bee Removed VarDecl::hasStaticStorage() (redundant with hasGlobalStorage())
Removed VarDecl::hasAutoStorage() (only used by hasLocalStorage())

Merged logic from VarDecl::hasAutoStorage() into VarDecl::hasLocalStorage(),
and expanded (fixed) the logic of hasLocalStorage() to handle Extern and PrivateExtern.

Renamed Expr::hasStaticStorage() to Expr::hasGlobalStorage().

llvm-svn: 47681
2008-02-27 18:39:48 +00:00
Ted Kremenek fd8352c2b9 Added string "[CHECKER]" to the output diagnostics produced by the GRSimpleVals analysis.
llvm-svn: 47678
2008-02-27 17:56:16 +00:00
Ted Kremenek 40d876376d Fixed edge-case in CFG construction where goto jumps would not always get
properly back-patched.

llvm-svn: 47675
2008-02-27 17:33:02 +00:00
Lauro Ramos Venancio 7143697def A, q and Z are valid LLVM inline asm constraints.
Fix regression in Applications/ClamAV/clamscan.

llvm-svn: 47673
2008-02-27 16:53:36 +00:00
Ted Kremenek a1523a38f9 Bug fix in CFG construction: Properly register the loop head as the implicit
successor of blocks created above it.

llvm-svn: 47666
2008-02-27 07:20:00 +00:00
Ted Kremenek cbb21b61c8 Small fix to VisitLVal: this method can be called on Block-Level expressions.
In such cases, handle them just like Visit().

llvm-svn: 47665
2008-02-27 07:04:16 +00:00
Ted Kremenek 1c64daba5b When analyzing a function, eagerly create symbolic values for all
globals/parameters at the beginning of the analysis.

llvm-svn: 47664
2008-02-27 06:47:26 +00:00
Ted Kremenek c025841dd4 Header file cleanups: reduce number of includes; move ValueState.h into include directory tree.
llvm-svn: 47661
2008-02-27 06:07:00 +00:00
Ted Kremenek 947528f000 Similar bug fix to r47650; when processing CallExprs if we did not generate an
ExplodedNode for the Callee subexpression we would not evaluate the CallExpr
transfer function.

llvm-svn: 47651
2008-02-27 00:46:25 +00:00
Ted Kremenek 76a2e985c3 Fixed bug in the core transfer function logic for CallExprs where we would
sometimes skip evaluating all the arguments when some arguments would not
create new ExplodedNodes.

llvm-svn: 47650
2008-02-27 00:44:11 +00:00
Ted Kremenek 39321aa199 Fixed CFG construction bug that occurred when a condition for a loop spanned
multiple basic blocks (which can happen when they contain '&&', '||', '?'). The
bug was that the loop backedge when to the last block in the loop condition, not
the first.

llvm-svn: 47649
2008-02-27 00:28:17 +00:00
Chris Lattner bb7bc8d4f0 fix an interaction between -isystem . and isysroot.
llvm-svn: 47646
2008-02-26 23:46:22 +00:00
Ted Kremenek 6217dffec3 Fix bug when processing '?' operator: invalidate the old "Uninitialized" value of the block-level expression for ?.
llvm-svn: 47645
2008-02-26 23:37:01 +00:00
Ted Kremenek 448538d860 Added boilerplate for plug-in transfer function support for CallExprs.
GRSimpleVals performs the following action: invalidate all values passed-by-reference.

llvm-svn: 47638
2008-02-26 23:04:29 +00:00
Ted Kremenek dea8c07899 Don't emit divide-by-zero errors when we divide by an unknown (not
uninitialized) value. At this point we're just too imprecise.

llvm-svn: 47636
2008-02-26 22:27:51 +00:00
Ted Kremenek dc1b0114ed Changed VarDecl::hasGlobalStorage() to be the negation of hasLocalStorage().
Before it was the negation of hasAutoStorage(), which is incorrect. 
"Register" storage for Decls do not indicate global variables.

llvm-svn: 47630
2008-02-26 21:57:11 +00:00
Lauro Ramos Venancio 01a72ff5d3 Implement codegen for the following static var init.
void g() {
  static char a[10];
  static char *b = a;
}

Now we can compile wget!

llvm-svn: 47627
2008-02-26 21:41:45 +00:00
Ted Kremenek e9f30d3288 Removed static analysis-specific diagnostics from DiagnosticKinds.def.
Use custom diagnostics for static analysis checkers.  Added warnings
for dereferencing uninitialized values and divide-by-zeroes.

llvm-svn: 47626
2008-02-26 21:31:18 +00:00
Ted Kremenek c7ba873dc7 Removed hack with toggling the signedness flag of the APSInt stored
in an EnumConstantDecl.  This was made possible because of a recent fix
in the parser:

http://llvm.org/viewvc/llvm-project?rev=47581&view=rev

llvm-svn: 47624
2008-02-26 21:04:29 +00:00
Ted Kremenek bc54390803 Small fixes to shore up overhauling of transfer function logic for '&&' and '||.
llvm-svn: 47620
2008-02-26 19:40:44 +00:00
Lauro Ramos Venancio 8af648ac55 Fix a bug in ConvertAsmString function.
llvm-svn: 47618
2008-02-26 19:19:58 +00:00
Ted Kremenek 9b69ed398b optimization: no longer create ExplodedNodes for IntegerLiteral and
CharacterLiteral expressions.

llvm-svn: 47617
2008-02-26 19:17:09 +00:00
Ted Kremenek f3a4b9617e Major cleanup of the transfer function logic for '&&', '||', and '?'. We
now store in the state essentially which branch we took.  This removes
a bunch of bogus assumptions (and likely bugs), reduces the complexity of
the implementation, and facilitates more optimizations.

llvm-svn: 47613
2008-02-26 19:05:15 +00:00
Lauro Ramos Venancio c9fbd7301a Convert x86 target specific inline asm constraints to LLVM.
llvm-svn: 47609
2008-02-26 18:33:46 +00:00
Ted Kremenek ce3563445c Fixed inverted condition.
llvm-svn: 47590
2008-02-26 03:44:25 +00:00
Ted Kremenek 5affb58dd6 Do include ParenExpr in the CFG; only include their subexpression.
llvm-svn: 47588
2008-02-26 02:37:08 +00:00
Ted Kremenek 06b671097d Added lazy "symbolication" of parameter variables and global variables.
Added recording of divide-by-zero and divide-by-uninitialized nodes.

llvm-svn: 47586
2008-02-26 02:15:56 +00:00
Chris Lattner b7e656b177 add parsing, ast building and pretty printing support for C++ throw expressions.
Patch by Mike Stump!

llvm-svn: 47582
2008-02-26 00:51:44 +00:00
Chris Lattner 7768313c13 Fix PR2092 by making sure the sign of the enum value follows the
sign of its type in the early exit case.  No testcase, because this
doesn't manifest as a failure.

llvm-svn: 47581
2008-02-26 00:33:57 +00:00
Chris Lattner a3343a86ea fix const correctness.
llvm-svn: 47580
2008-02-26 00:32:36 +00:00
Ted Kremenek f699882a76 Fixed bug in CFG construction when a CompoundStmt ended with a NullStmt.
This caused the whole body to get dropped from the CFG.

llvm-svn: 47579
2008-02-26 00:22:58 +00:00
Ted Kremenek 733f810600 Added FIXME.
llvm-svn: 47578
2008-02-26 00:20:52 +00:00
Ted Kremenek 7845b2607a Minor bug fix in LiveVariables: don't "kill" decls referenced by a DeclStmt
that aren't VarDecls.

llvm-svn: 47572
2008-02-25 22:28:54 +00:00
Eli Friedman 0992b38a78 Fix a little typo... per cfe-dev, this was apparently causing test
failures on OS X in some cases.  (Thank you valgrind.)

llvm-svn: 47568
2008-02-25 22:11:40 +00:00
Chris Lattner f5c619f98c clarify comment, this is undefined behavior in any case, even if it only
bits VC++ right now.

llvm-svn: 47565
2008-02-25 21:38:21 +00:00
Ted Kremenek 3ed28de5cc doxygenify some comments.
llvm-svn: 47564
2008-02-25 21:33:32 +00:00
Ted Kremenek 3a6fd9c177 Better handling of calls to functions via function pointers.
llvm-svn: 47562
2008-02-25 21:16:03 +00:00