set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC}")
endif()
endif()
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -pedantic")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror=date-time")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wwrite-strings")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-qual")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wimplicit-fallthrough")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wdelete-non-virtual-dtor")
set(CMAKE_CXX_FLAGS_RELEASE "-O2")
set(CMAKE_CXX_FLAGS_MINSIZEREL "-O2 '-DCHECK=(void)'")
set(CMAKE_CXX_FLAGS_DEBUG "-g -DDEBUGF18")
}
}
- void Descend(const SpecificIntrinsic &si) {}
- void Descend(SpecificIntrinsic &si) {}
+ void Descend(const SpecificIntrinsic &) {}
+ void Descend(SpecificIntrinsic &) {}
void Descend(const ProcedureDesignator &p) { Visit(p.u); }
void Descend(ProcedureDesignator &p) { Visit(p.u); }
template<typename... A> bool IsInitialDataTarget(const std::variant<A...> &);
bool IsInitialDataTarget(const DataRef &);
template<typename T> bool IsInitialDataTarget(const Expr<T> &);
-bool IsInitialDataTarget(const semantics::Symbol &s) { return true; }
+bool IsInitialDataTarget(const semantics::Symbol &) { return true; }
bool IsInitialDataTarget(const semantics::Symbol *s) {
return IsInitialDataTarget(*s);
}
-// Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
+// Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
for (int j{0}; j < nbits; ++j) {
if (absPower.BTEST(j)) {
if (negativePower) {
- result.value =
- result.value.Divide(squares).AccumulateFlags(result.flags);
+ result.value = result.value.Divide(squares, rounding)
+ .AccumulateFlags(result.flags);
} else {
- result.value =
- result.value.Multiply(squares).AccumulateFlags(result.flags);
+ result.value = result.value.Multiply(squares, rounding)
+ .AccumulateFlags(result.flags);
}
}
- squares = squares.Multiply(squares).AccumulateFlags(result.flags);
+ squares =
+ squares.Multiply(squares, rounding).AccumulateFlags(result.flags);
}
}
return result;
}
template<typename W, int P, bool IM>
-std::ostream &Real<W, P, IM>::AsFortran(
- std::ostream &o, int kind, Rounding rounding) const {
+std::ostream &Real<W, P, IM>::AsFortran(std::ostream &o, int kind) const {
if (IsNotANumber()) {
o << "(0._" << kind << "/0.)";
} else if (IsInfinite()) {
// Emits a character representation for an equivalent Fortran constant
// or parenthesized constant expression that produces this value.
- std::ostream &AsFortran(
- std::ostream &, int kind, Rounding rounding = defaultRounding) const;
+ std::ostream &AsFortran(std::ostream &, int kind) const;
private:
using Significand = Integer<significandBits>; // no implicit bit
void GetShapeVisitor::Handle(const Symbol &symbol) {
std::visit(
common::visitors{
- [&](const semantics::ObjectEntityDetails &object) {
+ [&](const semantics::ObjectEntityDetails &) {
Handle(NamedEntity{symbol});
},
[&](const semantics::AssocEntityDetails &assoc) {
[&](Expr<SomeInteger> &&x) { return Package(-std::move(x)); },
[&](Expr<SomeReal> &&x) { return Package(-std::move(x)); },
[&](Expr<SomeComplex> &&x) { return Package(-std::move(x)); },
- [&](Expr<SomeCharacter> &&x) {
+ [&](Expr<SomeCharacter> &&) {
// TODO: defined operator
messages.Say("CHARACTER cannot be negated"_err_en_US);
return NoExpr();
},
- [&](Expr<SomeLogical> &&x) {
+ [&](Expr<SomeLogical> &&) {
// TODO: defined operator
messages.Say("LOGICAL cannot be negated"_err_en_US);
return NoExpr();
},
- [&](Expr<SomeDerived> &&x) {
+ [&](Expr<SomeDerived> &&) {
// TODO: defined operator
messages.Say("Operand cannot be negated"_err_en_US);
return NoExpr();
return true;
}
- template<typename T> void Post(const T &x) {
+ template<typename T> void Post(const T &) {
if constexpr (!HasSource<T>::value && (UnionTrait<T> || WrapperTrait<T>)) {
EndLineIfNonempty();
} else {
EndLine();
return true;
}
-
- void Post(const std::int64_t &x) { --indent_; }
+ void Post(const std::int64_t &) { --indent_; }
bool Pre(const std::uint64_t &x) {
IndentEmptyLine();
o << "^\n";
}
},
- [&](const CompilerInsertion &ins) { o << message << '\n'; },
+ [&](const CompilerInsertion &) { o << message << '\n'; },
},
origin.u);
}
}
return &inc.source;
},
- [&](const Macro &mac) {
+ [&](const Macro &) {
return GetSourceFile(origin.replaces.start(), offset);
},
[offset](const CompilerInsertion &) {
private:
struct Inclusion {
const SourceFile &source;
- bool isModule;
+ bool isModule{false};
};
struct Module {
const SourceFile &source;
[](const StructureComponent &x) -> const CoindexedNamedObject * {
return GetCoindexedNamedObject(x.base);
},
- [](const auto &x) -> const CoindexedNamedObject * { return nullptr; },
+ [](const auto &) -> const CoindexedNamedObject * { return nullptr; },
},
allocateObject.u);
}
void Unparse(const DeclarationTypeSpec::Record &x) {
Word("RECORD/"), Walk(x.v), Put('/');
}
- void Before(const IntrinsicTypeSpec::Real &x) { // R704
+ void Before(const IntrinsicTypeSpec::Real &) { // R704
Word("REAL");
}
- void Before(const IntrinsicTypeSpec::Complex &x) { Word("COMPLEX"); }
+ void Before(const IntrinsicTypeSpec::Complex &) { Word("COMPLEX"); }
void Post(const IntrinsicTypeSpec::DoublePrecision &) {
Word("DOUBLE PRECISION");
}
- void Before(const IntrinsicTypeSpec::Character &x) { Word("CHARACTER"); }
- void Before(const IntrinsicTypeSpec::Logical &x) { Word("LOGICAL"); }
+ void Before(const IntrinsicTypeSpec::Character &) { Word("CHARACTER"); }
+ void Before(const IntrinsicTypeSpec::Logical &) { Word("LOGICAL"); }
void Post(const IntrinsicTypeSpec::DoubleComplex &) {
Word("DOUBLE COMPLEX");
}
- void Before(const IntegerTypeSpec &x) { // R705
+ void Before(const IntegerTypeSpec &) { // R705
Word("INTEGER");
}
void Unparse(const KindSelector &x) { // R706
Walk("(", std::get<std::list<Name>>(x.t), ", ", ")");
Indent();
}
- void Unparse(const Abstract &x) { // R728, &c.
+ void Unparse(const Abstract &) { // R728, &c.
Word("ABSTRACT");
}
void Post(const TypeAttrSpec::BindC &) { Word("BIND(C)"); }
void Unparse(const EndTypeStmt &x) { // R730
Outdent(), Word("END TYPE"), Walk(" ", x.v);
}
- void Unparse(const SequenceStmt &x) { // R731
+ void Unparse(const SequenceStmt &) { // R731
Word("SEQUENCE");
}
void Unparse(const TypeParamDefStmt &x) { // R732
}
Put(' '), Walk(decls, ", ");
}
- void Unparse(const Allocatable &x) { // R738
+ void Unparse(const Allocatable &) { // R738
Word("ALLOCATABLE");
}
- void Unparse(const Pointer &x) { Word("POINTER"); }
- void Unparse(const Contiguous &x) { Word("CONTIGUOUS"); }
+ void Unparse(const Pointer &) { Word("POINTER"); }
+ void Unparse(const Contiguous &) { Word("CONTIGUOUS"); }
void Before(const ComponentAttrSpec &x) {
std::visit(
common::visitors{
Walk(", ", std::get<std::list<ProcComponentAttrSpec>>(x.t), ", ");
Put(" :: "), Walk(std::get<std::list<ProcDecl>>(x.t), ", ");
}
- void Unparse(const NoPass &x) { // R742
+ void Unparse(const NoPass &) { // R742
Word("NOPASS");
}
void Unparse(const Pass &x) { Word("PASS"), Walk("(", x.v, ")"); }
},
x.u);
}
- void Unparse(const PrivateStmt &x) { // R745
+ void Unparse(const PrivateStmt &) { // R745
Word("PRIVATE");
}
void Unparse(const TypeBoundProcedureStmt::WithoutInterface &x) { // R749
void Before(const AttrSpec &x) { // R802
std::visit(
common::visitors{
- [&](const CoarraySpec &y) { Word("CODIMENSION["); },
- [&](const ArraySpec &y) { Word("DIMENSION("); },
+ [&](const CoarraySpec &) { Word("CODIMENSION["); },
+ [&](const ArraySpec &) { Word("DIMENSION("); },
[](const auto &) {},
},
x.u);
void Post(const AttrSpec &x) {
std::visit(
common::visitors{
- [&](const CoarraySpec &y) { Put(']'); },
- [&](const ArraySpec &y) { Put(')'); },
+ [&](const CoarraySpec &) { Put(']'); },
+ [&](const ArraySpec &) { Put(')'); },
[](const auto &) {},
},
x.u);
Walk("*", std::get<std::optional<CharLength>>(x.t));
Walk(std::get<std::optional<Initialization>>(x.t));
}
- void Unparse(const NullInit &x) { // R806
+ void Unparse(const NullInit &) { // R806
Word("NULL()");
}
void Unparse(const LanguageBindingSpec &x) { // R808 & R1528
}
}
void Unparse(const Expr::Parentheses &x) { Put('('), Walk(x.v), Put(')'); }
- void Before(const Expr::UnaryPlus &x) { Put("+"); }
- void Before(const Expr::Negate &x) { Put("-"); }
- void Before(const Expr::NOT &x) { Word(".NOT."); }
+ void Before(const Expr::UnaryPlus &) { Put("+"); }
+ void Before(const Expr::Negate &) { Put("-"); }
+ void Before(const Expr::NOT &) { Word(".NOT."); }
void Unparse(const Expr::PercentLoc &x) {
Word("%LOC("), Walk(x.v), Put(')');
}
Put(':'), Walk(std::get<2>(x.t));
Walk(":", std::get<std::optional<ScalarIntExpr>>(x.t));
}
- void Before(const LoopControl::Concurrent &x) { // R1129
+ void Before(const LoopControl::Concurrent &) { // R1129
Word("CONCURRENT");
}
void Unparse(const LocalitySpec::Local &x) {
void Unparse(const LocalitySpec::Shared &x) {
Word("SHARED("), Walk(x.v, ", "), Put(')');
}
- void Post(const LocalitySpec::DefaultNone &x) { Word("DEFAULT(NONE)"); }
+ void Post(const LocalitySpec::DefaultNone &) { Word("DEFAULT(NONE)"); }
void Unparse(const EndDoStmt &x) { // R1132
Word("END DO"), Walk(" ", x.v);
}
void Unparse(const ExitStmt &x) { // R1156
Word("EXIT"), Walk(" ", x.v);
}
- void Before(const GotoStmt &x) { // R1157
+ void Before(const GotoStmt &) { // R1157
Word("GO TO ");
}
void Unparse(const ComputedGotoStmt &x) { // R1158
Word("GO TO ("), Walk(x.t, "), ");
}
- void Unparse(const ContinueStmt &x) { // R1159
+ void Unparse(const ContinueStmt &) { // R1159
Word("CONTINUE");
}
void Unparse(const StopStmt &x) { // R1160, R1161
Word("STOP"), Walk(" ", std::get<std::optional<StopCode>>(x.t));
Walk(", QUIET=", std::get<std::optional<ScalarLogicalExpr>>(x.t));
}
- void Unparse(const FailImageStmt &x) { // R1163
+ void Unparse(const FailImageStmt &) { // R1163
Word("FAIL IMAGE");
}
void Unparse(const SyncAllStmt &x) { // R1164
void Before(const EventWaitStmt::EventWaitSpec &x) { // R1173, R1174
std::visit(
common::visitors{
- [&](const ScalarIntExpr &x) { Word("UNTIL_COUNT="); },
+ [&](const ScalarIntExpr &) { Word("UNTIL_COUNT="); },
[](const StatOrErrmsg &) {},
},
x.u);
void Before(const FormTeamStmt::FormTeamSpec &x) { // R1176, R1178
std::visit(
common::visitors{
- [&](const ScalarIntExpr &x) { Word("NEW_INDEX="); },
+ [&](const ScalarIntExpr &) { Word("NEW_INDEX="); },
[](const StatOrErrmsg &) {},
},
x.u);
std::visit(
common::visitors{
[&](const ScalarLogicalVariable &) { Word("ACQUIRED_LOCK="); },
- [](const StatOrErrmsg &y) {},
+ [](const StatOrErrmsg &) {},
},
x.u);
}
Indent();
}
}
- void Before(const ProgramStmt &x) { // R1402
+ void Before(const ProgramStmt &) { // R1402
Word("PROGRAM "), Indent();
}
void Unparse(const EndProgramStmt &x) { // R1403
void Before(const GenericSpec &x) { // R1508, R1509
std::visit(
common::visitors{
- [&](const DefinedOperator &x) { Word("OPERATOR("); },
+ [&](const DefinedOperator &) { Word("OPERATOR("); },
[&](const GenericSpec::Assignment &) { Word("ASSIGNMENT(=)"); },
[&](const GenericSpec::ReadFormatted &) {
Word("READ(FORMATTED)");
void Post(const GenericSpec &x) {
std::visit(
common::visitors{
- [&](const DefinedOperator &x) { Put(')'); },
+ [&](const DefinedOperator &) { Put(')'); },
[](const auto &) {},
},
x.u);
void Unparse(const ReturnStmt &x) { // R1542
Word("RETURN"), Walk(" ", x.v);
}
- void Unparse(const ContainsStmt &x) { // R1543
+ void Unparse(const ContainsStmt &) { // R1543
Outdent();
Word("CONTAINS");
Indent();
const char *slash{isCommon ? "/" : ""};
Put(slash), Walk(std::get<Designator>(x.t)), Put(slash);
}
- void Unparse(const OmpMapType::Always &x) { Word("ALWAYS,"); }
+ void Unparse(const OmpMapType::Always &) { Word("ALWAYS,"); }
void Unparse(const OmpMapClause &x) {
Word("MAP(");
Walk(std::get<std::optional<OmpMapType>>(x.t), ":");
bool Pre(const OmpDependClause &x) {
return std::visit(
common::visitors{
- [&](const OmpDependClause::Source &y) {
+ [&](const OmpDependClause::Source &) {
Word("DEPEND(SOURCE)");
return false;
},
Put(")");
return false;
},
- [&](const OmpDependClause::InOut &y) {
+ [&](const OmpDependClause::InOut &) {
Word("DEPEND");
return true;
},
},
x.u);
}
- bool Pre(const OmpDefaultClause &x) {
+ bool Pre(const OmpDefaultClause &) {
Word("DEFAULT(");
return true;
}
- void Post(const OmpDefaultClause &x) { Put(")"); }
- bool Pre(const OmpProcBindClause &x) {
+ void Post(const OmpDefaultClause &) { Put(")"); }
+ bool Pre(const OmpProcBindClause &) {
Word("PROC_BIND(");
return true;
}
- void Post(const OmpProcBindClause &x) { Put(")"); }
- void Before(const OmpClause::Defaultmap &x) {
+ void Post(const OmpProcBindClause &) { Put(")"); }
+ void Before(const OmpClause::Defaultmap &) {
Word("DEFAULTMAP(TOFROM:SCALAR)");
}
- void Before(const OmpClause::Inbranch &x) { Word("INBRANCH"); }
- void Before(const OmpClause::Mergeable &x) { Word("MERGEABLE"); }
- void Before(const OmpClause::Nogroup &x) { Word("NOGROUP"); }
- void Before(const OmpClause::Notinbranch &x) { Word("NOTINBRANCH"); }
- void Before(const OmpClause::Untied &x) { Word("UNTIED"); }
- void Before(const OmpClause::Threads &x) { Word("THREADS"); }
- void Before(const OmpClause::Simd &x) { Word("SIMD"); }
+ void Before(const OmpClause::Inbranch &) { Word("INBRANCH"); }
+ void Before(const OmpClause::Mergeable &) { Word("MERGEABLE"); }
+ void Before(const OmpClause::Nogroup &) { Word("NOGROUP"); }
+ void Before(const OmpClause::Notinbranch &) { Word("NOTINBRANCH"); }
+ void Before(const OmpClause::Untied &) { Word("UNTIED"); }
+ void Before(const OmpClause::Threads &) { Word("THREADS"); }
+ void Before(const OmpClause::Simd &) { Word("SIMD"); }
void Unparse(const OmpNowait &) { Word("NOWAIT"); }
void Unparse(const OmpClause::Collapse &x) {
Word("COLLAPSE(");
Word("!$OMP ");
return std::visit(
common::visitors{
- [&](const OpenMPDeclareReductionConstruct &y) {
+ [&](const OpenMPDeclareReductionConstruct &) {
Word("DECLARE REDUCTION ");
return true;
},
EndOpenMP();
return false;
},
- [&](const OpenMPDeclareTargetConstruct &y) {
+ [&](const OpenMPDeclareTargetConstruct &) {
Word("DECLARE TARGET ");
return true;
},
- [&](const OpenMPThreadprivate &y) {
+ [&](const OpenMPThreadprivate &) {
Word("THREADPRIVATE (");
return true;
},
},
x.u);
}
- void Post(const OpenMPDeclarativeConstruct &x) {
+ void Post(const OpenMPDeclarativeConstruct &) {
Put("\n");
EndOpenMP();
}
- void Post(const OpenMPThreadprivate &x) {
+ void Post(const OpenMPThreadprivate &) {
Put(")\n");
EndOpenMP();
}
symbol.name());
}
-void CheckPointerAssignment(parser::ContextualMessages &messages,
- const IntrinsicProcTable &intrinsics, const Symbol &lhs,
- const NullPointer &f) {
+void CheckPointerAssignment(parser::ContextualMessages &,
+ const IntrinsicProcTable &, const Symbol &, const NullPointer &) {
// LHS = NULL() without MOLD=; this is always fine
}
template<typename T>
void CheckPointerAssignment(parser::ContextualMessages &messages,
- const IntrinsicProcTable &intrinsics, const Symbol &lhs,
- const Designator<T> &d) {
+ const IntrinsicProcTable &, const Symbol &lhs, const Designator<T> &d) {
const Symbol *last{d.GetLastSymbol()};
const Symbol *base{d.GetBaseObject().symbol()};
if (last != nullptr && base != nullptr) {
namespace Fortran::semantics {
-void AssignmentContext::Analyze(const parser::AssignmentStmt &stmt) {
+void AssignmentContext::Analyze(const parser::AssignmentStmt &) {
if (forall_ != nullptr) {
// TODO: Warn if some name in forall_->activeNames or its outer
// contexts does not appear on LHS
// (re)allocation of LHS array when unallocated or nonconformable)
}
-void AssignmentContext::Analyze(const parser::PointerAssignmentStmt &stmt) {
+void AssignmentContext::Analyze(const parser::PointerAssignmentStmt &) {
CHECK(!where_);
if (forall_ != nullptr) {
// TODO: Warn if some name in forall_->activeNames or its outer
[&](const parser::StatOrErrmsg &statOrErr) {
std::visit(
common::visitors{
- [&](const parser::StatVariable &statVariable) {
+ [&](const parser::StatVariable &) {
if (info.gotStat) { // C943
context.Say(
"STAT may not be duplicated in a ALLOCATE statement"_err_en_US);
}
info.gotStat = true;
},
- [&](const parser::MsgVariable &msgVariable) {
+ [&](const parser::MsgVariable &) {
if (info.gotMsg) { // C943
context.Say(
"ERRMSG may not be duplicated in a ALLOCATE statement"_err_en_US);
std::get<std::list<parser::StatOrErrmsg>>(deallocateStmt.t)) {
std::visit(
common::visitors{
- [&](const parser::StatVariable &statVariable) {
+ [&](const parser::StatVariable &) {
if (gotStat) {
context_.Say(
"STAT may not be duplicated in a DEALLOCATE statement"_err_en_US);
}
gotStat = true;
},
- [&](const parser::MsgVariable &msgVariable) {
+ [&](const parser::MsgVariable &) {
if (gotMsg) {
context_.Say(
"ERRMSG may not be duplicated in a DEALLOCATE statement"_err_en_US);
}
}
-void IoChecker::Enter(const parser::EndLabel &spec) {
+void IoChecker::Enter(const parser::EndLabel &) {
SetSpecifier(IoSpecKind::End);
}
-void IoChecker::Enter(const parser::EorLabel &spec) {
+void IoChecker::Enter(const parser::EorLabel &) {
SetSpecifier(IoSpecKind::Eor);
}
-void IoChecker::Enter(const parser::ErrLabel &spec) {
+void IoChecker::Enter(const parser::ErrLabel &) {
SetSpecifier(IoSpecKind::Err);
}
-void IoChecker::Enter(const parser::FileUnitNumber &spec) {
+void IoChecker::Enter(const parser::FileUnitNumber &) {
SetSpecifier(IoSpecKind::Unit);
flags_.set(Flag::NumberUnit);
}
spec.u);
}
-void IoChecker::Enter(const parser::IdExpr &spec) {
- SetSpecifier(IoSpecKind::Id);
-}
+void IoChecker::Enter(const parser::IdExpr &) { SetSpecifier(IoSpecKind::Id); }
void IoChecker::Enter(const parser::IdVariable &spec) {
SetSpecifier(IoSpecKind::Id);
}
}
-void IoChecker::Enter(const parser::IoControlSpec::Pos &spec) {
+void IoChecker::Enter(const parser::IoControlSpec::Pos &) {
SetSpecifier(IoSpecKind::Pos);
}
-void IoChecker::Enter(const parser::IoControlSpec::Rec &spec) {
+void IoChecker::Enter(const parser::IoControlSpec::Rec &) {
SetSpecifier(IoSpecKind::Rec);
}
-void IoChecker::Enter(const parser::IoControlSpec::Size &spec) {
+void IoChecker::Enter(const parser::IoControlSpec::Size &) {
SetSpecifier(IoSpecKind::Size);
}
}
}
-void IoChecker::Enter(const parser::MsgVariable &spec) {
+void IoChecker::Enter(const parser::MsgVariable &) {
SetSpecifier(IoSpecKind::Iomsg);
}
-void IoChecker::Enter(const parser::OutputItem &spec) {
+void IoChecker::Enter(const parser::OutputItem &) {
flags_.set(Flag::DataList);
// TODO: C1233 - output item must not be a procedure pointer
}
}
}
-void IoChecker::Enter(const parser::StatVariable &spec) {
+void IoChecker::Enter(const parser::StatVariable &) {
SetSpecifier(IoSpecKind::Iostat);
}
-void IoChecker::Leave(const parser::BackspaceStmt &stmt) {
+void IoChecker::Leave(const parser::BackspaceStmt &) {
CheckForRequiredSpecifier(
flags_.test(Flag::NumberUnit), "UNIT number"); // C1240
stmt_ = IoStmtKind::None;
}
-void IoChecker::Leave(const parser::CloseStmt &stmt) {
+void IoChecker::Leave(const parser::CloseStmt &) {
CheckForRequiredSpecifier(
flags_.test(Flag::NumberUnit), "UNIT number"); // C1208
stmt_ = IoStmtKind::None;
}
-void IoChecker::Leave(const parser::EndfileStmt &stmt) {
+void IoChecker::Leave(const parser::EndfileStmt &) {
CheckForRequiredSpecifier(
flags_.test(Flag::NumberUnit), "UNIT number"); // C1240
stmt_ = IoStmtKind::None;
}
-void IoChecker::Leave(const parser::FlushStmt &stmt) {
+void IoChecker::Leave(const parser::FlushStmt &) {
CheckForRequiredSpecifier(
flags_.test(Flag::NumberUnit), "UNIT number"); // C1243
stmt_ = IoStmtKind::None;
stmt_ = IoStmtKind::None;
}
-void IoChecker::Leave(const parser::OpenStmt &stmt) {
+void IoChecker::Leave(const parser::OpenStmt &) {
CheckForRequiredSpecifier(specifierSet_.test(IoSpecKind::Unit) ||
specifierSet_.test(IoSpecKind::Newunit),
"UNIT or NEWUNIT"); // C1204, C1205
stmt_ = IoStmtKind::None;
}
-void IoChecker::Leave(const parser::PrintStmt &stmt) {
- stmt_ = IoStmtKind::None;
-}
+void IoChecker::Leave(const parser::PrintStmt &) { stmt_ = IoStmtKind::None; }
-void IoChecker::Leave(const parser::ReadStmt &stmt) {
+void IoChecker::Leave(const parser::ReadStmt &) {
if (!flags_.test(Flag::IoControlList)) {
return;
}
stmt_ = IoStmtKind::None;
}
-void IoChecker::Leave(const parser::RewindStmt &stmt) {
+void IoChecker::Leave(const parser::RewindStmt &) {
CheckForRequiredSpecifier(
flags_.test(Flag::NumberUnit), "UNIT number"); // C1240
stmt_ = IoStmtKind::None;
}
-void IoChecker::Leave(const parser::WaitStmt &stmt) {
+void IoChecker::Leave(const parser::WaitStmt &) {
CheckForRequiredSpecifier(
flags_.test(Flag::NumberUnit), "UNIT number"); // C1237
stmt_ = IoStmtKind::None;
}
-void IoChecker::Leave(const parser::WriteStmt &stmt) {
+void IoChecker::Leave(const parser::WriteStmt &) {
LeaveReadWrite();
CheckForProhibitedSpecifier(IoSpecKind::Blank); // C1213
CheckForProhibitedSpecifier(IoSpecKind::End); // C1213
SetContextClauseInfo(type);
}
-void OmpStructureChecker::Enter(const parser::OpenMPConstruct &x) {
+void OmpStructureChecker::Enter(const parser::OpenMPConstruct &) {
// 2.8.1 TODO: Simd Construct with Ordered Construct Nesting check
}
return std::nullopt;
}
-MaybeExpr ExpressionAnalyzer::Analyze(const parser::CoindexedNamedObject &co) {
+MaybeExpr ExpressionAnalyzer::Analyze(const parser::CoindexedNamedObject &) {
Say("TODO: CoindexedNamedObject unimplemented"_err_en_US);
return std::nullopt;
}
return BuildModuleTree(name, x).set_stmt(stmt).set_endStmt(end);
}
-ProgramTree ProgramTree::Build(const parser::BlockData &x) {
+ProgramTree ProgramTree::Build(const parser::BlockData &) {
DIE("BlockData not yet implemented");
}
// 11.1.7.3
void CheckBranchesIntoDoBody(const SourceStmtList &branches,
- const TargetStmtMap &labels, const std::vector<ProxyForScope> &scopes,
- const IndexList &loopBodies, SemanticsContext &context) {
+ const TargetStmtMap &labels, const IndexList &loopBodies,
+ SemanticsContext &context) {
for (const auto branch : branches) {
const auto &label{branch.parserLabel};
auto branchTarget{GetLabel(labels, label)};
}
}
- CheckBranchesIntoDoBody(branches, labels, scopes, loopBodies, context);
+ CheckBranchesIntoDoBody(branches, labels, loopBodies, context);
CheckDoNesting(loopBodies, context);
}
},
y.u);
},
- [&](const parser::GenericSpec::Assignment &y) {
+ [&](const parser::GenericSpec::Assignment &) {
return GenericKind::Assignment;
},
- [&](const parser::GenericSpec::ReadFormatted &y) {
+ [&](const parser::GenericSpec::ReadFormatted &) {
return GenericKind::ReadFormatted;
},
- [&](const parser::GenericSpec::ReadUnformatted &y) {
+ [&](const parser::GenericSpec::ReadUnformatted &) {
return GenericKind::ReadUnformatted;
},
- [&](const parser::GenericSpec::WriteFormatted &y) {
+ [&](const parser::GenericSpec::WriteFormatted &) {
return GenericKind::WriteFormatted;
},
- [&](const parser::GenericSpec::WriteUnformatted &y) {
+ [&](const parser::GenericSpec::WriteUnformatted &) {
return GenericKind::WriteUnformatted;
},
},
for (const auto &subscript : elem.value().subscripts) {
ok &= std::visit(
common::visitors{
- [&](const parser::SubscriptTriplet &y) {
+ [&](const parser::SubscriptTriplet &) {
context_.Say(source, // C924, R872
"Array section '%s' is not allowed in an equivalence set"_err_en_US,
source);
return true;
}
void Post(const parser::AllocatableStmt &) { objectDeclAttr_ = std::nullopt; }
- bool Pre(const parser::TargetStmt &x) {
+ bool Pre(const parser::TargetStmt &) {
objectDeclAttr_ = Attr::TARGET;
return true;
}
bool Pre(const parser::DeclarationTypeSpec::Record &);
void Post(const parser::DerivedTypeSpec &);
bool Pre(const parser::DerivedTypeDef &);
- bool Pre(const parser::DerivedTypeStmt &x);
- void Post(const parser::DerivedTypeStmt &x);
- bool Pre(const parser::TypeParamDefStmt &x) { return BeginDecl(); }
+ bool Pre(const parser::DerivedTypeStmt &);
+ void Post(const parser::DerivedTypeStmt &);
+ bool Pre(const parser::TypeParamDefStmt &) { return BeginDecl(); }
void Post(const parser::TypeParamDefStmt &);
- bool Pre(const parser::TypeAttrSpec::Extends &x);
- bool Pre(const parser::PrivateStmt &x);
- bool Pre(const parser::SequenceStmt &x);
+ bool Pre(const parser::TypeAttrSpec::Extends &);
+ bool Pre(const parser::PrivateStmt &);
+ bool Pre(const parser::SequenceStmt &);
bool Pre(const parser::ComponentDefStmt &) { return BeginDecl(); }
void Post(const parser::ComponentDefStmt &) { EndDecl(); }
void Post(const parser::ComponentDecl &);
bool Pre(const parser::WhereConstructStmt &x) { return CheckDef(x.t); }
bool Pre(const parser::ForallConstructStmt &x) { return CheckDef(x.t); }
bool Pre(const parser::CriticalStmt &x) { return CheckDef(x.t); }
- bool Pre(const parser::LabelDoStmt &x) {
+ bool Pre(const parser::LabelDoStmt &) {
return false; // error recovery
}
bool Pre(const parser::NonLabelDoStmt &x) { return CheckDef(x.t); }
// ImplicitRulesVisitor implementation
-void ImplicitRulesVisitor::Post(const parser::ParameterStmt &x) {
+void ImplicitRulesVisitor::Post(const parser::ParameterStmt &) {
prevParameterStmt_ = currStmtSource();
}
bool ImplicitRulesVisitor::Pre(const parser::ImplicitStmt &x) {
bool result{std::visit(
common::visitors{
- [&](const std::list<ImplicitNoneNameSpec> &x) {
- return HandleImplicitNone(x);
+ [&](const std::list<ImplicitNoneNameSpec> &y) {
+ return HandleImplicitNone(y);
},
- [&](const std::list<parser::ImplicitSpec> &x) {
+ [&](const std::list<parser::ImplicitSpec> &) {
if (prevImplicitNoneType_) {
Say("IMPLICIT statement after IMPLICIT NONE or "
"IMPLICIT NONE(TYPE) statement"_err_en_US);
return false;
}
-bool InterfaceVisitor::Pre(const parser::GenericStmt &x) {
+bool InterfaceVisitor::Pre(const parser::GenericStmt &) {
genericInfo_.emplace(/*isInterface*/ false);
return true;
}
// SubprogramVisitor implementation
-void SubprogramVisitor::Post(const parser::StmtFunctionStmt &x) {
+void SubprogramVisitor::Post(const parser::StmtFunctionStmt &) {
if (badStmtFuncFound_) {
return; // This wasn't really a stmt function so no scope was created
}
EndSubprogram();
}
-bool SubprogramVisitor::Pre(const parser::SubroutineStmt &stmt) {
+bool SubprogramVisitor::Pre(const parser::SubroutineStmt &) {
return BeginAttrs();
}
-bool SubprogramVisitor::Pre(const parser::FunctionStmt &stmt) {
+bool SubprogramVisitor::Pre(const parser::FunctionStmt &) {
return BeginAttrs();
}
void DeclarationVisitor::Post(const parser::IntrinsicTypeSpec::Logical &x) {
SetDeclTypeSpec(MakeLogicalType(x.kind));
}
-void DeclarationVisitor::Post(const parser::IntrinsicTypeSpec::Character &x) {
+void DeclarationVisitor::Post(const parser::IntrinsicTypeSpec::Character &) {
if (!charInfo_.length) {
charInfo_.length = ParamValue{1, common::TypeParamAttr::Len};
}
return false;
}
-bool DeclarationVisitor::Pre(const parser::DeclarationTypeSpec::Type &x) {
+bool DeclarationVisitor::Pre(const parser::DeclarationTypeSpec::Type &) {
CHECK(GetDeclTypeSpecCategory() == DeclTypeSpec::Category::TypeDerived);
return true;
}
-bool DeclarationVisitor::Pre(const parser::DeclarationTypeSpec::Class &x) {
+bool DeclarationVisitor::Pre(const parser::DeclarationTypeSpec::Class &) {
SetDeclTypeSpecCategory(DeclTypeSpec::Category::ClassDerived);
return true;
}
PopScope();
return false;
}
-bool DeclarationVisitor::Pre(const parser::DerivedTypeStmt &x) {
+bool DeclarationVisitor::Pre(const parser::DerivedTypeStmt &) {
return BeginAttrs();
}
void DeclarationVisitor::Post(const parser::DerivedTypeStmt &x) {
return false;
}
-bool DeclarationVisitor::Pre(const parser::PrivateStmt &x) {
+bool DeclarationVisitor::Pre(const parser::PrivateStmt &) {
if (!currScope().parent().IsModule()) {
Say("PRIVATE is only allowed in a derived type that is"
" in a module"_err_en_US); // C766
}
return false;
}
-bool DeclarationVisitor::Pre(const parser::SequenceStmt &x) {
+bool DeclarationVisitor::Pre(const parser::SequenceStmt &) {
derivedTypeInfo_.sequence = true;
return false;
}
}
}
-bool DeclarationVisitor::Pre(const parser::TypeBoundProcedurePart &x) {
+bool DeclarationVisitor::Pre(const parser::TypeBoundProcedurePart &) {
derivedTypeInfo_.sawContains = true;
return true;
}
commonBlockInfo_.curr = nullptr;
}
-bool DeclarationVisitor::Pre(const parser::CommonBlockObject &x) {
+bool DeclarationVisitor::Pre(const parser::CommonBlockObject &) {
BeginArraySpec();
return true;
}
details->set_init(std::move(*expr));
}
},
- [&](const std::list<common::Indirection<parser::DataStmtValue>>
- &list) {
+ [&](const std::list<common::Indirection<parser::DataStmtValue>> &) {
if (inComponentDecl) {
Say(name,
"Component '%s' initialized with DATA statement values"_err_en_US);
const parser::SpecificationConstruct &spec) {
std::visit(
common::visitors{
- [&](const Indirection<parser::DerivedTypeDef> &y) {},
+ [&](const Indirection<parser::DerivedTypeDef> &) {},
[&](const parser::Statement<Indirection<parser::GenericStmt>> &y) {
CreateGeneric(std::get<parser::GenericSpec>(y.statement.value().t));
},
os << DetailsToString(details);
std::visit(
common::visitors{
- [&](const UnknownDetails &x) {},
- [&](const MainProgramDetails &x) {},
+ [&](const UnknownDetails &) {},
+ [&](const MainProgramDetails &) {},
[&](const ModuleDetails &x) {
if (x.isSubmodule()) {
os << " (";
return std::visit(
common::visitors{
[](const SubprogramDetails &x) { return x.isFunction(); },
- [&](const SubprogramNameDetails &x) {
+ [&](const SubprogramNameDetails &) {
return symbol.test(Symbol::Flag::Function);
},
[](const ProcEntityDetails &x) {
-// Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
+// Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
TEST(ivf.flags.empty())(ldesc);
MATCH(x, ivf.value.ToUInt64())(ldesc);
std::stringstream ss;
- vr.value.AsFortran(ss, kind, rounding);
+ vr.value.AsFortran(ss, kind);
std::string decimal{ss.str()};
const char *p{decimal.data()};
MATCH(x, static_cast<std::uint64_t>(std::stold(decimal)))(ldesc);
static constexpr int kind{REAL::bits / 8};
std::stringstream ss, css;
- x.AsFortran(ss, kind, rounding);
+ x.AsFortran(ss, kind);
std::string s{ss.str()};
if (IsNaN(rj)) {
css << "(0._" << kind << "/0.)";