mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 08:26:08 +00:00

name mangling in the Itanium C++ ABI for lambda expressions is so dependent on context, we encode the number used to encode each lambda as part of the lambda closure type, and maintain this value within Sema. Note that there are a several pieces still missing: - We still get the linkage of lambda expressions wrong - We aren't properly numbering or mangling lambda expressions that occur in default function arguments or in data member initializers. - We aren't (de-)serializing the lambda numbering tables llvm-svn: 150982
31 lines
1.2 KiB
C++
31 lines
1.2 KiB
C++
//===--- LambdaMangleContext.cpp - Context for mangling lambdas -*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the LambdaMangleContext class, which keeps track of
|
|
// the Itanium C++ ABI mangling numbers for lambda expressions.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#include "clang/AST/LambdaMangleContext.h"
|
|
#include "clang/AST/DeclCXX.h"
|
|
|
|
using namespace clang;
|
|
|
|
unsigned LambdaMangleContext::getManglingNumber(CXXMethodDecl *CallOperator) {
|
|
const FunctionProtoType *Proto
|
|
= CallOperator->getType()->getAs<FunctionProtoType>();
|
|
ASTContext &Context = CallOperator->getASTContext();
|
|
|
|
QualType Key = Context.getFunctionType(Context.VoidTy,
|
|
Proto->arg_type_begin(),
|
|
Proto->getNumArgs(),
|
|
FunctionProtoType::ExtProtoInfo());
|
|
Key = Context.getCanonicalType(Key);
|
|
return ++ManglingNumbers[Key->castAs<FunctionProtoType>()];
|
|
}
|