Implement name mangling for lambda expressions that occur within the
default arguments of function parameters. This simple-sounding task is complicated greatly by two issues: (1) Default arguments aren't actually a real context, so we need to maintain extra state within lambda expressions to track when a lambda was actually in a default argument. (2) At the time that we parse a default argument, the FunctionDecl doesn't exist yet, so lambda closure types end up in the enclosing context. It's not clear that we ever want to change that, so instead we introduce the notion of the "effective" context of a declaration for the purposes of name mangling. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151011 91177308-0d34-0410-b5e6-96231b3b80d8
Showing
- include/clang/AST/ASTContext.h 2 additions, 2 deletionsinclude/clang/AST/ASTContext.h
- include/clang/AST/DeclCXX.h 25 additions, 4 deletionsinclude/clang/AST/DeclCXX.h
- include/clang/AST/ExprCXX.h 4 additions, 2 deletionsinclude/clang/AST/ExprCXX.h
- include/clang/Sema/Sema.h 34 additions, 5 deletionsinclude/clang/Sema/Sema.h
- lib/AST/ExprCXX.cpp 6 additions, 3 deletionslib/AST/ExprCXX.cpp
- lib/AST/ItaniumMangle.cpp 110 additions, 55 deletionslib/AST/ItaniumMangle.cpp
- lib/Parse/ParseCXXInlineMethods.cpp 4 additions, 2 deletionslib/Parse/ParseCXXInlineMethods.cpp
- lib/Parse/ParseDecl.cpp 2 additions, 1 deletionlib/Parse/ParseDecl.cpp
- lib/Sema/Sema.cpp 1 addition, 1 deletionlib/Sema/Sema.cpp
- lib/Sema/SemaExpr.cpp 4 additions, 2 deletionslib/Sema/SemaExpr.cpp
- lib/Sema/SemaLambda.cpp 30 additions, 3 deletionslib/Sema/SemaLambda.cpp
- lib/Sema/TreeTransform.h 5 additions, 1 deletionlib/Sema/TreeTransform.h
- lib/Serialization/ASTReaderDecl.cpp 1 addition, 0 deletionslib/Serialization/ASTReaderDecl.cpp
- lib/Serialization/ASTWriter.cpp 1 addition, 0 deletionslib/Serialization/ASTWriter.cpp
- test/CodeGenCXX/mangle-lambdas.cpp 56 additions, 1 deletiontest/CodeGenCXX/mangle-lambdas.cpp
Loading
Please register or sign in to comment