DeLesley Hutchins
10958cae09
Thread-safety analysis: better handling of unreachable blocks. Fixes a bug
...
where a call to function marked 'noreturn' is followed by unreachable
implicit destructor calls.
llvm-svn: 164394
2012-09-21 17:57:00 +00:00
DeLesley Hutchins
fcb0ffa622
Thread-safety analysis: fix bug where shared trylock was treated
...
as exclusive.
llvm-svn: 164332
2012-09-20 23:14:43 +00:00
DeLesley Hutchins
b78aeed26e
Thread safety analysis: properly canonicalize calls to virtual methods within
...
lock expressions.
llvm-svn: 164324
2012-09-20 22:18:02 +00:00
DeLesley Hutchins
132f8f6959
Thread-safety analysis: Fix warning when EXCLUSIVE_LOCKS_REQUIRED
...
is placed on a function that has no path to the exit block.
llvm-svn: 164244
2012-09-19 19:49:40 +00:00
DeLesley Hutchins
a15e1b4f63
Thread-safety analysis: fix ICE when EXCLUSIVE_LOCKS_REQUIRED or
...
LOCKS_EXCLUDED is used on a method with a name that is is not a simple
identifier.
llvm-svn: 164242
2012-09-19 19:18:29 +00:00
DeLesley Hutchins
138568b60a
Thread-safety analysis: fix bug in expression matching code.
...
llvm-svn: 163656
2012-09-11 23:04:49 +00:00
DeLesley Hutchins
781fe380c3
Thread safety analysis: fix bug related to lock_returned attribute
...
on templates.
llvm-svn: 163642
2012-09-11 18:27:46 +00:00
DeLesley Hutchins
5ff1644e62
Thread-safety analysis: differentiate between two forms of analysis; a precise
...
analysis that may give false positives because it is confused by aliasing, and
a less precise analysis that has fewer false positives, but may have false
negatives. The more precise warnings are enabled by -Wthread-safety-precise.
An additional note clarify the warnings in the precise case.
llvm-svn: 163537
2012-09-10 19:58:23 +00:00
Chad Rosier
ea3157f1e4
Whitespace.
...
llvm-svn: 163404
2012-09-07 18:46:57 +00:00
DeLesley Hutchins
a5a00e830a
Thread-safety analysis: Add support for selectively turning off warnings
...
within part of a particular method.
llvm-svn: 163397
2012-09-07 17:34:53 +00:00
DeLesley Hutchins
93b1b031c1
Thread-safety analysis: bugfix for case where a trylock occurs in an
...
expression involving temporaries.
llvm-svn: 163237
2012-09-05 20:01:16 +00:00
DeLesley Hutchins
f5cf7903d9
Thread-safety analysis: fix handling of LOCK_RETURNED attribute so that the
...
latest definition of a function is always used when computing lock expressions.
llvm-svn: 163028
2012-08-31 22:09:53 +00:00
DeLesley Hutchins
3c3d57bc16
Thread-safety analysis: fix handling of string constants in mutex
...
expressions, which should be ignored right now.
llvm-svn: 163026
2012-08-31 21:57:32 +00:00
DeLesley Hutchins
0c90c2bc4b
Thread-safety-analysis: adds existential quantification over lock
...
expressions. The syntax &MyClass::mutex is interpreted as a
pattern that matches m->mutex for any object m of type MyClass.
llvm-svn: 161691
2012-08-10 20:29:46 +00:00
DeLesley Hutchins
9b1d72f3e3
Thread safety analysis: refactor to support more sophisticated handling
...
of expressions, and better error messages.
llvm-svn: 161690
2012-08-10 20:19:55 +00:00
Sylvestre Ledru
a5202660fb
Fix some minor typos
...
llvm-svn: 161036
2012-07-31 06:56:50 +00:00
DeLesley Hutchins
868830f727
Thread safety analysis: impove handling of trylock expressions.
...
llvm-svn: 160018
2012-07-10 21:47:55 +00:00
DeLesley Hutchins
09bcefcb6d
Thread-safety analysis: eliminate false positives in case where the definition
...
duplicates attributes on the declaration. Also eliminates a false negative in
ReleasableMutexLock. Fixing this bug required some refactoring.
llvm-svn: 159780
2012-07-05 21:16:29 +00:00
DeLesley Hutchins
3a8d6cff14
Thread safety analysis: improve handling of smart pointers.
...
llvm-svn: 159679
2012-07-03 19:47:18 +00:00
DeLesley Hutchins
0c1da20bf8
Thread Safety Analysis: handle expressions involving temporaries,
...
e.g. ExprWithCleanups.
llvm-svn: 159674
2012-07-03 18:25:56 +00:00
DeLesley Hutchins
ab0d4e6cd8
Thread safety analysis: fixed bug that occurs when very silly people
...
use scoped_lockable without putting unlock_function on the
destructor.
llvm-svn: 159609
2012-07-02 22:26:29 +00:00
DeLesley Hutchins
6e6dbb7618
Thread safety analysis: fixed incorrect error message at the end of a locks_required function.
...
llvm-svn: 159607
2012-07-02 22:16:54 +00:00
DeLesley Hutchins
2a15baf968
Thread safety analysis: don't warn in case of duplicate annotation.
...
llvm-svn: 159606
2012-07-02 22:12:12 +00:00
DeLesley Hutchins
c4a6e51596
Thread Safety Analysis: turn off checking within trylock functions.
...
llvm-svn: 159601
2012-07-02 21:59:24 +00:00
DeLesley Hutchins
d162c91b1a
Thread safety analysis: support release() function on scoped
...
lockable objects.
llvm-svn: 159387
2012-06-28 22:42:48 +00:00
DeLesley Hutchins
49979f2e38
Thread safety analysis: implement lock_returned attribute.
...
llvm-svn: 159152
2012-06-25 18:33:18 +00:00
DeLesley Hutchins
ebbf77016d
Thread safety analysis: fixes a bug in which locksets are not handled
...
properly if there is a join point in the control flow graph that involves
a trylock. Also changes the source locations of some warnings to be
more consistent.
llvm-svn: 159008
2012-06-22 17:07:28 +00:00
Richard Smith
fa139cd3bd
Remove -Wc++98-compat warning for an outrageously-rare circumstance of 'this'
...
being used in an exception specification in a way which isn't otherwise
ill-formed in C++98: this warning also incorrectly triggered on uses of 'this'
inside thread-safety attributes, and the mechanism required to tell these cases
apart is more complex than can be justified by the (minimal) value of this part
of -Wc++98-compat.
llvm-svn: 155857
2012-04-30 23:33:33 +00:00
David Blaikie
09ffc9b473
Enable warn_impcast_literal_float_to_integer by default.
...
This diagnostic seems to be production ready, it's just an oversight that it
wasn't turned on by default.
The test changes are a bit of a mixed bag. Some tests that seemed like they
clearly didn't need to use this behavior have been modified not to use it.
Others that I couldn't be sure about, I added the necessary expected-warnings
to.
It's possible the diagnostic message could be improved to make it clearer that
this warning can be suppressed by using a value that won't lose precision when
converted to the target type (but can still be a floating point literal, such
as "bool b = 1.0;").
llvm-svn: 154068
2012-04-05 00:16:44 +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
71d6103295
Issue warning when late-parsed attributes have no declaration.
...
llvm-svn: 151947
2012-03-02 22:29:50 +00:00
DeLesley Hutchins
bd2ee13e78
Make late-parsed attributes follow the conventions of ordinary
...
GNU attributes to a better extent, by allowing them in more
places on a declator.
llvm-svn: 151945
2012-03-02 22:12:59 +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
DeLesley Hutchins
5b330db270
Bugfix: bogus warning -- "invalid use of non-static data member",
...
when a class is forward declared, and the reference to the data
member in question does not occur within a method body.
llvm-svn: 151413
2012-02-25 00:11:55 +00:00
DeLesley Hutchins
6f13b09a00
Minor fix to template instantiation, which properly instantiates
...
dependent attributes on static members of templatized classes.
llvm-svn: 150704
2012-02-16 17:30:51 +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
DeLesley Hutchins
3fc6e4a7cd
Allow thread safety attributes on function definitions.
...
For compatibility with gcc, clang will now parse gcc attributes on
function definitions, but issue a warning if the attribute is not a
thread safety attribute. Warning controlled by -Wgcc-compat.
llvm-svn: 150698
2012-02-16 16:50:43 +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
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
DeLesley Hutchins
30398dd410
Delayed template instantiation of late-parsed attributes.
...
llvm-svn: 148595
2012-01-20 22:50:54 +00:00
DeLesley Hutchins
ceec3063e2
Instantiate dependent attributes when instantiating templates.
...
llvm-svn: 148592
2012-01-20 22:37:06 +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
714296cb31
Support for thread safety attributes on functions
...
llvm-svn: 147331
2011-12-29 00:56:48 +00:00
Richard Trieu
553b2b2e5d
Modify how the -verify flag works. Currently, the verification string and
...
diagnostic message are compared. If either is a substring of the other, then
no error is given. This gives rise to an unexpected case:
// expect-error{{candidate function has different number of parameters}}
will match the following error messages from Clang:
candidate function has different number of parameters (expected 1 but has 2)
candidate function has different number of parameters
It will also match these other error messages:
candidate function
function has different number of parameters
number of parameters
This patch will change so that the verification string must be a substring of
the diagnostic message before accepting. Also, all the failing tests from this
change have been corrected. Some stats from this cleanup:
87 - removed extra spaces around verification strings
70 - wording updates to diagnostics
40 - extra leading or trailing characters (typos, unmatched parens or quotes)
35 - diagnostic level was included (error:, warning:, or note:)
18 - flag name put in the warning (-Wprotocol)
llvm-svn: 146619
2011-12-15 00:38:15 +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
Richard Smith
3d5c1fa93f
UnresolvedMemberExprs need lvalue-to-rvalue conversions during template
...
instantiations too.
llvm-svn: 143016
2011-10-26 06:15:36 +00:00
Richard Smith
d4268d91e7
Don't forget the lvalue-to-rvalue conversion on the LHS when instantiating a
...
dependent ->, where the member being referred to is an anonymous struct or
union. This path was missed by the fix in r142890.
llvm-svn: 142910
2011-10-25 06:33:21 +00:00
Richard Smith
e042bbfdf8
Tidy up testcase from r142890, spotted by Chandler.
...
llvm-svn: 142895
2011-10-25 01:05:41 +00:00
Richard Smith
841222ea75
Don't forget the lvalue-to-rvalue conversion on the LHS of an -> when rebuilding
...
it during template instantiation, for a known RHS decl.
llvm-svn: 142890
2011-10-25 00:41:24 +00:00
DeLesley Hutchins
f893e8ab87
Added support for thread safety attributes on destructors.
...
llvm-svn: 142685
2011-10-21 20:51:27 +00:00
DeLesley Hutchins
c20905110a
Thread safety analysis refactoring: invalid lock expressions.
...
llvm-svn: 142666
2011-10-21 18:10:14 +00:00
DeLesley Hutchins
db917bdea2
Thread safety analysis: add support for attributes on constructors.
...
llvm-svn: 142665
2011-10-21 18:06:53 +00:00
DeLesley Hutchins
30abeb1680
Substitute for arguments in method calls -- functionality
...
llvm-svn: 142267
2011-10-17 21:38:02 +00:00
Eli Friedman
0d3d70a074
Remove standard library includes from test; they explode on Windows.
...
llvm-svn: 139875
2011-09-15 23:24:35 +00:00
Caitlin Sadowski
2d910ba1e5
Thread safety: changing naming in error messages based on reviewer comments
...
llvm-svn: 139814
2011-09-15 18:13:32 +00:00
Caitlin Sadowski
cfef95eec6
Thread safety: test cases originally from gcc annotalysis branch. We are
...
relicensing them under the license for llvm.
llvm-svn: 139812
2011-09-15 18:07:32 +00:00
Caitlin Sadowski
6525fb25cb
Thread safety: completeing the implementation of shared/exclusive locks required attributes
...
llvm-svn: 139804
2011-09-15 17:43:08 +00:00
Caitlin Sadowski
af9b7c5f8b
Thread safety: refactoring various out of scope warnings to use the same inteface. This eliminates a lot of unnecessary duplicated code.
...
llvm-svn: 139801
2011-09-15 17:25:19 +00:00
Caitlin Sadowski
e50d8c3415
Thread safety: reverting to use separate warning for requirement to hold any lock
...
llvm-svn: 139723
2011-09-14 20:09:09 +00:00
Caitlin Sadowski
787c2a1b09
Thread safety: adding test cases for unparseable lock expressions and expanding the handling of these expressions
...
llvm-svn: 139720
2011-09-14 20:00:24 +00:00
Caitlin Sadowski
ff2f3f8105
Thread safety: This patch deals with previously unhandled cases when building lock expressions. We now resolve this expressions, avoid crashing when encountering cast expressions, and have a diagnostic for unresolved lock expressions
...
llvm-svn: 139370
2011-09-09 16:21:55 +00:00
Caitlin Sadowski
a2fd6e0473
Thread safety: refactoring test cases
...
llvm-svn: 139368
2011-09-09 16:07:55 +00:00
Caitlin Sadowski
ee5db8b5c4
Thread Safety: In C++0x Mutexes are the objects that control access to shared variables, while Locks are the objects that acquire and release Mutexes. We switch to this new terminology.
...
llvm-svn: 139321
2011-09-08 21:52:50 +00:00
Caitlin Sadowski
2d3f70ac1c
Thread Safety: adding basic no thread safety analysis option
...
llvm-svn: 139310
2011-09-08 18:35:21 +00:00
Caitlin Sadowski
69b367af17
Thread safety: Adding basic support for locks required and excluded attributes
...
llvm-svn: 139308
2011-09-08 18:27:31 +00:00
Caitlin Sadowski
46b057681a
Thread safety: shared vs. exclusive locks
...
llvm-svn: 139307
2011-09-08 18:19:38 +00:00
Caitlin Sadowski
bc1f11162a
Thread safety: small formatting change in test comments
...
llvm-svn: 139306
2011-09-08 18:07:26 +00:00
Caitlin Sadowski
9385dd7415
Thread Safety: Patch to implement delayed parsing of attributes within a
...
class scope.
This patch was also written by DeLesley Hutchins.
llvm-svn: 139301
2011-09-08 17:42:22 +00:00
Caitlin Sadowski
dd5fd87a6d
Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identify situations where we are accessing (reading or writing) guarded variables, and report an error if the appropriate locks are not held.
...
llvm-svn: 138774
2011-08-29 22:27:51 +00:00
Caitlin Sadowski
293d24a5ba
Thread safety: various minor bugfixes, with test cases
...
This patch is by DeLesley Hutchins.
llvm-svn: 138738
2011-08-29 17:12:27 +00:00
Caitlin Sadowski
afbbd8e5ad
Thread-safety analysis: adding in a basic lockset tracking system. This
...
system flags an error when unlocking a lock which was not held, locking
the same lock twice, having a different lockset on each iteration of a
loop, or going out of scope while still holding a lock. In order to
successfully use the lockset, this patch also makes sure that attribute
arguments are attached correctly for later parsing.
This patch was also worked on by DeLesley Hutchins.
Note: This patch has been reviewed by Chandler Carruth and Jeffrey
Yasskin. Feel free to provide post-commit review comments for a
subsequent patch.
llvm-svn: 138350
2011-08-23 18:46:34 +00:00