Skip to content

Commit

Permalink
Revert "[DebugInfo][clang][DWARF5]: Added support for debuginfo gener…
Browse files Browse the repository at this point in the history
…ation for defaulted parameters"

The Bitcode/DITemplateParameter-5.0.ll test is failing:

FAIL: LLVM :: Bitcode/DITemplateParameter-5.0.ll (5894 of 36324)
******************** TEST 'LLVM :: Bitcode/DITemplateParameter-5.0.ll' FAILED ********************
Script:
--
: 'RUN: at line 1';   /usr/local/google/home/thakis/src/llvm-project/out/gn/bin/llvm-dis -o - /usr/local/google/home/thakis/src/llvm-project/llvm/test/Bitcode/DITemplateParameter-5.0.ll.bc | /usr/local/google/home/thakis/src/llvm-project/out/gn/bin/FileCheck /usr/local/google/home/thakis/src/llvm-project/llvm/test/Bitcode/DITemplateParameter-5.0.ll
--
Exit Code: 2

Command Output (stderr):
--

It looks like the Bitcode/DITemplateParameter-5.0.ll.bc file was never checked in.

This reverts commit c2b437d.
  • Loading branch information
zmodem committed Mar 2, 2020
1 parent c2b437d commit 802b22b
Show file tree
Hide file tree
Showing 13 changed files with 94 additions and 296 deletions.
32 changes: 7 additions & 25 deletions clang/lib/CodeGen/CGDebugInfo.cpp
Expand Up @@ -1787,36 +1787,18 @@ CGDebugInfo::CollectTemplateParams(const TemplateParameterList *TPList,
for (unsigned i = 0, e = TAList.size(); i != e; ++i) {
const TemplateArgument &TA = TAList[i];
StringRef Name;
bool defaultParameter = false;
if (TPList)
Name = TPList->getParam(i)->getName();
switch (TA.getKind()) {
case TemplateArgument::Type: {
llvm::DIType *TTy = getOrCreateType(TA.getAsType(), Unit);

if (TPList)
if (auto *templateType =
dyn_cast_or_null<TemplateTypeParmDecl>(TPList->getParam(i)))
if (templateType->hasDefaultArgument())
defaultParameter =
templateType->getDefaultArgument() == TA.getAsType();

TemplateParams.push_back(DBuilder.createTemplateTypeParameter(
TheCU, Name, TTy, defaultParameter));

TemplateParams.push_back(
DBuilder.createTemplateTypeParameter(TheCU, Name, TTy));
} break;
case TemplateArgument::Integral: {
llvm::DIType *TTy = getOrCreateType(TA.getIntegralType(), Unit);
if (TPList)
if (auto *templateType =
dyn_cast_or_null<NonTypeTemplateParmDecl>(TPList->getParam(i)))
if (templateType->hasDefaultArgument())
defaultParameter =
templateType->getDefaultArgument()->EvaluateKnownConstInt(
CGM.getContext()) == TA.getAsIntegral();

TemplateParams.push_back(DBuilder.createTemplateValueParameter(
TheCU, Name, TTy, defaultParameter,
TheCU, Name, TTy,
llvm::ConstantInt::get(CGM.getLLVMContext(), TA.getAsIntegral())));
} break;
case TemplateArgument::Declaration: {
Expand Down Expand Up @@ -1855,7 +1837,7 @@ CGDebugInfo::CollectTemplateParams(const TemplateParameterList *TPList,
V = V->stripPointerCasts();
}
TemplateParams.push_back(DBuilder.createTemplateValueParameter(
TheCU, Name, TTy, defaultParameter, cast_or_null<llvm::Constant>(V)));
TheCU, Name, TTy, cast_or_null<llvm::Constant>(V)));
} break;
case TemplateArgument::NullPtr: {
QualType T = TA.getNullPtrType();
Expand All @@ -1873,8 +1855,8 @@ CGDebugInfo::CollectTemplateParams(const TemplateParameterList *TPList,
V = CGM.getCXXABI().EmitNullMemberPointer(MPT);
if (!V)
V = llvm::ConstantInt::get(CGM.Int8Ty, 0);
TemplateParams.push_back(DBuilder.createTemplateValueParameter(
TheCU, Name, TTy, defaultParameter, V));
TemplateParams.push_back(
DBuilder.createTemplateValueParameter(TheCU, Name, TTy, V));
} break;
case TemplateArgument::Template:
TemplateParams.push_back(DBuilder.createTemplateTemplateParameter(
Expand All @@ -1895,7 +1877,7 @@ CGDebugInfo::CollectTemplateParams(const TemplateParameterList *TPList,
assert(V && "Expression in template argument isn't constant");
llvm::DIType *TTy = getOrCreateType(T, Unit);
TemplateParams.push_back(DBuilder.createTemplateValueParameter(
TheCU, Name, TTy, defaultParameter, V->stripPointerCasts()));
TheCU, Name, TTy, V->stripPointerCasts()));
} break;
// And the following should never occur:
case TemplateArgument::TemplateExpansion:
Expand Down
15 changes: 6 additions & 9 deletions llvm/include/llvm/IR/DIBuilder.h
Expand Up @@ -443,22 +443,19 @@ namespace llvm {
/// \param Scope Scope in which this type is defined.
/// \param Name Type parameter name.
/// \param Ty Parameter type.
/// \param IsDefault Parameter is default or not
DITemplateTypeParameter *createTemplateTypeParameter(DIScope *Scope,
StringRef Name,
DIType *Ty,
bool IsDefault);
DITemplateTypeParameter *
createTemplateTypeParameter(DIScope *Scope, StringRef Name, DIType *Ty);

/// Create debugging information for template
/// value parameter.
/// \param Scope Scope in which this type is defined.
/// \param Name Value parameter name.
/// \param Ty Parameter type.
/// \param IsDefault Parameter is default or not
/// \param Val Constant parameter value.
DITemplateValueParameter *
createTemplateValueParameter(DIScope *Scope, StringRef Name, DIType *Ty,
bool IsDefault, Constant *Val);
DITemplateValueParameter *createTemplateValueParameter(DIScope *Scope,
StringRef Name,
DIType *Ty,
Constant *Val);

/// Create debugging information for a template template parameter.
/// \param Scope Scope in which this type is defined.
Expand Down
60 changes: 24 additions & 36 deletions llvm/include/llvm/IR/DebugInfoMetadata.h
Expand Up @@ -2131,11 +2131,9 @@ class DIModule : public DIScope {
/// Base class for template parameters.
class DITemplateParameter : public DINode {
protected:
bool IsDefault;

DITemplateParameter(LLVMContext &Context, unsigned ID, StorageType Storage,
unsigned Tag, bool IsDefault, ArrayRef<Metadata *> Ops)
: DINode(Context, ID, Storage, Tag, Ops), IsDefault(IsDefault) {}
unsigned Tag, ArrayRef<Metadata *> Ops)
: DINode(Context, ID, Storage, Tag, Ops) {}
~DITemplateParameter() = default;

public:
Expand All @@ -2144,7 +2142,6 @@ class DITemplateParameter : public DINode {

MDString *getRawName() const { return getOperandAs<MDString>(0); }
Metadata *getRawType() const { return getOperand(1); }
bool isDefault() const { return IsDefault; }

static bool classof(const Metadata *MD) {
return MD->getMetadataID() == DITemplateTypeParameterKind ||
Expand All @@ -2157,35 +2154,30 @@ class DITemplateTypeParameter : public DITemplateParameter {
friend class MDNode;

DITemplateTypeParameter(LLVMContext &Context, StorageType Storage,
bool IsDefault, ArrayRef<Metadata *> Ops)
ArrayRef<Metadata *> Ops)
: DITemplateParameter(Context, DITemplateTypeParameterKind, Storage,
dwarf::DW_TAG_template_type_parameter, IsDefault,
Ops) {}
dwarf::DW_TAG_template_type_parameter, Ops) {}
~DITemplateTypeParameter() = default;

static DITemplateTypeParameter *getImpl(LLVMContext &Context, StringRef Name,
DIType *Type, bool IsDefault,
StorageType Storage,
DIType *Type, StorageType Storage,
bool ShouldCreate = true) {
return getImpl(Context, getCanonicalMDString(Context, Name), Type,
IsDefault, Storage, ShouldCreate);
return getImpl(Context, getCanonicalMDString(Context, Name), Type, Storage,
ShouldCreate);
}
static DITemplateTypeParameter *getImpl(LLVMContext &Context, MDString *Name,
Metadata *Type, bool IsDefault,
StorageType Storage,
Metadata *Type, StorageType Storage,
bool ShouldCreate = true);

TempDITemplateTypeParameter cloneImpl() const {
return getTemporary(getContext(), getName(), getType(), isDefault());
return getTemporary(getContext(), getName(), getType());
}

public:
DEFINE_MDNODE_GET(DITemplateTypeParameter,
(StringRef Name, DIType *Type, bool IsDefault),
(Name, Type, IsDefault))
DEFINE_MDNODE_GET(DITemplateTypeParameter,
(MDString *Name, Metadata *Type, bool IsDefault),
(Name, Type, IsDefault))
DEFINE_MDNODE_GET(DITemplateTypeParameter, (StringRef Name, DIType *Type),
(Name, Type))
DEFINE_MDNODE_GET(DITemplateTypeParameter, (MDString * Name, Metadata *Type),
(Name, Type))

TempDITemplateTypeParameter clone() const { return cloneImpl(); }

Expand All @@ -2199,40 +2191,36 @@ class DITemplateValueParameter : public DITemplateParameter {
friend class MDNode;

DITemplateValueParameter(LLVMContext &Context, StorageType Storage,
unsigned Tag, bool IsDefault,
ArrayRef<Metadata *> Ops)
unsigned Tag, ArrayRef<Metadata *> Ops)
: DITemplateParameter(Context, DITemplateValueParameterKind, Storage, Tag,
IsDefault, Ops) {}
Ops) {}
~DITemplateValueParameter() = default;

static DITemplateValueParameter *getImpl(LLVMContext &Context, unsigned Tag,
StringRef Name, DIType *Type,
bool IsDefault, Metadata *Value,
StorageType Storage,
Metadata *Value, StorageType Storage,
bool ShouldCreate = true) {
return getImpl(Context, Tag, getCanonicalMDString(Context, Name), Type,
IsDefault, Value, Storage, ShouldCreate);
Value, Storage, ShouldCreate);
}
static DITemplateValueParameter *getImpl(LLVMContext &Context, unsigned Tag,
MDString *Name, Metadata *Type,
bool IsDefault, Metadata *Value,
StorageType Storage,
Metadata *Value, StorageType Storage,
bool ShouldCreate = true);

TempDITemplateValueParameter cloneImpl() const {
return getTemporary(getContext(), getTag(), getName(), getType(),
isDefault(), getValue());
getValue());
}

public:
DEFINE_MDNODE_GET(DITemplateValueParameter,
(unsigned Tag, StringRef Name, DIType *Type, bool IsDefault,
(unsigned Tag, StringRef Name, DIType *Type,
Metadata *Value),
(Tag, Name, Type, IsDefault, Value))
DEFINE_MDNODE_GET(DITemplateValueParameter,
(unsigned Tag, MDString *Name, Metadata *Type,
bool IsDefault, Metadata *Value),
(Tag, Name, Type, IsDefault, Value))
(Tag, Name, Type, Value))
DEFINE_MDNODE_GET(DITemplateValueParameter, (unsigned Tag, MDString *Name,
Metadata *Type, Metadata *Value),
(Tag, Name, Type, Value))

TempDITemplateValueParameter clone() const { return cloneImpl(); }

Expand Down
19 changes: 7 additions & 12 deletions llvm/lib/AsmParser/LLParser.cpp
Expand Up @@ -4842,38 +4842,33 @@ bool LLParser::ParseDIModule(MDNode *&Result, bool IsDistinct) {
}

/// ParseDITemplateTypeParameter:
/// ::= !DITemplateTypeParameter(name: "Ty", type: !1, defaulted: false)
/// ::= !DITemplateTypeParameter(name: "Ty", type: !1)
bool LLParser::ParseDITemplateTypeParameter(MDNode *&Result, bool IsDistinct) {
#define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \
OPTIONAL(name, MDStringField, ); \
REQUIRED(type, MDField, ); \
OPTIONAL(defaulted, MDBoolField, );
REQUIRED(type, MDField, );
PARSE_MD_FIELDS();
#undef VISIT_MD_FIELDS

Result = GET_OR_DISTINCT(DITemplateTypeParameter,
(Context, name.Val, type.Val, defaulted.Val));
Result =
GET_OR_DISTINCT(DITemplateTypeParameter, (Context, name.Val, type.Val));
return false;
}

/// ParseDITemplateValueParameter:
/// ::= !DITemplateValueParameter(tag: DW_TAG_template_value_parameter,
/// name: "V", type: !1, defaulted: false,
/// value: i32 7)
/// name: "V", type: !1, value: i32 7)
bool LLParser::ParseDITemplateValueParameter(MDNode *&Result, bool IsDistinct) {
#define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \
OPTIONAL(tag, DwarfTagField, (dwarf::DW_TAG_template_value_parameter)); \
OPTIONAL(name, MDStringField, ); \
OPTIONAL(type, MDField, ); \
OPTIONAL(defaulted, MDBoolField, ); \
REQUIRED(value, MDField, );

PARSE_MD_FIELDS();
#undef VISIT_MD_FIELDS

Result = GET_OR_DISTINCT(
DITemplateValueParameter,
(Context, tag.Val, name.Val, type.Val, defaulted.Val, value.Val));
Result = GET_OR_DISTINCT(DITemplateValueParameter,
(Context, tag.Val, name.Val, type.Val, value.Val));
return false;
}

Expand Down
27 changes: 10 additions & 17 deletions llvm/lib/Bitcode/Reader/MetadataLoader.cpp
Expand Up @@ -1668,34 +1668,27 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
break;
}
case bitc::METADATA_TEMPLATE_TYPE: {
if (Record.size() < 3 || Record.size() > 4)
if (Record.size() != 3)
return error("Invalid record");

IsDistinct = Record[0];
MetadataList.assignValue(
GET_OR_DISTINCT(DITemplateTypeParameter,
(Context, getMDString(Record[1]),
getDITypeRefOrNull(Record[2]),
(Record.size() == 4) ? getMDOrNull(Record[3])
: getMDOrNull(false))),
NextMetadataNo);
MetadataList.assignValue(GET_OR_DISTINCT(DITemplateTypeParameter,
(Context, getMDString(Record[1]),
getDITypeRefOrNull(Record[2]))),
NextMetadataNo);
NextMetadataNo++;
break;
}
case bitc::METADATA_TEMPLATE_VALUE: {
if (Record.size() < 5 || Record.size() > 6)
if (Record.size() != 5)
return error("Invalid record");

IsDistinct = Record[0];

MetadataList.assignValue(
GET_OR_DISTINCT(
DITemplateValueParameter,
(Context, Record[1], getMDString(Record[2]),
getDITypeRefOrNull(Record[3]),
(Record.size() == 6) ? getMDOrNull(Record[4]) : getMDOrNull(false),
(Record.size() == 6) ? getMDOrNull(Record[5])
: getMDOrNull(Record[4]))),
GET_OR_DISTINCT(DITemplateValueParameter,
(Context, Record[1], getMDString(Record[2]),
getDITypeRefOrNull(Record[3]),
getMDOrNull(Record[4]))),
NextMetadataNo);
NextMetadataNo++;
break;
Expand Down
2 changes: 0 additions & 2 deletions llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
Expand Up @@ -1792,7 +1792,6 @@ void ModuleBitcodeWriter::writeDITemplateTypeParameter(
Record.push_back(N->isDistinct());
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
Record.push_back(VE.getMetadataOrNullID(N->getType()));
Record.push_back(N->isDefault());

Stream.EmitRecord(bitc::METADATA_TEMPLATE_TYPE, Record, Abbrev);
Record.clear();
Expand All @@ -1805,7 +1804,6 @@ void ModuleBitcodeWriter::writeDITemplateValueParameter(
Record.push_back(N->getTag());
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
Record.push_back(VE.getMetadataOrNullID(N->getType()));
Record.push_back(N->isDefault());
Record.push_back(VE.getMetadataOrNullID(N->getValue()));

Stream.EmitRecord(bitc::METADATA_TEMPLATE_VALUE, Record, Abbrev);
Expand Down
2 changes: 0 additions & 2 deletions llvm/lib/IR/AsmWriter.cpp
Expand Up @@ -2073,7 +2073,6 @@ static void writeDITemplateTypeParameter(raw_ostream &Out,
MDFieldPrinter Printer(Out, TypePrinter, Machine, Context);
Printer.printString("name", N->getName());
Printer.printMetadata("type", N->getRawType(), /* ShouldSkipNull */ false);
Printer.printBool("defaulted", N->isDefault(), /* Default= */ false);
Out << ")";
}

Expand All @@ -2088,7 +2087,6 @@ static void writeDITemplateValueParameter(raw_ostream &Out,
Printer.printTag(N);
Printer.printString("name", N->getName());
Printer.printMetadata("type", N->getRawType());
Printer.printBool("defaulted", N->isDefault(), /* Default= */ false);
Printer.printMetadata("value", N->getValue(), /* ShouldSkipNull */ false);
Out << ")";
}
Expand Down
17 changes: 8 additions & 9 deletions llvm/lib/IR/DIBuilder.cpp
Expand Up @@ -406,42 +406,41 @@ DIBuilder::createObjCProperty(StringRef Name, DIFile *File, unsigned LineNumber,

DITemplateTypeParameter *
DIBuilder::createTemplateTypeParameter(DIScope *Context, StringRef Name,
DIType *Ty, bool isDefault) {
DIType *Ty) {
assert((!Context || isa<DICompileUnit>(Context)) && "Expected compile unit");
return DITemplateTypeParameter::get(VMContext, Name, Ty, isDefault);
return DITemplateTypeParameter::get(VMContext, Name, Ty);
}

static DITemplateValueParameter *
createTemplateValueParameterHelper(LLVMContext &VMContext, unsigned Tag,
DIScope *Context, StringRef Name, DIType *Ty,
bool IsDefault, Metadata *MD) {
Metadata *MD) {
assert((!Context || isa<DICompileUnit>(Context)) && "Expected compile unit");
return DITemplateValueParameter::get(VMContext, Tag, Name, Ty, IsDefault, MD);
return DITemplateValueParameter::get(VMContext, Tag, Name, Ty, MD);
}

DITemplateValueParameter *
DIBuilder::createTemplateValueParameter(DIScope *Context, StringRef Name,
DIType *Ty, bool isDefault,
Constant *Val) {
DIType *Ty, Constant *Val) {
return createTemplateValueParameterHelper(
VMContext, dwarf::DW_TAG_template_value_parameter, Context, Name, Ty,
isDefault, getConstantOrNull(Val));
getConstantOrNull(Val));
}

DITemplateValueParameter *
DIBuilder::createTemplateTemplateParameter(DIScope *Context, StringRef Name,
DIType *Ty, StringRef Val) {
return createTemplateValueParameterHelper(
VMContext, dwarf::DW_TAG_GNU_template_template_param, Context, Name, Ty,
false, MDString::get(VMContext, Val));
MDString::get(VMContext, Val));
}

DITemplateValueParameter *
DIBuilder::createTemplateParameterPack(DIScope *Context, StringRef Name,
DIType *Ty, DINodeArray Val) {
return createTemplateValueParameterHelper(
VMContext, dwarf::DW_TAG_GNU_template_parameter_pack, Context, Name, Ty,
false, Val.get());
Val.get());
}

DICompositeType *DIBuilder::createClassType(
Expand Down

0 comments on commit 802b22b

Please sign in to comment.