Commit Graph

4238 Commits

Author SHA1 Message Date
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
Chris Lattner eb85ab44f2 convert tabs to spaces, patch by Mike Stump!
llvm-svn: 47560
2008-02-25 21:04:36 +00:00
Lauro Ramos Venancio 4400a85ce8 Revert an incorrect part of my previuos patch.
llvm-svn: 47553
2008-02-25 19:08:51 +00:00
Lauro Ramos Venancio 8983891531 Fix PR2086.
llvm-svn: 47551
2008-02-25 19:03:15 +00:00
Ted Kremenek eb079dc502 Fixed bug in RemoveDeadBindings when performing the mark-and-sweep over the
symbolic store: VarDecl's inserted into the sweep may not always bind to
anything; handle this special case just like bindings to uninitialized values.

llvm-svn: 47550
2008-02-25 18:56:23 +00:00
Ted Kremenek 3866746569 Expanded transfer function support for divide-by-zero checking to include
"remainder-by-zero" checking (operator '%').

llvm-svn: 47549
2008-02-25 18:42:54 +00:00
Ted Kremenek b23cc7191f Added hack to transfer function logic to handle the case where a DeclRefExpr
wrapping an EnumConstantDecl evaluates to an integer type that has a different
signedness than the APSInt stored in the EnumConstantDecl. Will file a Bugzilla
report.

llvm-svn: 47548
2008-02-25 18:34:45 +00:00
Ted Kremenek 6f92e2294a Added transfer function support for checking for divide-by-zero errors.
llvm-svn: 47547
2008-02-25 17:51:31 +00:00
Chris Lattner cb0d62c70d enable digraphs for C94, thanks to Neil for pointing this out.
llvm-svn: 47543
2008-02-25 04:01:39 +00:00
Chris Lattner 5329e7e5ed Fix PR2090, a typo in digraph processing.
llvm-svn: 47540
2008-02-24 19:05:57 +00:00
Chris Lattner 89a62c8fff Update comment.
llvm-svn: 47539
2008-02-24 19:04:33 +00:00
Steve Naroff f0ed31aafe Move the initialization of SEL/objc_selector from Sema::Sema() to Sema::ActOnTranslationUnitScope() and make sure the type/struct get inserted into the translation unit scope.
Bug submitted by David Chisnall (thanks!).

llvm-svn: 47538
2008-02-24 16:25:02 +00:00
Ted Kremenek 72be068ab3 Two more Windows-related fixes:
- More enum signeness bitfield fixes (MSVC treats enums as signed).

- Fixed in Lex/HeaderSearch.cpp an unsafe copy between two
  HeaderSearch::PerFileInfo entries in a common vector. The copy involved two
  calls to getFileInfo() within the assignment; these calls could have
  side-effects that enlarged the internal vector, and with MSVC this would
  invalidate one of the values in the assignment.
  
Patch by Argiris Kirtzidis!

llvm-svn: 47536
2008-02-24 03:55:14 +00:00
Ted Kremenek d87eef89c8 In FileManager: use full paths to unique files and directories on Windows,
since inodes are bogus abstraction on that platform.

Patch by Argiris Kirtzidis!

llvm-svn: 47535
2008-02-24 03:15:25 +00:00
Eli Friedman 401675b0de Minor code cleanup.
llvm-svn: 47530
2008-02-23 07:32:49 +00:00
Ted Kremenek f948d2a75f Change encoding of TokenKind in IdentifierTable to be of type "unsigned"
instead of TokenKind because of signedness issues with MSVC and enums.

Patch from Argiris Kirtzidis.

llvm-svn: 47515
2008-02-23 01:05:54 +00:00
Ted Kremenek 652d18e37c Patch from Argiris Kirtzidis:
The patch fixes some debug assertions that the msvcrt throws:

1)
-    if (isprint(value) && value < 256) {
+    if (value < 256 && isprint(value)) {

isprint() does an assertion check of its own for value < 256; check value before calling it to prevent it.


2)
-    Stmt->Names.push_back(std::string(&data[0], data.size()));
+    if (data.size() == 0)
+      Stmt->Names.push_back(std::string());
+    else
+      Stmt->Names.push_back(std::string(&data[0], data.size()));

If data.size() == 0 then data[0] throws "out of range" assertion.

llvm-svn: 47512
2008-02-23 00:52:04 +00:00
Ted Kremenek b0b7d28f67 Fixed horrid bug in LiveVariables analysis where we were only merging at
confluence points the liveness information for variables (Decls) and NOT
block-level expressions.

llvm-svn: 47506
2008-02-22 23:17:20 +00:00
Ted Kremenek c77f34daad Modified clang driver option -dump-live-variables to (optionally) use the
--analyze-function option to analyze specific functions.

llvm-svn: 47498
2008-02-22 20:13:09 +00:00
Ted Kremenek 88329bf0ea clang driver options --dump-cfg and --view-cfg now (optionally) use the
--analyze-function option to dump/view the CFGs of specific functions.

llvm-svn: 47497
2008-02-22 20:00:31 +00:00
Ted Kremenek 76c03b4a55 When running the GRSimpleVals analysis, skip functions that do not
appear in a file.

llvm-svn: 47491
2008-02-22 19:10:58 +00:00
Ted Kremenek 43638a87e5 Punt on unifying symbolic lvalues. This won't be needed for many checkers.
llvm-svn: 47489
2008-02-22 18:41:59 +00:00
Ted Kremenek cb507025d4 Added "assumption" logic for lval::FuncVal and lval::GotoLabel, and simplified
assumption logic for lval::DeclVal.

llvm-svn: 47466
2008-02-22 00:54:56 +00:00
Ted Kremenek 51017b5432 Bug fix: For transfer function for unary "!", compare the subexpression value
against '0' of the same bit-width.

llvm-svn: 47465
2008-02-22 00:42:36 +00:00
Ted Kremenek 20c91421fe Bug fix in liveness: Only compute liveness information for VarDecls.
llvm-svn: 47464
2008-02-22 00:34:10 +00:00
Ted Kremenek eb653882de Return "Unknown" when using the value of a function pointer whose value
is symbolic.

llvm-svn: 47463
2008-02-21 23:17:39 +00:00
Ted Kremenek 6d2bbd9467 Regression fix: Handle binary operators where both the left and right
operands are symbolic lvalues.

llvm-svn: 47459
2008-02-21 22:08:33 +00:00
Ted Kremenek 9f1ed12bc4 Added transfer function support for dispatching to functions we don't know
about.  The default logic is to invalidate the values of all values
passed-by-reference.

llvm-svn: 47456
2008-02-21 19:46:04 +00:00
Nate Begeman b16d53ea31 add a test case
llvm-svn: 47455
2008-02-21 19:44:16 +00:00
Nate Begeman d45d38d2b7 Handle __attribute__((annotate("string")))
llvm-svn: 47451
2008-02-21 19:30:49 +00:00
Ted Kremenek e82c7a44d6 RemoveDeadBindings should now check for UninitalizedVal, as it is a now
an error to cast it to LVal.

llvm-svn: 47450
2008-02-21 19:30:14 +00:00
Ted Kremenek 7328fa6ec8 Regression fix: Handle pointer arithmetic in unary ++/--.
llvm-svn: 47449
2008-02-21 19:29:23 +00:00
Ted Kremenek 7f8ebb73af Removed bogus assertions regard LValues binding to UnknownVal; they can
do so implicitly.

llvm-svn: 47447
2008-02-21 19:15:37 +00:00
Ted Kremenek d21429a8e7 Remove incorrect casts from UnknownVal to NonLVal.
llvm-svn: 47446
2008-02-21 19:10:12 +00:00
Ted Kremenek b1e3218125 FIX: Promote the correct operand.
llvm-svn: 47445
2008-02-21 18:46:24 +00:00
Ted Kremenek 7e4861b3c1 Simplified and generalized transfer function logic for casts, allowing
the transfer function to be invoked without an Expr* for the Cast operation.

Added implicit promotions to the transfer function logic for compound
assignments.

llvm-svn: 47444
2008-02-21 18:43:30 +00:00
Ted Kremenek d2332f9625 Added transfer function support for sizeof(void)
llvm-svn: 47443
2008-02-21 18:15:29 +00:00
Eli Friedman c62dd9d345 Some const initializer tests for stuff I just committed.
llvm-svn: 47442
2008-02-21 18:07:36 +00:00
Ted Kremenek 7f0639b039 Major cleanup of path-sensitive analysis engine and the current analysis
based on constant. prop. and limited symbolics.

- Renamed class: RValue -> RVal, LValue -> LVal, etc.
- Minor method renamings and interface cleanups.
- Tightened the RVal "type system" so that UninitializedVal and UnknownVal
  cannot be cast to LVal or NonLVal.  This forces these corner cases values
  to be explicitly handled early before being dispatched to plug-in transfer
  function logic.
- Major cleanup in the transfer function logic for binary and unary operators.
  Still fixing some regressions, but we now explicitly handle Uninitialized
  and Unknown values in a more rigorous way.

llvm-svn: 47441
2008-02-21 18:02:17 +00:00
Eli Friedman a243311f1d Clean up constant implicit cast emission; fixes a few edge cases
invlolving implicit casts that cause both a decay to pointer type and a 
type conversion.

llvm-svn: 47440
2008-02-21 17:57:49 +00:00
Eli Friedman 115e989985 Fix brace-enclosed string initializers for char arrays. From pr2079,
ahtough I had the fix in my tree previously.

llvm-svn: 47439
2008-02-21 17:45:41 +00:00
Gabor Greif 5c27a96967 Change variable name to Tq (from TQ)
because silly gcc 3.4.6 barfs on this
construct.
Type.h defines an "enum TQ", which makes
the parser to err.

llvm-svn: 47438
2008-02-21 17:40:55 +00:00
Gabor Greif 4999168309 Added classes SolarisTargetInfo and
SolarisSparcV8TargetInfo to be able
to handle "sparc-" triple prefixes.

Please be aware that this is a minimal
kludge, that pretty much duplicates
the features of DarwinPowerPCTargetInfo,
and also incorrectly uses stuff from
the PPC namespace.

But in result "make test" now passes
a lot of tests, the notable exceptions
being the objc rewrite tests and
mandel.c.

llvm-svn: 47436
2008-02-21 16:29:08 +00:00
Chris Lattner 3b418d8446 implement codegen support for sizeof(void), fixing PR2080.
llvm-svn: 47429
2008-02-21 05:45:29 +00:00
Chris Lattner a2417c9d8b add some semantic checks for address spaces.
llvm-svn: 47423
2008-02-21 01:42:41 +00:00
Chris Lattner 05d8cca8b6 add a fixme.
llvm-svn: 47421
2008-02-21 01:32:57 +00:00
Chris Lattner 788404f312 Collect and build and process type attributes on pointers. For
example, we can now correctly build the type for things like:
    _AS1 float * _AS2 *B;

llvm-svn: 47420
2008-02-21 01:32:26 +00:00
Chris Lattner ed71d60f4d move some code, no other change.
llvm-svn: 47419
2008-02-21 01:08:11 +00:00
Chris Lattner efedd9ec67 move type attribute processing into the creatively named ProcessTypeAttributes method.
llvm-svn: 47418
2008-02-21 01:07:18 +00:00
Chris Lattner ee0d271819 Correctly handle address space qualifiers in declspecs. This
allows us to correctly handle stuff like:

  _AS1 float *B;

and to reject stuff like:

  _AS1 _AS2* x;

llvm-svn: 47417
2008-02-21 00:48:22 +00:00
Chris Lattner 556676a20b move ConvertDeclSpecToType into Sema
llvm-svn: 47415
2008-02-20 23:53:49 +00:00
Chris Lattner dcee3a9630 rename some methods.
llvm-svn: 47414
2008-02-20 23:25:22 +00:00
Chris Lattner f179190206 Use getKind() in HandleDeclAttribute instead of decoding the string inline.
llvm-svn: 47413
2008-02-20 23:17:35 +00:00
Chris Lattner f18c743222 add a method to AttributeList that converts an identifier to an enum.
llvm-svn: 47412
2008-02-20 23:14:47 +00:00
Nate Begeman 7dd8e72de9 Tabs are the enemy
llvm-svn: 47410
2008-02-20 22:57:40 +00:00
Chris Lattner dba738e740 add some code that will be used to remove processed attrs from
declspec, it is currently nonfunctional though.

llvm-svn: 47405
2008-02-20 22:04:11 +00:00
Chris Lattner 19d8a38861 Change ConvertDeclSpecToType to break out of switch instead of
returning directly.  This allows us to factor handling of _Complex.

llvm-svn: 47404
2008-02-20 21:40:32 +00:00
Chris Lattner 445fcabff7 Alternate address spaces work:
rename QualType::getQualifiers to getCVRQualifiers.
Add some fixme's and clean up some code relevant to qualifiers.
Change ASQualType to contain a Type* instead of a QualType.  
Any CVR qualifiers should be on the outer qual type.

llvm-svn: 47398
2008-02-20 20:55:12 +00:00
Ted Kremenek 34e83b80fd Implemented transfer function logic for unary '+'
llvm-svn: 47357
2008-02-20 04:12:31 +00:00
Ted Kremenek b597bb9c4a Placed transfer function logic for dereferences in its own method, while at
the same time clearing up some logic of how the unary '*' operator is processed.

llvm-svn: 47356
2008-02-20 04:02:35 +00:00
Lauro Ramos Venancio ca0fd02cdd Improve non-const initializer implementation.
llvm-svn: 47347
2008-02-19 22:04:22 +00:00
Lauro Ramos Venancio 91fdb9ec43 Implement CodeGenModule::getMemSetFn method.
llvm-svn: 47346
2008-02-19 22:01:01 +00:00
Ted Kremenek 4ae9985285 Added missing case in constant propagation logic for handling the Xor of
two concrete integer values.

llvm-svn: 47341
2008-02-19 20:53:37 +00:00
Ted Kremenek 9c08512656 Added special handling for UninitializedVals for the transfer function logic
for pointer dereferences.

llvm-svn: 47340
2008-02-19 20:53:06 +00:00
Ted Kremenek 4baef06bbc Implemented "getType()" for symbolic values representing the "contents" of
another symbolic value.

llvm-svn: 47339
2008-02-19 20:51:40 +00:00
Lauro Ramos Venancio e2162c6549 Simplify aggregate initilizer implementation. Use the CodeGenModule::EmitConstantExpr method when
possible.
Fix mediabench/mpeg2/mpeg2dec test.

llvm-svn: 47336
2008-02-19 19:27:31 +00:00
Ted Kremenek 9fd2531b5e Fixed transfer function for casts to always evaluate the effects of the
cast's subexpression even if the cast itself has no effect.

llvm-svn: 47335
2008-02-19 18:52:54 +00:00
Ted Kremenek fe0b5740ce Added transfer function support for casting to "void".
llvm-svn: 47333
2008-02-19 18:47:04 +00:00
Chris Lattner d2a02fe840 fix the second half of PR2041: __restrict is ok in c90 mode, even if
restrict isn't.

llvm-svn: 47316
2008-02-19 06:46:10 +00:00
Ted Kremenek 86dc7ae58e Fixed bug classof() bug with RValues that could cause an UninitializedVal
or UnknownVal to be interpreted as an actual NonLValue/LValue.

llvm-svn: 47304
2008-02-19 02:34:18 +00:00
Ted Kremenek dbb1a3724c For now, --grsimple skips analyzing functions in header files.
llvm-svn: 47303
2008-02-19 02:33:31 +00:00
Ted Kremenek 8b51dc2754 Added back explicit state/node creation when visiting IntegerLiterals and
CharacterLiterals.  This may not be a permanent solution; it doesn't cost that
much, however, to create a few additional states, and solves a whole bunch
of edge cases when handling ?, ||, and &&.

llvm-svn: 47299
2008-02-19 02:01:16 +00:00
Ted Kremenek e0188e6ad7 Added boilerplate transfer function support for CallExprs.
llvm-svn: 47298
2008-02-19 01:44:53 +00:00
Nate Begeman 22011e90c9 Allow ArraySubscriptExpr to be a base node for vector dereference. This
allows you to do things like 
typedef __attribute__(( ocu_vector_type(4))) float float4;
float4 *x;
float y = x[0][2];

llvm-svn: 47295
2008-02-19 01:11:03 +00:00
Ted Kremenek 58cc30b64b Added FIXME for properly handling local arrays using symbolic LValues.
For now we just treat their values as "Unknown."

llvm-svn: 47294
2008-02-19 00:29:51 +00:00
Ted Kremenek 0f7130adc4 --grsimple now reports the number of nodes in the ExplodedGraph for
an analyzed function.

GRExprEngine now records stores to "uninitialized lvalues" (which are sinks in
the ExplodedGraph).

llvm-svn: 47293
2008-02-19 00:22:37 +00:00
Lauro Ramos Venancio c58fc4052e A global without initializer must be emitted as weak.
Fix Olden/bh test.

llvm-svn: 47292
2008-02-19 00:04:15 +00:00
Ted Kremenek a6f63d94a5 Added "size()" and "empty()" methods to ExplodedGraphImpl.
llvm-svn: 47289
2008-02-18 23:00:23 +00:00
Ted Kremenek 346169fa3d Added more assertions and checks in transfer function logic to check for
UninitializedVals and UnknownVals.

llvm-svn: 47288
2008-02-18 22:57:02 +00:00
Lauro Ramos Venancio dec89733a7 Implement multi-dimension array initalizer.
Fix McCat/08-main test.

llvm-svn: 47286
2008-02-18 22:44:02 +00:00
Ted Kremenek 86e793937a Running -grsimple now emits diagnostics about the time spent analyzing each function. Will
probably make this a separate command line option later.

Added "--analyze-function" option to the driver to (gradually) allow different
analyses to only be run on specific functions. Currently only --grsimple uses
this option.

llvm-svn: 47285
2008-02-18 21:21:23 +00:00
Ted Kremenek 3b1beb224b Temporary solution to push analysis through to analyzing PCRE.
We will implement symbol "unification" later.

llvm-svn: 47284
2008-02-18 21:19:49 +00:00
Anders Carlsson 196aa53300 Add more supported constraints.
llvm-svn: 47270
2008-02-18 17:00:25 +00:00
Steve Naroff f631ae2cf8 Tweak fix for http://llvm.org/bugs/show_bug.cgi?id=2000 to work across typedefs.
llvm-svn: 47269
2008-02-18 15:14:59 +00:00
Anders Carlsson 6b5b42be41 More bitfield improvements.
llvm-svn: 47260
2008-02-18 07:13:09 +00:00
Anders Carlsson 9195e08e5e Fix bug where we would report the wrong value for __alignof__ with an expr that is not a type.
llvm-svn: 47259
2008-02-18 07:10:45 +00:00
Nate Begeman d8c4156172 Turn handling of parameter attributes back on, fixing the ObjC breakage
llvm-svn: 47246
2008-02-17 21:20:31 +00:00
Nate Begeman d811e74786 Revert this temporarily, it's breaking objc :/
llvm-svn: 47245
2008-02-17 21:04:23 +00:00
Nate Begeman f0e4a52211 Handle parameter attributes
llvm-svn: 47243
2008-02-17 21:02:04 +00:00
Chris Lattner b080ed504e Fix PR2042. One remaining issue: we don't currently diagnose
int foobar(int);
 int foobar() {}

which requires ifdef'ing out a testcase in predefined-function.c.

llvm-svn: 47236
2008-02-17 19:31:09 +00:00
Anders Carlsson ffd0992247 Change alignment for doubles to 32 bits which is what X86 has.
llvm-svn: 47234
2008-02-17 03:40:02 +00:00
Eli Friedman f7e92acaba Implemnt isVariablyModifiedType correctly.
llvm-svn: 47233
2008-02-17 00:59:11 +00:00
Chris Lattner df53e20f2d implement codegen support for aggregates casted to void.
llvm-svn: 47226
2008-02-16 23:55:16 +00:00
Eli Friedman 1d88371663 A couple of msvc compile fixes from the ml; I haven't tested with msvc,
but the fixes are reasonable.

llvm-svn: 47224
2008-02-16 23:17:23 +00:00
Lauro Ramos Venancio bada8d4b5b Implement extern block var.
llvm-svn: 47223
2008-02-16 22:30:38 +00:00
Anders Carlsson f13b1efa75 Add more tests
llvm-svn: 47217
2008-02-16 19:51:36 +00:00
Anders Carlsson 6e3ace5205 Better handling of the aligned attribute.
llvm-svn: 47216
2008-02-16 19:51:27 +00:00
Anders Carlsson acea415ec5 More comments from Chris.
llvm-svn: 47210
2008-02-16 03:37:41 +00:00
Chris Lattner 27055194b7 Fix CheckEndOfDirective to diagnose lines that contain macros that expand to
zero tokens.  This fixes PR2045, thanks to Neil for finding another 
incredibly subtle corner case :)

llvm-svn: 47203
2008-02-16 01:20:36 +00:00
Anders Carlsson 3ea23a45d9 Make sizeof and __alignof work correctly with packed structs.
llvm-svn: 47202
2008-02-16 01:20:23 +00:00
Ted Kremenek 074965c5cb Further cleanup. Moved definitions for SymbolManager and ValueManager into
their own [.cpp;.h] files.

llvm-svn: 47201
2008-02-16 01:12:31 +00:00
Anders Carlsson 4b93979008 Fix typo
llvm-svn: 47199
2008-02-16 00:39:40 +00:00
Anders Carlsson 28e7108142 Handle packed attribute correctly
llvm-svn: 47197
2008-02-16 00:29:18 +00:00
Anders Carlsson 214260e04a Address comments from Chris.
llvm-svn: 47195
2008-02-16 00:24:09 +00:00
Anders Carlsson 8321a155a5 Store attributes in a global hash map instead.
llvm-svn: 47193
2008-02-15 23:57:38 +00:00
Anders Carlsson e5070069c8 Store attributes in a global hash map instead.
llvm-svn: 47191
2008-02-15 23:30:50 +00:00
Ted Kremenek 6698cb8aa3 Refactored code for transfer functions for binary operators involving two LValues.
Fixed bug in transfer functions for sizeof(*); we were incorrectly evaluating to
a value of the wrong type.

Fixed bug in transfer functions for compound assignments where we did not properly
handle assignments involving dereferences of symbolic values.

llvm-svn: 47190
2008-02-15 23:15:23 +00:00
Lauro Ramos Venancio 10984b2ee9 Set Ubuntu 7.10 c++ include path.
llvm-svn: 47186
2008-02-15 22:36:38 +00:00
Lauro Ramos Venancio ace55dac39 Add c++ to "inferlanguage"
llvm-svn: 47185
2008-02-15 22:35:25 +00:00
Ted Kremenek 8db4b110c3 Added transfer function support for conditional branches with a NULL condition (e.g., "for(;;)").
Fixed bug in transfer function for compound assignment operators when both operands where variables but had a non-pointer type (we fired an assertion).

llvm-svn: 47184
2008-02-15 22:29:00 +00:00
Ted Kremenek e81734b01c Simplified transfer function logic for ++/-- operators.
Added more boilerplate transfer function support for pointer arithmetic.
Added more pretty-printing support for symbolic constraints.
Added transfer function support for handling enum values.
Minor pointer types cleanup in ExplodedGraphImpl.

llvm-svn: 47183
2008-02-15 22:09:30 +00:00
Ted Kremenek c4bf7ef744 Added predicate function "UnaryOperator::isIncrementOp()".
llvm-svn: 47181
2008-02-15 22:04:52 +00:00
Eli Friedman 5c9490924c Don't call non-existent method... sorry about the spam; the fix seemed
trivial, but I forgot that method doesn't exist yet.

llvm-svn: 47175
2008-02-15 19:53:52 +00:00
Eli Friedman b26be3d053 Get rid of unused variable warning.
llvm-svn: 47174
2008-02-15 19:49:39 +00:00
Eli Friedman bd258284e0 Split out incomplete arrays from VariableArrayType into
IncompleteArrayType.  This should make code dealing with both incomplete 
and variable length arrays much more readable, plus it allows properly 
making the distinction between isVariableArrayType() and 
isVariablyModifiedType().  The patch is a little big, but it's 
strightforward. so I don't think there should be any issues.

llvm-svn: 47165
2008-02-15 18:16:39 +00:00
Chris Lattner 287c734075 Fix PR2041: restrict is not a keyword in c90.
llvm-svn: 47160
2008-02-15 18:02:59 +00:00
Eli Friedman 9e805b24fd Part of clearing up the whole VariableArrayType + incomplete arrays
thing.  Some cleanups that can be done independently of the fix.

llvm-svn: 47158
2008-02-15 12:53:51 +00:00
Eli Friedman 783a5c262b Remove unnecessary references to VariableArrayType from Analysis.
llvm-svn: 47157
2008-02-15 12:28:27 +00:00
Eli Friedman a682d39639 Remove useless parameter from isConstantSizeType.
llvm-svn: 47156
2008-02-15 12:20:59 +00:00
Anders Carlsson 1a84106117 Get rid of AttributeList in the AST and use the new Attr class instead
llvm-svn: 47155
2008-02-15 07:04:12 +00:00
Eli Friedman 78e47634b2 Get rid of outdated code that masks type errors. Fixes PR2036.
llvm-svn: 47154
2008-02-15 06:56:02 +00:00
Eli Friedman e9d0954c06 Nevermind, these tests work... I messed up my testing.
llvm-svn: 47153
2008-02-15 06:29:53 +00:00
Eli Friedman a01cfa75eb Partial fix for struct compatibility; there's still something messy
going on with mixing scopes, though.

llvm-svn: 47152
2008-02-15 06:03:44 +00:00
Ted Kremenek bc0ba39a1e Added boilerplate transfer function support for pointer arithmetic operations.
llvm-svn: 47147
2008-02-15 00:52:26 +00:00
Ted Kremenek e161afc4dd Added --grsimple-view option to clang driver; this is the same as
--grsimple except that it visualizes the ExplodedGraph using dot and
outputs the current function being analyzed.  --grsimple is now silent
except when it emits diagnostics.

llvm-svn: 47146
2008-02-15 00:35:38 +00:00
Ted Kremenek 8e6f6e05c3 Added "symbol iterators" for RValues, allowing easy iteration over the symbols
referenced by an RValue, instead of having to query the type of the RValue.

Modified ValueState::RemoveDeadBindings to also prune dead symbols.

llvm-svn: 47142
2008-02-14 23:25:54 +00:00
Ted Kremenek 5b70a22656 When visualizing ExplodedNodes created by GRExprEngine, color nodes with
null-dereferences or bad control-flow red.

llvm-svn: 47140
2008-02-14 22:54:53 +00:00
Ted Kremenek 5d8bab7ecd Don't analyze functions when we have parse errors.
llvm-svn: 47139
2008-02-14 22:54:17 +00:00
Ted Kremenek d3122cb83c Renamed GRConstants => GRSimpleVals.
Moved driver logic for --grsimple to GRSimpleVals.cpp.

llvm-svn: 47137
2008-02-14 22:36:46 +00:00
Ted Kremenek bd8957b6b2 #include cleanups in GRExprEngine.cpp/GRExprEngine.h. Moved GRExprEngine to
clang namespace.

llvm-svn: 47136
2008-02-14 22:16:04 +00:00
Ted Kremenek 64de207c52 Partitioned definition/implementation of GRExperEngine into .h and .cpp.
Still some cleanup to do, but this initial checkin compiles and runs correctly.

llvm-svn: 47135
2008-02-14 22:13:12 +00:00
Ted Kremenek cf7cf8e8b0 Migrated transfer functions for binary operators for simple value tracking
from RValues to GRTransferFuncs/GRSimpleVals.

llvm-svn: 47131
2008-02-14 19:37:24 +00:00
Chris Lattner 99a59b6ba0 ParseCompoundStatementBody expects to only be called with { as the current
token.  Diagnose when the { is missing in objc @try blocks instead of aborting.

llvm-svn: 47130
2008-02-14 19:27:54 +00:00
Ted Kremenek 4bad8f7ad6 Migrated transfer functions for unary "~" and "-" to GRTransferFuncs/GRSimpleVals.
llvm-svn: 47126
2008-02-14 18:40:24 +00:00
Ted Kremenek 3ca942969e Started partitioning of transfer function logic (and thus the policy behind
these operations) into GRTransferFuncs and its subclasses.  Originally all
of this logic was handled by the class RValue, but in reality different
analyses will want more flexibility on how they evaluate different values.

Transfer functions migrated so far: "Cast"

llvm-svn: 47125
2008-02-14 18:28:23 +00:00
Ted Kremenek 747c777bde Moved Rvalues.h from "Analysis/" to "include/clang/Analysis/PathSensitive".
llvm-svn: 47123
2008-02-14 17:30:51 +00:00
Nate Begeman a338594236 Completed note
llvm-svn: 47120
2008-02-14 08:19:48 +00:00
Anders Carlsson b0aad621fd Address comments from Chris.
llvm-svn: 47118
2008-02-14 07:43:43 +00:00
Anders Carlsson b853a1a049 Add Attr.h which is an AST-level class for GCC attributes.
llvm-svn: 47112
2008-02-14 07:14:34 +00:00
Steve Naroff 2d868f2bcd Remove DeclSpec::Invalid, a recently added bool that allowed the parser to detect if the decl spec was invalid.
For now, we will stick with the original strategy - clients of Parse::ParseDeclarationSpecifiers() should never have to know this.

llvm-svn: 47104
2008-02-14 03:30:24 +00:00
Steve Naroff f631997cb5 A much better fix for http://llvm.org/bugs/show_bug.cgi?id=1987.
llvm-svn: 47103
2008-02-14 02:58:32 +00:00
Ted Kremenek 80ebc1d1c9 Added support to GRCoreEngine/GRExprEngine for processing control-flow
from switch...case...default statements.

llvm-svn: 47100
2008-02-13 23:08:21 +00:00
Dan Gohman 63705ecefd Adjust for APInt's isPositive being renamed to isNonNegative.
llvm-svn: 47091
2008-02-13 22:09:49 +00:00
Ted Kremenek 654c78fd2d When creating the CFGBlocks for a switch statement, we now have the "default"
branch ALWAYS be the last successor for a switch-terminated block. This allows
clients to distinguish cases like the following:

switch(...)
  case XXX:
    switch(...) {
      case YYY: ...
    }
    
  case ZZZ: ..
}

In this case, the block with "case ZZZ:" is the default block for the inner
switch statement, but that case is associated with the outer switch statement,
and not the inner one. Clients can test for this behavior by checking if a
successor block is the last one (and thus just assume that this is the "default"
case).

llvm-svn: 47088
2008-02-13 22:05:39 +00:00
Ted Kremenek 9682be18ae Fixed bug in CFG construction when processing switch statements that contain no
"default" case. In such cases, we now correctly add the CFGBlock representing
the code after the switch statement as a successor to the block terminated by
the switch statement.

llvm-svn: 47087
2008-02-13 21:46:34 +00:00
Ted Kremenek cd44b12f96 Fixed 80 col violations.
llvm-svn: 47076
2008-02-13 18:06:44 +00:00
Chris Lattner 7b7ace5537 avoid making implicit casts that just remove typedefs.
llvm-svn: 47074
2008-02-13 18:01:07 +00:00
Ted Kremenek 755d39b233 Unbreak the build.
llvm-svn: 47072
2008-02-13 17:45:18 +00:00
Ted Kremenek 1c16527774 Renamed files to match class renaming in r47070:
http://llvm.org/viewvc/llvm-project?rev=47070&view=rev

llvm-svn: 47071
2008-02-13 17:43:07 +00:00
Ted Kremenek f6c62f3459 Renamed class GREngine => GRCoreEngine.
Renamed class GRConstants => GRExprEngine.

This was done with a Perl script, and will result in 80 col. violations that
I will gradually fix up.

llvm-svn: 47070
2008-02-13 17:41:41 +00:00
Eli Friedman 2be9af9556 Fix a minor bug in isNullPointerConstant triggered by the linux
tgmath.h.

Note that there is another issue with tgmath.h, so mandel.c still 
doesn't work.

llvm-svn: 47069
2008-02-13 17:29:58 +00:00
Ted Kremenek 2bba901a36 Simplify GRIndirectGotoNodeBuilder.
llvm-svn: 47068
2008-02-13 17:27:37 +00:00
Ted Kremenek 632bcb82a7 Added GREngine support for "break" and "continue".
llvm-svn: 47064
2008-02-13 16:56:51 +00:00
Anders Carlsson 73cc507602 Use IgnoreParenCasts.
llvm-svn: 47041
2008-02-13 01:22:59 +00:00
Chris Lattner f26609686f Move IgnoreParenCasts to be a method on Expr.
llvm-svn: 47040
2008-02-13 01:02:39 +00:00
Ted Kremenek 7022efbe7b Added support to GREngine/GRConstants for handling computed gotos.
llvm-svn: 47038
2008-02-13 00:24:44 +00:00
Ted Kremenek 822f7370b2 Added GREngine support for GotoStmt.
llvm-svn: 47034
2008-02-12 21:51:20 +00:00
Dan Gohman 922096cc5e Adjust for the API change to APInt::getBitsSet.
People more familiar with clang than me, please review this.

llvm-svn: 47033
2008-02-12 21:49:34 +00:00
Ted Kremenek 736e441266 Added transfer function/value track logic for taking the address of a label.
llvm-svn: 47030
2008-02-12 21:37:56 +00:00
Ted Kremenek 1f3d4a73f5 Minor (cosmetic) reshuffling of code. Fixed a bug in "Assume" logic when
handling Non-Lvalues of the type nonlval::SymbolVal; we were accidentally
casting them to lval::SymbolVal.

llvm-svn: 47029
2008-02-12 21:37:25 +00:00
Ted Kremenek 002bf74fbc Added transfer function logic for sizeof(expr)/sizeof(type). This currently
doesn't support VLAs.

Reordered some cases in the switch statement of GRConstant::Visit() so
that they are ordered alphabetically based on AST node type.

llvm-svn: 47021
2008-02-12 19:49:57 +00:00
Ted Kremenek f225dffd4d Fixed misspelling in comment.
llvm-svn: 47016
2008-02-12 19:01:33 +00:00
Ted Kremenek fb9cc188af Renamed local variable.
Added transfer function support for CharacterLiteral.

llvm-svn: 47014
2008-02-12 18:50:32 +00:00
Ted Kremenek 07d65aa238 Moved class declaration for ObjCForCollectionStmt to be co-located with
the class declarations for the other ObjC***Stmt classes.

llvm-svn: 47013
2008-02-12 18:34:31 +00:00
Ted Kremenek 90ae68fe71 Added GRBlockCounter class, which tracks the number of times blocks
have been visited in a path.  Added GRBlockCounter as an item to be
enqueued to the worklist.

Modified "ProcessBranch" in GRConstants to prune branches with symbolic
conditions that have been already taken.

llvm-svn: 47010
2008-02-12 18:08:17 +00:00
Eli Friedman a7bf7ed476 Make typechecking for enum+int compatibility stricter.
llvm-svn: 47005
2008-02-12 08:46:17 +00:00
Eli Friedman 2b90b0d09e Add wchar_t type to ASTContext. Will be needed for wide strings, since
they are of type wchar_t[].

llvm-svn: 47004
2008-02-12 08:29:21 +00:00
Eli Friedman 16f909670e Fix type compatibility between constant and variable arrays.
llvm-svn: 47003
2008-02-12 08:23:06 +00:00
Steve Naroff ab468cb14b Allow the parser to detect invalid DeclSpec's. This fixes http://llvm.org/bugs/show_bug.cgi?id=1987.
This commit only "guards" the call to ParseDeclarationSpecifiers() in ParseDeclarationOrFunctionDefinition(). 

We could consider guarding all calls, however this is a bit radical (since it effectively stops parsing the declaration once we have a bad declspec). Will discuss with Chris tomorrow.

llvm-svn: 46984
2008-02-12 04:08:59 +00:00
Steve Naroff c1e22c7fa1 Fix unsafe static cast...
llvm-svn: 46980
2008-02-12 01:09:36 +00:00
Steve Naroff 69e8f9efab Several cleanups surrounding Parser::ParseAsmStatement() and Parser::FuzzyParseMicrosoftAsmStatement().
llvm-svn: 46977
2008-02-11 23:15:56 +00:00
Ted Kremenek 633654ffab Consolidated use of BumpPtrAllocator shared by various ImmutableSet/ImmutableMap
factories.

Fixed a horrible bug in lval:DeclVar::classof(RValue* V); we weren't checking
V was an LValue, allowing nonlval::ConcereteInts to match isa<lval::DeclVar>.

llvm-svn: 46976
2008-02-11 23:12:59 +00:00
Steve Naroff bff738543d Move policy on unnamed fields (a Microsoft extension) from Parser::ParseStructDeclaration() to the driver.
llvm-svn: 46974
2008-02-11 22:40:08 +00:00
Steve Naroff 5915777fca Move Microsoft __declspec hack from the parser to the preprocessor. Since we have no plans to actually implement this construct, it is cleaner to limit the change to the preprocessor.
llvm-svn: 46973
2008-02-11 22:29:58 +00:00
Steve Naroff 5a858df0b3 Fix http://llvm.org/bugs/show_bug.cgi?id=2013.
llvm-svn: 46972
2008-02-11 22:17:33 +00:00
Steve Naroff b5fc2551e4 After yesterday's discussion (http://lists.cs.uiuc.edu/pipermail/cfe-dev/2008-February/001044.html), decided not to change the semantics of Type::isIncompleteType().
This commit simply changes a couple comments to reflect this decision.

llvm-svn: 46970
2008-02-11 21:52:37 +00:00
Ted Kremenek ed3be17b6f Separate bindings for subexpressions to be in a separate map for
bindings for block-level expressions.

Moved pretty-printing logic (DOT) for ValueStates to ValueState.cpp.

llvm-svn: 46965
2008-02-11 19:21:59 +00:00
Anders Carlsson 6a8350b4f1 Get rid of bogus warnings when the second argument in va_start is either an implicit cast expr or a paren expr.
llvm-svn: 46950
2008-02-11 04:20:54 +00:00
Steve Naroff 4b32796d1c Add a comment/FIXME to an earlier change.
llvm-svn: 46947
2008-02-11 02:42:07 +00:00
Steve Naroff e78e2af754 Tweak test...
llvm-svn: 46946
2008-02-11 02:16:41 +00:00
Chris Lattner c9b96ae832 strings are arrays too
llvm-svn: 46945
2008-02-11 01:35:07 +00:00
Eli Friedman f54c4e5fea A couple of minor fixes to aggregate codegen, to stop asserting on some
edge cases.

llvm-svn: 46944
2008-02-11 01:09:17 +00:00
Eli Friedman a5b2023810 Make unsupported constant exprs fail with a warning instead of crashing
codegen.

llvm-svn: 46943
2008-02-11 00:23:10 +00:00
Steve Naroff 326389b8ce Fix http://llvm.org/bugs/show_bug.cgi?id=1988.
Sema::CheckInitializerListTypes() needs to ignore invalid structures.

llvm-svn: 46942
2008-02-11 00:06:17 +00:00
Chris Lattner 36fc8790b7 Fix PR1992 by computing the right type for string literals, which
is an array type not a pointer type.  This requires updating some
diags that change and updating the code generator to handle the
proper form of strings.

llvm-svn: 46941
2008-02-11 00:02:17 +00:00
Eli Friedman de4496bb9e Basic codegen test for conditional with void*.
llvm-svn: 46940
2008-02-10 23:18:23 +00:00
Eli Friedman fadc8462be Add a couple of sema tests for qualifiers with conditionals containing
void*.

llvm-svn: 46939
2008-02-10 23:14:16 +00:00
Chris Lattner 7b8134f5c6 Fix PR1999, by emitting a hard error only if an argument declarator is completely
missing.  Otherwise, it is an implicit int case, which is valid in c90 and invalid 
elsewhere, but accepted as an extension.

llvm-svn: 46938
2008-02-10 23:08:00 +00:00
Eli Friedman 15888c23f5 Fix the type of conditionals involving void* to be self-consistent and
spec-compliant.

I'll put together some testcases in a bit.

llvm-svn: 46937
2008-02-10 22:59:36 +00:00
Steve Naroff 15833ed168 Add a diagnostics helper to remove some redundant code.
llvm-svn: 46936
2008-02-10 21:38:56 +00:00
Chris Lattner 00c5b28923 long is 32-bit is on win32.
llvm-svn: 46935
2008-02-10 21:12:45 +00:00
Steve Naroff 1018ea35b7 Refine bug fix to Expr::isLvalue (commit r46917).
llvm-svn: 46919
2008-02-10 01:39:04 +00:00
Steve Naroff 43c50866f1 Change Expr::isLvalue() to allow the "void" type. This fixes bz2000 submitted by Neil Booth.
Neil, can you point me to the place in the C99 spec that says this is allowed? I thought Expr::isLvalue() conformed to the spec, which says "C99 6.3.2.1: an lvalue is an expression with an object type or an incomplete type other than void.". Please advise.

llvm-svn: 46917
2008-02-10 00:30:18 +00:00
Anders Carlsson c0b0e59643 Implement __builtin_va_copy
llvm-svn: 46911
2008-02-09 20:26:43 +00:00
Anders Carlsson 2e64d1a50f Behave correctly if a constraint expression is invalid.
llvm-svn: 46910
2008-02-09 19:57:29 +00:00
Steve Naroff 4cc387212a Fix spelling in comment.
llvm-svn: 46906
2008-02-09 17:25:18 +00:00
Steve Naroff 45173e0ac0 Fix <rdar://problem/5733511> clang doesn't emit error for const array.
llvm-svn: 46905
2008-02-09 16:59:44 +00:00
Eli Friedman a62f3e1352 Expose the logic for field address codegen; it is needed for aggregate
initializers, and I don't want to duplicate the bitfield-handling code.  
(I'll send a patch for aggregate initializers to the mailing 
list sometime soon.)

llvm-svn: 46904
2008-02-09 08:50:58 +00:00
Steve Naroff a369922449 A bunch-o changes to fix <rdar://problem/5716046> incomplete implementation of ObjC class warning is incomplete
As part of this fix, I made a low-level change to the text diagnostics machinery (to basically avoid printing duplicate source lines/carets when you have multiple diagnostics that refer to the same exact place). For now, this only happens with we don't have a source range (could be extended to support source ranges as well). 

llvm-svn: 46897
2008-02-08 22:06:17 +00:00
Ted Kremenek b54312d5a0 Split off expression-bindings in ValueState from variable-bindings.
llvm-svn: 46892
2008-02-08 21:10:02 +00:00
Ted Kremenek 4142cc834b Changed "GetValue" methods to take an
Expr* instead of a Stmt*, since we only
store bindings for Expr*.

llvm-svn: 46891
2008-02-08 20:29:23 +00:00
Lauro Ramos Venancio d74057fa87 Fix a bitfield regression. Reported by Anders Carlsson.
llvm-svn: 46889
2008-02-08 19:46:46 +00:00
Ted Kremenek 80ff44ff30 Moved implementation of "RemoveDeadBindings" from the main
GRConstants logic to ValueStateManager.

llvm-svn: 46888
2008-02-08 19:17:19 +00:00
Ted Kremenek 5d9073c776 Removed ability to create symbol bindings
in VarKey and VariableBindingsTy.

llvm-svn: 46887
2008-02-08 19:08:13 +00:00
Steve Naroff 8c099c3f03 Use getLogicalLineNumber() in FuzzyParseMicrosoftAsmStatement(), it's more general and simplifies the code.
llvm-svn: 46885
2008-02-08 18:01:27 +00:00
Ted Kremenek 09d6ba1496 Moved that clang doesn't depend on llvm-gcc above
the subsection of building clang with llvm.

llvm-svn: 46884
2008-02-08 07:32:26 +00:00
Ted Kremenek fd39e73b7a Implemented transfer functions for "<<" and ">>" when the RValues are
ConcreteInts.

llvm-svn: 46883
2008-02-08 07:14:58 +00:00
Eric Christopher 6aa87cbb63 Add instructions for building clang while building llvm.
llvm-svn: 46881
2008-02-08 07:10:48 +00:00
Ted Kremenek 707b07ccf9 Implemented transfer functions for Statement-Expressions and Commas.
Fixed bug in dispatching to the correct transfer function for |=, &=, and ^|.

llvm-svn: 46880
2008-02-08 07:05:39 +00:00
Eric Christopher 2dc30a5ac8 De-^Mify file.
llvm-svn: 46879
2008-02-08 06:45:49 +00:00
Steve Naroff db5f7d7699 Support fuzzy parsing MS line-oriented __asm's that originate from a macro (a case where we can't obtain source line info). As the test case indicates, we don't currently support line-oriented asm statements that mix file/macro body tokens.
llvm-svn: 46878
2008-02-08 03:36:19 +00:00
Ted Kremenek fd641f1056 More variable renamings.
llvm-svn: 46875
2008-02-08 03:02:48 +00:00
Ted Kremenek 173743da67 Renamed InvalidValue to UnknownVal.
Renamed UninitializedValue to UninitializedVal.

llvm-svn: 46874
2008-02-08 02:57:34 +00:00
Eli Friedman 113eed5cff Fix indentation.
llvm-svn: 46873
2008-02-08 01:24:30 +00:00
Eli Friedman 1974e5321a Detabify SemaExpr. My text editor defaults to 8 spaces per tab, so it
gets kind of annoying.

llvm-svn: 46872
2008-02-08 01:19:44 +00:00
Eli Friedman 4297826cac Improve diagnostic for illegal array initialization.
llvm-svn: 46869
2008-02-08 00:48:24 +00:00
Anders Carlsson 5c6c05956e Put back the top-level asm code; all tests pass now.
llvm-svn: 46868
2008-02-08 00:33:21 +00:00
Anders Carlsson 0fae4f56df Back out 46855 for now, it causes test failures on Darwin.
llvm-svn: 46867
2008-02-08 00:23:11 +00:00
Steve Naroff 4e79d340bd - Add support for fuzzy parsing line-oriented __asm's (yuck).
- Change handling of __w64 to a built-in macro.

llvm-svn: 46864
2008-02-07 23:24:32 +00:00
Lauro Ramos Venancio 9eff02d9f8 Simplify bitfield codegen.
Fix codegen of struct { short a[3]; int b:15; }.

llvm-svn: 46859
2008-02-07 19:29:53 +00:00
Lauro Ramos Venancio 0f166de892 Fix codegen of
struct {
  char a[3];
  unsigned char b:1;
};

Fix PR1990.

llvm-svn: 46856
2008-02-07 18:18:58 +00:00
Anders Carlsson bcc3a4bf64 Handle top-level asm declarations.
llvm-svn: 46855
2008-02-07 17:19:11 +00:00
Steve Naroff 6936a08704 Minor cleanup from yesterday's -fms-extension commit. Move __int* MS keywords to predefined macros. This removes some of the MS-madness from Parser::ParseDeclarationSpecifiers().
llvm-svn: 46852
2008-02-07 15:26:07 +00:00
Ted Kremenek e187d0511f Added some more opcode pretty-printing.
Minor cleanups with generating nodes for NULL-pointer dereferences.

llvm-svn: 46851
2008-02-07 15:20:13 +00:00
Ted Kremenek d74da0838f Added proof-of-concept NULL pointer diagnostics to GRConstants.
Modified the driver to pass the Diagnostic object to GRConstants.

llvm-svn: 46847
2008-02-07 06:33:19 +00:00
Ted Kremenek 149512c013 Added support to distinguish between both implicit and explicit null dereferences.
llvm-svn: 46846
2008-02-07 06:04:18 +00:00
Chris Lattner 3b5054dda0 Implement support for the extremely atrocious MS /##/ extension,
which pastes together a comment.  This is only enabled with 
-fms-extensions of course.

llvm-svn: 46845
2008-02-07 06:03:59 +00:00
Chris Lattner f96e8d0925 these aren't tokens.
llvm-svn: 46844
2008-02-07 05:57:50 +00:00
Ted Kremenek e324704e62 Added recording of "implicit" NULL dereferences of symbolic pointers.
llvm-svn: 46843
2008-02-07 05:48:01 +00:00
Eli Friedman 69d56cff31 Add a FIXME for alternate address spaces.
llvm-svn: 46841
2008-02-07 05:24:51 +00:00
Chris Lattner 6bd4c7f94f get the tree building again
llvm-svn: 46840
2008-02-07 05:01:42 +00:00
Ted Kremenek 88da1de048 Added several guards in transfer functions for "InvalidValues".
Fixed bug in RemoveDeadBindings by implementing a simple "mark-and-sweep"
cleaner over the bindings, starting from the Decls and block-level expressions
that are considered "live" by the Liveness analysis.

Fixed bug in isa<> implementation for class LValue.

Added "VisitDeclRefExpr" to GRConstants so that we explicitly bind the current
value of variable to the Block-level Expression (i.e., when the DeclRefExpr is
at the CFGBlock level).

llvm-svn: 46839
2008-02-07 04:16:04 +00:00
Steve Naroff b2c80c7c7b Implement -fms-extensions. This allows us to fuzzy parse non-standard MS constructs used in "windows.h".
llvm-svn: 46838
2008-02-07 03:50:06 +00:00
Ted Kremenek a56c08a2e4 Fixed bug in LiveVariables analysis where Block-level exprs appearing
as the initializers for DeclStmts were not being registered as being
live at the start of the DeclStmt.

llvm-svn: 46837
2008-02-07 02:38:55 +00:00
Ted Kremenek 43523e0fe8 Added transfer function logic for ReturnStmts.
Fixed insidious bug in handling dereferences.

llvm-svn: 46835
2008-02-07 01:08:27 +00:00
Ted Kremenek 4aa77cee11 Minor reordering of the serialization of the fields of MemberExpr to result
in a smaller encoding on disk.

llvm-svn: 46832
2008-02-06 23:03:14 +00:00
Ted Kremenek cdd0be1dc1 Major code refactoring/cleanup with transfer function logic. Now the
code structure is more suitable for additional symbolic analysis.

llvm-svn: 46831
2008-02-06 22:50:25 +00:00
Eli Friedman 1242fff6ec Make sure to propagate qualifiers through the member operator.
llvm-svn: 46830
2008-02-06 22:48:16 +00:00
Chris Lattner 871e0ceffb explicitly document that return statement argument does not necessarily follow the result type of the function. Add testcase.
llvm-svn: 46823
2008-02-06 21:20:34 +00:00
Anders Carlsson 377ad02de5 Use the subprocess module instead of os.system. Patch by Sam Bishop.
llvm-svn: 46819
2008-02-06 19:03:27 +00:00
Ted Kremenek afa5f492e5 Added main transfer function support for unary operator "!".
llvm-svn: 46815
2008-02-06 17:56:00 +00:00
Ted Kremenek 17b65b557b Added assumption logic for symbolic non-lvalues when used in conditions such as
"if(x)". On the true branch we know the value is != 0, and on the false branch
we know it is 0.

llvm-svn: 46814
2008-02-06 17:32:17 +00:00
Anders Carlsson d3b06cda3c Add pointer + int (and vice versa) to the constant emitter.
llvm-svn: 46812
2008-02-06 07:23:14 +00:00
Anders Carlsson 093f1a099f Generate code for the various __builtin_ctz functions.
llvm-svn: 46811
2008-02-06 07:19:27 +00:00
Chris Lattner b818af539f now that ConvertTagDeclType is nice and simple, use it from UpdateCompletedType.
llvm-svn: 46809
2008-02-06 06:06:49 +00:00
Chris Lattner d11482ea22 simplify and speed up type refinement logic. No functionality change.
llvm-svn: 46808
2008-02-06 06:03:51 +00:00
Chris Lattner a64dde6b48 only convert the type name once, not each type it is refined.
llvm-svn: 46807
2008-02-06 05:48:29 +00:00
Eli Friedman 220ee41011 Fix the codegen of structs with flexible array members.
llvm-svn: 46806
2008-02-06 05:33:51 +00:00
Chris Lattner 3340b92582 simplify a bunch of code.
llvm-svn: 46805
2008-02-06 05:29:46 +00:00
Chris Lattner 56096f3020 rename TypeHolderMap to TypeCache, which more aptly describes what it is.
llvm-svn: 46804
2008-02-06 05:21:55 +00:00
Chris Lattner ee9fafd533 split tagged decl layout into its own method.
llvm-svn: 46803
2008-02-06 05:18:32 +00:00
Chris Lattner f6e3669eb2 only update the llvm type for a struct when we used the struct
previously in an opaque context.  If we didn't do this, 
computing its layout could be wasted: just be lazy.

llvm-svn: 46802
2008-02-06 05:12:09 +00:00
Chris Lattner 68be60694e sink more of the type related code into CodeGenTypes.
llvm-svn: 46801
2008-02-06 05:08:19 +00:00
Chris Lattner 8b945ee058 codegen static variables in a function into a different namespace from
static variables outside functions.

llvm-svn: 46800
2008-02-06 04:54:32 +00:00
Eli Friedman d49a720d52 Be a bit stricter about array type compatibility.
llvm-svn: 46799
2008-02-06 04:53:22 +00:00
Chris Lattner a5e4d30942 Finish off the refactoring of type handling stuff. Now we recompile every
tag decl after it has been completed

llvm-svn: 46798
2008-02-06 04:51:19 +00:00
Ted Kremenek 73451846a7 Fixed bug in '=' transfer function: RHS does not have to be a non-LValue.
llvm-svn: 46797
2008-02-06 04:41:14 +00:00
Ted Kremenek d17f05435a Fixed signedness bug in cast transfer function when casting integers to pointers.
Removed lval::SymIntConstraintVal; wrappers for symbolic constraints are not lvalues (only integers that evaluate to !0 or 0).

llvm-svn: 46796
2008-02-06 04:31:33 +00:00
Ted Kremenek b2652827e6 Modified state pretty-printing to include the '!=' and '==' constraints on
symbols (for constant integers).

llvm-svn: 46795
2008-02-06 03:56:15 +00:00
Ted Kremenek 0ea8fea0ba Disabled operator= for ValueStateImpl.
ValueState no longer inherits FoldingSetNode (not needed).
Removed redundant operator= implementation for ValueState (it simply did the default behavior).

llvm-svn: 46794
2008-02-06 02:50:36 +00:00
Ted Kremenek 4ff4e7ce9f Fixed bug when allocating a ValueStateImpl object in getPersistentState()
using the bump-pointer allocator and a placed new; we accidentally allocated
a ValueStateImpl* instead, causing an overrun when we did a placed new().

llvm-svn: 46793
2008-02-06 02:45:20 +00:00
Chris Lattner adf1f51fc5 move the codegen ASTConsumer out of the driver into libcodegen,
eliminating a bunch of forwarding methods and generally 
simplifying things.

llvm-svn: 46792
2008-02-06 02:01:47 +00:00
Chris Lattner b5eda6253b pull .ll and .bc writing out of the ASTConsumer destructors into some top
level code in clang.  This is a cleanup, but does implement "-o" for 
-emit-llvm.  One effect of this is that "clang foo.c -emit-llvm" will now
emit into foo.ll instead of stdout.  Use "clang foo.c -emit-llvm -o -" or 
"clang < foo.c -emit-llvm" to get the old behavior.

llvm-svn: 46791
2008-02-06 01:42:25 +00:00
Ted Kremenek 03e7b55f22 Added some skeleton code for performing "assume" on symbols: e.g. assume($0 != 0).
This action will add constraints to the possible values of a symbol.
Still needs to be debugged.

llvm-svn: 46789
2008-02-06 00:54:14 +00:00
Chris Lattner 622c193a32 inform astconsumer about tagdecls as they are defined.
llvm-svn: 46788
2008-02-06 00:51:33 +00:00
Chris Lattner fe0e0af434 pass the astconsumer into Sema's ctor, clean up some stuff in
Sema::ActOnTranslationUnitScope.  The various ObjC pieces at the top
of Sema.cpp should be moved into SemaObjC or something.

llvm-svn: 46787
2008-02-06 00:46:58 +00:00
Chris Lattner 8082d870bd rename ASTSTreamer.{h|cpp} -> ParseAST.{h|cpp}
llvm-svn: 46786
2008-02-06 00:23:21 +00:00