xref: /llvm-project/flang/examples/FeatureList/FeatureList.cpp (revision 03cbe42627c7a7940b47cc1a2cda0120bc9c6d5e)
100d0749fSEthan Luis McDonough //===-- FeatureList.cpp ---------------------------------------------------===//
200d0749fSEthan Luis McDonough //
300d0749fSEthan Luis McDonough // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
400d0749fSEthan Luis McDonough // See https://llvm.org/LICENSE.txt for license information.
500d0749fSEthan Luis McDonough // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
600d0749fSEthan Luis McDonough //
700d0749fSEthan Luis McDonough //===----------------------------------------------------------------------===//
800d0749fSEthan Luis McDonough //
900d0749fSEthan Luis McDonough // A plugin that counts the amount of times a particular parse tree node
1000d0749fSEthan Luis McDonough // occurs.  This plugin should cover each feature covered in dump-parse-tree.h
1100d0749fSEthan Luis McDonough //
1200d0749fSEthan Luis McDonough //===----------------------------------------------------------------------===//
1300d0749fSEthan Luis McDonough 
1400d0749fSEthan Luis McDonough #include "flang/Frontend/FrontendActions.h"
1500d0749fSEthan Luis McDonough #include "flang/Frontend/FrontendPluginRegistry.h"
1600d0749fSEthan Luis McDonough #include "flang/Parser/parse-tree-visitor.h"
1700d0749fSEthan Luis McDonough #include "flang/Parser/parse-tree.h"
1800d0749fSEthan Luis McDonough #include "flang/Parser/parsing.h"
1900d0749fSEthan Luis McDonough 
2000d0749fSEthan Luis McDonough #include <algorithm>
2100d0749fSEthan Luis McDonough #include <cstring>
2200d0749fSEthan Luis McDonough #include <unordered_map>
2300d0749fSEthan Luis McDonough #include <utility>
2400d0749fSEthan Luis McDonough #include <vector>
2500d0749fSEthan Luis McDonough 
26edc2fb07SSergio Afonso using namespace Fortran::common;
2700d0749fSEthan Luis McDonough using namespace Fortran::frontend;
2800d0749fSEthan Luis McDonough using namespace Fortran::parser;
2900d0749fSEthan Luis McDonough using namespace Fortran;
3000d0749fSEthan Luis McDonough 
3100d0749fSEthan Luis McDonough #define READ_FEATURE_CUST(classname, n) \
3200d0749fSEthan Luis McDonough   bool Pre(const classname &) { \
3300d0749fSEthan Luis McDonough     record(#n); \
3400d0749fSEthan Luis McDonough     return true; \
3500d0749fSEthan Luis McDonough   } \
3600d0749fSEthan Luis McDonough   void Post(const classname &) {}
3700d0749fSEthan Luis McDonough 
3800d0749fSEthan Luis McDonough #define READ_FEATURE(classname) READ_FEATURE_CUST(classname, classname)
3900d0749fSEthan Luis McDonough 
4000d0749fSEthan Luis McDonough struct NodeVisitor {
4100d0749fSEthan Luis McDonough private:
4200d0749fSEthan Luis McDonough   std::unordered_map<const char *, unsigned int> frequencies;
4300d0749fSEthan Luis McDonough 
4400d0749fSEthan Luis McDonough   void record(const char *name) {
4500d0749fSEthan Luis McDonough     auto [it, ins] = frequencies.insert({name, 1});
4600d0749fSEthan Luis McDonough     if (!ins) {
4700d0749fSEthan Luis McDonough       it->second++;
4800d0749fSEthan Luis McDonough     }
4900d0749fSEthan Luis McDonough   }
5000d0749fSEthan Luis McDonough 
5100d0749fSEthan Luis McDonough public:
5200d0749fSEthan Luis McDonough   const std::unordered_map<const char *, unsigned int> &getFrequencies() const {
5300d0749fSEthan Luis McDonough     return frequencies;
5400d0749fSEthan Luis McDonough   }
5500d0749fSEthan Luis McDonough 
5600d0749fSEthan Luis McDonough   READ_FEATURE_CUST(format::ControlEditDesc, ControlEditDesc)
5700d0749fSEthan Luis McDonough   READ_FEATURE_CUST(format::DerivedTypeDataEditDesc, DerivedTypeDataEditDesc)
5800d0749fSEthan Luis McDonough   READ_FEATURE_CUST(format::FormatItem, FormatItem)
5900d0749fSEthan Luis McDonough   READ_FEATURE_CUST(format::FormatSpecification, FormatSpecification)
6000d0749fSEthan Luis McDonough   READ_FEATURE_CUST(
6100d0749fSEthan Luis McDonough       format::IntrinsicTypeDataEditDesc, IntrinsicTypeDataEditDesc)
6200d0749fSEthan Luis McDonough   READ_FEATURE(Abstract)
6300d0749fSEthan Luis McDonough   READ_FEATURE(AccAtomicCapture)
6400d0749fSEthan Luis McDonough   READ_FEATURE(AccAtomicCapture::Stmt1)
6500d0749fSEthan Luis McDonough   READ_FEATURE(AccAtomicCapture::Stmt2)
6600d0749fSEthan Luis McDonough   READ_FEATURE(AccAtomicRead)
6700d0749fSEthan Luis McDonough   READ_FEATURE(AccAtomicUpdate)
6800d0749fSEthan Luis McDonough   READ_FEATURE(AccAtomicWrite)
6900d0749fSEthan Luis McDonough   READ_FEATURE(AccBeginBlockDirective)
7000d0749fSEthan Luis McDonough   READ_FEATURE(AccBeginCombinedDirective)
7100d0749fSEthan Luis McDonough   READ_FEATURE(AccBeginLoopDirective)
7200d0749fSEthan Luis McDonough   READ_FEATURE(AccBlockDirective)
7300d0749fSEthan Luis McDonough   READ_FEATURE(AccClause)
7400d0749fSEthan Luis McDonough   READ_FEATURE(AccBindClause)
7500d0749fSEthan Luis McDonough   READ_FEATURE(AccDefaultClause)
7600d0749fSEthan Luis McDonough   READ_FEATURE(AccClauseList)
7700d0749fSEthan Luis McDonough   READ_FEATURE(AccCombinedDirective)
7800d0749fSEthan Luis McDonough   READ_FEATURE(AccDataModifier)
7900d0749fSEthan Luis McDonough   READ_FEATURE(AccDataModifier::Modifier)
8000d0749fSEthan Luis McDonough   READ_FEATURE(AccDeclarativeDirective)
8100d0749fSEthan Luis McDonough   READ_FEATURE(AccEndAtomic)
8200d0749fSEthan Luis McDonough   READ_FEATURE(AccEndBlockDirective)
8300d0749fSEthan Luis McDonough   READ_FEATURE(AccEndCombinedDirective)
845923e46fSValentin Clement   READ_FEATURE(AccGangArg)
8500d0749fSEthan Luis McDonough   READ_FEATURE(AccObject)
8600d0749fSEthan Luis McDonough   READ_FEATURE(AccObjectList)
8700d0749fSEthan Luis McDonough   READ_FEATURE(AccObjectListWithModifier)
8800d0749fSEthan Luis McDonough   READ_FEATURE(AccObjectListWithReduction)
8900d0749fSEthan Luis McDonough   READ_FEATURE(AccSizeExpr)
9000d0749fSEthan Luis McDonough   READ_FEATURE(AccSizeExprList)
9100d0749fSEthan Luis McDonough   READ_FEATURE(AccSelfClause)
9200d0749fSEthan Luis McDonough   READ_FEATURE(AccStandaloneDirective)
9300d0749fSEthan Luis McDonough   READ_FEATURE(AccDeviceTypeExpr)
9400d0749fSEthan Luis McDonough   READ_FEATURE(AccDeviceTypeExprList)
9500d0749fSEthan Luis McDonough   READ_FEATURE(AccTileExpr)
9600d0749fSEthan Luis McDonough   READ_FEATURE(AccTileExprList)
9700d0749fSEthan Luis McDonough   READ_FEATURE(AccLoopDirective)
9800d0749fSEthan Luis McDonough   READ_FEATURE(AccWaitArgument)
9900d0749fSEthan Luis McDonough   READ_FEATURE(AcImpliedDo)
10000d0749fSEthan Luis McDonough   READ_FEATURE(AcImpliedDoControl)
10100d0749fSEthan Luis McDonough   READ_FEATURE(AcValue)
10200d0749fSEthan Luis McDonough   READ_FEATURE(AccessStmt)
10300d0749fSEthan Luis McDonough   READ_FEATURE(AccessId)
10400d0749fSEthan Luis McDonough   READ_FEATURE(AccessSpec)
10500d0749fSEthan Luis McDonough   READ_FEATURE(AccessSpec::Kind)
10600d0749fSEthan Luis McDonough   READ_FEATURE(AcSpec)
10700d0749fSEthan Luis McDonough   READ_FEATURE(ActionStmt)
10800d0749fSEthan Luis McDonough   READ_FEATURE(ActualArg)
10900d0749fSEthan Luis McDonough   READ_FEATURE(ActualArg::PercentRef)
11000d0749fSEthan Luis McDonough   READ_FEATURE(ActualArg::PercentVal)
11100d0749fSEthan Luis McDonough   READ_FEATURE(ActualArgSpec)
11200d0749fSEthan Luis McDonough   READ_FEATURE(AcValue::Triplet)
11300d0749fSEthan Luis McDonough   READ_FEATURE(AllocOpt)
11400d0749fSEthan Luis McDonough   READ_FEATURE(AllocOpt::Mold)
11500d0749fSEthan Luis McDonough   READ_FEATURE(AllocOpt::Source)
11600d0749fSEthan Luis McDonough   READ_FEATURE(Allocatable)
11700d0749fSEthan Luis McDonough   READ_FEATURE(AllocatableStmt)
11800d0749fSEthan Luis McDonough   READ_FEATURE(AllocateCoarraySpec)
11900d0749fSEthan Luis McDonough   READ_FEATURE(AllocateObject)
12000d0749fSEthan Luis McDonough   READ_FEATURE(AllocateShapeSpec)
12100d0749fSEthan Luis McDonough   READ_FEATURE(AllocateStmt)
12200d0749fSEthan Luis McDonough   READ_FEATURE(Allocation)
12300d0749fSEthan Luis McDonough   READ_FEATURE(AltReturnSpec)
12400d0749fSEthan Luis McDonough   READ_FEATURE(ArithmeticIfStmt)
12500d0749fSEthan Luis McDonough   READ_FEATURE(ArrayConstructor)
12600d0749fSEthan Luis McDonough   READ_FEATURE(ArrayElement)
12700d0749fSEthan Luis McDonough   READ_FEATURE(ArraySpec)
12800d0749fSEthan Luis McDonough   READ_FEATURE(AssignStmt)
12900d0749fSEthan Luis McDonough   READ_FEATURE(AssignedGotoStmt)
13000d0749fSEthan Luis McDonough   READ_FEATURE(AssignmentStmt)
13100d0749fSEthan Luis McDonough   READ_FEATURE(AssociateConstruct)
13200d0749fSEthan Luis McDonough   READ_FEATURE(AssociateStmt)
13300d0749fSEthan Luis McDonough   READ_FEATURE(Association)
13400d0749fSEthan Luis McDonough   READ_FEATURE(AssumedImpliedSpec)
13500d0749fSEthan Luis McDonough   READ_FEATURE(AssumedRankSpec)
13600d0749fSEthan Luis McDonough   READ_FEATURE(AssumedShapeSpec)
13700d0749fSEthan Luis McDonough   READ_FEATURE(AssumedSizeSpec)
13800d0749fSEthan Luis McDonough   READ_FEATURE(Asynchronous)
13900d0749fSEthan Luis McDonough   READ_FEATURE(AsynchronousStmt)
14000d0749fSEthan Luis McDonough   READ_FEATURE(AttrSpec)
14100d0749fSEthan Luis McDonough   READ_FEATURE(BOZLiteralConstant)
14200d0749fSEthan Luis McDonough   READ_FEATURE(BackspaceStmt)
14300d0749fSEthan Luis McDonough   READ_FEATURE(BasedPointer)
14400d0749fSEthan Luis McDonough   READ_FEATURE(BasedPointerStmt)
14500d0749fSEthan Luis McDonough   READ_FEATURE(BindAttr)
14600d0749fSEthan Luis McDonough   READ_FEATURE(BindAttr::Deferred)
14700d0749fSEthan Luis McDonough   READ_FEATURE(BindAttr::Non_Overridable)
14800d0749fSEthan Luis McDonough   READ_FEATURE(BindEntity)
14900d0749fSEthan Luis McDonough   READ_FEATURE(BindEntity::Kind)
15000d0749fSEthan Luis McDonough   READ_FEATURE(BindStmt)
15100d0749fSEthan Luis McDonough   READ_FEATURE(Block)
15200d0749fSEthan Luis McDonough   READ_FEATURE(BlockConstruct)
15300d0749fSEthan Luis McDonough   READ_FEATURE(BlockData)
15400d0749fSEthan Luis McDonough   READ_FEATURE(BlockDataStmt)
15500d0749fSEthan Luis McDonough   READ_FEATURE(BlockSpecificationPart)
15600d0749fSEthan Luis McDonough   READ_FEATURE(BlockStmt)
15700d0749fSEthan Luis McDonough   READ_FEATURE(BoundsRemapping)
15800d0749fSEthan Luis McDonough   READ_FEATURE(BoundsSpec)
15900d0749fSEthan Luis McDonough   READ_FEATURE(Call)
16000d0749fSEthan Luis McDonough   READ_FEATURE(CallStmt)
16100d0749fSEthan Luis McDonough   READ_FEATURE(CaseConstruct)
16200d0749fSEthan Luis McDonough   READ_FEATURE(CaseConstruct::Case)
16300d0749fSEthan Luis McDonough   READ_FEATURE(CaseSelector)
16400d0749fSEthan Luis McDonough   READ_FEATURE(CaseStmt)
16500d0749fSEthan Luis McDonough   READ_FEATURE(CaseValueRange)
16600d0749fSEthan Luis McDonough   READ_FEATURE(CaseValueRange::Range)
16700d0749fSEthan Luis McDonough   READ_FEATURE(ChangeTeamConstruct)
16800d0749fSEthan Luis McDonough   READ_FEATURE(ChangeTeamStmt)
16900d0749fSEthan Luis McDonough   READ_FEATURE(CharLength)
17000d0749fSEthan Luis McDonough   READ_FEATURE(CharLiteralConstant)
17100d0749fSEthan Luis McDonough   READ_FEATURE(CharLiteralConstantSubstring)
17200d0749fSEthan Luis McDonough   READ_FEATURE(CharSelector)
17300d0749fSEthan Luis McDonough   READ_FEATURE(CharSelector::LengthAndKind)
17400d0749fSEthan Luis McDonough   READ_FEATURE(CloseStmt)
17500d0749fSEthan Luis McDonough   READ_FEATURE(CloseStmt::CloseSpec)
17600d0749fSEthan Luis McDonough   READ_FEATURE(CoarrayAssociation)
17700d0749fSEthan Luis McDonough   READ_FEATURE(CoarraySpec)
17800d0749fSEthan Luis McDonough   READ_FEATURE(CodimensionDecl)
17900d0749fSEthan Luis McDonough   READ_FEATURE(CodimensionStmt)
18000d0749fSEthan Luis McDonough   READ_FEATURE(CoindexedNamedObject)
18100d0749fSEthan Luis McDonough   READ_FEATURE(CommonBlockObject)
18200d0749fSEthan Luis McDonough   READ_FEATURE(CommonStmt)
18300d0749fSEthan Luis McDonough   READ_FEATURE(CommonStmt::Block)
18400d0749fSEthan Luis McDonough   READ_FEATURE(CompilerDirective)
18500d0749fSEthan Luis McDonough   READ_FEATURE(CompilerDirective::IgnoreTKR)
18600d0749fSEthan Luis McDonough   READ_FEATURE(CompilerDirective::LoopCount)
18700d0749fSEthan Luis McDonough   READ_FEATURE(CompilerDirective::NameValue)
18800d0749fSEthan Luis McDonough   READ_FEATURE(ComplexLiteralConstant)
18900d0749fSEthan Luis McDonough   READ_FEATURE(ComplexPart)
19000d0749fSEthan Luis McDonough   READ_FEATURE(ComponentArraySpec)
19100d0749fSEthan Luis McDonough   READ_FEATURE(ComponentAttrSpec)
19200d0749fSEthan Luis McDonough   READ_FEATURE(ComponentDataSource)
19300d0749fSEthan Luis McDonough   READ_FEATURE(ComponentDecl)
19400d0749fSEthan Luis McDonough   READ_FEATURE(FillDecl)
19500d0749fSEthan Luis McDonough   READ_FEATURE(ComponentOrFill)
19600d0749fSEthan Luis McDonough   READ_FEATURE(ComponentDefStmt)
19700d0749fSEthan Luis McDonough   READ_FEATURE(ComponentSpec)
19800d0749fSEthan Luis McDonough   READ_FEATURE(ComputedGotoStmt)
19900d0749fSEthan Luis McDonough   READ_FEATURE(ConcurrentControl)
20000d0749fSEthan Luis McDonough   READ_FEATURE(ConcurrentHeader)
20100d0749fSEthan Luis McDonough   READ_FEATURE(ConnectSpec)
20200d0749fSEthan Luis McDonough   READ_FEATURE(ConnectSpec::CharExpr)
20300d0749fSEthan Luis McDonough   READ_FEATURE(ConnectSpec::CharExpr::Kind)
20400d0749fSEthan Luis McDonough   READ_FEATURE(ConnectSpec::Newunit)
20500d0749fSEthan Luis McDonough   READ_FEATURE(ConnectSpec::Recl)
20600d0749fSEthan Luis McDonough   READ_FEATURE(ContainsStmt)
20700d0749fSEthan Luis McDonough   READ_FEATURE(Contiguous)
20800d0749fSEthan Luis McDonough   READ_FEATURE(ContiguousStmt)
20900d0749fSEthan Luis McDonough   READ_FEATURE(ContinueStmt)
21000d0749fSEthan Luis McDonough   READ_FEATURE(CriticalConstruct)
21100d0749fSEthan Luis McDonough   READ_FEATURE(CriticalStmt)
21200d0749fSEthan Luis McDonough   READ_FEATURE(CycleStmt)
21300d0749fSEthan Luis McDonough   READ_FEATURE(DataComponentDefStmt)
21400d0749fSEthan Luis McDonough   READ_FEATURE(DataIDoObject)
21500d0749fSEthan Luis McDonough   READ_FEATURE(DataImpliedDo)
21600d0749fSEthan Luis McDonough   READ_FEATURE(DataRef)
21700d0749fSEthan Luis McDonough   READ_FEATURE(DataStmt)
21800d0749fSEthan Luis McDonough   READ_FEATURE(DataStmtConstant)
21900d0749fSEthan Luis McDonough   READ_FEATURE(DataStmtObject)
22000d0749fSEthan Luis McDonough   READ_FEATURE(DataStmtRepeat)
22100d0749fSEthan Luis McDonough   READ_FEATURE(DataStmtSet)
22200d0749fSEthan Luis McDonough   READ_FEATURE(DataStmtValue)
22300d0749fSEthan Luis McDonough   READ_FEATURE(DeallocateStmt)
22400d0749fSEthan Luis McDonough   READ_FEATURE(DeclarationConstruct)
22500d0749fSEthan Luis McDonough   READ_FEATURE(DeclarationTypeSpec)
22600d0749fSEthan Luis McDonough   READ_FEATURE(DeclarationTypeSpec::Class)
22700d0749fSEthan Luis McDonough   READ_FEATURE(DeclarationTypeSpec::ClassStar)
22800d0749fSEthan Luis McDonough   READ_FEATURE(DeclarationTypeSpec::Record)
22900d0749fSEthan Luis McDonough   READ_FEATURE(DeclarationTypeSpec::Type)
23000d0749fSEthan Luis McDonough   READ_FEATURE(DeclarationTypeSpec::TypeStar)
23100d0749fSEthan Luis McDonough   READ_FEATURE(Default)
23200d0749fSEthan Luis McDonough   READ_FEATURE(DeferredCoshapeSpecList)
23300d0749fSEthan Luis McDonough   READ_FEATURE(DeferredShapeSpecList)
23400d0749fSEthan Luis McDonough   READ_FEATURE(DefinedOpName)
23500d0749fSEthan Luis McDonough   READ_FEATURE(DefinedOperator)
23600d0749fSEthan Luis McDonough   READ_FEATURE(DefinedOperator::IntrinsicOperator)
23700d0749fSEthan Luis McDonough   READ_FEATURE(DerivedTypeDef)
23800d0749fSEthan Luis McDonough   READ_FEATURE(DerivedTypeSpec)
23900d0749fSEthan Luis McDonough   READ_FEATURE(DerivedTypeStmt)
24000d0749fSEthan Luis McDonough   READ_FEATURE(Designator)
24100d0749fSEthan Luis McDonough   READ_FEATURE(DimensionStmt)
24200d0749fSEthan Luis McDonough   READ_FEATURE(DimensionStmt::Declaration)
24300d0749fSEthan Luis McDonough   READ_FEATURE(DoConstruct)
24400d0749fSEthan Luis McDonough   READ_FEATURE(DummyArg)
24500d0749fSEthan Luis McDonough   READ_FEATURE(ElseIfStmt)
24600d0749fSEthan Luis McDonough   READ_FEATURE(ElseStmt)
24700d0749fSEthan Luis McDonough   READ_FEATURE(ElsewhereStmt)
24800d0749fSEthan Luis McDonough   READ_FEATURE(EndAssociateStmt)
24900d0749fSEthan Luis McDonough   READ_FEATURE(EndBlockDataStmt)
25000d0749fSEthan Luis McDonough   READ_FEATURE(EndBlockStmt)
25100d0749fSEthan Luis McDonough   READ_FEATURE(EndChangeTeamStmt)
25200d0749fSEthan Luis McDonough   READ_FEATURE(EndCriticalStmt)
25300d0749fSEthan Luis McDonough   READ_FEATURE(EndDoStmt)
25400d0749fSEthan Luis McDonough   READ_FEATURE(EndEnumStmt)
25500d0749fSEthan Luis McDonough   READ_FEATURE(EndForallStmt)
25600d0749fSEthan Luis McDonough   READ_FEATURE(EndFunctionStmt)
25700d0749fSEthan Luis McDonough   READ_FEATURE(EndIfStmt)
25800d0749fSEthan Luis McDonough   READ_FEATURE(EndInterfaceStmt)
25900d0749fSEthan Luis McDonough   READ_FEATURE(EndLabel)
26000d0749fSEthan Luis McDonough   READ_FEATURE(EndModuleStmt)
26100d0749fSEthan Luis McDonough   READ_FEATURE(EndMpSubprogramStmt)
26200d0749fSEthan Luis McDonough   READ_FEATURE(EndProgramStmt)
26300d0749fSEthan Luis McDonough   READ_FEATURE(EndSelectStmt)
26400d0749fSEthan Luis McDonough   READ_FEATURE(EndSubmoduleStmt)
26500d0749fSEthan Luis McDonough   READ_FEATURE(EndSubroutineStmt)
26600d0749fSEthan Luis McDonough   READ_FEATURE(EndTypeStmt)
26700d0749fSEthan Luis McDonough   READ_FEATURE(EndWhereStmt)
26800d0749fSEthan Luis McDonough   READ_FEATURE(EndfileStmt)
26900d0749fSEthan Luis McDonough   READ_FEATURE(EntityDecl)
27000d0749fSEthan Luis McDonough   READ_FEATURE(EntryStmt)
27100d0749fSEthan Luis McDonough   READ_FEATURE(EnumDef)
27200d0749fSEthan Luis McDonough   READ_FEATURE(EnumDefStmt)
27300d0749fSEthan Luis McDonough   READ_FEATURE(Enumerator)
27400d0749fSEthan Luis McDonough   READ_FEATURE(EnumeratorDefStmt)
27500d0749fSEthan Luis McDonough   READ_FEATURE(EorLabel)
27600d0749fSEthan Luis McDonough   READ_FEATURE(EquivalenceObject)
27700d0749fSEthan Luis McDonough   READ_FEATURE(EquivalenceStmt)
27800d0749fSEthan Luis McDonough   READ_FEATURE(ErrLabel)
27900d0749fSEthan Luis McDonough   READ_FEATURE(ErrorRecovery)
28000d0749fSEthan Luis McDonough   READ_FEATURE(EventPostStmt)
28100d0749fSEthan Luis McDonough   READ_FEATURE(EventWaitStmt)
282a2d7af75SKatherine Rasmussen   READ_FEATURE(EventWaitSpec)
28300d0749fSEthan Luis McDonough   READ_FEATURE(ExecutableConstruct)
28400d0749fSEthan Luis McDonough   READ_FEATURE(ExecutionPart)
28500d0749fSEthan Luis McDonough   READ_FEATURE(ExecutionPartConstruct)
28600d0749fSEthan Luis McDonough   READ_FEATURE(ExitStmt)
28700d0749fSEthan Luis McDonough   READ_FEATURE(ExplicitCoshapeSpec)
28800d0749fSEthan Luis McDonough   READ_FEATURE(ExplicitShapeSpec)
28900d0749fSEthan Luis McDonough   READ_FEATURE(Expr)
29000d0749fSEthan Luis McDonough   READ_FEATURE(Expr::Parentheses)
29100d0749fSEthan Luis McDonough   READ_FEATURE(Expr::UnaryPlus)
29200d0749fSEthan Luis McDonough   READ_FEATURE(Expr::Negate)
29300d0749fSEthan Luis McDonough   READ_FEATURE(Expr::NOT)
29400d0749fSEthan Luis McDonough   READ_FEATURE(Expr::PercentLoc)
29500d0749fSEthan Luis McDonough   READ_FEATURE(Expr::DefinedUnary)
29600d0749fSEthan Luis McDonough   READ_FEATURE(Expr::Power)
29700d0749fSEthan Luis McDonough   READ_FEATURE(Expr::Multiply)
29800d0749fSEthan Luis McDonough   READ_FEATURE(Expr::Divide)
29900d0749fSEthan Luis McDonough   READ_FEATURE(Expr::Add)
30000d0749fSEthan Luis McDonough   READ_FEATURE(Expr::Subtract)
30100d0749fSEthan Luis McDonough   READ_FEATURE(Expr::Concat)
30200d0749fSEthan Luis McDonough   READ_FEATURE(Expr::LT)
30300d0749fSEthan Luis McDonough   READ_FEATURE(Expr::LE)
30400d0749fSEthan Luis McDonough   READ_FEATURE(Expr::EQ)
30500d0749fSEthan Luis McDonough   READ_FEATURE(Expr::NE)
30600d0749fSEthan Luis McDonough   READ_FEATURE(Expr::GE)
30700d0749fSEthan Luis McDonough   READ_FEATURE(Expr::GT)
30800d0749fSEthan Luis McDonough   READ_FEATURE(Expr::AND)
30900d0749fSEthan Luis McDonough   READ_FEATURE(Expr::OR)
31000d0749fSEthan Luis McDonough   READ_FEATURE(Expr::EQV)
31100d0749fSEthan Luis McDonough   READ_FEATURE(Expr::NEQV)
31200d0749fSEthan Luis McDonough   READ_FEATURE(Expr::DefinedBinary)
31300d0749fSEthan Luis McDonough   READ_FEATURE(Expr::ComplexConstructor)
31400d0749fSEthan Luis McDonough   READ_FEATURE(External)
31500d0749fSEthan Luis McDonough   READ_FEATURE(ExternalStmt)
31600d0749fSEthan Luis McDonough   READ_FEATURE(FailImageStmt)
31700d0749fSEthan Luis McDonough   READ_FEATURE(FileUnitNumber)
31800d0749fSEthan Luis McDonough   READ_FEATURE(FinalProcedureStmt)
31900d0749fSEthan Luis McDonough   READ_FEATURE(FlushStmt)
32000d0749fSEthan Luis McDonough   READ_FEATURE(ForallAssignmentStmt)
32100d0749fSEthan Luis McDonough   READ_FEATURE(ForallBodyConstruct)
32200d0749fSEthan Luis McDonough   READ_FEATURE(ForallConstruct)
32300d0749fSEthan Luis McDonough   READ_FEATURE(ForallConstructStmt)
32400d0749fSEthan Luis McDonough   READ_FEATURE(ForallStmt)
32500d0749fSEthan Luis McDonough   READ_FEATURE(FormTeamStmt)
32600d0749fSEthan Luis McDonough   READ_FEATURE(FormTeamStmt::FormTeamSpec)
32700d0749fSEthan Luis McDonough   READ_FEATURE(Format)
32800d0749fSEthan Luis McDonough   READ_FEATURE(FormatStmt)
32900d0749fSEthan Luis McDonough   READ_FEATURE(FunctionReference)
33000d0749fSEthan Luis McDonough   READ_FEATURE(FunctionStmt)
33100d0749fSEthan Luis McDonough   READ_FEATURE(FunctionSubprogram)
33200d0749fSEthan Luis McDonough   READ_FEATURE(GenericSpec)
33300d0749fSEthan Luis McDonough   READ_FEATURE(GenericSpec::Assignment)
33400d0749fSEthan Luis McDonough   READ_FEATURE(GenericSpec::ReadFormatted)
33500d0749fSEthan Luis McDonough   READ_FEATURE(GenericSpec::ReadUnformatted)
33600d0749fSEthan Luis McDonough   READ_FEATURE(GenericSpec::WriteFormatted)
33700d0749fSEthan Luis McDonough   READ_FEATURE(GenericSpec::WriteUnformatted)
33800d0749fSEthan Luis McDonough   READ_FEATURE(GenericStmt)
33900d0749fSEthan Luis McDonough   READ_FEATURE(GotoStmt)
34000d0749fSEthan Luis McDonough   READ_FEATURE(HollerithLiteralConstant)
34100d0749fSEthan Luis McDonough   READ_FEATURE(IdExpr)
34200d0749fSEthan Luis McDonough   READ_FEATURE(IdVariable)
34300d0749fSEthan Luis McDonough   READ_FEATURE(IfConstruct)
34400d0749fSEthan Luis McDonough   READ_FEATURE(IfConstruct::ElseBlock)
34500d0749fSEthan Luis McDonough   READ_FEATURE(IfConstruct::ElseIfBlock)
34600d0749fSEthan Luis McDonough   READ_FEATURE(IfStmt)
34700d0749fSEthan Luis McDonough   READ_FEATURE(IfThenStmt)
34800d0749fSEthan Luis McDonough   READ_FEATURE(TeamValue)
34900d0749fSEthan Luis McDonough   READ_FEATURE(ImageSelector)
35000d0749fSEthan Luis McDonough   READ_FEATURE(ImageSelectorSpec)
35100d0749fSEthan Luis McDonough   READ_FEATURE(ImageSelectorSpec::Stat)
35200d0749fSEthan Luis McDonough   READ_FEATURE(ImageSelectorSpec::Team_Number)
35300d0749fSEthan Luis McDonough   READ_FEATURE(ImplicitPart)
35400d0749fSEthan Luis McDonough   READ_FEATURE(ImplicitPartStmt)
35500d0749fSEthan Luis McDonough   READ_FEATURE(ImplicitSpec)
35600d0749fSEthan Luis McDonough   READ_FEATURE(ImplicitStmt)
35700d0749fSEthan Luis McDonough   READ_FEATURE(ImplicitStmt::ImplicitNoneNameSpec)
35800d0749fSEthan Luis McDonough   READ_FEATURE(ImpliedShapeSpec)
35900d0749fSEthan Luis McDonough   READ_FEATURE(ImportStmt)
36000d0749fSEthan Luis McDonough   READ_FEATURE(Initialization)
36100d0749fSEthan Luis McDonough   READ_FEATURE(InputImpliedDo)
36200d0749fSEthan Luis McDonough   READ_FEATURE(InputItem)
36300d0749fSEthan Luis McDonough   READ_FEATURE(InquireSpec)
36400d0749fSEthan Luis McDonough   READ_FEATURE(InquireSpec::CharVar)
36500d0749fSEthan Luis McDonough   READ_FEATURE(InquireSpec::CharVar::Kind)
36600d0749fSEthan Luis McDonough   READ_FEATURE(InquireSpec::IntVar)
36700d0749fSEthan Luis McDonough   READ_FEATURE(InquireSpec::IntVar::Kind)
36800d0749fSEthan Luis McDonough   READ_FEATURE(InquireSpec::LogVar)
36900d0749fSEthan Luis McDonough   READ_FEATURE(InquireSpec::LogVar::Kind)
37000d0749fSEthan Luis McDonough   READ_FEATURE(InquireStmt)
37100d0749fSEthan Luis McDonough   READ_FEATURE(InquireStmt::Iolength)
37200d0749fSEthan Luis McDonough   READ_FEATURE(IntegerTypeSpec)
37300d0749fSEthan Luis McDonough   READ_FEATURE(IntentSpec)
37400d0749fSEthan Luis McDonough   READ_FEATURE(IntentSpec::Intent)
37500d0749fSEthan Luis McDonough   READ_FEATURE(IntentStmt)
37600d0749fSEthan Luis McDonough   READ_FEATURE(InterfaceBlock)
37700d0749fSEthan Luis McDonough   READ_FEATURE(InterfaceBody)
37800d0749fSEthan Luis McDonough   READ_FEATURE(InterfaceBody::Function)
37900d0749fSEthan Luis McDonough   READ_FEATURE(InterfaceBody::Subroutine)
38000d0749fSEthan Luis McDonough   READ_FEATURE(InterfaceSpecification)
38100d0749fSEthan Luis McDonough   READ_FEATURE(InterfaceStmt)
38200d0749fSEthan Luis McDonough   READ_FEATURE(InternalSubprogram)
38300d0749fSEthan Luis McDonough   READ_FEATURE(InternalSubprogramPart)
38400d0749fSEthan Luis McDonough   READ_FEATURE(Intrinsic)
38500d0749fSEthan Luis McDonough   READ_FEATURE(IntrinsicStmt)
38600d0749fSEthan Luis McDonough   READ_FEATURE(IntrinsicTypeSpec)
38700d0749fSEthan Luis McDonough   READ_FEATURE(IntrinsicTypeSpec::Character)
38800d0749fSEthan Luis McDonough   READ_FEATURE(IntrinsicTypeSpec::Complex)
38900d0749fSEthan Luis McDonough   READ_FEATURE(IntrinsicTypeSpec::DoubleComplex)
39000d0749fSEthan Luis McDonough   READ_FEATURE(IntrinsicTypeSpec::DoublePrecision)
39100d0749fSEthan Luis McDonough   READ_FEATURE(IntrinsicTypeSpec::Logical)
39200d0749fSEthan Luis McDonough   READ_FEATURE(IntrinsicTypeSpec::Real)
39300d0749fSEthan Luis McDonough   READ_FEATURE(IoControlSpec)
39400d0749fSEthan Luis McDonough   READ_FEATURE(IoControlSpec::Asynchronous)
39500d0749fSEthan Luis McDonough   READ_FEATURE(IoControlSpec::CharExpr)
39600d0749fSEthan Luis McDonough   READ_FEATURE(IoControlSpec::CharExpr::Kind)
39700d0749fSEthan Luis McDonough   READ_FEATURE(IoControlSpec::Pos)
39800d0749fSEthan Luis McDonough   READ_FEATURE(IoControlSpec::Rec)
39900d0749fSEthan Luis McDonough   READ_FEATURE(IoControlSpec::Size)
40000d0749fSEthan Luis McDonough   READ_FEATURE(IoUnit)
40100d0749fSEthan Luis McDonough   READ_FEATURE(Keyword)
40200d0749fSEthan Luis McDonough   READ_FEATURE(KindParam)
40300d0749fSEthan Luis McDonough   READ_FEATURE(KindSelector)
40400d0749fSEthan Luis McDonough   READ_FEATURE(KindSelector::StarSize)
40500d0749fSEthan Luis McDonough   READ_FEATURE(LabelDoStmt)
40600d0749fSEthan Luis McDonough   READ_FEATURE(LanguageBindingSpec)
40700d0749fSEthan Luis McDonough   READ_FEATURE(LengthSelector)
40800d0749fSEthan Luis McDonough   READ_FEATURE(LetterSpec)
40900d0749fSEthan Luis McDonough   READ_FEATURE(LiteralConstant)
41000d0749fSEthan Luis McDonough   READ_FEATURE(IntLiteralConstant)
4113af717d6Skhaki3   READ_FEATURE(ReductionOperator)
4123af717d6Skhaki3   READ_FEATURE(ReductionOperator::Operator)
41300d0749fSEthan Luis McDonough   READ_FEATURE(LocalitySpec)
41400d0749fSEthan Luis McDonough   READ_FEATURE(LocalitySpec::DefaultNone)
41500d0749fSEthan Luis McDonough   READ_FEATURE(LocalitySpec::Local)
41600d0749fSEthan Luis McDonough   READ_FEATURE(LocalitySpec::LocalInit)
4173af717d6Skhaki3   READ_FEATURE(LocalitySpec::Reduce)
41800d0749fSEthan Luis McDonough   READ_FEATURE(LocalitySpec::Shared)
41900d0749fSEthan Luis McDonough   READ_FEATURE(LockStmt)
42000d0749fSEthan Luis McDonough   READ_FEATURE(LockStmt::LockStat)
42100d0749fSEthan Luis McDonough   READ_FEATURE(LogicalLiteralConstant)
42200d0749fSEthan Luis McDonough   READ_FEATURE(LoopControl)
42300d0749fSEthan Luis McDonough   READ_FEATURE(LoopControl::Concurrent)
42400d0749fSEthan Luis McDonough   READ_FEATURE(MainProgram)
42500d0749fSEthan Luis McDonough   READ_FEATURE(Map)
42600d0749fSEthan Luis McDonough   READ_FEATURE(Map::EndMapStmt)
42700d0749fSEthan Luis McDonough   READ_FEATURE(Map::MapStmt)
42800d0749fSEthan Luis McDonough   READ_FEATURE(MaskedElsewhereStmt)
42900d0749fSEthan Luis McDonough   READ_FEATURE(Module)
43000d0749fSEthan Luis McDonough   READ_FEATURE(ModuleStmt)
43100d0749fSEthan Luis McDonough   READ_FEATURE(ModuleSubprogram)
43200d0749fSEthan Luis McDonough   READ_FEATURE(ModuleSubprogramPart)
43300d0749fSEthan Luis McDonough   READ_FEATURE(MpSubprogramStmt)
43400d0749fSEthan Luis McDonough   READ_FEATURE(MsgVariable)
43500d0749fSEthan Luis McDonough   READ_FEATURE(Name)
43600d0749fSEthan Luis McDonough   READ_FEATURE(NamedConstant)
43700d0749fSEthan Luis McDonough   READ_FEATURE(NamedConstantDef)
43800d0749fSEthan Luis McDonough   READ_FEATURE(NamelistStmt)
43900d0749fSEthan Luis McDonough   READ_FEATURE(NamelistStmt::Group)
44000d0749fSEthan Luis McDonough   READ_FEATURE(NonLabelDoStmt)
44100d0749fSEthan Luis McDonough   READ_FEATURE(NoPass)
442a2d7af75SKatherine Rasmussen   READ_FEATURE(NotifyWaitStmt)
44300d0749fSEthan Luis McDonough   READ_FEATURE(NullifyStmt)
44400d0749fSEthan Luis McDonough   READ_FEATURE(NullInit)
44500d0749fSEthan Luis McDonough   READ_FEATURE(ObjectDecl)
44600d0749fSEthan Luis McDonough   READ_FEATURE(OldParameterStmt)
44700d0749fSEthan Luis McDonough   READ_FEATURE(OmpAlignedClause)
44800d0749fSEthan Luis McDonough   READ_FEATURE(OmpAtomic)
44900d0749fSEthan Luis McDonough   READ_FEATURE(OmpAtomicCapture)
45000d0749fSEthan Luis McDonough   READ_FEATURE(OmpAtomicCapture::Stmt1)
45100d0749fSEthan Luis McDonough   READ_FEATURE(OmpAtomicCapture::Stmt2)
45200d0749fSEthan Luis McDonough   READ_FEATURE(OmpAtomicRead)
45300d0749fSEthan Luis McDonough   READ_FEATURE(OmpAtomicUpdate)
45400d0749fSEthan Luis McDonough   READ_FEATURE(OmpAtomicWrite)
45500d0749fSEthan Luis McDonough   READ_FEATURE(OmpBeginBlockDirective)
45600d0749fSEthan Luis McDonough   READ_FEATURE(OmpBeginLoopDirective)
45700d0749fSEthan Luis McDonough   READ_FEATURE(OmpBeginSectionsDirective)
45800d0749fSEthan Luis McDonough   READ_FEATURE(OmpBlockDirective)
45900d0749fSEthan Luis McDonough   READ_FEATURE(OmpCancelType)
46000d0749fSEthan Luis McDonough   READ_FEATURE(OmpCancelType::Type)
46100d0749fSEthan Luis McDonough   READ_FEATURE(OmpClause)
46200d0749fSEthan Luis McDonough   READ_FEATURE(OmpClauseList)
46300d0749fSEthan Luis McDonough   READ_FEATURE(OmpCriticalDirective)
46400d0749fSEthan Luis McDonough   READ_FEATURE(OmpDeclareTargetSpecifier)
46500d0749fSEthan Luis McDonough   READ_FEATURE(OmpDeclareTargetWithClause)
46600d0749fSEthan Luis McDonough   READ_FEATURE(OmpDeclareTargetWithList)
46700d0749fSEthan Luis McDonough   READ_FEATURE(OmpDefaultClause)
468608f4ae1SKrzysztof Parzyszek   READ_FEATURE(OmpDefaultClause::DataSharingAttribute)
46900d0749fSEthan Luis McDonough   READ_FEATURE(OmpDefaultmapClause)
47000d0749fSEthan Luis McDonough   READ_FEATURE(OmpDefaultmapClause::ImplicitBehavior)
4714fc1141eSKrzysztof Parzyszek   READ_FEATURE(OmpVariableCategory::Value)
47200d0749fSEthan Luis McDonough   READ_FEATURE(OmpDependClause)
473f87737f3SKrzysztof Parzyszek   READ_FEATURE(OmpDependClause::TaskDep)
474f87737f3SKrzysztof Parzyszek   READ_FEATURE(OmpDoacross::Sink)
475f87737f3SKrzysztof Parzyszek   READ_FEATURE(OmpDoacross::Source)
476f87737f3SKrzysztof Parzyszek   READ_FEATURE(OmpDoacrossClause)
477f87737f3SKrzysztof Parzyszek   READ_FEATURE(OmpDependenceType)
478cfd67c21SKrzysztof Parzyszek   READ_FEATURE(OmpDependenceType::Value)
47909a4bcf1SKrzysztof Parzyszek   READ_FEATURE(OmpTaskDependenceType)
480cfd67c21SKrzysztof Parzyszek   READ_FEATURE(OmpTaskDependenceType::Value)
481f87737f3SKrzysztof Parzyszek   READ_FEATURE(OmpIteration)
482f87737f3SKrzysztof Parzyszek   READ_FEATURE(OmpIterationOffset)
483f87737f3SKrzysztof Parzyszek   READ_FEATURE(OmpIterationVector)
4846311ab21SEthan Luis McDonough   READ_FEATURE(OmpEndAllocators)
48500d0749fSEthan Luis McDonough   READ_FEATURE(OmpEndAtomic)
48600d0749fSEthan Luis McDonough   READ_FEATURE(OmpEndBlockDirective)
48700d0749fSEthan Luis McDonough   READ_FEATURE(OmpEndCriticalDirective)
48800d0749fSEthan Luis McDonough   READ_FEATURE(OmpEndLoopDirective)
48900d0749fSEthan Luis McDonough   READ_FEATURE(OmpEndSectionsDirective)
4905621929fSKiran Chandramohan   READ_FEATURE(OmpGrainsizeClause)
491bde79c0eSKrzysztof Parzyszek   READ_FEATURE(OmpGrainsizeClause::Modifier)
492bde79c0eSKrzysztof Parzyszek   READ_FEATURE(OmpPrescriptiveness)
493bde79c0eSKrzysztof Parzyszek   READ_FEATURE(OmpPrescriptiveness::Value)
49400d0749fSEthan Luis McDonough   READ_FEATURE(OmpIfClause)
49533faa828SKrzysztof Parzyszek   READ_FEATURE(OmpIfClause::Modifier)
49633faa828SKrzysztof Parzyszek   READ_FEATURE(OmpDirectiveNameModifier)
49700d0749fSEthan Luis McDonough   READ_FEATURE(OmpLinearClause)
498*03cbe426SKrzysztof Parzyszek   READ_FEATURE(OmpLinearClause::Modifier)
49900d0749fSEthan Luis McDonough   READ_FEATURE(OmpLinearModifier)
500cfd67c21SKrzysztof Parzyszek   READ_FEATURE(OmpLinearModifier::Value)
50100d0749fSEthan Luis McDonough   READ_FEATURE(OmpLoopDirective)
50200d0749fSEthan Luis McDonough   READ_FEATURE(OmpMapClause)
50352755ac2SKrzysztof Parzyszek   READ_FEATURE(OmpMapClause::Modifier)
5045621929fSKiran Chandramohan   READ_FEATURE(OmpNumTasksClause)
505bde79c0eSKrzysztof Parzyszek   READ_FEATURE(OmpNumTasksClause::Modifier)
50600d0749fSEthan Luis McDonough   READ_FEATURE(OmpObject)
50700d0749fSEthan Luis McDonough   READ_FEATURE(OmpObjectList)
50800d0749fSEthan Luis McDonough   READ_FEATURE(OmpOrderClause)
509e79cd246SKrzysztof Parzyszek   READ_FEATURE(OmpOrderClause::Ordering)
51000d0749fSEthan Luis McDonough   READ_FEATURE(OmpOrderModifier)
511e79cd246SKrzysztof Parzyszek   READ_FEATURE(OmpOrderModifier::Value)
51200d0749fSEthan Luis McDonough   READ_FEATURE(OmpProcBindClause)
513608f4ae1SKrzysztof Parzyszek   READ_FEATURE(OmpProcBindClause::AffinityPolicy)
51400d0749fSEthan Luis McDonough   READ_FEATURE(OmpReductionClause)
51500d0749fSEthan Luis McDonough   READ_FEATURE(OmpInReductionClause)
51600d0749fSEthan Luis McDonough   READ_FEATURE(OmpReductionCombiner)
51700d0749fSEthan Luis McDonough   READ_FEATURE(OmpReductionCombiner::FunctionCombiner)
51800d0749fSEthan Luis McDonough   READ_FEATURE(OmpReductionInitializerClause)
519cfd67c21SKrzysztof Parzyszek   READ_FEATURE(OmpReductionIdentifier)
52000d0749fSEthan Luis McDonough   READ_FEATURE(OmpAllocateClause)
521cdbd2287SKrzysztof Parzyszek   READ_FEATURE(OmpAllocateClause::Modifier)
522cdbd2287SKrzysztof Parzyszek   READ_FEATURE(OmpAllocatorSimpleModifier)
523cdbd2287SKrzysztof Parzyszek   READ_FEATURE(OmpAllocatorComplexModifier)
524cdbd2287SKrzysztof Parzyszek   READ_FEATURE(OmpAlignModifier)
52500d0749fSEthan Luis McDonough   READ_FEATURE(OmpScheduleClause)
526e79cd246SKrzysztof Parzyszek   READ_FEATURE(OmpScheduleClause::Kind)
527e79cd246SKrzysztof Parzyszek   READ_FEATURE(OmpScheduleClause::Modifier)
52805096590SKrzysztof Parzyszek   READ_FEATURE(OmpDeviceModifier)
52900d0749fSEthan Luis McDonough   READ_FEATURE(OmpDeviceClause)
53005096590SKrzysztof Parzyszek   READ_FEATURE(OmpDeviceClause::Modifier)
53100d0749fSEthan Luis McDonough   READ_FEATURE(OmpDeviceTypeClause)
532608f4ae1SKrzysztof Parzyszek   READ_FEATURE(OmpDeviceTypeClause::DeviceTypeDescription)
533e79cd246SKrzysztof Parzyszek   READ_FEATURE(OmpChunkModifier)
534e79cd246SKrzysztof Parzyszek   READ_FEATURE(OmpChunkModifier::Value)
535e79cd246SKrzysztof Parzyszek   READ_FEATURE(OmpOrderingModifier)
536e79cd246SKrzysztof Parzyszek   READ_FEATURE(OmpOrderingModifier::Value)
53700d0749fSEthan Luis McDonough   READ_FEATURE(OmpSectionBlocks)
53800d0749fSEthan Luis McDonough   READ_FEATURE(OmpSectionsDirective)
53900d0749fSEthan Luis McDonough   READ_FEATURE(OmpSimpleStandaloneDirective)
54000d0749fSEthan Luis McDonough   READ_FEATURE(Only)
54100d0749fSEthan Luis McDonough   READ_FEATURE(OpenACCAtomicConstruct)
54200d0749fSEthan Luis McDonough   READ_FEATURE(OpenACCBlockConstruct)
54300d0749fSEthan Luis McDonough   READ_FEATURE(OpenACCCacheConstruct)
54400d0749fSEthan Luis McDonough   READ_FEATURE(OpenACCCombinedConstruct)
54500d0749fSEthan Luis McDonough   READ_FEATURE(OpenACCConstruct)
54600d0749fSEthan Luis McDonough   READ_FEATURE(OpenACCDeclarativeConstruct)
54700d0749fSEthan Luis McDonough   READ_FEATURE(OpenACCLoopConstruct)
54800d0749fSEthan Luis McDonough   READ_FEATURE(OpenACCRoutineConstruct)
54900d0749fSEthan Luis McDonough   READ_FEATURE(OpenACCStandaloneDeclarativeConstruct)
55000d0749fSEthan Luis McDonough   READ_FEATURE(OpenACCStandaloneConstruct)
55100d0749fSEthan Luis McDonough   READ_FEATURE(OpenACCWaitConstruct)
55200d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPAtomicConstruct)
55300d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPBlockConstruct)
55400d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPCancelConstruct)
55500d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPCancelConstruct::If)
55600d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPCancellationPointConstruct)
55700d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPConstruct)
55800d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPCriticalConstruct)
55900d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPDeclarativeAllocate)
56000d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPDeclarativeConstruct)
56100d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPDeclareReductionConstruct)
56200d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPDeclareSimdConstruct)
56300d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPDeclareTargetConstruct)
56400d0749fSEthan Luis McDonough   READ_FEATURE(OmpMemoryOrderClause)
56500d0749fSEthan Luis McDonough   READ_FEATURE(OmpAtomicClause)
56600d0749fSEthan Luis McDonough   READ_FEATURE(OmpAtomicClauseList)
56700d0749fSEthan Luis McDonough   READ_FEATURE(OmpAtomicDefaultMemOrderClause)
568edc2fb07SSergio Afonso   READ_FEATURE(OmpAtomicDefaultMemOrderType)
56900d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPFlushConstruct)
57000d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPLoopConstruct)
57100d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPExecutableAllocate)
5726311ab21SEthan Luis McDonough   READ_FEATURE(OpenMPAllocatorsConstruct)
57300d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPRequiresConstruct)
57400d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPSimpleStandaloneConstruct)
57500d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPStandaloneConstruct)
57600d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPSectionConstruct)
57700d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPSectionsConstruct)
57800d0749fSEthan Luis McDonough   READ_FEATURE(OpenMPThreadprivate)
57900d0749fSEthan Luis McDonough   READ_FEATURE(OpenStmt)
58000d0749fSEthan Luis McDonough   READ_FEATURE(Optional)
58100d0749fSEthan Luis McDonough   READ_FEATURE(OptionalStmt)
58200d0749fSEthan Luis McDonough   READ_FEATURE(OtherSpecificationStmt)
58300d0749fSEthan Luis McDonough   READ_FEATURE(OutputImpliedDo)
58400d0749fSEthan Luis McDonough   READ_FEATURE(OutputItem)
58500d0749fSEthan Luis McDonough   READ_FEATURE(Parameter)
58600d0749fSEthan Luis McDonough   READ_FEATURE(ParameterStmt)
58700d0749fSEthan Luis McDonough   READ_FEATURE(ParentIdentifier)
58800d0749fSEthan Luis McDonough   READ_FEATURE(Pass)
58900d0749fSEthan Luis McDonough   READ_FEATURE(PauseStmt)
59000d0749fSEthan Luis McDonough   READ_FEATURE(Pointer)
59100d0749fSEthan Luis McDonough   READ_FEATURE(PointerAssignmentStmt)
59200d0749fSEthan Luis McDonough   READ_FEATURE(PointerAssignmentStmt::Bounds)
59300d0749fSEthan Luis McDonough   READ_FEATURE(PointerDecl)
59400d0749fSEthan Luis McDonough   READ_FEATURE(PointerObject)
59500d0749fSEthan Luis McDonough   READ_FEATURE(PointerStmt)
59600d0749fSEthan Luis McDonough   READ_FEATURE(PositionOrFlushSpec)
59700d0749fSEthan Luis McDonough   READ_FEATURE(PrefixSpec)
59800d0749fSEthan Luis McDonough   READ_FEATURE(PrefixSpec::Elemental)
59900d0749fSEthan Luis McDonough   READ_FEATURE(PrefixSpec::Impure)
60000d0749fSEthan Luis McDonough   READ_FEATURE(PrefixSpec::Module)
60100d0749fSEthan Luis McDonough   READ_FEATURE(PrefixSpec::Non_Recursive)
60200d0749fSEthan Luis McDonough   READ_FEATURE(PrefixSpec::Pure)
60300d0749fSEthan Luis McDonough   READ_FEATURE(PrefixSpec::Recursive)
60400d0749fSEthan Luis McDonough   READ_FEATURE(PrintStmt)
60500d0749fSEthan Luis McDonough   READ_FEATURE(PrivateStmt)
60600d0749fSEthan Luis McDonough   READ_FEATURE(PrivateOrSequence)
60700d0749fSEthan Luis McDonough   READ_FEATURE(ProcAttrSpec)
60800d0749fSEthan Luis McDonough   READ_FEATURE(ProcComponentAttrSpec)
60900d0749fSEthan Luis McDonough   READ_FEATURE(ProcComponentDefStmt)
61000d0749fSEthan Luis McDonough   READ_FEATURE(ProcComponentRef)
61100d0749fSEthan Luis McDonough   READ_FEATURE(ProcDecl)
61200d0749fSEthan Luis McDonough   READ_FEATURE(ProcInterface)
61300d0749fSEthan Luis McDonough   READ_FEATURE(ProcPointerInit)
61400d0749fSEthan Luis McDonough   READ_FEATURE(ProcedureDeclarationStmt)
61500d0749fSEthan Luis McDonough   READ_FEATURE(ProcedureDesignator)
61600d0749fSEthan Luis McDonough   READ_FEATURE(ProcedureStmt)
61700d0749fSEthan Luis McDonough   READ_FEATURE(ProcedureStmt::Kind)
61800d0749fSEthan Luis McDonough   READ_FEATURE(Program)
61900d0749fSEthan Luis McDonough   READ_FEATURE(ProgramStmt)
62000d0749fSEthan Luis McDonough   READ_FEATURE(ProgramUnit)
62100d0749fSEthan Luis McDonough   READ_FEATURE(Protected)
62200d0749fSEthan Luis McDonough   READ_FEATURE(ProtectedStmt)
62300d0749fSEthan Luis McDonough   READ_FEATURE(ReadStmt)
62400d0749fSEthan Luis McDonough   READ_FEATURE(RealLiteralConstant)
62500d0749fSEthan Luis McDonough   READ_FEATURE(RealLiteralConstant::Real)
62600d0749fSEthan Luis McDonough   READ_FEATURE(Rename)
62700d0749fSEthan Luis McDonough   READ_FEATURE(Rename::Names)
62800d0749fSEthan Luis McDonough   READ_FEATURE(Rename::Operators)
62900d0749fSEthan Luis McDonough   READ_FEATURE(ReturnStmt)
63000d0749fSEthan Luis McDonough   READ_FEATURE(RewindStmt)
63100d0749fSEthan Luis McDonough   READ_FEATURE(Save)
63200d0749fSEthan Luis McDonough   READ_FEATURE(SaveStmt)
63300d0749fSEthan Luis McDonough   READ_FEATURE(SavedEntity)
63400d0749fSEthan Luis McDonough   READ_FEATURE(SavedEntity::Kind)
63500d0749fSEthan Luis McDonough   READ_FEATURE(SectionSubscript)
63600d0749fSEthan Luis McDonough   READ_FEATURE(SelectCaseStmt)
63700d0749fSEthan Luis McDonough   READ_FEATURE(SelectRankCaseStmt)
63800d0749fSEthan Luis McDonough   READ_FEATURE(SelectRankCaseStmt::Rank)
63900d0749fSEthan Luis McDonough   READ_FEATURE(SelectRankConstruct)
64000d0749fSEthan Luis McDonough   READ_FEATURE(SelectRankConstruct::RankCase)
64100d0749fSEthan Luis McDonough   READ_FEATURE(SelectRankStmt)
64200d0749fSEthan Luis McDonough   READ_FEATURE(SelectTypeConstruct)
64300d0749fSEthan Luis McDonough   READ_FEATURE(SelectTypeConstruct::TypeCase)
64400d0749fSEthan Luis McDonough   READ_FEATURE(SelectTypeStmt)
64500d0749fSEthan Luis McDonough   READ_FEATURE(Selector)
64600d0749fSEthan Luis McDonough   READ_FEATURE(SeparateModuleSubprogram)
64700d0749fSEthan Luis McDonough   READ_FEATURE(SequenceStmt)
64800d0749fSEthan Luis McDonough   READ_FEATURE(Sign)
64900d0749fSEthan Luis McDonough   READ_FEATURE(SignedComplexLiteralConstant)
65000d0749fSEthan Luis McDonough   READ_FEATURE(SignedIntLiteralConstant)
65100d0749fSEthan Luis McDonough   READ_FEATURE(SignedRealLiteralConstant)
65200d0749fSEthan Luis McDonough   READ_FEATURE(SpecificationConstruct)
65300d0749fSEthan Luis McDonough   READ_FEATURE(SpecificationExpr)
65400d0749fSEthan Luis McDonough   READ_FEATURE(SpecificationPart)
65500d0749fSEthan Luis McDonough   READ_FEATURE(Star)
65600d0749fSEthan Luis McDonough   READ_FEATURE(StatOrErrmsg)
65700d0749fSEthan Luis McDonough   READ_FEATURE(StatVariable)
65800d0749fSEthan Luis McDonough   READ_FEATURE(StatusExpr)
65900d0749fSEthan Luis McDonough   READ_FEATURE(StmtFunctionStmt)
66000d0749fSEthan Luis McDonough   READ_FEATURE(StopCode)
66100d0749fSEthan Luis McDonough   READ_FEATURE(StopStmt)
66200d0749fSEthan Luis McDonough   READ_FEATURE(StopStmt::Kind)
66300d0749fSEthan Luis McDonough   READ_FEATURE(StructureComponent)
66400d0749fSEthan Luis McDonough   READ_FEATURE(StructureConstructor)
66500d0749fSEthan Luis McDonough   READ_FEATURE(StructureDef)
66600d0749fSEthan Luis McDonough   READ_FEATURE(StructureDef::EndStructureStmt)
66700d0749fSEthan Luis McDonough   READ_FEATURE(StructureField)
66800d0749fSEthan Luis McDonough   READ_FEATURE(StructureStmt)
66900d0749fSEthan Luis McDonough   READ_FEATURE(Submodule)
67000d0749fSEthan Luis McDonough   READ_FEATURE(SubmoduleStmt)
67100d0749fSEthan Luis McDonough   READ_FEATURE(SubroutineStmt)
67200d0749fSEthan Luis McDonough   READ_FEATURE(SubroutineSubprogram)
67300d0749fSEthan Luis McDonough   READ_FEATURE(SubscriptTriplet)
67400d0749fSEthan Luis McDonough   READ_FEATURE(Substring)
67500d0749fSEthan Luis McDonough   READ_FEATURE(SubstringInquiry)
67600d0749fSEthan Luis McDonough   READ_FEATURE(SubstringRange)
67700d0749fSEthan Luis McDonough   READ_FEATURE(Suffix)
67800d0749fSEthan Luis McDonough   READ_FEATURE(SyncAllStmt)
67900d0749fSEthan Luis McDonough   READ_FEATURE(SyncImagesStmt)
68000d0749fSEthan Luis McDonough   READ_FEATURE(SyncImagesStmt::ImageSet)
68100d0749fSEthan Luis McDonough   READ_FEATURE(SyncMemoryStmt)
68200d0749fSEthan Luis McDonough   READ_FEATURE(SyncTeamStmt)
68300d0749fSEthan Luis McDonough   READ_FEATURE(Target)
68400d0749fSEthan Luis McDonough   READ_FEATURE(TargetStmt)
68500d0749fSEthan Luis McDonough   READ_FEATURE(TypeAttrSpec)
68600d0749fSEthan Luis McDonough   READ_FEATURE(TypeAttrSpec::BindC)
68700d0749fSEthan Luis McDonough   READ_FEATURE(TypeAttrSpec::Extends)
68800d0749fSEthan Luis McDonough   READ_FEATURE(TypeBoundGenericStmt)
68900d0749fSEthan Luis McDonough   READ_FEATURE(TypeBoundProcBinding)
69000d0749fSEthan Luis McDonough   READ_FEATURE(TypeBoundProcDecl)
69100d0749fSEthan Luis McDonough   READ_FEATURE(TypeBoundProcedurePart)
69200d0749fSEthan Luis McDonough   READ_FEATURE(TypeBoundProcedureStmt)
69300d0749fSEthan Luis McDonough   READ_FEATURE(TypeBoundProcedureStmt::WithInterface)
69400d0749fSEthan Luis McDonough   READ_FEATURE(TypeBoundProcedureStmt::WithoutInterface)
69500d0749fSEthan Luis McDonough   READ_FEATURE(TypeDeclarationStmt)
69600d0749fSEthan Luis McDonough   READ_FEATURE(TypeGuardStmt)
69700d0749fSEthan Luis McDonough   READ_FEATURE(TypeGuardStmt::Guard)
69800d0749fSEthan Luis McDonough   READ_FEATURE(TypeParamDecl)
69900d0749fSEthan Luis McDonough   READ_FEATURE(TypeParamDefStmt)
70000d0749fSEthan Luis McDonough   READ_FEATURE(common::TypeParamAttr)
70100d0749fSEthan Luis McDonough   READ_FEATURE(TypeParamSpec)
70200d0749fSEthan Luis McDonough   READ_FEATURE(TypeParamValue)
70300d0749fSEthan Luis McDonough   READ_FEATURE(TypeParamValue::Deferred)
70400d0749fSEthan Luis McDonough   READ_FEATURE(TypeSpec)
70500d0749fSEthan Luis McDonough   READ_FEATURE(Union)
70600d0749fSEthan Luis McDonough   READ_FEATURE(Union::EndUnionStmt)
70700d0749fSEthan Luis McDonough   READ_FEATURE(Union::UnionStmt)
70800d0749fSEthan Luis McDonough   READ_FEATURE(UnlockStmt)
70900d0749fSEthan Luis McDonough   READ_FEATURE(UseStmt)
71000d0749fSEthan Luis McDonough   READ_FEATURE(UseStmt::ModuleNature)
71100d0749fSEthan Luis McDonough   READ_FEATURE(Value)
71200d0749fSEthan Luis McDonough   READ_FEATURE(ValueStmt)
71300d0749fSEthan Luis McDonough   READ_FEATURE(Variable)
71400d0749fSEthan Luis McDonough   READ_FEATURE(Verbatim)
71500d0749fSEthan Luis McDonough   READ_FEATURE(Volatile)
71600d0749fSEthan Luis McDonough   READ_FEATURE(VolatileStmt)
71700d0749fSEthan Luis McDonough   READ_FEATURE(WaitSpec)
71800d0749fSEthan Luis McDonough   READ_FEATURE(WaitStmt)
71900d0749fSEthan Luis McDonough   READ_FEATURE(WhereBodyConstruct)
72000d0749fSEthan Luis McDonough   READ_FEATURE(WhereConstruct)
72100d0749fSEthan Luis McDonough   READ_FEATURE(WhereConstruct::Elsewhere)
72200d0749fSEthan Luis McDonough   READ_FEATURE(WhereConstruct::MaskedElsewhere)
72300d0749fSEthan Luis McDonough   READ_FEATURE(WhereConstructStmt)
72400d0749fSEthan Luis McDonough   READ_FEATURE(WhereStmt)
72500d0749fSEthan Luis McDonough   READ_FEATURE(WriteStmt)
72600d0749fSEthan Luis McDonough 
72700d0749fSEthan Luis McDonough   READ_FEATURE(llvm::omp::Directive)
72800d0749fSEthan Luis McDonough   READ_FEATURE(llvm::omp::Clause)
72900d0749fSEthan Luis McDonough   READ_FEATURE(llvm::acc::Directive)
73000d0749fSEthan Luis McDonough   READ_FEATURE(llvm::acc::DefaultValue)
73100d0749fSEthan Luis McDonough 
73200d0749fSEthan Luis McDonough   template <typename A> bool Pre(const A &) { return true; }
73300d0749fSEthan Luis McDonough   template <typename A> void Post(const A &) {}
73400d0749fSEthan Luis McDonough 
73500d0749fSEthan Luis McDonough   template <typename T> bool Pre(const Statement<T> &) { return true; }
73600d0749fSEthan Luis McDonough   template <typename T> void Post(const Statement<T> &) {}
73700d0749fSEthan Luis McDonough 
73800d0749fSEthan Luis McDonough   template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
73900d0749fSEthan Luis McDonough   template <typename T> void Post(const UnlabeledStatement<T> &) {}
74000d0749fSEthan Luis McDonough 
74100d0749fSEthan Luis McDonough   template <typename T> bool Pre(const common::Indirection<T> &) {
74200d0749fSEthan Luis McDonough     return true;
74300d0749fSEthan Luis McDonough   }
74400d0749fSEthan Luis McDonough   template <typename T> void Post(const common::Indirection<T> &) {}
74500d0749fSEthan Luis McDonough 
74600d0749fSEthan Luis McDonough   template <typename A> bool Pre(const Scalar<A> &) { return true; }
74700d0749fSEthan Luis McDonough   template <typename A> void Post(const Scalar<A> &) {}
74800d0749fSEthan Luis McDonough 
74900d0749fSEthan Luis McDonough   template <typename A> bool Pre(const Constant<A> &) { return true; }
75000d0749fSEthan Luis McDonough   template <typename A> void Post(const Constant<A> &) {}
75100d0749fSEthan Luis McDonough 
75200d0749fSEthan Luis McDonough   template <typename A> bool Pre(const Integer<A> &) { return true; }
75300d0749fSEthan Luis McDonough   template <typename A> void Post(const Integer<A> &) {}
75400d0749fSEthan Luis McDonough 
75500d0749fSEthan Luis McDonough   template <typename A> bool Pre(const Logical<A> &) { return true; }
75600d0749fSEthan Luis McDonough   template <typename A> void Post(const Logical<A> &) {}
75700d0749fSEthan Luis McDonough 
75800d0749fSEthan Luis McDonough   template <typename A> bool Pre(const DefaultChar<A> &) { return true; }
75900d0749fSEthan Luis McDonough   template <typename A> void Post(const DefaultChar<A> &) {}
76000d0749fSEthan Luis McDonough 
76100d0749fSEthan Luis McDonough   template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
76200d0749fSEthan Luis McDonough   template <typename... A> void Post(const std::tuple<A...> &) {}
76300d0749fSEthan Luis McDonough 
76400d0749fSEthan Luis McDonough   template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
76500d0749fSEthan Luis McDonough   template <typename... A> void Post(const std::variant<A...> &) {}
76600d0749fSEthan Luis McDonough };
76700d0749fSEthan Luis McDonough 
76800d0749fSEthan Luis McDonough bool sortNodes(std::pair<const char *, int> a, std::pair<const char *, int> b) {
76900d0749fSEthan Luis McDonough   return (a.second == b.second) ? (std::strcmp(a.first, b.first) < 0)
77000d0749fSEthan Luis McDonough                                 : a.second > b.second;
77100d0749fSEthan Luis McDonough }
77200d0749fSEthan Luis McDonough 
77300d0749fSEthan Luis McDonough class FeatureListAction : public PluginParseTreeAction {
77400d0749fSEthan Luis McDonough   void executeAction() override {
77500d0749fSEthan Luis McDonough     NodeVisitor visitor;
77600d0749fSEthan Luis McDonough     Fortran::parser::Walk(getParsing().parseTree(), visitor);
77700d0749fSEthan Luis McDonough 
77800d0749fSEthan Luis McDonough     const auto &frequencyMap = visitor.getFrequencies();
77900d0749fSEthan Luis McDonough     std::vector<std::pair<const char *, int>> frequencies(
78000d0749fSEthan Luis McDonough         frequencyMap.begin(), frequencyMap.end());
78100d0749fSEthan Luis McDonough 
78200d0749fSEthan Luis McDonough     std::sort(frequencies.begin(), frequencies.end(), sortNodes);
78300d0749fSEthan Luis McDonough     for (auto const &[feature, frequency] : frequencies) {
78400d0749fSEthan Luis McDonough       llvm::outs() << feature << ": " << frequency << "\n";
78500d0749fSEthan Luis McDonough     }
78600d0749fSEthan Luis McDonough   }
78700d0749fSEthan Luis McDonough 
788f2e80893SPeter Klausler   bool beginSourceFileAction() override {
789f2e80893SPeter Klausler     return runPrescan() && runParse(/*emitMessages=*/true);
790f2e80893SPeter Klausler   }
79100d0749fSEthan Luis McDonough };
79200d0749fSEthan Luis McDonough 
79300d0749fSEthan Luis McDonough static FrontendPluginRegistry::Add<FeatureListAction> X(
79400d0749fSEthan Luis McDonough     "feature-list", "List program features");
795