Skip to content

Commit 70543a8

Browse files
petrhosekmahesh-attarde
authored andcommitted
Revert "[clang][DebugInfo][NFC] Simplify CollectRecordLambdaFields" (llvm#160932)
Reverts llvm#160690
1 parent c573eeb commit 70543a8

File tree

2 files changed

+24
-39
lines changed

2 files changed

+24
-39
lines changed

clang/lib/CodeGen/CGDebugInfo.cpp

Lines changed: 24 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
#include "clang/AST/DeclObjC.h"
2727
#include "clang/AST/DeclTemplate.h"
2828
#include "clang/AST/Expr.h"
29-
#include "clang/AST/LambdaCapture.h"
3029
#include "clang/AST/RecordLayout.h"
3130
#include "clang/AST/RecursiveASTVisitor.h"
3231
#include "clang/AST/VTableBuilder.h"
@@ -1904,59 +1903,46 @@ CGDebugInfo::createInlinedSubprogram(StringRef FuncName,
19041903
return SP;
19051904
}
19061905

1907-
llvm::StringRef
1908-
CGDebugInfo::GetLambdaCaptureName(const LambdaCapture &Capture) {
1909-
if (Capture.capturesThis())
1910-
return CGM.getCodeGenOpts().EmitCodeView ? "__this" : "this";
1911-
1912-
assert(Capture.capturesVariable());
1913-
1914-
const ValueDecl *CaptureDecl = Capture.getCapturedVar();
1915-
assert(CaptureDecl && "Expected valid decl for captured variable.");
1916-
1917-
return CaptureDecl->getName();
1918-
}
1919-
19201906
void CGDebugInfo::CollectRecordLambdaFields(
19211907
const CXXRecordDecl *CXXDecl, SmallVectorImpl<llvm::Metadata *> &elements,
19221908
llvm::DIType *RecordTy) {
19231909
// For C++11 Lambdas a Field will be the same as a Capture, but the Capture
19241910
// has the name and the location of the variable so we should iterate over
19251911
// both concurrently.
1912+
const ASTRecordLayout &layout = CGM.getContext().getASTRecordLayout(CXXDecl);
19261913
RecordDecl::field_iterator Field = CXXDecl->field_begin();
19271914
unsigned fieldno = 0;
19281915
for (CXXRecordDecl::capture_const_iterator I = CXXDecl->captures_begin(),
19291916
E = CXXDecl->captures_end();
19301917
I != E; ++I, ++Field, ++fieldno) {
1931-
const LambdaCapture &Capture = *I;
1932-
const uint64_t FieldOffset =
1933-
CGM.getContext().getASTRecordLayout(CXXDecl).getFieldOffset(fieldno);
1934-
1935-
assert(!Field->isBitField() && "lambdas don't have bitfield members!");
1936-
1937-
SourceLocation Loc;
1938-
uint32_t Align = 0;
1939-
1940-
if (Capture.capturesThis()) {
1918+
const LambdaCapture &C = *I;
1919+
if (C.capturesVariable()) {
1920+
SourceLocation Loc = C.getLocation();
1921+
assert(!Field->isBitField() && "lambdas don't have bitfield members!");
1922+
ValueDecl *V = C.getCapturedVar();
1923+
StringRef VName = V->getName();
1924+
llvm::DIFile *VUnit = getOrCreateFile(Loc);
1925+
auto Align = getDeclAlignIfRequired(V, CGM.getContext());
1926+
llvm::DIType *FieldType = createFieldType(
1927+
VName, Field->getType(), Loc, Field->getAccess(),
1928+
layout.getFieldOffset(fieldno), Align, VUnit, RecordTy, CXXDecl);
1929+
elements.push_back(FieldType);
1930+
} else if (C.capturesThis()) {
19411931
// TODO: Need to handle 'this' in some way by probably renaming the
19421932
// this of the lambda class and having a field member of 'this' or
19431933
// by using AT_object_pointer for the function and having that be
19441934
// used as 'this' for semantic references.
1945-
Loc = Field->getLocation();
1946-
} else {
1947-
Loc = Capture.getLocation();
1948-
1949-
const ValueDecl *CaptureDecl = Capture.getCapturedVar();
1950-
assert(CaptureDecl && "Expected valid decl for captured variable.");
1951-
1952-
Align = getDeclAlignIfRequired(CaptureDecl, CGM.getContext());
1935+
FieldDecl *f = *Field;
1936+
llvm::DIFile *VUnit = getOrCreateFile(f->getLocation());
1937+
QualType type = f->getType();
1938+
StringRef ThisName =
1939+
CGM.getCodeGenOpts().EmitCodeView ? "__this" : "this";
1940+
llvm::DIType *fieldType = createFieldType(
1941+
ThisName, type, f->getLocation(), f->getAccess(),
1942+
layout.getFieldOffset(fieldno), VUnit, RecordTy, CXXDecl);
1943+
1944+
elements.push_back(fieldType);
19531945
}
1954-
1955-
llvm::DIFile *VUnit = getOrCreateFile(Loc);
1956-
1957-
elements.push_back(createFieldType(
1958-
GetLambdaCaptureName(Capture), Field->getType(), Loc,
1959-
Field->getAccess(), FieldOffset, Align, VUnit, RecordTy, CXXDecl));
19601946
}
19611947
}
19621948

clang/lib/CodeGen/CGDebugInfo.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,6 @@ class CGDebugInfo {
397397
void CollectRecordFields(const RecordDecl *Decl, llvm::DIFile *F,
398398
SmallVectorImpl<llvm::Metadata *> &E,
399399
llvm::DICompositeType *RecordTy);
400-
llvm::StringRef GetLambdaCaptureName(const LambdaCapture &Capture);
401400

402401
/// If the C++ class has vtable info then insert appropriate debug
403402
/// info entry in EltTys vector.

0 commit comments

Comments
 (0)