DeLesley Hutchins
b682431775
Thread safety analysis: add two new attributes to the thread safety analysis:
...
assert_exclusive_lock and assert_shared_lock. These attributes are used to
mark functions that dynamically check (i.e. assert) that a lock is held.
llvm-svn: 182170
2013-05-17 23:02:59 +00:00
DeLesley Hutchins
fd374bb3dd
Thread safety analysis: turn on checking within lock and unlock functions.
...
These checks are enabled with the -Wthread-safety-beta flag.
llvm-svn: 179046
2013-04-08 20:11:11 +00:00
DeLesley Hutchins
eb849c6bd5
Thread safety analysis: make sure that expressions in attributes are parsed
...
in an unevaluated context.
llvm-svn: 174644
2013-02-07 19:01:07 +00:00
DeLesley Hutchins
9fa426a666
Thread-safety analysis: ignore edges from throw expressions in CFG.
...
llvm-svn: 172858
2013-01-18 22:15:45 +00:00
DeLesley Hutchins
0cfa1a5a1d
Thread-safety analysis: check member access on guarded non-primitive types.
...
llvm-svn: 169669
2012-12-08 03:46:30 +00:00
DeLesley Hutchins
f489d2b86c
Thread-safety analysis: check locks on method calls, operator=, and
...
copy constructors.
llvm-svn: 169350
2012-12-05 01:20:45 +00:00
DeLesley Hutchins
2d0881b577
Thread-safety analysis: support multiple thread-safety attributes on
...
declarations.
llvm-svn: 165826
2012-10-12 21:38:12 +00:00
DeLesley Hutchins
1fe885614d
Thread-safety analysis: allow attributes on constructors to refer to 'this'.
...
llvm-svn: 165339
2012-10-05 22:38:19 +00:00
DeLesley Hutchins
f39c0c2487
Fix template instantiation of attributes. More specifically, fix the case
...
where an attribute is attached to a forward declaration of a template function,
and refers to parameters of that declaration, but is then inherited by the
definition of that function. When the definition is instantiated, the
parameter references need to be remapped.
llvm-svn: 164710
2012-09-26 17:57:31 +00:00
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