Skip to content

Commit c0dea16

Browse files
committed
Fixes for P4-14 Tofino compilation.
Signed-off-by: fruffy <[email protected]>
1 parent e9540bd commit c0dea16

File tree

5 files changed

+28
-17
lines changed

5 files changed

+28
-17
lines changed

frontends/p4-14/fromv1.0/programStructure.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2077,8 +2077,9 @@ const IR::Declaration_Instance *ProgramStructure::convert(const IR::Register *re
20772077
args->push_back(
20782078
new IR::Argument(new IR::Constant(v1model.registers.size_type, reg->instance_count)));
20792079
}
2080-
return new IR::Declaration_Instance(
2081-
newName, addGlobalNameAnnotation(reg->name, reg->annotations), spectype, args, nullptr);
2080+
return new IR::Declaration_Instance(reg->srcInfo, newName,
2081+
addGlobalNameAnnotation(reg->name, reg->annotations),
2082+
spectype, args, nullptr);
20822083
}
20832084

20842085
const IR::Declaration_Instance *ProgramStructure::convert(const IR::CounterOrMeter *cm,
@@ -2103,7 +2104,8 @@ const IR::Declaration_Instance *ProgramStructure::convert(const IR::CounterOrMet
21032104
if (c->min_width >= 0) annos.emplace_back("min_width"_cs, new IR::Constant(c->min_width));
21042105
if (c->max_width >= 0) annos.emplace_back("max_width"_cs, new IR::Constant(c->max_width));
21052106
}
2106-
return new IR::Declaration_Instance(newName, std::move(annos), type, args, nullptr);
2107+
return new IR::Declaration_Instance(cm->srcInfo, newName, std::move(annos), type, args,
2108+
nullptr);
21072109
}
21082110

21092111
const IR::Declaration_Instance *ProgramStructure::convertDirectMeter(const IR::Meter *m,
@@ -2131,7 +2133,8 @@ const IR::Declaration_Instance *ProgramStructure::convertDirectMeter(const IR::M
21312133
auto meterPreColor = ExpressionConverter(this).convert(m->pre_color);
21322134
if (meterPreColor != nullptr) annos.emplace_back("pre_color"_cs, meterPreColor);
21332135
}
2134-
return new IR::Declaration_Instance(newName, std::move(annos), specType, args, nullptr);
2136+
return new IR::Declaration_Instance(m->srcInfo, newName, std::move(annos), specType, args,
2137+
nullptr);
21352138
}
21362139

21372140
const IR::Declaration_Instance *ProgramStructure::convertDirectCounter(const IR::Counter *c,
@@ -2147,7 +2150,7 @@ const IR::Declaration_Instance *ProgramStructure::convertDirectCounter(const IR:
21472150
auto annos = addGlobalNameAnnotation(c->name, c->annotations);
21482151
if (c->min_width >= 0) annos.emplace_back("min_width"_cs, new IR::Constant(c->min_width));
21492152
if (c->max_width >= 0) annos.emplace_back("max_width"_cs, new IR::Constant(c->max_width));
2150-
return new IR::Declaration_Instance(newName, std::move(annos), type, args, nullptr);
2153+
return new IR::Declaration_Instance(c->srcInfo, newName, std::move(annos), type, args, nullptr);
21512154
}
21522155

21532156
IR::Vector<IR::Argument> *ProgramStructure::createApplyArguments(cstring /* name unused */) {

frontends/parsers/parserDriver.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ struct AutoStdioInputStream {
6969

7070
namespace P4 {
7171

72-
AbstractParserDriver::AbstractParserDriver() : sources(new Util::InputSources) {}
72+
AbstractParserDriver::AbstractParserDriver() : sources(new Util::InputSources()) {}
7373

7474
AbstractParserDriver::~AbstractParserDriver() {}
7575

lib/source_file.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,24 @@ cstring SourcePosition::toString() const {
5151
SourceInfo::SourceInfo(const InputSources *sources, SourcePosition start, SourcePosition end)
5252
: sources(sources), start(start), end(end) {
5353
BUG_CHECK(sources != nullptr, "Invalid InputSources in SourceInfo");
54-
if (!start.isValid() || !end.isValid())
55-
BUG("Invalid source position in SourceInfo %1%-%2%", start.toString(), end.toString());
54+
if (!start.isValid() || !end.isValid()) {
55+
BUG("Invalid source position in SourceInfo %1%-%2% for %3%", start.toString(),
56+
end.toString(), sources->toDebugString());
57+
}
5658
if (start > end)
5759
BUG("SourceInfo position start %1% after end %2%", start.toString(), end.toString());
5860
}
5961

62+
SourceInfo::SourceInfo(const InputSources *sources, SourcePosition point)
63+
: SourceInfo(sources, point, point) {}
64+
65+
SourceInfo::SourceInfo(cstring filename, int line, int column, cstring srcBrief) {
66+
this->filename = filename;
67+
this->line = line;
68+
this->column = column;
69+
this->srcBrief = srcBrief;
70+
}
71+
6072
cstring SourceInfo::toString() const {
6173
return absl::StrFormat("(%v)-(%v)", start.toString(), end.toString());
6274
}

lib/source_file.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,18 +135,12 @@ class SourceInfo final {
135135
int line = -1;
136136
int column = -1;
137137
cstring srcBrief = ""_cs;
138-
SourceInfo(cstring filename, int line, int column, cstring srcBrief) {
139-
this->filename = filename;
140-
this->line = line;
141-
this->column = column;
142-
this->srcBrief = srcBrief;
143-
}
138+
SourceInfo(cstring filename, int line, int column, cstring srcBrief);
144139
/// Creates an "invalid" SourceInfo
145140
SourceInfo() = default;
146141

147142
/// Creates a SourceInfo for a 'point' in the source, or invalid
148-
SourceInfo(const InputSources *sources, SourcePosition point)
149-
: sources(sources), start(point), end(point) {}
143+
SourceInfo(const InputSources *sources, SourcePosition point);
150144

151145
SourceInfo(const InputSources *sources, SourcePosition start, SourcePosition end);
152146

tools/ir-generator/ir-generator.ypp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ namespace P4 {
4141
#define YYLTYPE Util::SourceInfo
4242
#define YYLLOC_DEFAULT(Cur, Rhs, N) \
4343
((Cur) = (N) ? YYRHSLOC(Rhs, 1) + YYRHSLOC(Rhs, N) \
44-
: Util::SourceInfo(sources, YYRHSLOC(Rhs, 0).getEnd()))
44+
: (YYRHSLOC(Rhs, 0).isValid() \
45+
? Util::SourceInfo(sources, YYRHSLOC(Rhs, 0).getEnd()) \
46+
: Util::SourceInfo()))
4547

4648
template<typename... Args>
4749
void yyerror(const char *fmt, Args&&... args);

0 commit comments

Comments
 (0)