Ignore some -f options that are supported by gcc.

It is possible that we should say some of these are unsupported, but this is
not any worse than the old behavior of ignoring all unknown -f options.

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191433 91177308-0d34-0410-b5e6-96231b3b80d8
Ignore unknown -fno-builtin-*.

This matches gcc's behavior.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191434 91177308-0d34-0410-b5e6-96231b3b80d8
Remove -fbuiltin-strcat and -fbuiltin-strcpy.

These options don't exist in gcc and clang was not handling them.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191435 91177308-0d34-0410-b5e6-96231b3b80d8
Mark an impossible path as unreachable to pacify GCC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191436 91177308-0d34-0410-b5e6-96231b3b80d8
Remove fno_builtin_strcat and fno_builtin_strcpy.

They are already handled by the generic fno_bultin_, which also
avoids unused warnings.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191437 91177308-0d34-0410-b5e6-96231b3b80d8
[driver] Ignore -fno-var-tracking; it's a GCC option we don't support.

-fvar-tracking (which IIUC is on by default in GCC) will still generate
an error.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191439 91177308-0d34-0410-b5e6-96231b3b80d8
clang-cl: Add /FI (forced include) as an alias for -include

Patch by Jeff Muizelaar, with added test case.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191442 91177308-0d34-0410-b5e6-96231b3b80d8
Per updates to D3781, allow underscore under ' in a pp-number, and allow ' in a #line directive.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191443 91177308-0d34-0410-b5e6-96231b3b80d8
Add macro test from N3781.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191444 91177308-0d34-0410-b5e6-96231b3b80d8
Teach typo correction to look inside of classes like it does namespaces.

Unlike with namespaces, searching inside of classes requires also
checking the access to correction candidates (i.e. don't suggest a
correction to a private class member for a correction occurring outside
that class and its methods or friends).

Included is a small (one line) fix for a bug, that was uncovered while
cleaning up the unit tests, where the decls from a TypoCorrection candidate
were preserved in new TypoCorrection candidates that are derived (copied)
from the old TypoCorrection--notably when creating a new candidate by
changing the NestedNameSpecifier associated with the base idenitifer.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191449 91177308-0d34-0410-b5e6-96231b3b80d8
Fix a bug in the typo correction replacement location.

I noticed the wrong text was being replaced with the correction while
working on expanding the "namespace-aware" typo correction to include
classes.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191450 91177308-0d34-0410-b5e6-96231b3b80d8
Implement a rudimentary form of generic lambdas.

Specifically, the following features are not included in this commit:
  - any sort of capturing within generic lambdas 
  - generic lambdas within template functions and nested 
    within other generic lambdas
  - conversion operator for captureless lambdas
  - ensuring all visitors are generic lambda aware
  (Although I have gotten some useful feedback on my patches of the above and will be incorporating that as I submit those patches for commit)

As an example of what compiles through this commit:

template <class F1, class F2>
struct overload : F1, F2 {
    using F1::operator();
    using F2::operator();
    overload(F1 f1, F2 f2) : F1(f1), F2(f2) { }
  };

  auto Recursive = [](auto Self, auto h, auto ... rest) {
    return 1 + Self(Self, rest...);
  };
  auto Base = [](auto Self, auto h) {
      return 1;
  };
  overload<decltype(Base), decltype(Recursive)> O(Base, Recursive);
  int num_params =  O(O, 5, 3, "abc", 3.14, 'a');

Please see attached tests for more examples.

This patch has been reviewed by Doug and Richard.  Minor changes (non-functionality affecting) have been made since both of them formally looked at it, but the changes involve removal of supernumerary return type deduction changes (since they are now redundant, with richard having committed a recent patch to address return type deduction for C++11 lambdas using C++14 semantics). 



Some implementation notes:

  - Add a new Declarator context => LambdaExprParameterContext to 
    clang::Declarator to allow the use of 'auto' in declaring generic
    lambda parameters
      
  - Add various helpers to CXXRecordDecl to facilitate identifying
    and querying a closure class
  
  - LambdaScopeInfo (which maintains the current lambda's Sema state)
    was augmented to house the current depth of the template being
    parsed (id est the Parser calls Sema::RecordParsingTemplateParameterDepth)
    so that SemaType.cpp::ConvertDeclSpecToType may use it to immediately 
    generate a template-parameter-type when 'auto' is parsed in a generic
    lambda parameter context.  (i.e we do NOT use AutoType deduced to 
    a template parameter type - Richard seemed ok with this approach).  
    We encode that this template type was generated from an auto by simply
    adding $auto to the name which can be used for better diagnostics if needed.

  - SemaLambda.h was added to hold some common lambda utility
    functions (this file is likely to grow ...)
    
  - Teach Sema::ActOnStartOfFunctionDef to check whether it
    is being called to instantiate a generic lambda's call
    operator, and if so, push an appropriately prepared
    LambdaScopeInfo object on the stack.
    
  - various tests were added - but much more will be needed.

There is obviously more work to be done, and both Richard (weakly) and Doug (strongly) 
have requested that LambdaExpr be removed form the CXXRecordDecl LambdaDefinitionaData
in a future patch which is forthcoming.

A greatful thanks to all reviewers including Eli Friedman, James Dennett, 
and especially the two gracious wizards (Richard Smith and Doug Gregor) 
who spent hours providing feedback (in person in Chicago and on the mailing lists).  
And yet I am certain that I have allowed unidentified bugs to creep in; bugs, that I will do my best to slay, once identified!

Thanks!


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