Skip to content

Commit d134442

Browse files
committed
[flang][nfc] Use a message class for "not yet implemented" messages
Following a previous suggestion from Peter Klausler. Differential Revision: https://reviews.llvm.org/D124972
1 parent 17d27d9 commit d134442

File tree

4 files changed

+28
-18
lines changed

4 files changed

+28
-18
lines changed

flang/include/flang/Parser/message.h

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@ namespace Fortran::parser {
3232
// Use "..."_err_en_US, "..."_warn_en_US, "..."_port_en_US, and "..."_en_US
3333
// string literals to define the static text and fatality of a message.
3434
//
35-
// Error: fatal error that prevents code and module file generation
36-
// Warning: likely problem,
37-
// Portability: nonstandard or obsolete features
38-
// Because: for AttachTo(), explanatory attachment in support of another message
39-
// Context (internal): attachment from SetContext()
40-
// None: everything else, common for attachments with source locations
41-
enum class Severity { Error, Warning, Portability, Because, Context, None };
35+
enum class Severity {
36+
Error, // fatal error that prevents code and module file generation
37+
Warning, // likely problem
38+
Portability, // nonstandard or obsolete features
39+
Because, // for AttachTo(), explanatory attachment to support another message
40+
Context, // (internal): attachment from SetContext()
41+
Todo, // a feature that's not yet implemented, a fatal error
42+
None // everything else, common for attachments with source locations
43+
};
4244

4345
class MessageFixedText {
4446
public:
@@ -57,7 +59,9 @@ class MessageFixedText {
5759
severity_ = severity;
5860
return *this;
5961
}
60-
bool isFatal() const { return severity_ == Severity::Error; }
62+
bool isFatal() const {
63+
return severity_ == Severity::Error || severity_ == Severity::Todo;
64+
}
6165

6266
private:
6367
CharBlock text_;
@@ -77,6 +81,10 @@ constexpr MessageFixedText operator""_port_en_US(
7781
const char str[], std::size_t n) {
7882
return MessageFixedText{str, n, Severity::Portability};
7983
}
84+
constexpr MessageFixedText operator""_todo_en_US(
85+
const char str[], std::size_t n) {
86+
return MessageFixedText{str, n, Severity::Todo};
87+
}
8088
constexpr MessageFixedText operator""_en_US(const char str[], std::size_t n) {
8189
return MessageFixedText{str, n, Severity::None};
8290
}
@@ -99,7 +107,9 @@ class MessageFormattedText {
99107
MessageFormattedText &operator=(const MessageFormattedText &) = default;
100108
MessageFormattedText &operator=(MessageFormattedText &&) = default;
101109
const std::string &string() const { return string_; }
102-
bool isFatal() const { return severity_ == Severity::Error; }
110+
bool isFatal() const {
111+
return severity_ == Severity::Error || severity_ == Severity::Todo;
112+
}
103113
Severity severity() const { return severity_; }
104114
MessageFormattedText &set_severity(Severity severity) {
105115
severity_ = severity;

flang/lib/Parser/message.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,9 @@ bool Message::SortBefore(const Message &that) const {
155155
location_, that.location_);
156156
}
157157

158-
bool Message::IsFatal() const { return severity() == Severity::Error; }
158+
bool Message::IsFatal() const {
159+
return severity() == Severity::Error || severity() == Severity::Todo;
160+
}
159161

160162
Severity Message::severity() const {
161163
return common::visit(
@@ -224,6 +226,8 @@ static std::string Prefix(Severity severity) {
224226
return "because: ";
225227
case Severity::Context:
226228
return "in the context: ";
229+
case Severity::Todo:
230+
return "error: not yet implemented: ";
227231
case Severity::None:
228232
break;
229233
}

flang/lib/Semantics/expression.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3227,12 +3227,10 @@ void ArgumentAnalyzer::Analyze(
32273227
actual = ActualArgument(label.v);
32283228
},
32293229
[&](const parser::ActualArg::PercentRef &) {
3230-
context_.Say(
3231-
"not yet implemented: %REF() intrinsic for arguments"_err_en_US);
3230+
context_.Say("%REF() intrinsic for arguments"_todo_en_US);
32323231
},
32333232
[&](const parser::ActualArg::PercentVal &) {
3234-
context_.Say(
3235-
"not yet implemetned: %VAL() intrinsic for arguments"_err_en_US);
3233+
context_.Say("%VAL() intrinsic for arguments"_todo_en_US);
32363234
},
32373235
},
32383236
std::get<parser::ActualArg>(arg.t).u);

flang/lib/Semantics/resolve-names.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -774,9 +774,7 @@ class InterfaceVisitor : public virtual ScopeHandler {
774774
bool isAbstract() const;
775775

776776
protected:
777-
Symbol &GetGenericSymbol() {
778-
return DEREF(genericInfo_.top().symbol);
779-
}
777+
Symbol &GetGenericSymbol() { return DEREF(genericInfo_.top().symbol); }
780778
// Add to generic the symbol for the subprogram with the same name
781779
void CheckGenericProcedures(Symbol &);
782780

@@ -4895,7 +4893,7 @@ bool DeclarationVisitor::Pre(const parser::StructureDef &def) {
48954893
}
48964894

48974895
bool DeclarationVisitor::Pre(const parser::Union::UnionStmt &) {
4898-
Say("not yet implemented: support for UNION"_err_en_US); // TODO
4896+
Say("support for UNION"_todo_en_US); // TODO
48994897
return true;
49004898
}
49014899

0 commit comments

Comments
 (0)