aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Analysis/ThreadSafety.cpp
AgeCommit message (Collapse)AuthorFilesLines
2016-12-03DR616, and part of P0135R1: member access (or pointer-to-member access) on aRichard Smith1-1/+1
temporary produces an xvalue, not a prvalue. Support this by materializing the temporary prior to performing the member access. llvm-svn: 288563
2016-10-21Remove move constructors that are identical to the generated default move ctor.Benjamin Kramer1-1/+1
llvm-svn: 284856
2016-07-18[NFC] Header cleanupMehdi Amini1-3/+1
Summary: Removed unused headers, replaced some headers with forward class declarations Patch by: Eugene <claprix@yandex.ru> Differential Revision: https://reviews.llvm.org/D20100 llvm-svn: 275882
2015-11-20Thread Safety Analysis: Fix DenseMap iterator invalidation UAFReid Kleckner1-39/+36
Rather than storing BeforeInfo in the DenseMap by value, this stores a unique_ptr to it, so that we can keep a pointer to it live across subsequent DenseMap insertions. This change also removes the unique_ptr wrapper around BeforeVect because now we're indirecting at a higher level. llvm-svn: 253694
2015-10-20Roll-back r250822.Angel Garcia Gomez1-2/+2
Summary: It breaks the build for the ASTMatchers Subscribers: klimek, cfe-commits Differential Revision: http://reviews.llvm.org/D13893 llvm-svn: 250827
2015-10-20Apply modernize-use-default to clang.Angel Garcia Gomez1-2/+2
Summary: Replace empty bodies of default constructors and destructors with '= default'. Reviewers: bkramer, klimek Subscribers: klimek, alexfh, cfe-commits Differential Revision: http://reviews.llvm.org/D13890 llvm-svn: 250822
2015-10-03Replace double-negated !SourceLocation.isInvalid() with ↵Yaron Keren1-1/+1
SourceLocation.isValid(). llvm-svn: 249228
2015-09-03Thread safety analysis: the NO_THREAD_SAFETY_ANALYSIS attribute will nowDeLesley Hutchins1-25/+33
disable checking of arguments to the function, which is done by -Wthread-safety-reference. llvm-svn: 246806
2015-03-16Take the non-reference type when constructing a dummy expression.Richard Trieu1-2/+2
Otherwise, Expr will assert during construction with a reference type. llvm-svn: 232425
2015-03-09Hide away implementation details of the ThreadSafetyAnalysis in anonymous ↵Benjamin Kramer1-27/+22
namespaces NFC. llvm-svn: 231653
2015-02-04Thread Safety Analysis: support adopting of locks, as implemented inDeLesley Hutchins1-11/+24
std::lock_guard. If EXCLUSIVE_LOCKS_REQUIRED is placed on the constructor of a SCOPED_LOCKABLE class, then that constructor is assumed to adopt the lock; e.g. the lock must be held on construction, and will be released on destruction. llvm-svn: 228194
2015-02-04Thread Safety Analysis: remove minor piece of unused code. No change inDeLesley Hutchins1-4/+0
functionality. llvm-svn: 228176
2015-02-03Thread Safety Analysis: add support for before/after annotations on mutexes.DeLesley Hutchins1-23/+220
These checks detect potential deadlocks caused by inconsistent lock ordering. The checks are implemented under the -Wthread-safety-beta flag. This patch also replaces calls to getAttrs() with calls to attrs() throughout ThreadSafety.cpp, which fixes the earlier issue that cause assert failures. llvm-svn: 228051
2015-02-03Revert "Thread Safety Analysis: add support for before/after annotations on ↵Reid Kleckner1-216/+17
mutexes." This reverts r227997, as well as r228009. It does not pass check-clang for me locally on Linux. llvm-svn: 228020
2015-02-03thread safety: Add move ctor to BeforeInfo to fix MSVC buildReid Kleckner1-0/+2
MSVC cannot infer move ctors yet. llvm-svn: 228009
2015-02-03Thread Safety Analysis: add support for before/after annotations on mutexes.DeLesley Hutchins1-17/+214
These checks detect potential deadlocks caused by inconsistent lock ordering. The checks are implemented under the -Wthread-safety-beta flag. llvm-svn: 227997
2015-01-14[cleanup] Re-sort *all* #include lines with llvm/utils/sort_includes.pyChandler Carruth1-1/+1
Sorry for the noise, I managed to miss a bunch of recent regressions of include orderings here. This should actually sort all the includes for Clang. Again, no functionality changed, this is just a mechanical cleanup that I try to run periodically to keep the #include lines as regular as possible across the project. llvm-svn: 225979
2014-11-05Thread Safety Analysis: move warnings on range-based for loops out of betaDeLesley Hutchins1-11/+9
and into -Wthread-safety. llvm-svn: 221410
2014-09-18Thread Safety Analysis: add new warning flag, -Wthread-safety-reference, whichDeLesley Hutchins1-16/+68
warns when a guarded variable is passed by reference as a function argument. This is released as a separate warning flag, because it could potentially break existing code that uses thread safety analysis. llvm-svn: 218087
2014-09-03Allow a scoped lockable object to acquire/release multiple locks.Ed Schouten1-125/+162
Scoped lockable objects (mutex guards) are implemented as if it is a lock itself that is acquired upon construction and unlocked upon destruction. As it if course needs to be used to actually lock down something else (a mutex), it keeps track of this knowledge through its underlying mutex field in its FactEntry. The problem with this approach is that this only allows us to lock down a single mutex, so extend the code to use a vector of underlying mutexes. This, however, makes the code a bit more complex than necessary, so subclass FactEntry into LockableFactEntry and ScopedLockableFactEntry and move all the logic that differs between regular locks and scoped lockables into member functions. llvm-svn: 217016
2014-08-15Adding const-qualifiers to auto declarations. NFC.Aaron Ballman1-3/+3
llvm-svn: 215704
2014-08-14Thread safety analysis: add -Wthread-safety-verbose flag, which adds ↵DeLesley Hutchins1-0/+5
additional notes that are helpful when compiling statistics on thread safety warnings. llvm-svn: 215677
2014-08-14Thread Safety Analysis: fix to improve handling of references to guardedDeLesley Hutchins1-20/+34
data members and range based for loops. llvm-svn: 215671
2014-08-04ThreadSafety.cpp: Prune bogus \param(s). [-Wdocumentation]NAKAMURA Takumi1-3/+0
llvm-svn: 214796
2014-08-04ThreadSafetyAnalysis: Fix annotations in class members. [-Wdocumentation]NAKAMURA Takumi1-5/+5
llvm-svn: 214795
2014-08-04Thread Safety Analysis: add a -Wthread-safety-negative flag that warns wheneverDeLesley Hutchins1-32/+70
a mutex is acquired, but corresponding mutex is not provably not-held. This is based on the earlier negative requirements patch. llvm-svn: 214789
2014-08-04Thread safety analysis: Add support for negative requirements, which areDeLesley Hutchins1-268/+232
capability expressions of the form !expr, and denote a capability that must not be held. llvm-svn: 214725
2014-07-28Thread Safety Analysis: Replace the old and broken SExpr with the newDeLesley Hutchins1-723/+168
til::SExpr. This is a large patch, with many small changes to pretty printing and expression lowering to make the new SExpr representation equivalent in functionality to the old. llvm-svn: 214089
2014-05-20[C++11] Use 'nullptr'. Analysis edition.Craig Topper1-38/+39
llvm-svn: 209191
2014-05-14Converting some for loops to use range-based for loops. No functional ↵Aaron Ballman1-23/+14
changes intended. llvm-svn: 208810
2014-05-14Amending r208783 based on a suggestion by David Blaikie.Aaron Ballman1-14/+12
llvm-svn: 208800
2014-05-14Replacing some manual iterations with standard algorithms. No functional ↵Aaron Ballman1-29/+22
changes intended. llvm-svn: 208783
2014-05-14Formatting and style changes; no functional changes intended.Aaron Ballman1-8/+7
llvm-svn: 208774
2014-05-09Amending r208439 to remove buildLExpr; this code isn't strictly required ↵Aaron Ballman1-46/+0
yet, and fixes a dead code warning. llvm-svn: 208440
2014-05-09Add the ability to use logical expressions for capability attributes. This ↵Aaron Ballman1-0/+47
is to allow requirements to be expressed not just in terms of lists, but in terms of logical expressions. Eg) void foo(void) __attribute__((requires_capability((FlightControl || Worker) && !Logger))); This is WIP code. llvm-svn: 208439
2014-05-02Remove unused typedef found by gcc's -Wunused-local-typedefs.Nico Weber1-2/+0
llvm-svn: 207870
2014-05-02Updated the attribute tablegen emitter for variadic arguments to emit a ↵Aaron Ballman1-18/+13
range accessor in addition to the iterators. Updated code using iterators to use range-based for loops. llvm-svn: 207837
2014-04-18Updating to use more range-based for loops, nullptr and auto. No functional ↵Aaron Ballman1-20/+14
changes. llvm-svn: 206590
2014-04-17Making some public members into private members. This also introduces a bit ↵Aaron Ballman1-16/+10
more const-correctness, and now uses some range-based for loops. No functional changes intended. llvm-svn: 206503
2014-04-09Thread Safety Analysis: reorganized SExpr header files. No change inDeLesley Hutchins1-0/+1
functionality. llvm-svn: 205936
2014-04-07Thread Safety Analysis: update to internal SExpr handling.DeLesley Hutchins1-8/+15
This patch is the first part of a significant refactoring that seeks to restore sanity to way thread safety analysis deals with capability expressions. The current patch merely provides an outline of the structure of the new system. It's not yet connected to the actual analysis, so there's no change in functionality. llvm-svn: 205728
2014-04-01Updating the capability attribute diagnostics to be more capability-neutral. ↵Aaron Ballman1-104/+176
Instead of using terminology such as "lock", "unlock" and "locked", the new terminology is "acquire", "release" and "held". Additionally, the capability attribute's name argument is now reported as part of the diagnostic, instead of hard coding as "mutex." llvm-svn: 205359
2014-03-21The release_capability, release_shared_capability and ↵Aaron Ballman1-27/+33
release_generic_capability functions are now functionally distinct for capability analysis. The unlock_function attribute maps directly to release_generic_capability. llvm-svn: 204469
2014-03-20Replacing the exclusive_lock_function, shared_lock_function and ↵Aaron Ballman1-24/+14
unlock_function attributes with the acquire_capability and release_capability attributes. The old spellings will continue to work, but the underlying semantic attributes have been replaced. Downgraded the capability diagnostics from error to warning to match the desired behavior, and updated the existing test cases. llvm-svn: 204350
2014-03-10Thread safety analysis: move smart pointer checks from -Wthread-safety-betaDeLesley Hutchins1-27/+19
to -Wthread-safety. llvm-svn: 203510
2014-03-10[C++11] Replacing DeclBase iterators specific_attr_begin() and ↵Aaron Ballman1-8/+4
specific_attr_end() with iterator_range specific_attrs(). Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203474
2014-03-06Based on usage, the NamedDecl is always set when constructing a ↵Aaron Ballman1-6/+3
CallingContext, but none of the other optional parameters are. Removing the optional parameters, and making the NamedDecl required. No functional changes intended. llvm-svn: 203149
2014-03-06Refactored to use a simple helper function that wraps the logic of creating ↵Aaron Ballman1-26/+18
an SExprNode and returning the position in which it was inserted. No functional change intended. llvm-svn: 203148
2014-03-06Very minor simplification and typo correction; no functional changes intended.Aaron Ballman1-14/+3
llvm-svn: 203144
2014-02-18DeLesley Hutchins (who wrote the original thread-safety attribute ↵Aaron Ballman1-19/+8
functionality) and I have agreed to start migrating from lock-specific terminology to "capability"-specific terminology. This opens the door for future threading-related analysis passes so that a common nomenclature can be used. The following attributes have been (silently) deprecated, with their replacements listed: lockable => capability exclusive_locks_required => requires_capability shared_locks_required => requires_shared_capability locks_excluded => requires_capability There are no functional changes intended. llvm-svn: 201585