aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2012-09-07Change the behavior of the isDerivedFrom-matcher to not match on theDaniel Jasper
class itself. This caused some confusion (intuitively, a class is not derived from itself) and makes it hard to write certain matchers, e.g. "match and bind any pair of base and subclass". The original behavior can be achieved with a new isA-matcher. Similar to all other matchers, this matcher has the same behavior and name as the corresponding AST-entity - in this case the isa<>() function. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163385 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-07Implements hasAncestor.Manuel Klimek
Implements the hasAncestor matcher. This builds on the previous patch that introduced DynTypedNode to build up a parent map for an additional degree of freedom in the AST traversal. The map is only built once we hit an hasAncestor matcher, in order to not slow down matching for cases where this is not needed. We could implement some speed-ups for special cases, like building up the parent map as we go and only building up the full map if we break out of the already visited part of the tree, but that is probably not going to be worth it, and would make the code significantly more complex. Major TODOs are: - implement hasParent - implement type traversal - implement memoization in hasAncestor git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163382 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-07Revert "Rework the retain-release.m test to use FileCheck and the "text" output"Ted Kremenek
Apparently the output of this test is not deterministic. Needs investigation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163377 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-07Fix off-by-one bug in diagnostic prose of ObjCContainersASTChecker.Ted Kremenek
While the check itself should count 0-based for the parameter index, the diagnostic should be 1-based (first, second, third, not start at 0). Fixes <rdar://problem/12249569>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163375 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-07ExplodedGraph::shouldCollectNode() should not collect nodes for non-Expr StmtsTed Kremenek
(as this previously was the case before this was refactored). We also shouldn't need to specially handle BinaryOperators since the eagerly-assume heuristic tags such nodes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163374 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-07Rework the retain-release.m test to use FileCheck and the "text" outputTed Kremenek
of the analyzer, as the RetainReleaseChecker has many fine-grain path diagnostic events that were not being checked. This uncovered an inconsistency between the path diagnostics between Objective-C and Objective-C++ code in ConditionBRVisitor that was fixed in a recent patch. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163373 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-07Fix bug in ConditionBRVisitor where for C++ (and not C) we were not ignoringTed Kremenek
implicit pointer-to-boolean conversions in condition expressions. This would result in inconsistent diagnostic emission between C and C++. A consequence of this is now ConditionBRVisitor and TrackConstraintBRVisitor may emit redundant diagnostics, for example: "Assuming pointer value is null" (TrackConstraintBRVisitor) "Assuming 'p' is null" (ConditionBRVisitor) We need to reconcile the two, and perhaps prefer one over the other in some cases. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163372 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-07PR9023: A template template parameter whose template parameter list contains anRichard Smith
unexpanded parameter pack is a pack expansion. Thus, as with a non-type template parameter which is a pack expansion, it needs to be expanded early into a fixed list of template parameters. Since the expanded list of template parameters is not itself a parameter pack, it is permitted to appear before the end of the template parameter list, so also remove that restriction (for both template template parameter pack expansions and non-type template parameter pack expansions). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163369 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-07[analyzer] Fail gracefully when the dynamic type is outside the hierarchy.Jordan Rose
With some particularly evil casts, we can get an object whose dynamic type is not actually a subclass of its static type. In this case, we won't even find the statically-resolved method as a devirtualization candidate. Rather than assert that this situation cannot occur, we now simply check that the dynamic type is not an ancestor or descendent of the static type, and leave it at that. This error actually occurred analyzing LLVM: CallEventManager uses a BumpPtrAllocator to allocate a concrete subclass of CallEvent (FunctionCall), but then casts it to the actual subclass requested (such as ObjCMethodCall) to perform the constructor. Yet another crash in PR13763. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163367 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Teach RetainCountChecker that CFPlugInInstanceCreate does notTed Kremenek
return a CF object at all. Fixes <rdar://problem/9566345> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163362 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06[analyzer] Don't crash if we cache out while evaluating an ObjC message.Jordan Rose
A bizarre series of coincidences led us to generate a previously-seen node in the middle of processing an Objective-C message, where we assume the receiver is non-nil. We were assuming that such an assumption would never "cache out" like this, and blithely went on using a null ExplodedNode as the predecessor for the next step in evaluation. Although the test case committed here is complicated, this could in theory happen in other ways as well, so the correct fix is just to test if the non-nil assumption results in an ExplodedNode we've seen before. <rdar://problem/12243648> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163361 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06[analyzer] Assert that StmtPoint should be created with a non-null Stmt.Anna Zaks
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163358 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06[analyzer] testing: add a build mode to allow C++11 testing.Anna Zaks
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163357 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Refine diagnostics for leaks reported when returning an objectTed Kremenek
via function/method with [CF,NS]_RETURNS_NOT_RETAINED. Fixes <rdar://problem/11379000>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163355 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Tweak DeadStoresChecker to not warn about dead stores to variables thatTed Kremenek
are used in EH code. Right now the CFG doesn't support exceptions well, so we need this hack to avoid bogus dead store warnings. Fixes <rdar://problem/12147586> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163353 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Clarified diagnostics for range-based for loops with invalid rangesSam Panzer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163350 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06[analyzer] Don't attempt to devirtualize calls to base class destructors.Jordan Rose
CXXDestructorCall now has a flag for when it is a base destructor call. Other kinds of destructor calls (locals, fields, temporaries, and 'delete') all behave as "whole-object" destructors and do not behave differently from one another (specifically, in these cases we /should/ try to devirtualize a call to a virtual destructor). This was causing crashes in both our internal buildbot, the crash still being tracked in PR13765, and some of the crashes being tracked in PR13763, due to a assertion failure. (The behavior under -Asserts happened to be correct anyway.) Adding this knowledge also allows our DynamicTypePropagation checker to do a bit less work; the special rules about virtual method calls during a destructor only require extra handling during base destructors. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163348 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06[ms-inline asm] Output empty asm statements for the directives we don'tChad Rosier
handle. Otherwise, the AsmParser will explode if we try to generate an object files. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163345 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06[ms-inline asm] The IR representation of inline assembly enumerates the inputChad Rosier
and output expressions much like that in GNU-style inline assembly. Output expressions are first. Do this for MS-style inline asms. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163342 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06refactoring + objective-C specific test for my last patch.Fariborz Jahanian
// rdar://12233989 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163338 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Don't try to check override control for invalid member functions. Fixes a ↵Richard Smith
crash in a corner case. Patch by Olivier Goffart! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163337 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Use custom ABIInfo for le32/PNaCl argument codegenDerek Schuff
This patch uses a new ABIInfo implementation specific to the le32 target, rather than falling back to DefaultABIInfo. Its behavior is basically the same, but it also allows the regparm argument attribute. It also includes basic tests for argument codegen and attributes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163333 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Enabling the UTF conversion routines that were previously conditionally ↵Enrico Granata
ifdef'ed out. This change is required to support enhancements in the LLDB data formatters git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163331 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Fixing the return type information for objc_sync_enter and objc_sync_exit. ↵Aaron Ballman
Patch thanks to Joe Ranieri! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163330 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06c: make __attribute__((unused)) transitive.Fariborz Jahanian
Don't warn if annotated decl is used inside another unused. // rdar://12233989 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163329 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Tighten up regexps some more.Jakob Stoklund Olesen
These tests were failing for me because the .* was greedily matching up to the /libexec/ld-elf.so.1" later on the same line. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163328 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Remove unused typedefs. Found by gcc48.Roman Divacky
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163327 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Dont cast away const needlessly. Found by gcc48 -Wcast-qual.Roman Divacky
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163325 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Update AddressSanitizer docsAlexey Samsonov
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163303 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Fix a mistake in an HTML example code snippet.Jordan Rose
Caught by Kurt Arnlund! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163286 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06PR13775: When checking for a tag type being shadowed by some other declaration,Richard Smith
don't trample over the caller's LookupResult in the case where the check fails. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163281 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05[analyzer] Enhance the member expr tracking to account for references.Anna Zaks
As per Jordan's suggestion. (Came out of code review for r163261.) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163269 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05Continue including temporary destructors in the CFG used for warnings.Jordan Rose
...and hopefully unbreak buildbots. My apologies! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163267 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05Format strings: suggest casts for NS(U)Integer and [SU]Int32 on Darwin.Jordan Rose
These types are defined differently on 32-bit and 64-bit platforms, and trying to offer a fixit for one platform would only mess up the format string for the other. The Apple-recommended solution is to cast to a type that is known to be large enough and always use that to print the value. This should only have an impact on compile time if the format string is incorrect; in cases where the format string matches the definition on the current platform, no warning will be emitted. <rdar://problem/9135072&12164284> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163266 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05Format string checking: change long if-statement to early returns.Jordan Rose
No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163265 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05[analyzer] Always include destructors in the analysis CFG.Jordan Rose
While destructors will continue to not be inlined (unless the analyzer config option 'c++-inlining' is set to 'destructors'), leaving them out of the CFG is an incomplete model of the behavior of an object, and can cause false positive warnings (like PR13751, now working). Destructors for temporaries are still not on by default, since (a) we haven't actually checked this code to be sure it's fully correct (in particular, we probably need to be very careful with regard to lifetime-extension when a temporary is bound to a reference, C++11 [class.temporary]p5), and (b) ExprEngine doesn't actually do anything when it sees a temporary destructor in the CFG -- not even invalidate the object region. To enable temporary destructors, set the 'cfg-temporary-dtors' analyzer config option to '1'. The old -cfg-add-implicit-dtors cc1 option, which controlled all implicit destructors, has been removed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163264 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05[analyzer] Fix a crash PR13762.Anna Zaks
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163262 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05[analyzer] NullOrUndef diagnostics: track symbols binded to regions.Anna Zaks
If a region is binded to a symbolic value, we should track the symbol. (The code I changed was not previously exercised by the regression tests.) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163261 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05[analyzer] Remove unneeded code.Anna Zaks
This region is set as interesting as part of trackNullOrUndefValue call, no need to mark it as interesting twice. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163260 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05Add test missed in previous commit.Eric Christopher
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163253 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05Try to fix the windows bots.Eric Christopher
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163252 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05Apply some driver improvements for freebsd-*-mips*.Eric Christopher
Patch by Brooks Davis. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163249 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05[cindex.py] Make the use of a compatibilty check explicitTobias Grosser
At the moment, we implictly check compatibility between the python bindings and libclang, as the python bindings will fail to load in case a method we use in libclang is not available. This patch makes the use of this compatibility check explicit and introduces a flag to optionally disable the check. This will allow us to further harden the compatibility check, but it also gives the user the possibility to disable the compatibility check to evaluate compatibility with older libclang versions. I added documentation that makes clear the python bindings are only tested with the libclang version they have been shipped with. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163238 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05Thread-safety analysis: bugfix for case where a trylock occurs in anDeLesley Hutchins
expression involving temporaries. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163237 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05objective-c++11: c++11 does not change pod-ness whenFariborz Jahanian
type is an unqualified objc pointer in arc. Treat it just as being treated in c++98. This fixes a bogus vararg warning with -std=c++11. //rdar://12229679 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163236 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05Update for r163231.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163232 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05Added missing test.Abramo Bagnara
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163226 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05c error recovery. treat an invalid redeclarationFariborz Jahanian
of a c-function for what it is. Otherwise, this func is treated as an overloadable c-function resulting in a crash much later. // rdar://11743706 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163224 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05[analyzer] Fix bad test from r163220.Jordan Rose
Add a FIXME to the test while I track down the real problem. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163222 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05Allow disabling of wchar_t type.Abramo Bagnara
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163221 91177308-0d34-0410-b5e6-96231b3b80d8