Commit Graph

156143 Commits

Author SHA1 Message Date
Faisal Vali
fd5277c063 Implement a rudimentary form of generic lambdas.
Specifically, the following features are not included in this commit:
  - any sort of capturing within generic lambdas 
  - nested lambdas
  - conversion operator for captureless lambdas
  - ensuring all visitors are generic lambda aware


As an example of what compiles:

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.

Some implementation notes:

  - Add a new Declarator context => LambdaExprParameterContext to 
    clang::Declarator to allow the use of 'auto' in declaring generic
    lambda parameters
    
  - Augment AutoType's constructor (similar to how variadic 
    template-type-parameters ala TemplateTypeParmDecl are implemented) to 
    accept an IsParameterPack to encode a generic lambda parameter pack.
  
  - 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 Sema::ActOnLambdaAutoParameter may use it to create the 
    appropriate list of corresponding TemplateTypeParmDecl for each
    auto parameter identified within the generic lambda (also stored
    within the current LambdaScopeInfo).  Additionally, 
    a TemplateParameterList data-member was added to hold the invented
    TemplateParameterList AST node which will be much more useful
    once we teach TreeTransform how to transform generic lambdas.
    
  - 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.
    
  - Teach Sema::ActOnStartOfLambdaDefinition to set the
    return type of a lambda without a trailing return type
    to 'auto' in C++1y mode, and teach the return type
    deduction machinery in SemaStmt.cpp to process either
    C++11 and C++14 lambda's correctly depending on the flag.    

  - various tests were added - but much more will be needed.

A greatful thanks to all reviewers including Eli Friedman,  
James Dennett and the ever illuminating Richard Smith.  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!

llvm-svn: 188977
2013-08-22 01:49:11 +00:00
Hans Wennborg
da68efdb68 Remove llvm-lit from the cmake install target.
Since it's an llvm-internal tool, we shouldn't install it.

llvm-svn: 188976
2013-08-22 01:34:09 +00:00
Larisse Voufo
8122b22adc Add a constexpr functionality test for static data member templates.
llvm-svn: 188975
2013-08-22 01:05:27 +00:00
Larisse Voufo
72caf2bb6b Refactor for clarity and simplicity.
llvm-svn: 188974
2013-08-22 00:59:14 +00:00
Virgile Bello
6c46216daf Revert the change that was done to test commit access.
llvm-svn: 188973
2013-08-22 00:56:22 +00:00
Virgile Bello
d74d2882cd Test commit access.
llvm-svn: 188972
2013-08-22 00:54:36 +00:00
Bill Wendling
a08bb49c61 FileCheck-ize tests.
llvm-svn: 188971
2013-08-22 00:51:19 +00:00
Eli Friedman
a4ff59a7f8 Adjust for r188968.
llvm-svn: 188970
2013-08-22 00:48:18 +00:00
Larisse Voufo
4cda461ec4 Improve support for static data member templates. This revision still has at least one bug, as it does not respect the variable template specialization hierarchy well.
llvm-svn: 188969
2013-08-22 00:28:27 +00:00
Eli Friedman
5ba37d5282 Split isFromMainFile into two functions.
Basically, isInMainFile considers line markers, and isWrittenInMainFile
doesn't.  Distinguishing between the two is useful when dealing with
files which are preprocessed files or rewritten with -frewrite-includes
(so we don't, for example, print useless warnings).

llvm-svn: 188968
2013-08-22 00:27:10 +00:00
Jim Grosbach
6a7a727174 ARM: R9 is not safe to use for tcGPR.
Indirect tail-calls shouldn't use R9 for the branch destination, as
it's not reliably a call-clobbered register.

rdar://14793425

llvm-svn: 188967
2013-08-22 00:14:24 +00:00
Shankar Easwaran
b4fae7c3d0 remove trailing whitespace
llvm-svn: 188965
2013-08-22 00:08:25 +00:00
Howard Hinnant
56c917c57f XFAIL 3 tests on darwin 11-12. The tests have recently been modified, are correct, and pass with an updated libc++.dylib
llvm-svn: 188964
2013-08-22 00:04:22 +00:00
Shankar Easwaran
2032609327 [lld][Darwin] fixing an accidentally removed change
llvm-svn: 188963
2013-08-21 23:31:58 +00:00
David Blaikie
eaa49e252d DebugInfo: Require only the declaration of types only used as parameter and return types
llvm-svn: 188962
2013-08-21 23:23:07 +00:00
Shankar Easwaran
c4dba32d19 [lld] Fix win7 failure on adding InputGraph functionality
llvm-svn: 188961
2013-08-21 23:13:22 +00:00
Daniel Dunbar
019c5905df [tests] Update to use lit's now-integrated XFAIL handling.
llvm-svn: 188960
2013-08-21 23:06:32 +00:00
Eli Friedman
2d1611b2de Reduce sizeof(TemplateArgument) from 32 to 24.
No intended functionality change.

llvm-svn: 188959
2013-08-21 23:05:56 +00:00
Shankar Easwaran
e44104b001 add InputGraph functionality
llvm-svn: 188958
2013-08-21 22:57:10 +00:00
Michael Gottesman
0dc00645a2 Fixed typo.
llvm-svn: 188957
2013-08-21 22:53:54 +00:00
Michael Gottesman
0900993c3c Removed trailing whitespace.
llvm-svn: 188956
2013-08-21 22:53:29 +00:00
Andrew Kaylor
30787d1448 Fixing build errors from r188952
llvm-svn: 188955
2013-08-21 22:53:15 +00:00
Andrew Kaylor
53386dc836 Introducing a temporary work-around for a register mapping problem with 32-bit Linux targets.
llvm-svn: 188954
2013-08-21 22:46:02 +00:00
Tom Stellard
1b2c2d8414 SelectionDAG: Make sure stores are always added to the LegalizedNodes list
When truncated vector stores were being custom lowered in
VectorLegalizer::LegalizeOp(), the old (illegal) and new (legal) node pair
was not being added to LegalizedNodes list.  Instead of the legalized
result being passed to VectorLegalizer::TranslateLegalizeResult(),
the result was being passed back into VectorLegalizer::LegalizeOp(),
which ended up adding a (new, new) pair to the list instead.

This was causing an assertion failure when a custom lowered truncated
vector store was the last instruction a basic block and the VectorLegalizer
was unable to find it in the LegalizedNodes list when updating the
DAG root.

llvm-svn: 188953
2013-08-21 22:42:58 +00:00
Andrew Kaylor
a90d44061b Adding separate cfa alignment check for Darwin and non-Darwin targets in 32-bit ABI.
llvm-svn: 188952
2013-08-21 22:40:46 +00:00
Daniel Dunbar
39be0b4b4c [lit] Fix a couple lingering Py3 compat issues in ProgressBar.
llvm-svn: 188951
2013-08-21 22:26:47 +00:00
Daniel Dunbar
be791650f8 [tests] Update fma3 check to work with Py3.
llvm-svn: 188950
2013-08-21 22:26:44 +00:00
Daniel Dunbar
898d0d34a9 [lit] Lift XFAIL handling to core infrastructure.
llvm-svn: 188949
2013-08-21 22:26:42 +00:00
Daniel Dunbar
02ae385cac [lit] Allow formats to return lit.Test.Result instances directly.
llvm-svn: 188948
2013-08-21 22:26:40 +00:00
Daniel Dunbar
61821065a2 [lit] Factor out a separate Test.Result() object.
llvm-svn: 188947
2013-08-21 22:26:37 +00:00
Daniel Dunbar
cf5599cc11 [lit] Simplify --time-tests code.
llvm-svn: 188946
2013-08-21 22:26:34 +00:00
Daniel Dunbar
dd003d3332 [lit] Extract TestFormat base class, for future use.
llvm-svn: 188945
2013-08-21 22:26:26 +00:00
Manman Ren
a2e9a98b06 TBAA: remove !tbaa from testing cases when they are not needed.
This will make it easier to turn on struct-path aware TBAA since the metadata
format will change.

llvm-svn: 188944
2013-08-21 22:20:53 +00:00
Andrew Kaylor
27299c3494 Adding a document to describe the MCJIT execution engine implementation.
llvm-svn: 188943
2013-08-21 22:15:09 +00:00
Tom Stellard
f6d8023ca4 R600: Remove unnecessary casts
Spotted by Bill Wendling.

llvm-svn: 188942
2013-08-21 22:14:17 +00:00
Yunzhong Gao
05efa23294 No functionality change.
Replace "(255 & value)" with "(0xFF & value)" to improve clarity.

llvm-svn: 188941
2013-08-21 22:11:15 +00:00
Aaron Ballman
925b0e53f3 Updated the consumed analysis warnings to use a more standardized diagnostic.
Patch thanks to Christian Wailes!

llvm-svn: 188940
2013-08-21 22:07:20 +00:00
Rafael Espindola
eb26547177 Move -mfpmath handling to -cc1 and implement it for x86.
The original idea was to implement it all on the driver, but to do that the
driver needs to know the sse level and to do that it has to know the default
features of a cpu.

Benjamin Kramer pointed out that if one day we decide to implement support for
' __attribute__ ((__target__ ("arch=core2")))', then the frontend needs to
keep its knowledge of default features of a cpu.

To avoid duplicating which part of clang handles default cpu features,
it is probably better to handle -mfpmath in the frontend.

For ARM this patch is just a small improvement. Instead of a cpu list, we
check if neon is enabled, which allows us to reject things like

-mcpu=cortex-a9 -mfpu=vfp -mfpmath=neon

For X86, since LLVM doesn't support an independent ssefp feature, we just
make sure the selected -mfpmath matches the sse level.

llvm-svn: 188939
2013-08-21 21:59:03 +00:00
David Majnemer
3cba495abc Analysis: Add support for MS specific printf format specifiers
Summary: Adds support for %I, %I32 and %I64.

Reviewers: hans, jordan_rose, rnk, majnemer

Reviewed By: majnemer

CC: cfe-commits, cdavis5x

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

llvm-svn: 188937
2013-08-21 21:54:46 +00:00
Juergen Ributzka
3db39dc1ae Teach BaseIndexOffset::match to identify base pointers in loops.
The small utility function that pattern matches Base + Index +
Offset patterns for loads and stores fails to recognize the base
pointer for loads/stores from/into an array at offset 0 inside a
loop. As a result DAGCombiner::MergeConsecutiveStores was not able
to merge all stores.

This commit fixes the issue by adding an additional pattern match
and also a test case.

Reviewer: Nadav
llvm-svn: 188936
2013-08-21 21:53:38 +00:00
David Majnemer
d6d1a9859e ADT/Triple: Helper to determine if we are targeting the Windows CRT
Summary:
This support will be utilized in things like clang to help check printf
format specifiers that are only valid when using the VSCRT.

Reviewers: rnk, asl, chandlerc

Reviewed By: chandlerc

CC: llvm-commits

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

llvm-svn: 188935
2013-08-21 21:53:33 +00:00
Aaron Ballman
317912f5d6 Removed unnecessary asserts.
Patch thanks to Christian Wailes!

llvm-svn: 188934
2013-08-21 21:38:46 +00:00
David Blaikie
e2760b75e9 Basic unit tests for PointerUnion
llvm-svn: 188933
2013-08-21 21:30:23 +00:00
Bill Wendling
570d3020e3 Reorder headers according to lint.
llvm-svn: 188932
2013-08-21 21:14:19 +00:00
Manman Ren
2470d87adc TBAA: add testing case to check typedef can alias.
llvm-svn: 188931
2013-08-21 21:00:10 +00:00
Manman Ren
879ce8841d Don't use mangleCXXRTTIName in TBAA for C code.
With r185721, calling mangleCXXRTTIName on C code will cause crashes.
This commit fixes crashes on C testing cases when turning on struct-path TBAA.

For C code, we simply use the Decl name without the context. This can
cause two different structs having the same name, and may cause inaccurate but
conservative alias results.

llvm-svn: 188930
2013-08-21 20:58:45 +00:00
Manman Ren
3380ee5e60 Update testing case to use FileCheck instead of grep.
llvm-svn: 188929
2013-08-21 20:53:05 +00:00
Bill Wendling
0cb8c0b1c2 Remove use of forbidden 'iostream' header.
Also obsessively reorder the headers to be in something closer to alphabetical order.

llvm-svn: 188928
2013-08-21 20:36:42 +00:00
Bill Wendling
4f20f51090 Add missing ']'.
llvm-svn: 188927
2013-08-21 20:12:27 +00:00
Matt Arsenault
745101d666 Teach InstCombine about address spaces
llvm-svn: 188926
2013-08-21 19:53:10 +00:00