Sema: Properly support Microsoft-mode template arguments

Summary:
There were two things known to be wrong with our implementation of MSVC
mode template arguments:

- We didn't properly handle __uuidof/CXXUuidofExpr and skipped all type
  checking completely.
- We didn't allow for MSVC's extension of allowing certain constant
  "foldable" expressions from showing up in template arguments.
  They allow various casts dereference and address-of operations.
  We can make it more general as we find further peculiarities but this
  is the known extent.

Reviewers: rsmith, doug.gregor, rjmccall

Reviewed By: doug.gregor

CC: cfe-commits, rnk

Differential Revision: http://llvm-reviews.chandlerc.com/D1444

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189087 91177308-0d34-0410-b5e6-96231b3b80d8
arc commit didn't add this because it wasn't in the patch...


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189088 91177308-0d34-0410-b5e6-96231b3b80d8
[analyzer] Refactor conditional expression evaluating code

Summary:
Instead of digging through the ExplodedGraph, to figure out which edge brought
us here, I compute the value of conditional expression by looking at the
sub-expression values.

To do this, I needed to change the liveness algorithm a bit -- now, the full
conditional expression also depends on all atomic sub-expressions, not only the
outermost ones.

Reviewers: jordan_rose

CC: cfe-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D1340

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189090 91177308-0d34-0410-b5e6-96231b3b80d8
correct test RUN parameters

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189093 91177308-0d34-0410-b5e6-96231b3b80d8
clang-format: Handle trailing commas in column layout of braced list.

Before, this was causing errors.

Also exit early in breakProtrudingToken() (before the expensive call to
SourceManager::getSpellingColumnNumber()). This makes formatting huge
(100k+-item) braced lists possible.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189094 91177308-0d34-0410-b5e6-96231b3b80d8
clang-format: Fix corner case for string splitting ..

.. in conjunction with Style.AlwaysBreakBeforeMultilineStrings. Also,
simplify the implementation by handling newly split strings and already
split strings by the same code.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189102 91177308-0d34-0410-b5e6-96231b3b80d8
clang-format: Fix indentation relative to unary expressions.

This should be done, only if we are still in the unary expression's
scope.

Before:
  bool aaaa = !aaaaaaaa(  // break
                   aaaaaaaaaaa);
  *aaaaaa = aaaaaaa( // break
       aaaaaaaaaaaaaaaa);

After:
  bool aaaa = !aaaaaaaa(  // break
                   aaaaaaaaaaa); // <- (unchanged)
  *aaaaaa = aaaaaaa( // break
      aaaaaaaaaaaaaaaa); // <- (no longer indented relative to "*")

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189108 91177308-0d34-0410-b5e6-96231b3b80d8
Respect -Wnewline-eof even in C++11 mode.

If the user has requested this warning, we should emit it, even if it's not
an extension in the current language mode. However, being an extension is
more important, so prefer the pedantic warning or the pedantic-compatibility
warning if those are enabled.

<rdar://problem/12922063>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189110 91177308-0d34-0410-b5e6-96231b3b80d8
Use pop_back_val() instead of both back() and pop_back().
No functionality change intended.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189112 91177308-0d34-0410-b5e6-96231b3b80d8
Revise -Wnewline-eof test per feedback from Dmitri.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189113 91177308-0d34-0410-b5e6-96231b3b80d8
Use CharInfo.h routines in TextComment::isWhitespaceNoCache


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189115 91177308-0d34-0410-b5e6-96231b3b80d8
Fix indentation


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189119 91177308-0d34-0410-b5e6-96231b3b80d8
Comment parsing: fix a bug where a line with whitespace between two paragraphs
would cause us to concatenate these paragraphs into a single one.

The no-op whitespace churn in test/Index test happened because these tests
don't use the correct approach for testing and are more strict than required
for they are testing.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189126 91177308-0d34-0410-b5e6-96231b3b80d8
CMake: Don't look for llvm-tblgen when building outside LLVM tree

Previously, the CMake build would look for llvm-tblgen to determine
if a directory is an LLVM build or install directory. Since we don't
want to include llvm-tblgen in the install, look for llvm-config instead,
and use that to find llvm-tblgen.

Differential Revision: http://llvm-reviews.chandlerc.com/D1483

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189127 91177308-0d34-0410-b5e6-96231b3b80d8
Rename CMake variable; this fell out of r189127 somehow.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189129 91177308-0d34-0410-b5e6-96231b3b80d8
Consumed analysis: change class name in test cases.

The name of a class used in the testing files was updated to actually
be descriptive.  Patch by chris.wailes@gmail.com.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189132 91177308-0d34-0410-b5e6-96231b3b80d8
Update now that llvm uses the same feature names as the driver.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189142 91177308-0d34-0410-b5e6-96231b3b80d8
Driver::IsUsingLTO() no longer return true when seeing -emit-llvm.

One step toward differentiating following two commands:
   clang -O3 -flto a.c -c, and 
   clang -O3 -emit-llvm a.c

Thanks many awesome folks for clarifying things. 


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189148 91177308-0d34-0410-b5e6-96231b3b80d8
Don't imply -flto with -O4.

We now saturate at -O3.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189149 91177308-0d34-0410-b5e6-96231b3b80d8
Add note about following two commands are no longer equivalent.
 - "clang -O3 -flto a.c -c", and 
 - "clang -emit-llvm a.c -c" 

Thank Rafael for tips.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189150 91177308-0d34-0410-b5e6-96231b3b80d8