ddd01cec0e 
								
							 
						 
						
							
							
								
								Removing an "if (this == nullptr)" check from two print methods.  The condition  
							
							... 
							
							
							
							will never be true in a well-defined context.  The checking for null pointers
has been moved into the caller logic so it does not rely on undefined behavior.
llvm-svn: 210498 
							
						 
						
							2014-06-09 22:53:25 +00:00  
				
					
						
							
							
								 
						
							
								b603192124 
								
							 
						 
						
							
							
								
								Thread Safety Analysis: implement review suggestions from Aaron Ballman.  
							
							... 
							
							
							
							llvm-svn: 209847 
							
						 
						
							2014-05-29 21:24:16 +00:00  
				
					
						
							
							
								 
						
							
								44be81b5a9 
								
							 
						 
						
							
							
								
								Thread Safety Analysis: update TIL traversal mechanism to allow arbitrary  
							
							... 
							
							
							
							local contexts.  Also includes some minor refactoring.
llvm-svn: 209774 
							
						 
						
							2014-05-28 21:28:13 +00:00  
				
					
						
							
							
								 
						
							
								a9c452121a 
								
							 
						 
						
							
							
								
								Fix line endings.  
							
							... 
							
							
							
							llvm-svn: 209727 
							
						 
						
							2014-05-28 11:19:43 +00:00  
				
					
						
							
							
								 
						
							
								c771d5d79f 
								
							 
						 
						
							
							
								
								Move the logic for testing for namespace std into one location.  This check can  
							
							... 
							
							
							
							be performed by using Decl::isInStdNamespace or DeclContext::isStdNamespace
llvm-svn: 209708 
							
						 
						
							2014-05-28 02:16:01 +00:00  
				
					
						
							
							
								 
						
							
								5fbdc93d97 
								
							 
						 
						
							
							
								
								Make dead return statement detection more robust against changes in the CFG.  
							
							... 
							
							
							
							This change is a precondition to the proposed change to handle temporary
dtors correctly.
The idea is to explicitly search for the next return that doesn't have other
paths into it (that is, if the current block is dead, the block containing the
return must be dead, too). Thus, introducing non-control-flow block
transitions will not break the logic.
llvm-svn: 209531 
							
						 
						
							2014-05-23 17:09:56 +00:00  
				
					
						
							
							
								 
						
							
								7afd71e4ff 
								
							 
						 
						
							
							
								
								Add a check for tautological bitwise comparisons to -Wtautological-compare.  
							
							... 
							
							
							
							This catches issues like:
if ((x & 8) == 4) { ... }
if ((x | 4) != 3) { ... }
Patch by Anders Rönnholm!
llvm-svn: 209221 
							
						 
						
							2014-05-20 17:31:11 +00:00  
				
					
						
							
							
								 
						
							
								2554294321 
								
							 
						 
						
							
							
								
								[C++11] Use 'nullptr'. Analysis edition.  
							
							... 
							
							
							
							llvm-svn: 209191 
							
						 
						
							2014-05-20 04:30:07 +00:00  
				
					
						
							
							
								 
						
							
								f4b5e7c60f 
								
							 
						 
						
							
							
								
								Thread Safety Analysis: add new node types to thread safety TIL.  
							
							... 
							
							
							
							This fills in a few missing gaps in functionality.
llvm-svn: 208830 
							
						 
						
							2014-05-15 00:50:36 +00:00  
				
					
						
							
							
								 
						
							
								9ee54d119c 
								
							 
						 
						
							
							
								
								Converting some for loops to use range-based for loops. No functional changes intended.  
							
							... 
							
							
							
							llvm-svn: 208810 
							
						 
						
							2014-05-14 20:42:13 +00:00  
				
					
						
							
							
								 
						
							
								59a72b93a2 
								
							 
						 
						
							
							
								
								Amending r208783 based on a suggestion by David Blaikie.  
							
							... 
							
							
							
							llvm-svn: 208800 
							
						 
						
							2014-05-14 18:32:59 +00:00  
				
					
						
							
							
								 
						
							
								42f9a8a7f9 
								
							 
						 
						
							
							
								
								Replacing some manual iterations with standard algorithms. No functional changes intended.  
							
							... 
							
							
							
							llvm-svn: 208783 
							
						 
						
							2014-05-14 15:01:43 +00:00  
				
					
						
							
							
								 
						
							
								2f3fc6badd 
								
							 
						 
						
							
							
								
								Formatting and style changes; no functional changes intended.  
							
							... 
							
							
							
							llvm-svn: 208774 
							
						 
						
							2014-05-14 13:03:55 +00:00  
				
					
						
							
							
								 
						
							
								0c6a14ca82 
								
							 
						 
						
							
							
								
								Amending r208439 to remove buildLExpr; this code isn't strictly required yet, and fixes a dead code warning.  
							
							... 
							
							
							
							llvm-svn: 208440 
							
						 
						
							2014-05-09 18:44:48 +00:00  
				
					
						
							
							
								 
						
							
								7c192b452f 
								
							 
						 
						
							
							
								
								Add the ability to use logical expressions for capability attributes. This 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-09 18:26:23 +00:00  
				
					
						
							
							
								 
						
							
								a7bcab75d2 
								
							 
						 
						
							
							
								
								ThreadSafetyAnalysis: Don't crash when trying to analyze objc methods.  
							
							... 
							
							
							
							The thread safety analysis isn't very useful in ObjC (you can't annotate
ObjC classes or methods) but we can still analyze the actual code and
show violations in usage of C/C++ functions.
Fixes PR19541, which does not use thread safety attributes but crashes
with -Weverything.
llvm-svn: 208436 
							
						 
						
							2014-05-09 17:08:01 +00:00  
				
					
						
							
							
								 
						
							
								b33bded176 
								
							 
						 
						
							
							
								
								Explicitly keep track of temporaries during the consumed analysis.  
							
							... 
							
							
							
							This makes the consumed analysis less dependent on the CFG layout and fixes
a bug where we wouldn't warn on an unconsumed value.
llvm-svn: 208300 
							
						 
						
							2014-05-08 11:50:00 +00:00  
				
					
						
							
							
								 
						
							
								75f34c1386 
								
							 
						 
						
							
							
								
								Fix handling of condition variables in the face of temp dtors.  
							
							... 
							
							
							
							The assignment needs to be before the destruction of the temporary.
This patch calls out to addStmt, which invokes VisitDeclStmt, which has
all the correct logic for handling temporaries.
llvm-svn: 207985 
							
						 
						
							2014-05-05 18:21:06 +00:00  
				
					
						
							
							
								 
						
							
								b0f9e4ace7 
								
							 
						 
						
							
							
								
								Remove unused typedef found by gcc's -Wunused-local-typedefs.  
							
							... 
							
							
							
							llvm-svn: 207870 
							
						 
						
							2014-05-02 21:22:21 +00:00  
				
					
						
							
							
								 
						
							
								802df13e4d 
								
							 
						 
						
							
							
								
								Fix bad comment from r207573.  
							
							... 
							
							
							
							llvm-svn: 207854 
							
						 
						
							2014-05-02 18:12:30 +00:00  
				
					
						
							
							
								 
						
							
								a82eaa70f1 
								
							 
						 
						
							
							
								
								Updated the attribute tablegen emitter for variadic arguments to emit a range accessor in addition to the iterators. Updated code using iterators to use range-based for loops.  
							
							... 
							
							
							
							llvm-svn: 207837 
							
						 
						
							2014-05-02 13:35:42 +00:00  
				
					
						
							
							
								 
						
							
								73b3651e9d 
								
							 
						 
						
							
							
								
								Renaming the CallableState variadic attribute argument to be CallableStates. No functional changes intended.  
							
							... 
							
							
							
							llvm-svn: 207836 
							
						 
						
							2014-05-02 13:17:57 +00:00  
				
					
						
							
							
								 
						
							
								df51ee6c50 
								
							 
						 
						
							
							
								
								scanf analysis: handle scanlists that start with ^] (PR19559)  
							
							... 
							
							
							
							llvm-svn: 207573 
							
						 
						
							2014-04-29 19:42:27 +00:00  
				
					
						
							
							
								 
						
							
								35897d97a3 
								
							 
						 
						
							
							
								
								Renaming range-based for loop variables so they don't appear iterator-like.  
							
							... 
							
							
							
							llvm-svn: 207422 
							
						 
						
							2014-04-28 14:56:59 +00:00  
				
					
						
							
							
								 
						
							
								fe46e62e99 
								
							 
						 
						
							
							
								
								[C++11] Converting to range-based for loops. No functional changes intended.  
							
							... 
							
							
							
							llvm-svn: 207416 
							
						 
						
							2014-04-28 13:01:32 +00:00  
				
					
						
							
							
								 
						
							
								8e8026d5b3 
								
							 
						 
						
							
							
								
								Replacing a naked pointer with a unique_ptr. No functional changes intended.  
							
							... 
							
							
							
							llvm-svn: 206986 
							
						 
						
							2014-04-23 14:26:59 +00:00  
				
					
						
							
							
								 
						
							
								bf58a6a892 
								
							 
						 
						
							
							
								
								Updated to be a bit more const friendly. Also switched the linkage to be static since this function is file-local. No functional changes intended.  
							
							... 
							
							
							
							llvm-svn: 206982 
							
						 
						
							2014-04-23 13:58:21 +00:00  
				
					
						
							
							
								 
						
							
								f1a311653a 
								
							 
						 
						
							
							
								
								Thread safety analysis: add array operations to SExpr.  
							
							... 
							
							
							
							llvm-svn: 206907 
							
						 
						
							2014-04-22 17:31:23 +00:00  
				
					
						
							
							
								 
						
							
								7834001496 
								
							 
						 
						
							
							
								
								Thread safety analysis: fix warning.  
							
							... 
							
							
							
							llvm-svn: 206899 
							
						 
						
							2014-04-22 14:51:04 +00:00  
				
					
						
							
							
								 
						
							
								1034666777 
								
							 
						 
						
							
							
								
								[Modules] Fix potential ODR violations by sinking the DEBUG_TYPE  
							
							... 
							
							
							
							definition below all of the header #include lines, clang edition.
If you want more details about this, you can see some of the commits to
Debug.h in LLVM recently. This is just the clang section of a cleanup
I've done for all uses of DEBUG_TYPE in LLVM.
llvm-svn: 206849 
							
						 
						
							2014-04-22 03:17:02 +00:00  
				
					
						
							
							
								 
						
							
								f8b412adbb 
								
							 
						 
						
							
							
								
								Thread safety analysis:  misc updates to SExpr handling.  Fix to minimal SSA,  
							
							... 
							
							
							
							function parameters, and compound assignment.
llvm-svn: 206827 
							
						 
						
							2014-04-21 23:18:18 +00:00  
				
					
						
							
							
								 
						
							
								a9db0019a2 
								
							 
						 
						
							
							
								
								Thread Safety Analysis:  Convert to minimal SSA.  
							
							... 
							
							
							
							llvm-svn: 206681 
							
						 
						
							2014-04-19 03:54:41 +00:00  
				
					
						
							
							
								 
						
							
								ae497deddf 
								
							 
						 
						
							
							
								
								Thread Safety Analysis:  Update SSA pass to handle loops.  
							
							... 
							
							
							
							llvm-svn: 206676 
							
						 
						
							2014-04-19 00:35:54 +00:00  
				
					
						
							
							
								 
						
							
								0491afaf5f 
								
							 
						 
						
							
							
								
								Updating to use more range-based for loops, nullptr and auto. No functional changes.  
							
							... 
							
							
							
							llvm-svn: 206590 
							
						 
						
							2014-04-18 13:13:15 +00:00  
				
					
						
							
							
								 
						
							
								e80bfcd048 
								
							 
						 
						
							
							
								
								Making some public members into private members. This also introduces a bit more const-correctness, and now uses some range-based for loops. No functional changes intended.  
							
							... 
							
							
							
							llvm-svn: 206503 
							
						 
						
							2014-04-17 21:44:08 +00:00  
				
					
						
							
							
								 
						
							
								ed5aced64e 
								
							 
						 
						
							
							
								
								Since the object is new'ed in the enterCFG function, now deleting in the exitCFG function instead of the destructor to ensure proper pairing. This allows reuse of the builder without creating a memory leak.  
							
							... 
							
							
							
							llvm-svn: 206471 
							
						 
						
							2014-04-17 15:23:50 +00:00  
				
					
						
							
							
								 
						
							
								6f375e5604 
								
							 
						 
						
							
							
								
								-Wunreachable-code: refine recognition of unreachable "sigil" to cope with implicit casts in C++.  
							
							... 
							
							
							
							Fixes <rdar://problem/16631033>.
llvm-svn: 206360 
							
						 
						
							2014-04-16 07:26:09 +00:00  
				
					
						
							
							
								 
						
							
								aab9aff058 
								
							 
						 
						
							
							
								
								Thread Safety Analysis: rewrite SSA pass to use the new SExpr and CFG  
							
							... 
							
							
							
							traversal system.  The new pass is still undergoing testing; no change in
functionality.
llvm-svn: 206338 
							
						 
						
							2014-04-15 23:23:19 +00:00  
				
					
						
							
							
								 
						
							
								e729d9b598 
								
							 
						 
						
							
							
								
								Fix typo from r206232  
							
							... 
							
							
							
							llvm-svn: 206234 
							
						 
						
							2014-04-15 01:06:38 +00:00  
				
					
						
							
							
								 
						
							
								e9fa266cba 
								
							 
						 
						
							
							
								
								Fix a bad interaction between -Wtautological-overlap-compare and delayed  
							
							... 
							
							
							
							diagnostics which caused delayed diagnostics on dead paths to be emitted.
llvm-svn: 206232 
							
						 
						
							2014-04-15 00:57:50 +00:00  
				
					
						
							
							
								 
						
							
								7e615c2f65 
								
							 
						 
						
							
							
								
								Thread Safety Analysis: reorganized SExpr header files.  No change in  
							
							... 
							
							
							
							functionality.
llvm-svn: 205936 
							
						 
						
							2014-04-09 22:39:43 +00:00  
				
					
						
							
							
								 
						
							
								28347a72c9 
								
							 
						 
						
							
							
								
								Thread Safety Analysis: now with less includes. No functional changes.  
							
							... 
							
							
							
							llvm-svn: 205929 
							
						 
						
							2014-04-09 21:12:04 +00:00  
				
					
						
							
							
								 
						
							
								3f993c1320 
								
							 
						 
						
							
							
								
								Thread Safety Analysis: some minor cleanups to the latest thread safety changes. No functional changes intended.  
							
							... 
							
							
							
							* Adds an iterator_range interface to CallExpr to get the arguments
* Modifies SExpr such that it must be allocated in the Arena, and cannot be deleted
* Minor const-correctness and nullptr updates
* Adds some operator!= implementations to complement operator==
* Removes unused functionality
llvm-svn: 205915 
							
						 
						
							2014-04-09 17:45:44 +00:00  
				
					
						
							
							
								 
						
							
								f7813c56b4 
								
							 
						 
						
							
							
								
								Thread Safety Analysis.  Misc fixes to SExpr code, responding to code review  
							
							... 
							
							
							
							by Aaron Ballman.
llvm-svn: 205809 
							
						 
						
							2014-04-08 22:21:22 +00:00  
				
					
						
							
							
								 
						
							
								11bb308739 
								
							 
						 
						
							
							
								
								Thread Safety Analysis: various fixes to new SExpr code.  
							
							... 
							
							
							
							Implemented ownership policy, updated to use nullptr, const-cleanup.
llvm-svn: 205745 
							
						 
						
							2014-04-07 22:56:24 +00:00  
				
					
						
							
							
								 
						
							
								b2213910de 
								
							 
						 
						
							
							
								
								Thread Safety Analysis: update to internal SExpr handling.  
							
							... 
							
							
							
							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-07 18:09:54 +00:00  
				
					
						
							
							
								 
						
							
								f935b562b9 
								
							 
						 
						
							
							
								
								Add a new subgroup to -Wtautological-compare, -Wtautological-overlap-compare,  
							
							... 
							
							
							
							which warns on compound conditionals that always evaluate to the same value.
For instance, (x > 5 && x < 3) will always be false since no value for x can
satisfy both conditions.
This patch also changes the CFG to use these tautological values for better
branch analysis.  The test for -Wunreachable-code shows how this change catches
additional dead code.
Patch by Anders Rönnholm.
llvm-svn: 205665 
							
						 
						
							2014-04-05 05:17:01 +00:00  
				
					
						
							
							
								 
						
							
								e044904301 
								
							 
						 
						
							
							
								
								Updating the capability attribute diagnostics to be more capability-neutral. 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-04-01 21:43:23 +00:00  
				
					
						
							
							
								 
						
							
								398fb00e1e 
								
							 
						 
						
							
							
								
								[analyzer] Fix a CFG printing bug.  
							
							... 
							
							
							
							Also, add several destructor-related tests. Most of them don't work yet, but it's
good to have them recorded.
Patch by Alex McCarthy!
llvm-svn: 205326 
							
						 
						
							2014-04-01 16:39:33 +00:00  
				
					
						
							
							
								 
						
							
								ab57a1555a 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] Expand paren-suppression heuristic to C++/ObjC bools.  
							
							... 
							
							
							
							llvm-svn: 205074 
							
						 
						
							2014-03-29 04:49:20 +00:00  
				
					
						
							
							
								 
						
							
								ec3bbf4933 
								
							 
						 
						
							
							
								
								Improve -Wunreachable-code to provide a means to indicate code is intentionally marked dead via if((0)).  
							
							... 
							
							
							
							Taking a hint from -Wparentheses, use an extra '()' as a sigil that
a dead condition is intentionally dead.  For example:
  if ((0)) { dead }
When this sigil is found, do not emit a dead code warning.  When the
analysis sees:
  if (0)
it suggests inserting '()' as a Fix-It.
llvm-svn: 205069 
							
						 
						
							2014-03-29 00:35:20 +00:00  
				
					
						
							
							
								 
						
							
								fb744589bc 
								
							 
						 
						
							
							
								
								remove a bunch of unused private methods  
							
							... 
							
							
							
							found with a smarter version of -Wunused-member-function that I'm playwing with.
Appologies in advance if I removed someone's WIP code.
 ARCMigrate/TransProperties.cpp                  |    8 -----
 AST/MicrosoftMangle.cpp                         |    1 
 Analysis/AnalysisDeclContext.cpp                |    5 ---
 Analysis/LiveVariables.cpp                      |   14 ----------
 Index/USRGeneration.cpp                         |   10 -------
 Sema/Sema.cpp                                   |   33 +++++++++++++++++++++---
 Sema/SemaChecking.cpp                           |    3 --
 Sema/SemaDecl.cpp                               |   20 ++------------
 StaticAnalyzer/Checkers/GenericTaintChecker.cpp |    1 
 9 files changed, 34 insertions(+), 61 deletions(-)
llvm-svn: 204561 
							
						 
						
							2014-03-23 17:12:37 +00:00  
				
					
						
							
							
								 
						
							
								df115d9bf3 
								
							 
						 
						
							
							
								
								The release_capability, release_shared_capability and 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-21 14:48:48 +00:00  
				
					
						
							
							
								 
						
							
								1421037ece 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] add a specialized diagnostic for unreachable increment expressions of loops.  
							
							... 
							
							
							
							llvm-svn: 204430 
							
						 
						
							2014-03-21 06:02:36 +00:00  
				
					
						
							
							
								 
						
							
								d7fa5bd431 
								
							 
						 
						
							
							
								
								Consumed Analysis: IgnoreParens bugfix.  
							
							... 
							
							
							
							llvm-svn: 204395 
							
						 
						
							2014-03-20 20:39:20 +00:00  
				
					
						
							
							
								 
						
							
								d4576318b4 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] Tweak isTrivialDoWhile() to handle implicit casts.  
							
							... 
							
							
							
							llvm-svn: 204376 
							
						 
						
							2014-03-20 18:47:53 +00:00  
				
					
						
							
							
								 
						
							
								18d85aed39 
								
							 
						 
						
							
							
								
								Replacing the exclusive_lock_function, shared_lock_function and 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-20 16:02:49 +00:00  
				
					
						
							
							
								 
						
							
								f5ae0bc671 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] Look through member accesses for 'static const bool' configuration values.  
							
							... 
							
							
							
							llvm-svn: 204315 
							
						 
						
							2014-03-20 06:44:35 +00:00  
				
					
						
							
							
								 
						
							
								2766ad27e8 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] constexpr functions can be used as configuration values.  
							
							... 
							
							
							
							llvm-svn: 204308 
							
						 
						
							2014-03-20 06:07:35 +00:00  
				
					
						
							
							
								 
						
							
								f3c93bb61b 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] Simplify and broad -Wunreachable-code-return, including nontrivial returns.  
							
							... 
							
							
							
							The exception is return statements that include control-flow,
which are clearly doing something "interesting".
99% of the cases I examined for -Wunreachable-code that fired
on return statements were not interesting enough to warrant
being in -Wunreachable-code by default.  Thus the move to
include them in -Wunreachable-code-return.
This simplifies a bunch of logic, including removing the ad hoc
logic to look for std::string literals.
llvm-svn: 204307 
							
						 
						
							2014-03-20 06:07:30 +00:00  
				
					
						
							
							
								 
						
							
								177b0a3600 
								
							 
						 
						
							
							
								
								scanf format checking: include the buffer length in the fix-it for %s.  
							
							... 
							
							
							
							Patch by Zach Davis!
llvm-svn: 204300 
							
						 
						
							2014-03-20 03:32:39 +00:00  
				
					
						
							
							
								 
						
							
								c7e4e219b5 
								
							 
						 
						
							
							
								
								[C++11] Replacing CompoundStmt iterators body_begin() and body_end() with iterator_range body(). Updating all of the usages of the iterators with range-based for loops.  
							
							... 
							
							
							
							llvm-svn: 204040 
							
						 
						
							2014-03-17 14:19:37 +00:00  
				
					
						
							
							
								 
						
							
								8cef8867ee 
								
							 
						 
						
							
							
								
								Remove dead functions from unreachable code analysis.  
							
							... 
							
							
							
							llvm-svn: 204004 
							
						 
						
							2014-03-15 10:20:49 +00:00  
				
					
						
							
							
								 
						
							
								9dfe400dc2 
								
							 
						 
						
							
							
								
								-Wunreachable-code: treat 'const bool' locals as control values.  
							
							... 
							
							
							
							llvm-svn: 204001 
							
						 
						
							2014-03-15 06:47:45 +00:00  
				
					
						
							
							
								 
						
							
								ad8753c00e 
								
							 
						 
						
							
							
								
								Further refine -Wunreachable-code groups so that -Wno-unreachable-code-break doesn't turn off all unreachable code warnings.  
							
							... 
							
							
							
							Also relax unreachable 'break' and 'return' to not check for being
preceded by a call to 'noreturn'.  That turns out to not be so
interesting in practice.
llvm-svn: 204000 
							
						 
						
							2014-03-15 05:47:06 +00:00  
				
					
						
							
							
								 
						
							
								1a8641c1e7 
								
							 
						 
						
							
							
								
								Start breaking -Wunreachable-code up into different diagnostic groups.  
							
							... 
							
							
							
							Recent work on -Wunreachable-code has focused on suppressing uninteresting
unreachable code that center around "configuration values", but
there are still some set of cases that are sometimes interesting
or uninteresting depending on the codebase.  For example, a dead
"break" statement may not be interesting for a particular codebase,
potentially because it is auto-generated or simply because code
is written defensively.
To address these workflow differences, -Wunreachable-code is now
broken into several diagnostic groups:
-Wunreachable-code: intended to be a reasonable "default" for
most users.
and then other groups that turn on more aggressive checking:
-Wunreachable-code-break: warn about dead break statements
-Wunreachable-code-trivial-return: warn about dead return statements
that return "trivial" values (e.g., return 0).  Other return
statements that return non-trivial values are still reported
under -Wunreachable-code (this is an area subject to more refinement).
-Wunreachable-code-aggressive: supergroup that enables all these
groups.
The goal is to eventually make -Wunreachable-code good enough to
either be in -Wall or on-by-default, thus finessing these warnings
into different groups helps achieve maximum signal for more users.
TODO: the tests need to be updated to reflect this extra control
via diagnostic flags.
llvm-svn: 203994 
							
						 
						
							2014-03-15 01:26:32 +00:00  
				
					
						
							
							
								 
						
							
								9371dd2287 
								
							 
						 
						
							
							
								
								[C++11] Replacing BlockDecl iterators capture_begin() and capture_end() with iterator_range captures(). Updating all of the usages of the iterators with range-based for loops.  
							
							... 
							
							
							
							llvm-svn: 203958 
							
						 
						
							2014-03-14 18:34:04 +00:00  
				
					
						
							
							
								 
						
							
								535bbcccb1 
								
							 
						 
						
							
							
								
								[C++11] Replacing DeclStmt iterators decl_begin() and decl_end() with iterator_range decls(). Updating all of the usages of the iterators with range-based for loops.  
							
							... 
							
							
							
							llvm-svn: 203947 
							
						 
						
							2014-03-14 17:01:24 +00:00  
				
					
						
							
							
								 
						
							
								d85eff49a3 
								
							 
						 
						
							
							
								
								[C++11] Replacing ObjCCategoryDecl iterators propimpl_begin() and propimpl_end() with iterator_range property_impls(). Updating all of the usages of the iterators with range-based for loops.  
							
							... 
							
							
							
							llvm-svn: 203930 
							
						 
						
							2014-03-14 15:02:45 +00:00  
				
					
						
							
							
								 
						
							
								b45acb8a16 
								
							 
						 
						
							
							
								
								[C++11] Add 'override' keyword to virtual methods that override their base class.  
							
							... 
							
							
							
							llvm-svn: 203893 
							
						 
						
							2014-03-14 06:02:07 +00:00  
				
					
						
							
							
								 
						
							
								0ad78303de 
								
							 
						 
						
							
							
								
								[C++11] Replacing CXXRecordDecl iterators init_begin() and init_end() with iterator_range inits(). Updating all of the usages of the iterators with range-based for loops.  
							
							... 
							
							
							
							llvm-svn: 203819 
							
						 
						
							2014-03-13 17:34:31 +00:00  
				
					
						
							
							
								 
						
							
								445a939db8 
								
							 
						 
						
							
							
								
								[C++11] Replacing CXXRecordDecl iterators vbases_begin() and vbases_end() with iterator_range vbases(). Updating all of the usages of the iterators with range-based for loops.  
							
							... 
							
							
							
							llvm-svn: 203808 
							
						 
						
							2014-03-13 16:15:17 +00:00  
				
					
						
							
							
								 
						
							
								574705ed7f 
								
							 
						 
						
							
							
								
								[C++11] Replacing CXXRecordDecl iterators bases_begin() and bases_end() with iterator_range bases(). Updating all of the usages of the iterators with range-based for loops.  
							
							... 
							
							
							
							llvm-svn: 203803 
							
						 
						
							2014-03-13 15:41:46 +00:00  
				
					
						
							
							
								 
						
							
								d1c9b37db9 
								
							 
						 
						
							
							
								
								Thread safety analysis: move smart pointer checks from -Wthread-safety-beta  
							
							... 
							
							
							
							to -Wthread-safety.
llvm-svn: 203510 
							
						 
						
							2014-03-10 23:03:49 +00:00  
				
					
						
							
							
								 
						
							
								be22bcb180 
								
							 
						 
						
							
							
								
								[C++11] Replacing DeclBase iterators specific_attr_begin() and 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-10 17:08:28 +00:00  
				
					
						
							
							
								 
						
							
								dfca6f97bc 
								
							 
						 
						
							
							
								
								[C++11] Replace OwningPtr include with <memory>.  
							
							... 
							
							
							
							llvm-svn: 203389 
							
						 
						
							2014-03-09 11:36:40 +00:00  
				
					
						
							
							
								 
						
							
								2dd810a331 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] Handle Objective-C bool literals in 'isConfigurationValue'.  
							
							... 
							
							
							
							This includes special casing 'YES' and 'NO', which are constants
defined as macros.
llvm-svn: 203380 
							
						 
						
							2014-03-09 08:13:49 +00:00  
				
					
						
							
							
								 
						
							
								c980afc578 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] Tweak heuristic for configuration values to include arithmetic operations involving sizeof(), but not raw integers.  
							
							... 
							
							
							
							This case was motivated by a false positive with the
llvm::AlignOf<> specialization in LLVM.
llvm-svn: 203363 
							
						 
						
							2014-03-08 23:20:11 +00:00  
				
					
						
							
							
								 
						
							
								e8a8baef44 
								
							 
						 
						
							
							
								
								[C++11] Replacing RecordDecl iterators field_begin() and field_end() with iterator_range fields(). Updating all of the usages of the iterators with range-based for loops.  
							
							... 
							
							
							
							llvm-svn: 203355 
							
						 
						
							2014-03-08 20:12:42 +00:00  
				
					
						
							
							
								 
						
							
								efea63450b 
								
							 
						 
						
							
							
								
								[-Wunreachabe-code] Don't warn about unreachable destructors for temporaries.  
							
							... 
							
							
							
							This can possibly be refined later, but right now the experience
is so incomprehensible for a user to understand what is going on
this isn't a useful warning.
llvm-svn: 203336 
							
						 
						
							2014-03-08 02:22:32 +00:00  
				
					
						
							
							
								 
						
							
								fcc1417fad 
								
							 
						 
						
							
							
								
								Fix CFG bug where the 'isTemporaryDtorsBranch' bit was silently lost for terminators.  
							
							... 
							
							
							
							llvm-svn: 203335 
							
						 
						
							2014-03-08 02:22:29 +00:00  
				
					
						
							
							
								 
						
							
								ff909f907c 
								
							 
						 
						
							
							
								
								[CFG] Record would-be successor for noreturn destructor.  
							
							... 
							
							
							
							llvm-svn: 203334 
							
						 
						
							2014-03-08 02:22:25 +00:00  
				
					
						
							
							
								 
						
							
								04bfbeea04 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] Handle 'return' with no argument dominated by 'noreturn' function.  
							
							... 
							
							
							
							llvm-svn: 203333 
							
						 
						
							2014-03-08 02:22:23 +00:00  
				
					
						
							
							
								 
						
							
								4cadf292a5 
								
							 
						 
						
							
							
								
								[C++11] Revert uses of lambdas with array_pod_sort.  
							
							... 
							
							
							
							Looks like GCC implements the lambda->function pointer conversion differently.
llvm-svn: 203293 
							
						 
						
							2014-03-07 21:51:58 +00:00  
				
					
						
							
							
								 
						
							
								15ae783e14 
								
							 
						 
						
							
							
								
								[C++11] Convert sort predicates into lambdas.  
							
							... 
							
							
							
							No functionality change.
llvm-svn: 203289 
							
						 
						
							2014-03-07 21:35:40 +00:00  
				
					
						
							
							
								 
						
							
								94d1617a1f 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] Treat constant globals as configuration values in unreachable code heuristics.  
							
							... 
							
							
							
							This one could possibly be refined even further; e.g. looking
at the initializer and see if it is truly a configuration value.
llvm-svn: 203283 
							
						 
						
							2014-03-07 20:51:13 +00:00  
				
					
						
							
							
								 
						
							
								b89843299a 
								
							 
						 
						
							
							
								
								Replace OwningPtr with std::unique_ptr.  
							
							... 
							
							
							
							This compiles cleanly with lldb/lld/clang-tools-extra/llvm.
llvm-svn: 203279 
							
						 
						
							2014-03-07 20:03:18 +00:00  
				
					
						
							
							
								 
						
							
								629afaefe0 
								
							 
						 
						
							
							
								
								[C++11] Replacing DeclBase iterators decls_begin() and decls_end() with iterator_range decls(). The same is true for the noload versions of these APIs. Updating all of the usages of the iterators with range-based for loops.  
							
							... 
							
							
							
							llvm-svn: 203278 
							
						 
						
							2014-03-07 19:56:05 +00:00  
				
					
						
							
							
								 
						
							
								9a16beb8bc 
								
							 
						 
						
							
							
								
								Change OwningPtr::take() to OwningPtr::release().  
							
							... 
							
							
							
							This is a precursor to moving to std::unique_ptr.
llvm-svn: 203275 
							
						 
						
							2014-03-07 19:33:25 +00:00  
				
					
						
							
							
								 
						
							
								f6bf62e2d0 
								
							 
						 
						
							
							
								
								[C++11] Replacing FunctionDecl iterators param_begin() and param_end() with iterator_range params(). Updating all of the usages of the iterators with range-based for loops.  
							
							... 
							
							
							
							llvm-svn: 203248 
							
						 
						
							2014-03-07 15:12:56 +00:00  
				
					
						
							
							
								 
						
							
								7d47cace55 
								
							 
						 
						
							
							
								
								Fix recent regressions in -Wreturn-type caused by heuristics to -Wunreachable-code.  
							
							... 
							
							
							
							I had forgotten that the same reachability code is used by both -Wreturn-type
and -Wunreachable-code, so the heuristics applied to the latter were indirectly
impacting the former.
To address this, the reachability code is more refactored so that whiled
the logic at its core is shared, the intention of the clients are better
captured and segregated in helper APIs.
Fixes PR19074, and also some false positives reported offline to me
by Nick Lewycky.
llvm-svn: 203209 
							
						 
						
							2014-03-07 07:14:36 +00:00  
				
					
						
							
							
								 
						
							
								782f003c62 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] Correctly expand artificial reachability to pruned '&&' and '||' branches involving configuration values.  
							
							... 
							
							
							
							llvm-svn: 203194 
							
						 
						
							2014-03-07 02:25:53 +00:00  
				
					
						
							
							
								 
						
							
								c10830b308 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] Teach reachable code analysis heuristics about more literal types.  
							
							... 
							
							
							
							llvm-svn: 203193 
							
						 
						
							2014-03-07 02:25:50 +00:00  
				
					
						
							
							
								 
						
							
								69bb592ad1 
								
							 
						 
						
							
							
								
								Based on usage, the NamedDecl is always set when constructing a 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-06 19:37:24 +00:00  
				
					
						
							
							
								 
						
							
								19842c437a 
								
							 
						 
						
							
							
								
								Refactored to use a simple helper function that wraps the logic of creating an SExprNode and returning the position in which it was inserted.  
							
							... 
							
							
							
							No functional change intended.
llvm-svn: 203148 
							
						 
						
							2014-03-06 19:25:11 +00:00  
				
					
						
							
							
								 
						
							
								cea2609b59 
								
							 
						 
						
							
							
								
								Very minor simplification and typo correction; no functional changes intended.  
							
							... 
							
							
							
							llvm-svn: 203144 
							
						 
						
							2014-03-06 19:10:16 +00:00  
				
					
						
							
							
								 
						
							
								6999d02587 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] Refine treating all branches of 'switch' as reachable, which includes those with all cases covered but with no 'default:'.  
							
							... 
							
							
							
							llvm-svn: 203094 
							
						 
						
							2014-03-06 08:09:00 +00:00  
				
					
						
							
							
								 
						
							
								ec2dc73e86 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] don't warn about dead 'return <string literal>' dominated by a 'noreturn' call, where literal becomes an std::string.  
							
							... 
							
							
							
							I have mixed feelings about this one.  It's used all over the codebase,
and is analogous to the current heuristic for ordinary C string literals.
This requires some ad hoc pattern matching of the AST.  While the
test case mirrors what we see std::string in libc++, it's not really
testing the libc++ headers.
llvm-svn: 203091 
							
						 
						
							2014-03-06 06:50:46 +00:00  
				
					
						
							
							
								 
						
							
								7549f0f9bf 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] Handle idiomatic do...while() with an uninteresting condition.  
							
							... 
							
							
							
							Sometimes do..while() is used to create a scope that can be left early.
In such cases, the unreachable 'while()' test is not usually interesting
unless it actually does something that is observable.
llvm-svn: 203051 
							
						 
						
							2014-03-06 01:09:45 +00:00  
				
					
						
							
							
								 
						
							
								1de2e14f2f 
								
							 
						 
						
							
							
								
								[-Wunreachable-code] Handle idiomatic do...while() with an uninteresting condition.  
							
							... 
							
							
							
							Sometimes do..while() is used to create a scope that can be left early.
In such cases, the unreachable 'while()' test is not usually interesting
unless it actually does something that is observable.
llvm-svn: 203036 
							
						 
						
							2014-03-06 00:17:44 +00:00