summaryrefslogtreecommitdiffstats
path: root/llvm/lib/AsmParser/LLParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/AsmParser/LLParser.cpp')
-rw-r--r--llvm/lib/AsmParser/LLParser.cpp30
1 files changed, 28 insertions, 2 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 92cb53068dd..c156a60ffa7 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -3718,6 +3718,13 @@ struct EmissionKindField : public MDUnsignedField {
EmissionKindField() : MDUnsignedField(0, DICompileUnit::LastEmissionKind) {}
};
+struct NameTableKindField : public MDUnsignedField {
+ NameTableKindField()
+ : MDUnsignedField(
+ 0, (unsigned)
+ DICompileUnit::DebugNameTableKind::LastDebugNameTableKind) {}
+};
+
struct DIFlagField : public MDFieldImpl<DINode::DIFlags> {
DIFlagField() : MDFieldImpl(DINode::FlagZero) {}
};
@@ -3938,6 +3945,25 @@ bool LLParser::ParseMDField(LocTy Loc, StringRef Name, EmissionKindField &Result
template <>
bool LLParser::ParseMDField(LocTy Loc, StringRef Name,
+ NameTableKindField &Result) {
+ if (Lex.getKind() == lltok::APSInt)
+ return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result));
+
+ if (Lex.getKind() != lltok::NameTableKind)
+ return TokError("expected nameTable kind");
+
+ auto Kind = DICompileUnit::getNameTableKind(Lex.getStrVal());
+ if (!Kind)
+ return TokError("invalid nameTable kind" + Twine(" '") + Lex.getStrVal() +
+ "'");
+ assert(((unsigned)*Kind) <= Result.Max && "Expected valid nameTable kind");
+ Result.assign((unsigned)*Kind);
+ Lex.Lex();
+ return false;
+}
+
+template <>
+bool LLParser::ParseMDField(LocTy Loc, StringRef Name,
DwarfAttEncodingField &Result) {
if (Lex.getKind() == lltok::APSInt)
return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result));
@@ -4448,7 +4474,7 @@ bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) {
OPTIONAL(dwoId, MDUnsignedField, ); \
OPTIONAL(splitDebugInlining, MDBoolField, = true); \
OPTIONAL(debugInfoForProfiling, MDBoolField, = false); \
- OPTIONAL(gnuPubnames, MDBoolField, = false);
+ OPTIONAL(nameTableKind, NameTableKindField, );
PARSE_MD_FIELDS();
#undef VISIT_MD_FIELDS
@@ -4456,7 +4482,7 @@ bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) {
Context, language.Val, file.Val, producer.Val, isOptimized.Val, flags.Val,
runtimeVersion.Val, splitDebugFilename.Val, emissionKind.Val, enums.Val,
retainedTypes.Val, globals.Val, imports.Val, macros.Val, dwoId.Val,
- splitDebugInlining.Val, debugInfoForProfiling.Val, gnuPubnames.Val);
+ splitDebugInlining.Val, debugInfoForProfiling.Val, nameTableKind.Val);
return false;
}
OpenPOWER on IntegriCloud