1 //===-- FeatureList.cpp ---------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // A plugin that counts the amount of times a particular parse tree node 10 // occurs. This plugin should cover each feature covered in dump-parse-tree.h 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "flang/Frontend/FrontendActions.h" 15 #include "flang/Frontend/FrontendPluginRegistry.h" 16 #include "flang/Parser/parse-tree-visitor.h" 17 #include "flang/Parser/parse-tree.h" 18 #include "flang/Parser/parsing.h" 19 20 #include <map> 21 22 using namespace Fortran::frontend; 23 using namespace Fortran::parser; 24 using namespace Fortran; 25 26 #define READ_FEATURE_CUST(classname, n) \ 27 bool Pre(const classname &) { \ 28 record(#n); \ 29 return true; \ 30 } \ 31 void Post(const classname &) {} 32 33 #define READ_FEATURE(classname) READ_FEATURE_CUST(classname, classname) 34 35 struct NodeVisitor { 36 private: 37 std::map<const char *, unsigned int> frequencies; 38 39 void record(const char *name) { 40 const auto [it, ins] = frequencies.insert({name, 1}); 41 if (!ins) { 42 frequencies[name] = it->second + 1; 43 } 44 } 45 46 public: 47 const std::map<const char *, unsigned int> &getFrequencies() const { 48 return frequencies; 49 } 50 51 READ_FEATURE_CUST(format::ControlEditDesc, ControlEditDesc) 52 READ_FEATURE_CUST(format::DerivedTypeDataEditDesc, DerivedTypeDataEditDesc) 53 READ_FEATURE_CUST(format::FormatItem, FormatItem) 54 READ_FEATURE_CUST(format::FormatSpecification, FormatSpecification) 55 READ_FEATURE_CUST( 56 format::IntrinsicTypeDataEditDesc, IntrinsicTypeDataEditDesc) 57 READ_FEATURE(Abstract) 58 READ_FEATURE(AccAtomicCapture) 59 READ_FEATURE(AccAtomicCapture::Stmt1) 60 READ_FEATURE(AccAtomicCapture::Stmt2) 61 READ_FEATURE(AccAtomicRead) 62 READ_FEATURE(AccAtomicUpdate) 63 READ_FEATURE(AccAtomicWrite) 64 READ_FEATURE(AccBeginBlockDirective) 65 READ_FEATURE(AccBeginCombinedDirective) 66 READ_FEATURE(AccBeginLoopDirective) 67 READ_FEATURE(AccBlockDirective) 68 READ_FEATURE(AccClause) 69 READ_FEATURE(AccBindClause) 70 READ_FEATURE(AccDefaultClause) 71 READ_FEATURE(AccClauseList) 72 READ_FEATURE(AccCombinedDirective) 73 READ_FEATURE(AccDataModifier) 74 READ_FEATURE(AccDataModifier::Modifier) 75 READ_FEATURE(AccDeclarativeDirective) 76 READ_FEATURE(AccEndAtomic) 77 READ_FEATURE(AccEndBlockDirective) 78 READ_FEATURE(AccEndCombinedDirective) 79 READ_FEATURE(AccGangArgument) 80 READ_FEATURE(AccObject) 81 READ_FEATURE(AccObjectList) 82 READ_FEATURE(AccObjectListWithModifier) 83 READ_FEATURE(AccObjectListWithReduction) 84 READ_FEATURE(AccReductionOperator) 85 READ_FEATURE(AccReductionOperator::Operator) 86 READ_FEATURE(AccSizeExpr) 87 READ_FEATURE(AccSizeExprList) 88 READ_FEATURE(AccSelfClause) 89 READ_FEATURE(AccStandaloneDirective) 90 READ_FEATURE(AccDeviceTypeExpr) 91 READ_FEATURE(AccDeviceTypeExprList) 92 READ_FEATURE(AccTileExpr) 93 READ_FEATURE(AccTileExprList) 94 READ_FEATURE(AccLoopDirective) 95 READ_FEATURE(AccWaitArgument) 96 READ_FEATURE(AcImpliedDo) 97 READ_FEATURE(AcImpliedDoControl) 98 READ_FEATURE(AcValue) 99 READ_FEATURE(AccessStmt) 100 READ_FEATURE(AccessId) 101 READ_FEATURE(AccessSpec) 102 READ_FEATURE(AccessSpec::Kind) 103 READ_FEATURE(AcSpec) 104 READ_FEATURE(ActionStmt) 105 READ_FEATURE(ActualArg) 106 READ_FEATURE(ActualArg::PercentRef) 107 READ_FEATURE(ActualArg::PercentVal) 108 READ_FEATURE(ActualArgSpec) 109 READ_FEATURE(AcValue::Triplet) 110 READ_FEATURE(AllocOpt) 111 READ_FEATURE(AllocOpt::Mold) 112 READ_FEATURE(AllocOpt::Source) 113 READ_FEATURE(Allocatable) 114 READ_FEATURE(AllocatableStmt) 115 READ_FEATURE(AllocateCoarraySpec) 116 READ_FEATURE(AllocateObject) 117 READ_FEATURE(AllocateShapeSpec) 118 READ_FEATURE(AllocateStmt) 119 READ_FEATURE(Allocation) 120 READ_FEATURE(AltReturnSpec) 121 READ_FEATURE(ArithmeticIfStmt) 122 READ_FEATURE(ArrayConstructor) 123 READ_FEATURE(ArrayElement) 124 READ_FEATURE(ArraySpec) 125 READ_FEATURE(AssignStmt) 126 READ_FEATURE(AssignedGotoStmt) 127 READ_FEATURE(AssignmentStmt) 128 READ_FEATURE(AssociateConstruct) 129 READ_FEATURE(AssociateStmt) 130 READ_FEATURE(Association) 131 READ_FEATURE(AssumedImpliedSpec) 132 READ_FEATURE(AssumedRankSpec) 133 READ_FEATURE(AssumedShapeSpec) 134 READ_FEATURE(AssumedSizeSpec) 135 READ_FEATURE(Asynchronous) 136 READ_FEATURE(AsynchronousStmt) 137 READ_FEATURE(AttrSpec) 138 READ_FEATURE(BOZLiteralConstant) 139 READ_FEATURE(BackspaceStmt) 140 READ_FEATURE(BasedPointer) 141 READ_FEATURE(BasedPointerStmt) 142 READ_FEATURE(BindAttr) 143 READ_FEATURE(BindAttr::Deferred) 144 READ_FEATURE(BindAttr::Non_Overridable) 145 READ_FEATURE(BindEntity) 146 READ_FEATURE(BindEntity::Kind) 147 READ_FEATURE(BindStmt) 148 READ_FEATURE(Block) 149 READ_FEATURE(BlockConstruct) 150 READ_FEATURE(BlockData) 151 READ_FEATURE(BlockDataStmt) 152 READ_FEATURE(BlockSpecificationPart) 153 READ_FEATURE(BlockStmt) 154 READ_FEATURE(BoundsRemapping) 155 READ_FEATURE(BoundsSpec) 156 READ_FEATURE(Call) 157 READ_FEATURE(CallStmt) 158 READ_FEATURE(CaseConstruct) 159 READ_FEATURE(CaseConstruct::Case) 160 READ_FEATURE(CaseSelector) 161 READ_FEATURE(CaseStmt) 162 READ_FEATURE(CaseValueRange) 163 READ_FEATURE(CaseValueRange::Range) 164 READ_FEATURE(ChangeTeamConstruct) 165 READ_FEATURE(ChangeTeamStmt) 166 READ_FEATURE(CharLength) 167 READ_FEATURE(CharLiteralConstant) 168 READ_FEATURE(CharLiteralConstantSubstring) 169 READ_FEATURE(CharSelector) 170 READ_FEATURE(CharSelector::LengthAndKind) 171 READ_FEATURE(CloseStmt) 172 READ_FEATURE(CloseStmt::CloseSpec) 173 READ_FEATURE(CoarrayAssociation) 174 READ_FEATURE(CoarraySpec) 175 READ_FEATURE(CodimensionDecl) 176 READ_FEATURE(CodimensionStmt) 177 READ_FEATURE(CoindexedNamedObject) 178 READ_FEATURE(CommonBlockObject) 179 READ_FEATURE(CommonStmt) 180 READ_FEATURE(CommonStmt::Block) 181 READ_FEATURE(CompilerDirective) 182 READ_FEATURE(CompilerDirective::IgnoreTKR) 183 READ_FEATURE(CompilerDirective::LoopCount) 184 READ_FEATURE(CompilerDirective::NameValue) 185 READ_FEATURE(ComplexLiteralConstant) 186 READ_FEATURE(ComplexPart) 187 READ_FEATURE(ComponentArraySpec) 188 READ_FEATURE(ComponentAttrSpec) 189 READ_FEATURE(ComponentDataSource) 190 READ_FEATURE(ComponentDecl) 191 READ_FEATURE(FillDecl) 192 READ_FEATURE(ComponentOrFill) 193 READ_FEATURE(ComponentDefStmt) 194 READ_FEATURE(ComponentSpec) 195 READ_FEATURE(ComputedGotoStmt) 196 READ_FEATURE(ConcurrentControl) 197 READ_FEATURE(ConcurrentHeader) 198 READ_FEATURE(ConnectSpec) 199 READ_FEATURE(ConnectSpec::CharExpr) 200 READ_FEATURE(ConnectSpec::CharExpr::Kind) 201 READ_FEATURE(ConnectSpec::Newunit) 202 READ_FEATURE(ConnectSpec::Recl) 203 READ_FEATURE(ContainsStmt) 204 READ_FEATURE(Contiguous) 205 READ_FEATURE(ContiguousStmt) 206 READ_FEATURE(ContinueStmt) 207 READ_FEATURE(CriticalConstruct) 208 READ_FEATURE(CriticalStmt) 209 READ_FEATURE(CycleStmt) 210 READ_FEATURE(DataComponentDefStmt) 211 READ_FEATURE(DataIDoObject) 212 READ_FEATURE(DataImpliedDo) 213 READ_FEATURE(DataRef) 214 READ_FEATURE(DataStmt) 215 READ_FEATURE(DataStmtConstant) 216 READ_FEATURE(DataStmtObject) 217 READ_FEATURE(DataStmtRepeat) 218 READ_FEATURE(DataStmtSet) 219 READ_FEATURE(DataStmtValue) 220 READ_FEATURE(DeallocateStmt) 221 READ_FEATURE(DeclarationConstruct) 222 READ_FEATURE(DeclarationTypeSpec) 223 READ_FEATURE(DeclarationTypeSpec::Class) 224 READ_FEATURE(DeclarationTypeSpec::ClassStar) 225 READ_FEATURE(DeclarationTypeSpec::Record) 226 READ_FEATURE(DeclarationTypeSpec::Type) 227 READ_FEATURE(DeclarationTypeSpec::TypeStar) 228 READ_FEATURE(Default) 229 READ_FEATURE(DeferredCoshapeSpecList) 230 READ_FEATURE(DeferredShapeSpecList) 231 READ_FEATURE(DefinedOpName) 232 READ_FEATURE(DefinedOperator) 233 READ_FEATURE(DefinedOperator::IntrinsicOperator) 234 READ_FEATURE(DerivedTypeDef) 235 READ_FEATURE(DerivedTypeSpec) 236 READ_FEATURE(DerivedTypeStmt) 237 READ_FEATURE(Designator) 238 READ_FEATURE(DimensionStmt) 239 READ_FEATURE(DimensionStmt::Declaration) 240 READ_FEATURE(DoConstruct) 241 READ_FEATURE(DummyArg) 242 READ_FEATURE(ElseIfStmt) 243 READ_FEATURE(ElseStmt) 244 READ_FEATURE(ElsewhereStmt) 245 READ_FEATURE(EndAssociateStmt) 246 READ_FEATURE(EndBlockDataStmt) 247 READ_FEATURE(EndBlockStmt) 248 READ_FEATURE(EndChangeTeamStmt) 249 READ_FEATURE(EndCriticalStmt) 250 READ_FEATURE(EndDoStmt) 251 READ_FEATURE(EndEnumStmt) 252 READ_FEATURE(EndForallStmt) 253 READ_FEATURE(EndFunctionStmt) 254 READ_FEATURE(EndIfStmt) 255 READ_FEATURE(EndInterfaceStmt) 256 READ_FEATURE(EndLabel) 257 READ_FEATURE(EndModuleStmt) 258 READ_FEATURE(EndMpSubprogramStmt) 259 READ_FEATURE(EndProgramStmt) 260 READ_FEATURE(EndSelectStmt) 261 READ_FEATURE(EndSubmoduleStmt) 262 READ_FEATURE(EndSubroutineStmt) 263 READ_FEATURE(EndTypeStmt) 264 READ_FEATURE(EndWhereStmt) 265 READ_FEATURE(EndfileStmt) 266 READ_FEATURE(EntityDecl) 267 READ_FEATURE(EntryStmt) 268 READ_FEATURE(EnumDef) 269 READ_FEATURE(EnumDefStmt) 270 READ_FEATURE(Enumerator) 271 READ_FEATURE(EnumeratorDefStmt) 272 READ_FEATURE(EorLabel) 273 READ_FEATURE(EquivalenceObject) 274 READ_FEATURE(EquivalenceStmt) 275 READ_FEATURE(ErrLabel) 276 READ_FEATURE(ErrorRecovery) 277 READ_FEATURE(EventPostStmt) 278 READ_FEATURE(EventWaitStmt) 279 READ_FEATURE(EventWaitStmt::EventWaitSpec) 280 READ_FEATURE(ExecutableConstruct) 281 READ_FEATURE(ExecutionPart) 282 READ_FEATURE(ExecutionPartConstruct) 283 READ_FEATURE(ExitStmt) 284 READ_FEATURE(ExplicitCoshapeSpec) 285 READ_FEATURE(ExplicitShapeSpec) 286 READ_FEATURE(Expr) 287 READ_FEATURE(Expr::Parentheses) 288 READ_FEATURE(Expr::UnaryPlus) 289 READ_FEATURE(Expr::Negate) 290 READ_FEATURE(Expr::NOT) 291 READ_FEATURE(Expr::PercentLoc) 292 READ_FEATURE(Expr::DefinedUnary) 293 READ_FEATURE(Expr::Power) 294 READ_FEATURE(Expr::Multiply) 295 READ_FEATURE(Expr::Divide) 296 READ_FEATURE(Expr::Add) 297 READ_FEATURE(Expr::Subtract) 298 READ_FEATURE(Expr::Concat) 299 READ_FEATURE(Expr::LT) 300 READ_FEATURE(Expr::LE) 301 READ_FEATURE(Expr::EQ) 302 READ_FEATURE(Expr::NE) 303 READ_FEATURE(Expr::GE) 304 READ_FEATURE(Expr::GT) 305 READ_FEATURE(Expr::AND) 306 READ_FEATURE(Expr::OR) 307 READ_FEATURE(Expr::EQV) 308 READ_FEATURE(Expr::NEQV) 309 READ_FEATURE(Expr::DefinedBinary) 310 READ_FEATURE(Expr::ComplexConstructor) 311 READ_FEATURE(External) 312 READ_FEATURE(ExternalStmt) 313 READ_FEATURE(FailImageStmt) 314 READ_FEATURE(FileUnitNumber) 315 READ_FEATURE(FinalProcedureStmt) 316 READ_FEATURE(FlushStmt) 317 READ_FEATURE(ForallAssignmentStmt) 318 READ_FEATURE(ForallBodyConstruct) 319 READ_FEATURE(ForallConstruct) 320 READ_FEATURE(ForallConstructStmt) 321 READ_FEATURE(ForallStmt) 322 READ_FEATURE(FormTeamStmt) 323 READ_FEATURE(FormTeamStmt::FormTeamSpec) 324 READ_FEATURE(Format) 325 READ_FEATURE(FormatStmt) 326 READ_FEATURE(FunctionReference) 327 READ_FEATURE(FunctionStmt) 328 READ_FEATURE(FunctionSubprogram) 329 READ_FEATURE(GenericSpec) 330 READ_FEATURE(GenericSpec::Assignment) 331 READ_FEATURE(GenericSpec::ReadFormatted) 332 READ_FEATURE(GenericSpec::ReadUnformatted) 333 READ_FEATURE(GenericSpec::WriteFormatted) 334 READ_FEATURE(GenericSpec::WriteUnformatted) 335 READ_FEATURE(GenericStmt) 336 READ_FEATURE(GotoStmt) 337 READ_FEATURE(HollerithLiteralConstant) 338 READ_FEATURE(IdExpr) 339 READ_FEATURE(IdVariable) 340 READ_FEATURE(IfConstruct) 341 READ_FEATURE(IfConstruct::ElseBlock) 342 READ_FEATURE(IfConstruct::ElseIfBlock) 343 READ_FEATURE(IfStmt) 344 READ_FEATURE(IfThenStmt) 345 READ_FEATURE(TeamValue) 346 READ_FEATURE(ImageSelector) 347 READ_FEATURE(ImageSelectorSpec) 348 READ_FEATURE(ImageSelectorSpec::Stat) 349 READ_FEATURE(ImageSelectorSpec::Team_Number) 350 READ_FEATURE(ImplicitPart) 351 READ_FEATURE(ImplicitPartStmt) 352 READ_FEATURE(ImplicitSpec) 353 READ_FEATURE(ImplicitStmt) 354 READ_FEATURE(ImplicitStmt::ImplicitNoneNameSpec) 355 READ_FEATURE(ImpliedShapeSpec) 356 READ_FEATURE(ImportStmt) 357 READ_FEATURE(Initialization) 358 READ_FEATURE(InputImpliedDo) 359 READ_FEATURE(InputItem) 360 READ_FEATURE(InquireSpec) 361 READ_FEATURE(InquireSpec::CharVar) 362 READ_FEATURE(InquireSpec::CharVar::Kind) 363 READ_FEATURE(InquireSpec::IntVar) 364 READ_FEATURE(InquireSpec::IntVar::Kind) 365 READ_FEATURE(InquireSpec::LogVar) 366 READ_FEATURE(InquireSpec::LogVar::Kind) 367 READ_FEATURE(InquireStmt) 368 READ_FEATURE(InquireStmt::Iolength) 369 READ_FEATURE(IntegerTypeSpec) 370 READ_FEATURE(IntentSpec) 371 READ_FEATURE(IntentSpec::Intent) 372 READ_FEATURE(IntentStmt) 373 READ_FEATURE(InterfaceBlock) 374 READ_FEATURE(InterfaceBody) 375 READ_FEATURE(InterfaceBody::Function) 376 READ_FEATURE(InterfaceBody::Subroutine) 377 READ_FEATURE(InterfaceSpecification) 378 READ_FEATURE(InterfaceStmt) 379 READ_FEATURE(InternalSubprogram) 380 READ_FEATURE(InternalSubprogramPart) 381 READ_FEATURE(Intrinsic) 382 READ_FEATURE(IntrinsicStmt) 383 READ_FEATURE(IntrinsicTypeSpec) 384 READ_FEATURE(IntrinsicTypeSpec::Character) 385 READ_FEATURE(IntrinsicTypeSpec::Complex) 386 READ_FEATURE(IntrinsicTypeSpec::DoubleComplex) 387 READ_FEATURE(IntrinsicTypeSpec::DoublePrecision) 388 READ_FEATURE(IntrinsicTypeSpec::Logical) 389 READ_FEATURE(IntrinsicTypeSpec::Real) 390 READ_FEATURE(IoControlSpec) 391 READ_FEATURE(IoControlSpec::Asynchronous) 392 READ_FEATURE(IoControlSpec::CharExpr) 393 READ_FEATURE(IoControlSpec::CharExpr::Kind) 394 READ_FEATURE(IoControlSpec::Pos) 395 READ_FEATURE(IoControlSpec::Rec) 396 READ_FEATURE(IoControlSpec::Size) 397 READ_FEATURE(IoUnit) 398 READ_FEATURE(Keyword) 399 READ_FEATURE(KindParam) 400 READ_FEATURE(KindSelector) 401 READ_FEATURE(KindSelector::StarSize) 402 READ_FEATURE(LabelDoStmt) 403 READ_FEATURE(LanguageBindingSpec) 404 READ_FEATURE(LengthSelector) 405 READ_FEATURE(LetterSpec) 406 READ_FEATURE(LiteralConstant) 407 READ_FEATURE(IntLiteralConstant) 408 READ_FEATURE(LocalitySpec) 409 READ_FEATURE(LocalitySpec::DefaultNone) 410 READ_FEATURE(LocalitySpec::Local) 411 READ_FEATURE(LocalitySpec::LocalInit) 412 READ_FEATURE(LocalitySpec::Shared) 413 READ_FEATURE(LockStmt) 414 READ_FEATURE(LockStmt::LockStat) 415 READ_FEATURE(LogicalLiteralConstant) 416 READ_FEATURE(LoopControl) 417 READ_FEATURE(LoopControl::Concurrent) 418 READ_FEATURE(MainProgram) 419 READ_FEATURE(Map) 420 READ_FEATURE(Map::EndMapStmt) 421 READ_FEATURE(Map::MapStmt) 422 READ_FEATURE(MaskedElsewhereStmt) 423 READ_FEATURE(Module) 424 READ_FEATURE(ModuleStmt) 425 READ_FEATURE(ModuleSubprogram) 426 READ_FEATURE(ModuleSubprogramPart) 427 READ_FEATURE(MpSubprogramStmt) 428 READ_FEATURE(MsgVariable) 429 READ_FEATURE(Name) 430 READ_FEATURE(NamedConstant) 431 READ_FEATURE(NamedConstantDef) 432 READ_FEATURE(NamelistStmt) 433 READ_FEATURE(NamelistStmt::Group) 434 READ_FEATURE(NonLabelDoStmt) 435 READ_FEATURE(NoPass) 436 READ_FEATURE(NullifyStmt) 437 READ_FEATURE(NullInit) 438 READ_FEATURE(ObjectDecl) 439 READ_FEATURE(OldParameterStmt) 440 READ_FEATURE(OmpAlignedClause) 441 READ_FEATURE(OmpAtomic) 442 READ_FEATURE(OmpAtomicCapture) 443 READ_FEATURE(OmpAtomicCapture::Stmt1) 444 READ_FEATURE(OmpAtomicCapture::Stmt2) 445 READ_FEATURE(OmpAtomicRead) 446 READ_FEATURE(OmpAtomicUpdate) 447 READ_FEATURE(OmpAtomicWrite) 448 READ_FEATURE(OmpBeginBlockDirective) 449 READ_FEATURE(OmpBeginLoopDirective) 450 READ_FEATURE(OmpBeginSectionsDirective) 451 READ_FEATURE(OmpBlockDirective) 452 READ_FEATURE(OmpCancelType) 453 READ_FEATURE(OmpCancelType::Type) 454 READ_FEATURE(OmpClause) 455 READ_FEATURE(OmpClauseList) 456 READ_FEATURE(OmpCriticalDirective) 457 READ_FEATURE(OmpDeclareTargetSpecifier) 458 READ_FEATURE(OmpDeclareTargetWithClause) 459 READ_FEATURE(OmpDeclareTargetWithList) 460 READ_FEATURE(OmpDefaultClause) 461 READ_FEATURE(OmpDefaultClause::Type) 462 READ_FEATURE(OmpDefaultmapClause) 463 READ_FEATURE(OmpDefaultmapClause::ImplicitBehavior) 464 READ_FEATURE(OmpDefaultmapClause::VariableCategory) 465 READ_FEATURE(OmpDependClause) 466 READ_FEATURE(OmpDependClause::InOut) 467 READ_FEATURE(OmpDependClause::Sink) 468 READ_FEATURE(OmpDependClause::Source) 469 READ_FEATURE(OmpDependenceType) 470 READ_FEATURE(OmpDependenceType::Type) 471 READ_FEATURE(OmpDependSinkVec) 472 READ_FEATURE(OmpDependSinkVecLength) 473 READ_FEATURE(OmpEndAtomic) 474 READ_FEATURE(OmpEndBlockDirective) 475 READ_FEATURE(OmpEndCriticalDirective) 476 READ_FEATURE(OmpEndLoopDirective) 477 READ_FEATURE(OmpEndSectionsDirective) 478 READ_FEATURE(OmpIfClause) 479 READ_FEATURE(OmpIfClause::DirectiveNameModifier) 480 READ_FEATURE(OmpLinearClause) 481 READ_FEATURE(OmpLinearClause::WithModifier) 482 READ_FEATURE(OmpLinearClause::WithoutModifier) 483 READ_FEATURE(OmpLinearModifier) 484 READ_FEATURE(OmpLinearModifier::Type) 485 READ_FEATURE(OmpLoopDirective) 486 READ_FEATURE(OmpMapClause) 487 READ_FEATURE(OmpMapType) 488 READ_FEATURE(OmpMapType::Always) 489 READ_FEATURE(OmpMapType::Type) 490 READ_FEATURE(OmpObject) 491 READ_FEATURE(OmpObjectList) 492 READ_FEATURE(OmpOrderClause) 493 READ_FEATURE(OmpOrderClause::Type) 494 READ_FEATURE(OmpOrderModifier) 495 READ_FEATURE(OmpOrderModifier::Kind) 496 READ_FEATURE(OmpProcBindClause) 497 READ_FEATURE(OmpProcBindClause::Type) 498 READ_FEATURE(OmpReductionClause) 499 READ_FEATURE(OmpInReductionClause) 500 READ_FEATURE(OmpReductionCombiner) 501 READ_FEATURE(OmpReductionCombiner::FunctionCombiner) 502 READ_FEATURE(OmpReductionInitializerClause) 503 READ_FEATURE(OmpReductionOperator) 504 READ_FEATURE(OmpAllocateClause) 505 READ_FEATURE(OmpAllocateClause::Allocator) 506 READ_FEATURE(OmpScheduleClause) 507 READ_FEATURE(OmpScheduleClause::ScheduleType) 508 READ_FEATURE(OmpDeviceClause) 509 READ_FEATURE(OmpDeviceClause::DeviceModifier) 510 READ_FEATURE(OmpDeviceTypeClause) 511 READ_FEATURE(OmpDeviceTypeClause::Type) 512 READ_FEATURE(OmpScheduleModifier) 513 READ_FEATURE(OmpScheduleModifier::Modifier1) 514 READ_FEATURE(OmpScheduleModifier::Modifier2) 515 READ_FEATURE(OmpScheduleModifierType) 516 READ_FEATURE(OmpScheduleModifierType::ModType) 517 READ_FEATURE(OmpSectionBlocks) 518 READ_FEATURE(OmpSectionsDirective) 519 READ_FEATURE(OmpSimpleStandaloneDirective) 520 READ_FEATURE(Only) 521 READ_FEATURE(OpenACCAtomicConstruct) 522 READ_FEATURE(OpenACCBlockConstruct) 523 READ_FEATURE(OpenACCCacheConstruct) 524 READ_FEATURE(OpenACCCombinedConstruct) 525 READ_FEATURE(OpenACCConstruct) 526 READ_FEATURE(OpenACCDeclarativeConstruct) 527 READ_FEATURE(OpenACCLoopConstruct) 528 READ_FEATURE(OpenACCRoutineConstruct) 529 READ_FEATURE(OpenACCStandaloneDeclarativeConstruct) 530 READ_FEATURE(OpenACCStandaloneConstruct) 531 READ_FEATURE(OpenACCWaitConstruct) 532 READ_FEATURE(OpenMPAtomicConstruct) 533 READ_FEATURE(OpenMPBlockConstruct) 534 READ_FEATURE(OpenMPCancelConstruct) 535 READ_FEATURE(OpenMPCancelConstruct::If) 536 READ_FEATURE(OpenMPCancellationPointConstruct) 537 READ_FEATURE(OpenMPConstruct) 538 READ_FEATURE(OpenMPCriticalConstruct) 539 READ_FEATURE(OpenMPDeclarativeAllocate) 540 READ_FEATURE(OpenMPDeclarativeConstruct) 541 READ_FEATURE(OpenMPDeclareReductionConstruct) 542 READ_FEATURE(OpenMPDeclareSimdConstruct) 543 READ_FEATURE(OpenMPDeclareTargetConstruct) 544 READ_FEATURE(OmpMemoryOrderClause) 545 READ_FEATURE(OmpAtomicClause) 546 READ_FEATURE(OmpAtomicClauseList) 547 READ_FEATURE(OmpAtomicDefaultMemOrderClause) 548 READ_FEATURE(OmpAtomicDefaultMemOrderClause::Type) 549 READ_FEATURE(OpenMPFlushConstruct) 550 READ_FEATURE(OpenMPLoopConstruct) 551 READ_FEATURE(OpenMPExecutableAllocate) 552 READ_FEATURE(OpenMPRequiresConstruct) 553 READ_FEATURE(OpenMPSimpleStandaloneConstruct) 554 READ_FEATURE(OpenMPStandaloneConstruct) 555 READ_FEATURE(OpenMPSectionConstruct) 556 READ_FEATURE(OpenMPSectionsConstruct) 557 READ_FEATURE(OpenMPThreadprivate) 558 READ_FEATURE(OpenStmt) 559 READ_FEATURE(Optional) 560 READ_FEATURE(OptionalStmt) 561 READ_FEATURE(OtherSpecificationStmt) 562 READ_FEATURE(OutputImpliedDo) 563 READ_FEATURE(OutputItem) 564 READ_FEATURE(Parameter) 565 READ_FEATURE(ParameterStmt) 566 READ_FEATURE(ParentIdentifier) 567 READ_FEATURE(Pass) 568 READ_FEATURE(PauseStmt) 569 READ_FEATURE(Pointer) 570 READ_FEATURE(PointerAssignmentStmt) 571 READ_FEATURE(PointerAssignmentStmt::Bounds) 572 READ_FEATURE(PointerDecl) 573 READ_FEATURE(PointerObject) 574 READ_FEATURE(PointerStmt) 575 READ_FEATURE(PositionOrFlushSpec) 576 READ_FEATURE(PrefixSpec) 577 READ_FEATURE(PrefixSpec::Elemental) 578 READ_FEATURE(PrefixSpec::Impure) 579 READ_FEATURE(PrefixSpec::Module) 580 READ_FEATURE(PrefixSpec::Non_Recursive) 581 READ_FEATURE(PrefixSpec::Pure) 582 READ_FEATURE(PrefixSpec::Recursive) 583 READ_FEATURE(PrintStmt) 584 READ_FEATURE(PrivateStmt) 585 READ_FEATURE(PrivateOrSequence) 586 READ_FEATURE(ProcAttrSpec) 587 READ_FEATURE(ProcComponentAttrSpec) 588 READ_FEATURE(ProcComponentDefStmt) 589 READ_FEATURE(ProcComponentRef) 590 READ_FEATURE(ProcDecl) 591 READ_FEATURE(ProcInterface) 592 READ_FEATURE(ProcPointerInit) 593 READ_FEATURE(ProcedureDeclarationStmt) 594 READ_FEATURE(ProcedureDesignator) 595 READ_FEATURE(ProcedureStmt) 596 READ_FEATURE(ProcedureStmt::Kind) 597 READ_FEATURE(Program) 598 READ_FEATURE(ProgramStmt) 599 READ_FEATURE(ProgramUnit) 600 READ_FEATURE(Protected) 601 READ_FEATURE(ProtectedStmt) 602 READ_FEATURE(ReadStmt) 603 READ_FEATURE(RealLiteralConstant) 604 READ_FEATURE(RealLiteralConstant::Real) 605 READ_FEATURE(Rename) 606 READ_FEATURE(Rename::Names) 607 READ_FEATURE(Rename::Operators) 608 READ_FEATURE(ReturnStmt) 609 READ_FEATURE(RewindStmt) 610 READ_FEATURE(Save) 611 READ_FEATURE(SaveStmt) 612 READ_FEATURE(SavedEntity) 613 READ_FEATURE(SavedEntity::Kind) 614 READ_FEATURE(SectionSubscript) 615 READ_FEATURE(SelectCaseStmt) 616 READ_FEATURE(SelectRankCaseStmt) 617 READ_FEATURE(SelectRankCaseStmt::Rank) 618 READ_FEATURE(SelectRankConstruct) 619 READ_FEATURE(SelectRankConstruct::RankCase) 620 READ_FEATURE(SelectRankStmt) 621 READ_FEATURE(SelectTypeConstruct) 622 READ_FEATURE(SelectTypeConstruct::TypeCase) 623 READ_FEATURE(SelectTypeStmt) 624 READ_FEATURE(Selector) 625 READ_FEATURE(SeparateModuleSubprogram) 626 READ_FEATURE(SequenceStmt) 627 READ_FEATURE(Sign) 628 READ_FEATURE(SignedComplexLiteralConstant) 629 READ_FEATURE(SignedIntLiteralConstant) 630 READ_FEATURE(SignedRealLiteralConstant) 631 READ_FEATURE(SpecificationConstruct) 632 READ_FEATURE(SpecificationExpr) 633 READ_FEATURE(SpecificationPart) 634 READ_FEATURE(Star) 635 READ_FEATURE(StatOrErrmsg) 636 READ_FEATURE(StatVariable) 637 READ_FEATURE(StatusExpr) 638 READ_FEATURE(StmtFunctionStmt) 639 READ_FEATURE(StopCode) 640 READ_FEATURE(StopStmt) 641 READ_FEATURE(StopStmt::Kind) 642 READ_FEATURE(StructureComponent) 643 READ_FEATURE(StructureConstructor) 644 READ_FEATURE(StructureDef) 645 READ_FEATURE(StructureDef::EndStructureStmt) 646 READ_FEATURE(StructureField) 647 READ_FEATURE(StructureStmt) 648 READ_FEATURE(Submodule) 649 READ_FEATURE(SubmoduleStmt) 650 READ_FEATURE(SubroutineStmt) 651 READ_FEATURE(SubroutineSubprogram) 652 READ_FEATURE(SubscriptTriplet) 653 READ_FEATURE(Substring) 654 READ_FEATURE(SubstringInquiry) 655 READ_FEATURE(SubstringRange) 656 READ_FEATURE(Suffix) 657 READ_FEATURE(SyncAllStmt) 658 READ_FEATURE(SyncImagesStmt) 659 READ_FEATURE(SyncImagesStmt::ImageSet) 660 READ_FEATURE(SyncMemoryStmt) 661 READ_FEATURE(SyncTeamStmt) 662 READ_FEATURE(Target) 663 READ_FEATURE(TargetStmt) 664 READ_FEATURE(TypeAttrSpec) 665 READ_FEATURE(TypeAttrSpec::BindC) 666 READ_FEATURE(TypeAttrSpec::Extends) 667 READ_FEATURE(TypeBoundGenericStmt) 668 READ_FEATURE(TypeBoundProcBinding) 669 READ_FEATURE(TypeBoundProcDecl) 670 READ_FEATURE(TypeBoundProcedurePart) 671 READ_FEATURE(TypeBoundProcedureStmt) 672 READ_FEATURE(TypeBoundProcedureStmt::WithInterface) 673 READ_FEATURE(TypeBoundProcedureStmt::WithoutInterface) 674 READ_FEATURE(TypeDeclarationStmt) 675 READ_FEATURE(TypeGuardStmt) 676 READ_FEATURE(TypeGuardStmt::Guard) 677 READ_FEATURE(TypeParamDecl) 678 READ_FEATURE(TypeParamDefStmt) 679 READ_FEATURE(common::TypeParamAttr) 680 READ_FEATURE(TypeParamSpec) 681 READ_FEATURE(TypeParamValue) 682 READ_FEATURE(TypeParamValue::Deferred) 683 READ_FEATURE(TypeSpec) 684 READ_FEATURE(Union) 685 READ_FEATURE(Union::EndUnionStmt) 686 READ_FEATURE(Union::UnionStmt) 687 READ_FEATURE(UnlockStmt) 688 READ_FEATURE(UseStmt) 689 READ_FEATURE(UseStmt::ModuleNature) 690 READ_FEATURE(Value) 691 READ_FEATURE(ValueStmt) 692 READ_FEATURE(Variable) 693 READ_FEATURE(Verbatim) 694 READ_FEATURE(Volatile) 695 READ_FEATURE(VolatileStmt) 696 READ_FEATURE(WaitSpec) 697 READ_FEATURE(WaitStmt) 698 READ_FEATURE(WhereBodyConstruct) 699 READ_FEATURE(WhereConstruct) 700 READ_FEATURE(WhereConstruct::Elsewhere) 701 READ_FEATURE(WhereConstruct::MaskedElsewhere) 702 READ_FEATURE(WhereConstructStmt) 703 READ_FEATURE(WhereStmt) 704 READ_FEATURE(WriteStmt) 705 706 READ_FEATURE(llvm::omp::Directive) 707 READ_FEATURE(llvm::omp::Clause) 708 READ_FEATURE(llvm::acc::Directive) 709 READ_FEATURE(llvm::acc::DefaultValue) 710 711 template <typename A> bool Pre(const A &) { return true; } 712 template <typename A> void Post(const A &) {} 713 714 template <typename T> bool Pre(const Statement<T> &) { return true; } 715 template <typename T> void Post(const Statement<T> &) {} 716 717 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; } 718 template <typename T> void Post(const UnlabeledStatement<T> &) {} 719 720 template <typename T> bool Pre(const common::Indirection<T> &) { 721 return true; 722 } 723 template <typename T> void Post(const common::Indirection<T> &) {} 724 725 template <typename A> bool Pre(const Scalar<A> &) { return true; } 726 template <typename A> void Post(const Scalar<A> &) {} 727 728 template <typename A> bool Pre(const Constant<A> &) { return true; } 729 template <typename A> void Post(const Constant<A> &) {} 730 731 template <typename A> bool Pre(const Integer<A> &) { return true; } 732 template <typename A> void Post(const Integer<A> &) {} 733 734 template <typename A> bool Pre(const Logical<A> &) { return true; } 735 template <typename A> void Post(const Logical<A> &) {} 736 737 template <typename A> bool Pre(const DefaultChar<A> &) { return true; } 738 template <typename A> void Post(const DefaultChar<A> &) {} 739 740 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; } 741 template <typename... A> void Post(const std::tuple<A...> &) {} 742 743 template <typename... A> bool Pre(const std::variant<A...> &) { return true; } 744 template <typename... A> void Post(const std::variant<A...> &) {} 745 }; 746 747 class FeatureListAction : public PluginParseTreeAction { 748 void executeAction() override { 749 NodeVisitor visitor; 750 Fortran::parser::Walk(getParsing().parseTree(), visitor); 751 752 for (auto const &[feature, frequency] : visitor.getFrequencies()) { 753 llvm::outs() << feature << ": " << frequency << "\n"; 754 } 755 } 756 757 bool beginSourceFileAction() override { return runPrescan() && runParse(); } 758 }; 759 760 static FrontendPluginRegistry::Add<FeatureListAction> X( 761 "feature-list", "List program features"); 762