Ted Kremenek
5022f1dffe
Fix horrific CFG bug where '@autoreleasepool' would be put in a dangling block in the CFG.
...
llvm-svn: 152163
2012-03-06 23:40:47 +00:00
DeLesley Hutchins
e2a3f75a12
Thread safety analysis: expand set of expressions that can be used to denote locks.
...
llvm-svn: 151956
2012-03-02 23:36:05 +00:00
DeLesley Hutchins
a2587ef26d
Thread safety analysis: handle CFG blocks which call functions marked as noreturn.
...
llvm-svn: 151944
2012-03-02 22:02:58 +00:00
Argyrios Kyrtzidis
981a961d03
Move llvm/ADT/SaveAndRestore.h -> llvm/Support/SaveAndRestore.h.
...
Needs llvm update.
llvm-svn: 151829
2012-03-01 19:45:56 +00:00
Argyrios Kyrtzidis
bb5abc7b49
Move "clang/Analysis/Support/SaveAndRestore.h" to "llvm/ADT/SaveAndRestore.h"
...
to make it more widely available.
Depends on llvm commit r151564
llvm-svn: 151566
2012-02-27 21:09:45 +00:00
Hans Wennborg
c9dd946852
Warn about non-standard format strings (pr12017)
...
This adds the -Wformat-non-standard flag (off by default,
enabled by -pedantic), which warns about non-standard
things in format strings (such as the 'q' length modifier,
the 'S' conversion specifier, etc.)
llvm-svn: 151154
2012-02-22 10:17:01 +00:00
DeLesley Hutchins
c2286f6402
Thread-safety analysis: Disable checking inside constructors, destructors, lock, and unlock functions
...
llvm-svn: 150701
2012-02-16 17:13:43 +00:00
DeLesley Hutchins
bc8ffdb68c
Thread-Safety: added support for 'this' as a lock expression.
...
llvm-svn: 150700
2012-02-16 17:03:24 +00:00
Hans Wennborg
9bc9bcc247
Format string analysis: give 'q' its own enumerator.
...
This is in preparation for being able to warn about 'q' and other
non-standard format string features.
It also allows us to print its name correctly.
llvm-svn: 150697
2012-02-16 16:34:54 +00:00
Hans Wennborg
d99d688358
Make -Wformat fix-its preserve original conversion specifiers.
...
This commit makes PrintfSpecifier::fixType() and ScanfSpecifier::fixType()
only fix a conversion specification enough that Clang wouldn't warn about it,
as opposed to always changing it to use the "canonical" conversion specifier.
(PR11975)
This preserves the user's choice of conversion specifier in cases like:
printf("%a", (long double)1);
where we previously suggested "%Lf", we now suggest "%La"
printf("%x", (long)1);
where we previously suggested "%ld", we now suggest "%lx".
llvm-svn: 150578
2012-02-15 09:59:46 +00:00
Ted Kremenek
d22b98aad2
Tweak format string checking to work with %@ and ObjC toll-free bridging. <rdar://problem/10814120>
...
llvm-svn: 149907
2012-02-06 21:45:29 +00:00
Dylan Noblesmith
e27789991d
Basic: import OwningPtr<> into clang namespace
...
llvm-svn: 149798
2012-02-05 02:12:40 +00:00
Richard Smith
922866783b
Thread safety analysis:
...
* When we detect that a CFG block has inconsistent lock sets, point the
diagnostic at the location where we found the inconsistency, and point a note
at somewhere the inconsistently-locked mutex was locked.
* Fix the wording of the normal (non-loop, non-end-of-function) case of this
diagnostic to not suggest that the mutex is going out of scope.
* Fix the diagnostic emission code to keep a warning and its note together when
sorting the diagnostics into source location order.
llvm-svn: 149669
2012-02-03 04:45:26 +00:00
Richard Smith
815b29d7c9
Thread safety analysis: at a CFG join point between a block terminating in a
...
'continue' and another block, prefer the lockset from the other block, and
diagnose the 'continue' block as being the end of a loop.
llvm-svn: 149666
2012-02-03 03:30:07 +00:00
Hans Wennborg
27a59958bd
Format string warnings: don't a.k.a. wchar_t with wchar_t.
...
This fixes the case where Clang would output:
error: format specifies type 'wchar_t *' (aka 'wchar_t *')
ArgTypeResult::getRepresentativeTypeName needs to take into account
that wchar_t can be a built-in type (as opposed to in C, where it is a
typedef).
llvm-svn: 149387
2012-01-31 14:59:59 +00:00
Erik Verbruggen
81dbd56501
[CFG] Removed unused local variable.
...
llvm-svn: 149385
2012-01-31 13:44:00 +00:00
Nico Weber
496cdc2cb7
Let %S, %ls, %C match 16bit types in NSStrings.
...
As discussed at http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20120130/052200.html
llvm-svn: 149325
2012-01-31 01:43:25 +00:00
Ted Kremenek
9b1f3d46d0
Fix NSLog format string checking for %@.
...
llvm-svn: 148885
2012-01-25 00:04:09 +00:00
Ted Kremenek
6fa5727939
Teach scanf/printf checking about '%Ld' and friends (a GNU extension). Fixes PR 9466.
...
llvm-svn: 148859
2012-01-24 21:29:54 +00:00
David Blaikie
0f2ae78980
Revert various template unreachability code I committed accidentally.
...
r148774, r148775, r148776, r148777
llvm-svn: 148780
2012-01-24 04:51:48 +00:00
David Blaikie
afc6824fa6
More fixes/tests.
...
llvm-svn: 148777
2012-01-24 04:29:31 +00:00
David Blaikie
243a4c46d8
Support undefined dependent bases.
...
llvm-svn: 148775
2012-01-24 04:29:23 +00:00
DeLesley Hutchins
68f7b1a647
Handle thread safety attributes on functions with separate definitions and declarations.
...
llvm-svn: 148599
2012-01-20 23:24:41 +00:00
Ted Kremenek
9139892728
The 'l' length modifier makes sense with the scanlist conversion specifier.
...
llvm-svn: 148586
2012-01-20 22:11:52 +00:00
David Blaikie
e4d798f078
More dead code removal (using -Wunreachable-code)
...
llvm-svn: 148577
2012-01-20 21:50:17 +00:00
Hans Wennborg
6073e31baa
scanf: parse the 'm' length modifier, and check that the right arguments
...
are used with that and the 'a' length modifier.
llvm-svn: 148029
2012-01-12 17:11:12 +00:00
Hans Wennborg
fd950878fa
scanf analysis: the 'a' length modifier is valid with a scanlist
...
Before r148025 we (accidentally) didn't check whether a length modifier is
appropriate for a scanlist, but now we do.
llvm-svn: 148026
2012-01-12 15:07:16 +00:00
Hans Wennborg
32f115f9c1
scanf analysis: don't bail out after successful parse of scanlist
...
llvm-svn: 148025
2012-01-12 14:44:54 +00:00
Zhongxing Xu
f0cb43f561
Add elidable CXXConstructExpr as block-level expr. It converts an lvalue to a rvalue, which is a useful step during AST evaluation.
...
llvm-svn: 147918
2012-01-11 02:39:07 +00:00
DeLesley Hutchins
9d53033de6
Thread safety analysis: added support for trylock attribute.
...
llvm-svn: 147672
2012-01-06 19:16:50 +00:00
DeLesley Hutchins
9b7022e570
Added LocalVariableMap
...
llvm-svn: 147670
2012-01-06 18:36:09 +00:00
Ted Kremenek
990464cb30
Teach the static analyzer to not treat XPC types as CF types.
...
llvm-svn: 147506
2012-01-04 00:35:48 +00:00
DeLesley Hutchins
714296cb31
Support for thread safety attributes on functions
...
llvm-svn: 147331
2011-12-29 00:56:48 +00:00
Hans Wennborg
e5f554ac48
Support the 'a' scanf length modifier as an extension in C++.
...
It should not be supported in C++11, since that uses the C99 standard
library, in which 'a' is a format specifier.
llvm-svn: 147310
2011-12-28 13:10:50 +00:00
Zhongxing Xu
86a68d078c
Enable the user to control whether CXXConstructExpr will be added as a
...
block-level expr. Currently CXXConstructExpr is always added as a block-level
expr. This caused two problems for the analyzer (and potentially for the
CFG-based codegen).
1. We have no way to know whether a ctor call is base or complete.
2. We have no way to know the destination object being contructed.
llvm-svn: 147306
2011-12-28 04:38:46 +00:00
Ted Kremenek
72be32af88
Colorize and condense CFG pretty-printing.
...
llvm-svn: 147203
2011-12-22 23:33:52 +00:00
Ted Kremenek
299cfb7a02
Enhance AnalysisDeclContext::getReferencedBlockVars() to understand PseudoObjExprs. It turns out
...
that the information collected by this method is a super set of the captured variables in BlockDecl.
llvm-svn: 147122
2011-12-22 01:30:46 +00:00
Ted Kremenek
c177d9faf5
Fix regression in LiveVariables when reasoning about variables captured by blocks.
...
llvm-svn: 147116
2011-12-22 00:46:32 +00:00
Ted Kremenek
1a7648b666
Improve CFG pretty-printing for CXXConstructExprs.
...
llvm-svn: 147068
2011-12-21 19:39:59 +00:00
Ted Kremenek
0ffba93e51
Improve CFG pretty-printing of CastExprs.
...
llvm-svn: 147066
2011-12-21 19:32:38 +00:00
Chandler Carruth
1c032e0dc0
Update the CMake build for r146959's new files.
...
llvm-svn: 146967
2011-12-20 08:42:15 +00:00
David Blaikie
68e081d606
Unweaken vtables as per http://llvm.org/docs/CodingStandards.html#ll_virtual_anch
...
llvm-svn: 146959
2011-12-20 02:48:34 +00:00
Douglas Gregor
dc9166c8e1
Keep track of all declarations of an Objective-C class (both forward
...
declarations and definitions) as ObjCInterfaceDecls within the same
redeclaration chain. This new representation matches what we do for
C/C++ variables/functions/classes/templates/etc., and makes it
possible to answer the query "where are all of the declarations of
this class?"
llvm-svn: 146679
2011-12-15 20:29:51 +00:00
Hans Wennborg
23926bd2d7
Support the 'a' length modifier in scanf format strings as a C90
...
extension.
This fixes gcc.dg/format/c90-scanf-3.c and ext-4.c (test for excess
errors).
llvm-svn: 146649
2011-12-15 10:25:47 +00:00
Hans Wennborg
b1a5e09f6f
Check that arguments to a scanf call match the format specifier,
...
and offer fixits when there is a mismatch.
llvm-svn: 146326
2011-12-10 13:20:11 +00:00
Hans Wennborg
0c35326302
Remove unnecessary braces from my previous commit.
...
llvm-svn: 146259
2011-12-09 15:57:33 +00:00
Hans Wennborg
a5b1aa99c7
Make printf warnings refer to wint_t and wchar_t by name
...
in addition to underlying type.
llvm-svn: 146254
2011-12-09 12:22:12 +00:00
Hans Wennborg
a8b042d31a
Move definition of ConversionSpecifier::toString() to FormatString.cpp
...
It's declared in FormatString.h, so it shouldn't be defined in
PrintfFormatString.cpp.
llvm-svn: 146253
2011-12-09 11:11:07 +00:00
Hans Wennborg
2027de3be9
fix format specifier fixit for printf("%ld", "foo");
...
It should reset the length modifier (unless it's a wchar_t string).
llvm-svn: 146252
2011-12-09 10:51:29 +00:00
DeLesley Hutchins
f7faa6a69b
This patch extends thread safety analysis with support for the scoped_lockable attribute.
...
llvm-svn: 146174
2011-12-08 20:23:06 +00:00