A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://clang.llvm.org/doxygen/StmtPrinter_8cpp_source.html below:

clang: lib/AST/StmtPrinter.cpp Source File

47#include "llvm/ADT/ArrayRef.h" 48#include "llvm/ADT/STLExtras.h" 49#include "llvm/ADT/SmallVector.h" 50#include "llvm/ADT/StringExtras.h" 51#include "llvm/ADT/StringRef.h" 52#include "llvm/Support/Casting.h" 53#include "llvm/Support/Compiler.h" 54#include "llvm/Support/ErrorHandling.h" 55#include "llvm/Support/raw_ostream.h" 60using namespace clang

;

68 class

StmtPrinter :

public StmtVisitor

<StmtPrinter> {

79

StringRef NL =

"\n"

,

const ASTContext

*Context =

nullptr

)

80

: OS(os), IndentLevel(Indentation), Helper(helper), Policy(Policy),

81

NL(NL), Context(Context) {}

85 void

PrintStmt(

Stmt

*S,

int

SubIndent) {

86

IndentLevel += SubIndent;

87 if

(isa_and_nonnull<Expr>(S)) {

95

Indent() <<

"<<<NULL STATEMENT>>>"

<< NL;

97

IndentLevel -= SubIndent;

100 void

PrintInitStmt(

Stmt

*S,

unsigned

PrefixWidth) {

102

IndentLevel += (PrefixWidth + 1) / 2;

103 if

(

auto

*DS = dyn_cast<DeclStmt>(S))

104

PrintRawDeclStmt(DS);

106

PrintExpr(cast<Expr>(S));

108

IndentLevel -= (PrefixWidth + 1) / 2;

111 void

PrintControlledStmt(

Stmt

*S) {

112 if

(

auto

*CS = dyn_cast<CompoundStmt>(S)) {

114

PrintRawCompoundStmt(CS);

123 void

PrintRawDecl(

Decl

*

D

);

124 void

PrintRawDeclStmt(

const DeclStmt

*S);

131 bool

ForceNoStmt =

false

);

136 void

PrintExpr(

Expr

*

E

) {

140

OS <<

"<null expr>"

;

143

raw_ostream &Indent(

int

Delta = 0) {

144 for

(

int

i = 0, e = IndentLevel+Delta; i < e; ++i)

155 void

VisitStmt(

Stmt

*

Node

) LLVM_ATTRIBUTE_UNUSED {

156

Indent() <<

"<<unknown stmt type>>"

<< NL;

159 void

VisitExpr(

Expr

*

Node

) LLVM_ATTRIBUTE_UNUSED {

160

OS <<

"<<unknown expr type>>"

;

165#define ABSTRACT_STMT(CLASS) 166#define STMT(CLASS, PARENT) \ 167 void Visit##CLASS(CLASS *Node); 168#include "clang/AST/StmtNodes.inc" 180

assert(

Node

&&

"Compound statement cannot be null"

);

182

PrintFPPragmas(

Node

);

183 for

(

auto

*I :

Node

->body())

190 if

(!S->hasStoredFPFeatures())

193 bool

FEnvAccess =

false

;

194 if

(FPO.hasAllowFEnvAccessOverride()) {

195

FEnvAccess = FPO.getAllowFEnvAccessOverride();

196

Indent() <<

"#pragma STDC FENV_ACCESS "

<< (FEnvAccess ?

"ON"

:

"OFF"

)

199 if

(FPO.hasSpecifiedExceptionModeOverride()) {

201

FPO.getSpecifiedExceptionModeOverride();

202 if

(!FEnvAccess || EM != LangOptions::FPE_Strict) {

203

Indent() <<

"#pragma clang fp exceptions("

;

204 switch

(FPO.getSpecifiedExceptionModeOverride()) {

207 case

LangOptions::FPE_Ignore:

210 case

LangOptions::FPE_MayTrap:

213 case

LangOptions::FPE_Strict:

220 if

(FPO.hasConstRoundingModeOverride()) {

222

Indent() <<

"#pragma STDC FENV_ROUND "

;

224 case

llvm::RoundingMode::TowardZero:

225

OS <<

"FE_TOWARDZERO"

;

227 case

llvm::RoundingMode::NearestTiesToEven:

228

OS <<

"FE_TONEAREST"

;

230 case

llvm::RoundingMode::TowardPositive:

233 case

llvm::RoundingMode::TowardNegative:

234

OS <<

"FE_DOWNWARD"

;

236 case

llvm::RoundingMode::NearestTiesToAway:

237

OS <<

"FE_TONEARESTFROMZERO"

;

239 case

llvm::RoundingMode::Dynamic:

243

llvm_unreachable(

"Invalid rounding mode"

);

249void

StmtPrinter::PrintRawDecl(

Decl

*

D

) {

250 D

->

print

(OS, Policy, IndentLevel);

253void

StmtPrinter::PrintRawDeclStmt(

const DeclStmt

*S) {

259

Indent() <<

";"

<< NL;

264

PrintRawDeclStmt(

Node

);

270

PrintRawCompoundStmt(

Node

);

275

Indent(-1) <<

"case "

;

276

PrintExpr(

Node

->getLHS());

277 if

(

Node

->getRHS()) {

279

PrintExpr(

Node

->getRHS());

283

PrintStmt(

Node

->getSubStmt(), 0);

287

Indent(-1) <<

"default:"

<< NL;

288

PrintStmt(

Node

->getSubStmt(), 0);

292

Indent(-1) <<

Node

->getName() <<

":"

<< NL;

293

PrintStmt(

Node

->getSubStmt(), 0);

298 for

(

const auto

*

Attr

: Attrs) {

300 if

(

Attr

!= Attrs.back())

304

PrintStmt(

Node

->getSubStmt(), 0);

307void

StmtPrinter::PrintRawIfStmt(

IfStmt

*

If

) {

308 if

(

If

->isConsteval()) {

310 if

(

If

->isNegatedConsteval())

314

PrintStmt(

If

->getThen());

315 if

(

Stmt

*Else =

If

->getElse()) {

326

PrintInitStmt(

If

->getInit(), 4);

327 if

(

const DeclStmt

*DS =

If

->getConditionVariableDeclStmt())

328

PrintRawDeclStmt(DS);

330

PrintExpr(

If

->getCond());

333 if

(

auto

*CS = dyn_cast<CompoundStmt>(

If

->getThen())) {

335

PrintRawCompoundStmt(CS);

336

OS << (

If

->getElse() ?

" "

: NL);

339

PrintStmt(

If

->getThen());

340 if

(

If

->getElse()) Indent();

343 if

(

Stmt

*Else =

If

->getElse()) {

346 if

(

auto

*CS = dyn_cast<CompoundStmt>(Else)) {

348

PrintRawCompoundStmt(CS);

350

}

else if

(

auto

*ElseIf = dyn_cast<IfStmt>(Else)) {

352

PrintRawIfStmt(ElseIf);

355

PrintStmt(

If

->getElse());

360void

StmtPrinter::VisitIfStmt(

IfStmt

*

If

) {

362

PrintRawIfStmt(

If

);

366

Indent() <<

"switch ("

;

367 if

(

Node

->getInit())

368

PrintInitStmt(

Node

->getInit(), 8);

369 if

(

const DeclStmt

*DS =

Node

->getConditionVariableDeclStmt())

370

PrintRawDeclStmt(DS);

372

PrintExpr(

Node

->getCond());

374

PrintControlledStmt(

Node

->getBody());

378

Indent() <<

"while ("

;

379 if

(

const DeclStmt

*DS =

Node

->getConditionVariableDeclStmt())

380

PrintRawDeclStmt(DS);

382

PrintExpr(

Node

->getCond());

384

PrintStmt(

Node

->getBody());

387void

StmtPrinter::VisitDoStmt(

DoStmt

*

Node

) {

389 if

(

auto

*CS = dyn_cast<CompoundStmt>(

Node

->getBody())) {

390

PrintRawCompoundStmt(CS);

394

PrintStmt(

Node

->getBody());

399

PrintExpr(

Node

->getCond());

404

Indent() <<

"for ("

;

405 if

(

Node

->getInit())

406

PrintInitStmt(

Node

->getInit(), 5);

408

OS << (

Node

->getCond() ?

"; "

:

";"

);

409 if

(

const DeclStmt

*DS =

Node

->getConditionVariableDeclStmt())

410

PrintRawDeclStmt(DS);

411 else if

(

Node

->getCond())

412

PrintExpr(

Node

->getCond());

414 if

(

Node

->getInc()) {

416

PrintExpr(

Node

->getInc());

419

PrintControlledStmt(

Node

->getBody());

423

Indent() <<

"for ("

;

424 if

(

auto

*DS = dyn_cast<DeclStmt>(

Node

->getElement()))

425

PrintRawDeclStmt(DS);

427

PrintExpr(cast<Expr>(

Node

->getElement()));

429

PrintExpr(

Node

->getCollection());

431

PrintControlledStmt(

Node

->getBody());

435

Indent() <<

"for ("

;

436 if

(

Node

->getInit())

437

PrintInitStmt(

Node

->getInit(), 5);

439

SubPolicy.SuppressInitializers =

true

;

440 Node

->getLoopVariable()->

print

(OS, SubPolicy, IndentLevel);

442

PrintExpr(

Node

->getRangeInit());

444

PrintControlledStmt(

Node

->getBody());

449 if

(

Node

->isIfExists())

450

OS <<

"__if_exists ("

;

452

OS <<

"__if_not_exists ("

;

455

=

Node

->getQualifierLoc().getNestedNameSpecifier())

458

OS <<

Node

->getNameInfo() <<

") "

;

460

PrintRawCompoundStmt(

Node

->getSubStmt());

464

Indent() <<

"goto "

<<

Node

->getLabel()->getName() <<

";"

;

469

Indent() <<

"goto *"

;

470

PrintExpr(

Node

->getTarget());

476

Indent() <<

"continue;"

;

481

Indent() <<

"break;"

;

486

Indent() <<

"return"

;

487 if

(

Node

->getRetValue()) {

489

PrintExpr(

Node

->getRetValue());

498 if

(

Node

->isVolatile())

501 if

(

Node

->isAsmGoto())

505

VisitStringLiteral(

Node

->getAsmString());

508 if

(

Node

->getNumOutputs() != 0 ||

Node

->getNumInputs() != 0 ||

509 Node

->getNumClobbers() != 0 ||

Node

->getNumLabels() != 0)

512 for

(

unsigned

i = 0, e =

Node

->getNumOutputs(); i != e; ++i) {

516 if

(!

Node

->getOutputName(i).empty()) {

518

OS <<

Node

->getOutputName(i);

522

VisitStringLiteral(

Node

->getOutputConstraintLiteral(i));

524

Visit(

Node

->getOutputExpr(i));

529 if

(

Node

->getNumInputs() != 0 ||

Node

->getNumClobbers() != 0 ||

530 Node

->getNumLabels() != 0)

533 for

(

unsigned

i = 0, e =

Node

->getNumInputs(); i != e; ++i) {

537 if

(!

Node

->getInputName(i).empty()) {

539

OS <<

Node

->getInputName(i);

543

VisitStringLiteral(

Node

->getInputConstraintLiteral(i));

545

Visit(

Node

->getInputExpr(i));

550 if

(

Node

->getNumClobbers() != 0 ||

Node

->getNumLabels())

553 for

(

unsigned

i = 0, e =

Node

->getNumClobbers(); i != e; ++i) {

557

VisitStringLiteral(

Node

->getClobberStringLiteral(i));

561 if

(

Node

->getNumLabels() != 0)

564 for

(

unsigned

i = 0, e =

Node

->getNumLabels(); i != e; ++i) {

567

OS <<

Node

->getLabelName(i);

576

Indent() <<

"__asm "

;

577 if

(

Node

->hasBraces())

579

OS <<

Node

->getAsmString() << NL;

580 if

(

Node

->hasBraces())

581

Indent() <<

"}"

<< NL;

585

PrintStmt(

Node

->getCapturedDecl()->getBody());

589

PrintStmt(

Node

->getOutlinedFunctionDecl()->getBody());

594 if

(

auto

*TS = dyn_cast<CompoundStmt>(

Node

->getTryBody())) {

595

PrintRawCompoundStmt(TS);

600

Indent() <<

"@catch("

;

601 if

(

Decl

*DS = catchStmt->getCatchParamDecl())

604 if

(

auto

*CS = dyn_cast<CompoundStmt>(catchStmt->getCatchBody())) {

605

PrintRawCompoundStmt(CS);

611

Indent() <<

"@finally"

;

612 if

(

auto

*CS = dyn_cast<CompoundStmt>(FS->getFinallyBody())) {

613

PrintRawCompoundStmt(CS);

623

Indent() <<

"@catch (...) { /* todo */ } "

<< NL;

627

Indent() <<

"@throw"

;

628 if

(

Node

->getThrowExpr()) {

630

PrintExpr(

Node

->getThrowExpr());

635void

StmtPrinter::VisitObjCAvailabilityCheckExpr(

637

OS <<

"@available(...)"

;

641

Indent() <<

"@synchronized ("

;

642

PrintExpr(

Node

->getSynchExpr());

644

PrintRawCompoundStmt(

Node

->getSynchBody());

649

Indent() <<

"@autoreleasepool"

;

650

PrintRawCompoundStmt(cast<CompoundStmt>(

Node

->getSubStmt()));

656 if

(

Decl

*ExDecl =

Node

->getExceptionDecl())

657

PrintRawDecl(ExDecl);

661

PrintRawCompoundStmt(cast<CompoundStmt>(

Node

->getHandlerBlock()));

666

PrintRawCXXCatchStmt(

Node

);

672

PrintRawCompoundStmt(

Node

->getTryBlock());

673 for

(

unsigned

i = 0, e =

Node

->getNumHandlers(); i < e; ++i) {

675

PrintRawCXXCatchStmt(

Node

->getHandler(i));

681

Indent() << (

Node

->getIsCXXTry() ?

"try "

:

"__try "

);

682

PrintRawCompoundStmt(

Node

->getTryBlock());

686

PrintRawSEHExceptHandler(

E

);

688

assert(F &&

"Must have a finally block..."

);

689

PrintRawSEHFinallyStmt(F);

696

PrintRawCompoundStmt(

Node

->getBlock());

702

VisitExpr(

Node

->getFilterExpr());

704

PrintRawCompoundStmt(

Node

->getBlock());

710

PrintRawSEHExceptHandler(

Node

);

716

PrintRawSEHFinallyStmt(

Node

);

721

Indent() <<

"__leave;"

;

730

PrintStmt(

Node

->getLoopStmt());

737 for

(

auto

*Clause : Clauses)

738 if

(Clause && !Clause->isImplicit()) {

740

Printer.Visit(Clause);

743 if

(!ForceNoStmt && S->hasAssociatedStmt())

744

PrintStmt(S->getRawStmt());

748

Indent() <<

"#pragma omp metadirective"

;

749

PrintOMPExecutableDirective(

Node

);

753

Indent() <<

"#pragma omp parallel"

;

754

PrintOMPExecutableDirective(

Node

);

758

Indent() <<

"#pragma omp simd"

;

759

PrintOMPExecutableDirective(

Node

);

763

Indent() <<

"#pragma omp tile"

;

764

PrintOMPExecutableDirective(

Node

);

768

Indent() <<

"#pragma omp unroll"

;

769

PrintOMPExecutableDirective(

Node

);

773

Indent() <<

"#pragma omp reverse"

;

774

PrintOMPExecutableDirective(

Node

);

778

Indent() <<

"#pragma omp interchange"

;

779

PrintOMPExecutableDirective(

Node

);

783

Indent() <<

"#pragma omp for"

;

784

PrintOMPExecutableDirective(

Node

);

788

Indent() <<

"#pragma omp for simd"

;

789

PrintOMPExecutableDirective(

Node

);

793

Indent() <<

"#pragma omp sections"

;

794

PrintOMPExecutableDirective(

Node

);

798

Indent() <<

"#pragma omp section"

;

799

PrintOMPExecutableDirective(

Node

);

803

Indent() <<

"#pragma omp scope"

;

804

PrintOMPExecutableDirective(

Node

);

808

Indent() <<

"#pragma omp single"

;

809

PrintOMPExecutableDirective(

Node

);

813

Indent() <<

"#pragma omp master"

;

814

PrintOMPExecutableDirective(

Node

);

818

Indent() <<

"#pragma omp critical"

;

819 if

(

Node

->getDirectiveName().getName()) {

821 Node

->getDirectiveName().printName(OS, Policy);

824

PrintOMPExecutableDirective(

Node

);

828

Indent() <<

"#pragma omp parallel for"

;

829

PrintOMPExecutableDirective(

Node

);

832void

StmtPrinter::VisitOMPParallelForSimdDirective(

834

Indent() <<

"#pragma omp parallel for simd"

;

835

PrintOMPExecutableDirective(

Node

);

838void

StmtPrinter::VisitOMPParallelMasterDirective(

840

Indent() <<

"#pragma omp parallel master"

;

841

PrintOMPExecutableDirective(

Node

);

844void

StmtPrinter::VisitOMPParallelMaskedDirective(

846

Indent() <<

"#pragma omp parallel masked"

;

847

PrintOMPExecutableDirective(

Node

);

850void

StmtPrinter::VisitOMPParallelSectionsDirective(

852

Indent() <<

"#pragma omp parallel sections"

;

853

PrintOMPExecutableDirective(

Node

);

857

Indent() <<

"#pragma omp task"

;

858

PrintOMPExecutableDirective(

Node

);

862

Indent() <<

"#pragma omp taskyield"

;

863

PrintOMPExecutableDirective(

Node

);

867

Indent() <<

"#pragma omp barrier"

;

868

PrintOMPExecutableDirective(

Node

);

872

Indent() <<

"#pragma omp taskwait"

;

873

PrintOMPExecutableDirective(

Node

);

877

Indent() <<

"#pragma omp assume"

;

878

PrintOMPExecutableDirective(

Node

);

882

Indent() <<

"#pragma omp error"

;

883

PrintOMPExecutableDirective(

Node

);

887

Indent() <<

"#pragma omp taskgroup"

;

888

PrintOMPExecutableDirective(

Node

);

892

Indent() <<

"#pragma omp flush"

;

893

PrintOMPExecutableDirective(

Node

);

897

Indent() <<

"#pragma omp depobj"

;

898

PrintOMPExecutableDirective(

Node

);

902

Indent() <<

"#pragma omp scan"

;

903

PrintOMPExecutableDirective(

Node

);

907

Indent() <<

"#pragma omp ordered"

;

912

Indent() <<

"#pragma omp atomic"

;

913

PrintOMPExecutableDirective(

Node

);

917

Indent() <<

"#pragma omp target"

;

918

PrintOMPExecutableDirective(

Node

);

922

Indent() <<

"#pragma omp target data"

;

923

PrintOMPExecutableDirective(

Node

);

926void

StmtPrinter::VisitOMPTargetEnterDataDirective(

928

Indent() <<

"#pragma omp target enter data"

;

929

PrintOMPExecutableDirective(

Node

,

true

);

932void

StmtPrinter::VisitOMPTargetExitDataDirective(

934

Indent() <<

"#pragma omp target exit data"

;

935

PrintOMPExecutableDirective(

Node

,

true

);

938void

StmtPrinter::VisitOMPTargetParallelDirective(

940

Indent() <<

"#pragma omp target parallel"

;

941

PrintOMPExecutableDirective(

Node

);

944void

StmtPrinter::VisitOMPTargetParallelForDirective(

946

Indent() <<

"#pragma omp target parallel for"

;

947

PrintOMPExecutableDirective(

Node

);

951

Indent() <<

"#pragma omp teams"

;

952

PrintOMPExecutableDirective(

Node

);

955void

StmtPrinter::VisitOMPCancellationPointDirective(

957

Indent() <<

"#pragma omp cancellation point " 958

<< getOpenMPDirectiveName(

Node

->getCancelRegion());

959

PrintOMPExecutableDirective(

Node

);

963

Indent() <<

"#pragma omp cancel " 964

<< getOpenMPDirectiveName(

Node

->getCancelRegion());

965

PrintOMPExecutableDirective(

Node

);

969

Indent() <<

"#pragma omp taskloop"

;

970

PrintOMPExecutableDirective(

Node

);

973void

StmtPrinter::VisitOMPTaskLoopSimdDirective(

975

Indent() <<

"#pragma omp taskloop simd"

;

976

PrintOMPExecutableDirective(

Node

);

979void

StmtPrinter::VisitOMPMasterTaskLoopDirective(

981

Indent() <<

"#pragma omp master taskloop"

;

982

PrintOMPExecutableDirective(

Node

);

985void

StmtPrinter::VisitOMPMaskedTaskLoopDirective(

987

Indent() <<

"#pragma omp masked taskloop"

;

988

PrintOMPExecutableDirective(

Node

);

991void

StmtPrinter::VisitOMPMasterTaskLoopSimdDirective(

993

Indent() <<

"#pragma omp master taskloop simd"

;

994

PrintOMPExecutableDirective(

Node

);

997void

StmtPrinter::VisitOMPMaskedTaskLoopSimdDirective(

999

Indent() <<

"#pragma omp masked taskloop simd"

;

1000

PrintOMPExecutableDirective(

Node

);

1003void

StmtPrinter::VisitOMPParallelMasterTaskLoopDirective(

1005

Indent() <<

"#pragma omp parallel master taskloop"

;

1006

PrintOMPExecutableDirective(

Node

);

1009void

StmtPrinter::VisitOMPParallelMaskedTaskLoopDirective(

1011

Indent() <<

"#pragma omp parallel masked taskloop"

;

1012

PrintOMPExecutableDirective(

Node

);

1015void

StmtPrinter::VisitOMPParallelMasterTaskLoopSimdDirective(

1017

Indent() <<

"#pragma omp parallel master taskloop simd"

;

1018

PrintOMPExecutableDirective(

Node

);

1021void

StmtPrinter::VisitOMPParallelMaskedTaskLoopSimdDirective(

1023

Indent() <<

"#pragma omp parallel masked taskloop simd"

;

1024

PrintOMPExecutableDirective(

Node

);

1028

Indent() <<

"#pragma omp distribute"

;

1029

PrintOMPExecutableDirective(

Node

);

1032void

StmtPrinter::VisitOMPTargetUpdateDirective(

1034

Indent() <<

"#pragma omp target update"

;

1035

PrintOMPExecutableDirective(

Node

,

true

);

1038void

StmtPrinter::VisitOMPDistributeParallelForDirective(

1040

Indent() <<

"#pragma omp distribute parallel for"

;

1041

PrintOMPExecutableDirective(

Node

);

1044void

StmtPrinter::VisitOMPDistributeParallelForSimdDirective(

1046

Indent() <<

"#pragma omp distribute parallel for simd"

;

1047

PrintOMPExecutableDirective(

Node

);

1050void

StmtPrinter::VisitOMPDistributeSimdDirective(

1052

Indent() <<

"#pragma omp distribute simd"

;

1053

PrintOMPExecutableDirective(

Node

);

1056void

StmtPrinter::VisitOMPTargetParallelForSimdDirective(

1058

Indent() <<

"#pragma omp target parallel for simd"

;

1059

PrintOMPExecutableDirective(

Node

);

1063

Indent() <<

"#pragma omp target simd"

;

1064

PrintOMPExecutableDirective(

Node

);

1067void

StmtPrinter::VisitOMPTeamsDistributeDirective(

1069

Indent() <<

"#pragma omp teams distribute"

;

1070

PrintOMPExecutableDirective(

Node

);

1073void

StmtPrinter::VisitOMPTeamsDistributeSimdDirective(

1075

Indent() <<

"#pragma omp teams distribute simd"

;

1076

PrintOMPExecutableDirective(

Node

);

1079void

StmtPrinter::VisitOMPTeamsDistributeParallelForSimdDirective(

1081

Indent() <<

"#pragma omp teams distribute parallel for simd"

;

1082

PrintOMPExecutableDirective(

Node

);

1085void

StmtPrinter::VisitOMPTeamsDistributeParallelForDirective(

1087

Indent() <<

"#pragma omp teams distribute parallel for"

;

1088

PrintOMPExecutableDirective(

Node

);

1092

Indent() <<

"#pragma omp target teams"

;

1093

PrintOMPExecutableDirective(

Node

);

1096void

StmtPrinter::VisitOMPTargetTeamsDistributeDirective(

1098

Indent() <<

"#pragma omp target teams distribute"

;

1099

PrintOMPExecutableDirective(

Node

);

1102void

StmtPrinter::VisitOMPTargetTeamsDistributeParallelForDirective(

1104

Indent() <<

"#pragma omp target teams distribute parallel for"

;

1105

PrintOMPExecutableDirective(

Node

);

1108void

StmtPrinter::VisitOMPTargetTeamsDistributeParallelForSimdDirective(

1110

Indent() <<

"#pragma omp target teams distribute parallel for simd"

;

1111

PrintOMPExecutableDirective(

Node

);

1114void

StmtPrinter::VisitOMPTargetTeamsDistributeSimdDirective(

1116

Indent() <<

"#pragma omp target teams distribute simd"

;

1117

PrintOMPExecutableDirective(

Node

);

1121

Indent() <<

"#pragma omp interop"

;

1122

PrintOMPExecutableDirective(

Node

);

1126

Indent() <<

"#pragma omp dispatch"

;

1127

PrintOMPExecutableDirective(

Node

);

1131

Indent() <<

"#pragma omp masked"

;

1132

PrintOMPExecutableDirective(

Node

);

1136

Indent() <<

"#pragma omp loop"

;

1137

PrintOMPExecutableDirective(

Node

);

1140void

StmtPrinter::VisitOMPTeamsGenericLoopDirective(

1142

Indent() <<

"#pragma omp teams loop"

;

1143

PrintOMPExecutableDirective(

Node

);

1146void

StmtPrinter::VisitOMPTargetTeamsGenericLoopDirective(

1148

Indent() <<

"#pragma omp target teams loop"

;

1149

PrintOMPExecutableDirective(

Node

);

1152void

StmtPrinter::VisitOMPParallelGenericLoopDirective(

1154

Indent() <<

"#pragma omp parallel loop"

;

1155

PrintOMPExecutableDirective(

Node

);

1158void

StmtPrinter::VisitOMPTargetParallelGenericLoopDirective(

1160

Indent() <<

"#pragma omp target parallel loop"

;

1161

PrintOMPExecutableDirective(

Node

);

1168 if

(!S->clauses().empty()) {

1171

Printer.VisitClauseList(S->clauses());

1175

Indent() <<

"#pragma acc "

<< S->getDirectiveKind();

1176

PrintOpenACCClauseList(S);

1180

PrintOpenACCConstruct(S);

1181

PrintStmt(S->getStructuredBlock());

1185

PrintOpenACCConstruct(S);

1186

PrintStmt(S->getLoop());

1190

PrintOpenACCConstruct(S);

1191

PrintStmt(S->getLoop());

1195

PrintOpenACCConstruct(S);

1196

PrintStmt(S->getStructuredBlock());

1199

PrintOpenACCConstruct(S);

1200

PrintStmt(S->getStructuredBlock());

1203

PrintOpenACCConstruct(S);

1206

PrintOpenACCConstruct(S);

1209

PrintOpenACCConstruct(S);

1212

PrintOpenACCConstruct(S);

1215

PrintOpenACCConstruct(S);

1218

PrintOpenACCConstruct(S);

1222

Indent() <<

"#pragma acc wait"

;

1223 if

(!S->getLParenLoc().isInvalid()) {

1225 if

(S->hasDevNumExpr()) {

1227

S->getDevNumExpr()->printPretty(OS,

nullptr

, Policy);

1231 if

(S->hasQueuesTag())

1234

llvm::interleaveComma(S->getQueueIdExprs(), OS, [&](

const Expr

*

E

) {

1235

E->printPretty(OS, nullptr, Policy);

1241

PrintOpenACCClauseList(S);

1250

OS <<

Node

->getBuiltinStr() <<

"()"

;

1254

llvm::report_fatal_error(

"Not implemented"

);

1258

PrintExpr(

Node

->getSubExpr());

1263 if

(

const auto

*OCED = dyn_cast<OMPCapturedExprDecl>(VD)) {

1264

OCED->getInit()->IgnoreImpCasts()->printPretty(OS,

nullptr

, Policy);

1267 if

(

const auto

*TPOD = dyn_cast<TemplateParamObjectDecl>(VD)) {

1268

TPOD->printAsExpr(OS, Policy);

1273 if

(

Node

->hasTemplateKeyword())

1279

isa<ParmVarDecl, NonTypeTemplateParmDecl>(VD) && ID)

1280

OS <<

ID

->deuglifiedName();

1285 case

Decl::NonTypeTemplateParm: {

1286 auto

*TD = cast<NonTypeTemplateParmDecl>(VD);

1287

OS <<

"value-parameter-"

<< TD->getDepth() <<

'-'

<< TD->getIndex() <<

""

;

1290 case

Decl::ParmVar: {

1291 auto

*PD = cast<ParmVarDecl>(VD);

1292

OS <<

"function-parameter-"

<< PD->getFunctionScopeDepth() <<

'-' 1293

<< PD->getFunctionScopeIndex();

1296 case

Decl::Decomposition:

1297

OS <<

"decomposition"

;

1298 for

(

const auto

&I : cast<DecompositionDecl>(VD)->bindings())

1299

OS <<

'-'

<< I->getName();

1306 if

(

Node

->hasExplicitTemplateArgs()) {

1308 if

(!

Node

->hadMultipleCandidates())

1309 if

(

auto

*TD = dyn_cast<TemplateDecl>(VD))

1310

TPL = TD->getTemplateParameters();

1315void

StmtPrinter::VisitDependentScopeDeclRefExpr(

1319 if

(

Node

->hasTemplateKeyword())

1321

OS <<

Node

->getNameInfo();

1322 if

(

Node

->hasExplicitTemplateArgs())

1327 if

(

Node

->getQualifier())

1328 Node

->getQualifier()->

print

(OS, Policy);

1329 if

(

Node

->hasTemplateKeyword())

1331

OS <<

Node

->getNameInfo();

1332 if

(

Node

->hasExplicitTemplateArgs())

1337 if

(

const auto

*DRE = dyn_cast<DeclRefExpr>(

E

)) {

1338 if

(

const auto

*PD = dyn_cast<ImplicitParamDecl>(DRE->getDecl())) {

1339 if

(PD->getParameterKind() == ImplicitParamKind::ObjCSelf &&

1340

DRE->getBeginLoc().isInvalid())

1348 if

(

Node

->getBase()) {

1351

PrintExpr(

Node

->getBase());

1352

OS << (

Node

->isArrow() ?

"->"

:

"."

);

1355

OS << *

Node

->getDecl();

1359 if

(

Node

->isSuperReceiver())

1361 else if

(

Node

->isObjectReceiver() &&

Node

->getBase()) {

1362

PrintExpr(

Node

->getBase());

1364

}

else if

(

Node

->isClassReceiver() &&

Node

->getClassReceiver()) {

1365

OS <<

Node

->getClassReceiver()->getName() <<

"."

;

1368 if

(

Node

->isImplicitProperty()) {

1369 if

(

const auto

*Getter =

Node

->getImplicitPropertyGetter())

1370

Getter->getSelector().

print

(OS);

1373 Node

->getImplicitPropertySetter()->getSelector());

1375

OS <<

Node

->getExplicitProperty()->getName();

1379

PrintExpr(

Node

->getBaseExpr());

1381

PrintExpr(

Node

->getKeyExpr());

1385void

StmtPrinter::VisitSYCLUniqueStableNameExpr(

1387

OS <<

"__builtin_sycl_unique_stable_name("

;

1388 Node

->getTypeSourceInfo()->getType().

print

(OS, Policy);

1424 bool

isSigned =

Node

->getType()->isSignedIntegerType();

1427 if

(isa<BitIntType>(

Node

->getType())) {

1428

OS << (isSigned ?

"wb"

:

"uwb"

);

1434 default

: llvm_unreachable(

"Unexpected type for integer literal!"

);

1435 case

BuiltinType::Char_S:

1436 case

BuiltinType::Char_U: OS <<

"i8"

;

break

;

1437 case

BuiltinType::UChar: OS <<

"Ui8"

;

break

;

1438 case

BuiltinType::SChar: OS <<

"i8"

;

break

;

1439 case

BuiltinType::Short: OS <<

"i16"

;

break

;

1440 case

BuiltinType::UShort: OS <<

"Ui16"

;

break

;

1441 case

BuiltinType::Int:

break

;

1442 case

BuiltinType::UInt: OS <<

'U'

;

break

;

1443 case

BuiltinType::Long: OS <<

'L'

;

break

;

1444 case

BuiltinType::ULong: OS <<

"UL"

;

break

;

1445 case

BuiltinType::LongLong: OS <<

"LL"

;

break

;

1446 case

BuiltinType::ULongLong: OS <<

"ULL"

;

break

;

1447 case

BuiltinType::Int128:

1449 case

BuiltinType::UInt128:

1451 case

BuiltinType::WChar_S:

1452 case

BuiltinType::WChar_U:

1460

OS <<

Node

->getValueAsString(

10);

1463 default

: llvm_unreachable(

"Unexpected type for fixed point literal!"

);

1464 case

BuiltinType::ShortFract: OS <<

"hr"

;

break

;

1465 case

BuiltinType::ShortAccum: OS <<

"hk"

;

break

;

1466 case

BuiltinType::UShortFract: OS <<

"uhr"

;

break

;

1467 case

BuiltinType::UShortAccum: OS <<

"uhk"

;

break

;

1468 case

BuiltinType::Fract: OS <<

"r"

;

break

;

1469 case

BuiltinType::Accum: OS <<

"k"

;

break

;

1470 case

BuiltinType::UFract: OS <<

"ur"

;

break

;

1471 case

BuiltinType::UAccum: OS <<

"uk"

;

break

;

1472 case

BuiltinType::LongFract: OS <<

"lr"

;

break

;

1473 case

BuiltinType::LongAccum: OS <<

"lk"

;

break

;

1474 case

BuiltinType::ULongFract: OS <<

"ulr"

;

break

;

1475 case

BuiltinType::ULongAccum: OS <<

"ulk"

;

break

;

1482 Node

->getValue().toString(Str);

1484 if

(Str.find_first_not_of(

"-0123456789"

) == StringRef::npos)

1492 default

: llvm_unreachable(

"Unexpected type for float literal!"

);

1493 case

BuiltinType::Half:

break

;

1494 case

BuiltinType::Ibm128:

break

;

1495 case

BuiltinType::Double:

break

;

1496 case

BuiltinType::Float16: OS <<

"F16"

;

break

;

1497 case

BuiltinType::Float: OS <<

'F'

;

break

;

1498 case

BuiltinType::LongDouble: OS <<

'L'

;

break

;

1499 case

BuiltinType::Float128: OS <<

'Q'

;

break

;

1510

PrintExpr(

Node

->getSubExpr());

1520

PrintExpr(

Node

->getSubExpr());

1525 if

(!

Node

->isPostfix()) {

1530 switch

(

Node

->getOpcode()) {

1539 if

(isa<UnaryOperator>(

Node

->getSubExpr()))

1544

PrintExpr(

Node

->getSubExpr());

1546 if

(

Node

->isPostfix())

1551

OS <<

"__builtin_offsetof("

;

1552 Node

->getTypeSourceInfo()->getType().

print

(OS, Policy);

1554 bool

PrintedSomething =

false

;

1555 for

(

unsigned

i = 0, n =

Node

->getNumComponents(); i < n; ++i) {

1562

PrintedSomething =

true

;

1575 if

(PrintedSomething)

1578

PrintedSomething =

true

;

1579

OS <<

Id

->getName();

1584void

StmtPrinter::VisitUnaryExprOrTypeTraitExpr(

1587 if

(

Node

->getKind() == UETT_AlignOf) {

1589

Spelling =

"alignof"

;

1591

Spelling =

"_Alignof"

;

1593

Spelling =

"__alignof"

;

1598 if

(

Node

->isArgumentType()) {

1600 Node

->getArgumentType().

print

(OS, Policy);

1604

PrintExpr(

Node

->getArgumentExpr());

1610 if

(

Node

->isExprPredicate())

1611

PrintExpr(

Node

->getControllingExpr());

1613 Node

->getControllingType()->getType().

print

(OS, Policy);

1621 T

.print(OS, Policy);

1623

PrintExpr(Assoc.getAssociationExpr());

1629

PrintExpr(

Node

->getLHS());

1631

PrintExpr(

Node

->getRHS());

1636

PrintExpr(

Node

->getBase());

1638

PrintExpr(

Node

->getRowIdx());

1641

PrintExpr(

Node

->getColumnIdx());

1646

PrintExpr(

Node

->getBase());

1648 if

(

Node

->getLowerBound())

1649

PrintExpr(

Node

->getLowerBound());

1650 if

(

Node

->getColonLocFirst().isValid()) {

1652 if

(

Node

->getLength())

1653

PrintExpr(

Node

->getLength());

1655 if

(

Node

->isOMPArraySection() &&

Node

->getColonLocSecond().isValid()) {

1657 if

(

Node

->getStride())

1658

PrintExpr(

Node

->getStride());

1665 for

(

Expr

*

E

:

Node

->getDimensions()) {

1671

PrintExpr(

Node

->getBase());

1676 for

(

unsigned

I = 0,

E

=

Node

->numOfIterators(); I <

E

; ++I) {

1677 auto

*VD = cast<ValueDecl>(

Node

->getIteratorDecl(I));

1680

OS <<

" "

<< VD->

getName

() <<

" = "

;

1681

PrintExpr(

Range

.Begin);

1683

PrintExpr(

Range

.End);

1686

PrintExpr(

Range

.Step);

1695 for

(

unsigned

i = 0, e =

Call

->getNumArgs(); i != e; ++i) {

1696 if

(isa<CXXDefaultArgExpr>(

Call

->getArg(i))) {

1702

PrintExpr(

Call

->getArg(i));

1707

PrintExpr(

Call

->getCallee());

1709

PrintCallArgs(

Call

);

1714 if

(

const auto

*TE = dyn_cast<CXXThisExpr>(

E

))

1715 return

TE->isImplicit();

1721

PrintExpr(

Node

->getBase());

1723 auto

*ParentMember = dyn_cast<MemberExpr>(

Node

->getBase());

1725

ParentMember ? dyn_cast<FieldDecl>(ParentMember->getMemberDecl())

1729

OS << (

Node

->isArrow() ?

"->"

:

"."

);

1732 if

(

auto

*FD = dyn_cast<FieldDecl>(

Node

->getMemberDecl()))

1733 if

(FD->isAnonymousStructOrUnion())

1738 if

(

Node

->hasTemplateKeyword())

1740

OS <<

Node

->getMemberNameInfo();

1742 if

(

auto

*FD = dyn_cast<FunctionDecl>(

Node

->getMemberDecl())) {

1743 if

(!

Node

->hadMultipleCandidates())

1744 if

(

auto

*FTD = FD->getPrimaryTemplate())

1745

TPL = FTD->getTemplateParameters();

1746

}

else if

(

auto

*VTSD =

1747

dyn_cast<VarTemplateSpecializationDecl>(

Node

->getMemberDecl()))

1748

TPL = VTSD->getSpecializedTemplate()->getTemplateParameters();

1749 if

(

Node

->hasExplicitTemplateArgs())

1754

PrintExpr(

Node

->getBase());

1755

OS << (

Node

->isArrow() ?

"->isa"

:

".isa"

);

1759

PrintExpr(

Node

->getBase());

1761

OS <<

Node

->getAccessor().getName();

1766 Node

->getTypeAsWritten().

print

(OS, Policy);

1768

PrintExpr(

Node

->getSubExpr());

1775

PrintExpr(

Node

->getInitializer());

1780

PrintExpr(

Node

->getSubExpr());

1784

PrintExpr(

Node

->getLHS());

1786

PrintExpr(

Node

->getRHS());

1790

PrintExpr(

Node

->getLHS());

1792

PrintExpr(

Node

->getRHS());

1796

PrintExpr(

Node

->getCond());

1798

PrintExpr(

Node

->getLHS());

1800

PrintExpr(

Node

->getRHS());

1807

PrintExpr(

Node

->getCommon());

1809

PrintExpr(

Node

->getFalseExpr());

1813

OS <<

"&&"

<<

Node

->getLabel()->getName();

1816void

StmtPrinter::VisitStmtExpr(

StmtExpr

*

E

) {

1818

PrintRawCompoundStmt(

E

->getSubStmt());

1823

OS <<

"__builtin_choose_expr("

;

1824

PrintExpr(

Node

->getCond());

1826

PrintExpr(

Node

->getLHS());

1828

PrintExpr(

Node

->getRHS());

1832void

StmtPrinter::VisitGNUNullExpr(

GNUNullExpr

*) {

1837

OS <<

"__builtin_shufflevector("

;

1838 for

(

unsigned

i = 0, e =

Node

->getNumSubExprs(); i != e; ++i) {

1840

PrintExpr(

Node

->getExpr(i));

1846

OS <<

"__builtin_convertvector("

;

1847

PrintExpr(

Node

->getSrcExpr());

1854 if

(

Node

->getSyntacticForm()) {

1855

Visit(

Node

->getSyntacticForm());

1860 for

(

unsigned

i = 0, e =

Node

->getNumInits(); i != e; ++i) {

1862 if

(

Node

->getInit(i))

1863

PrintExpr(

Node

->getInit(i));

1874

PrintExpr(

Node

->getSubExpr());

1884 for

(

unsigned

i = 0, e =

Node

->getNumExprs(); i != e; ++i) {

1886

PrintExpr(

Node

->getExpr(i));

1892 bool

NeedsEquals =

true

;

1894 if

(

D

.isFieldDesignator()) {

1895 if

(

D

.getDotLoc().isInvalid()) {

1897

OS << II->getName() <<

":"

;

1898

NeedsEquals =

false

;

1901

OS <<

"."

<<

D

.getFieldName()->getName();

1905 if

(

D

.isArrayDesignator()) {

1906

PrintExpr(

Node

->getArrayIndex(

D

));

1908

PrintExpr(

Node

->getArrayRangeStart(

D

));

1910

PrintExpr(

Node

->getArrayRangeEnd(

D

));

1920

PrintExpr(

Node

->getInit());

1923void

StmtPrinter::VisitDesignatedInitUpdateExpr(

1927

PrintExpr(

Node

->getBase());

1930

OS <<

"/*updater*/"

;

1931

PrintExpr(

Node

->getUpdater());

1936

OS <<

"/*no init*/"

;

1940 if

(

Node

->getType()->getAsCXXRecordDecl()) {

1941

OS <<

"/*implicit*/"

;

1945

OS <<

"/*implicit*/("

;

1948 if

(

Node

->getType()->isRecordType())

1956

OS <<

"__builtin_va_arg("

;

1957

PrintExpr(

Node

->getSubExpr());

1964

PrintExpr(

Node

->getSyntacticForm());

1968 const char

*Name =

nullptr

;

1969 switch

(

Node

->getOp()) {

1970#define BUILTIN(ID, TYPE, ATTRS) 1971#define ATOMIC_BUILTIN(ID, TYPE, ATTRS) \ 1972 case AtomicExpr::AO ## ID: \ 1975#include "clang/Basic/Builtins.inc" 1980

PrintExpr(

Node

->getPtr());

1981 if

(

Node

->getOp() != AtomicExpr::AO__c11_atomic_load &&

1982 Node

->getOp() != AtomicExpr::AO__atomic_load_n &&

1983 Node

->getOp() != AtomicExpr::AO__scoped_atomic_load_n &&

1984 Node

->getOp() != AtomicExpr::AO__opencl_atomic_load &&

1985 Node

->getOp() != AtomicExpr::AO__hip_atomic_load) {

1987

PrintExpr(

Node

->getVal1());

1989 if

(

Node

->getOp() == AtomicExpr::AO__atomic_exchange ||

1990 Node

->isCmpXChg()) {

1992

PrintExpr(

Node

->getVal2());

1994 if

(

Node

->getOp() == AtomicExpr::AO__atomic_compare_exchange ||

1995 Node

->getOp() == AtomicExpr::AO__atomic_compare_exchange_n) {

1997

PrintExpr(

Node

->getWeak());

1999 if

(

Node

->getOp() != AtomicExpr::AO__c11_atomic_init &&

2000 Node

->getOp() != AtomicExpr::AO__opencl_atomic_init) {

2002

PrintExpr(

Node

->getOrder());

2004 if

(

Node

->isCmpXChg()) {

2006

PrintExpr(

Node

->getOrderFail());

2014 if

(Kind == OO_PlusPlus || Kind == OO_MinusMinus) {

2015 if

(

Node

->getNumArgs() == 1) {

2017

PrintExpr(

Node

->getArg(0));

2019

PrintExpr(

Node

->getArg(0));

2022

}

else if

(Kind == OO_Arrow) {

2023

PrintExpr(

Node

->getArg(0));

2024

}

else if

(Kind == OO_Call || Kind == OO_Subscript) {

2025

PrintExpr(

Node

->getArg(0));

2026

OS << (

Kind

== OO_Call ?

'('

:

'['

);

2027 for

(

unsigned

ArgIdx = 1; ArgIdx <

Node

->getNumArgs(); ++ArgIdx) {

2030 if

(!isa<CXXDefaultArgExpr>(

Node

->getArg(ArgIdx)))

2031

PrintExpr(

Node

->getArg(ArgIdx));

2033

OS << (

Kind

== OO_Call ?

')'

:

']'

);

2034

}

else if

(

Node

->getNumArgs() == 1) {

2036

PrintExpr(

Node

->getArg(0));

2037

}

else if

(

Node

->getNumArgs() == 2) {

2038

PrintExpr(

Node

->getArg(0));

2040

PrintExpr(

Node

->getArg(1));

2042

llvm_unreachable(

"unknown overloaded operator"

);

2049 if

(isa_and_nonnull<CXXConversionDecl>(MD)) {

2050

PrintExpr(

Node

->getImplicitObjectArgument());

2053

VisitCallExpr(cast<CallExpr>(

Node

));

2057

PrintExpr(

Node

->getCallee());

2059

PrintCallArgs(

Node

->getConfig());

2061

PrintCallArgs(

Node

);

2065void

StmtPrinter::VisitCXXRewrittenBinaryOperator(

2068 Node

->getDecomposedForm();

2069

PrintExpr(

const_cast<Expr

*

>

(Decomposed.

LHS

));

2071

PrintExpr(

const_cast<Expr

*

>

(Decomposed.

RHS

));

2075

OS <<

Node

->getCastName() <<

'<'

;

2076 Node

->getTypeAsWritten().

print

(OS, Policy);

2078

PrintExpr(

Node

->getSubExpr());

2083

VisitCXXNamedCastExpr(

Node

);

2087

VisitCXXNamedCastExpr(

Node

);

2091

VisitCXXNamedCastExpr(

Node

);

2095

VisitCXXNamedCastExpr(

Node

);

2099

OS <<

"__builtin_bit_cast("

;

2100 Node

->getTypeInfoAsWritten()->getType().

print

(OS, Policy);

2102

PrintExpr(

Node

->getSubExpr());

2107

VisitCXXNamedCastExpr(

Node

);

2112 if

(

Node

->isTypeOperand()) {

2113 Node

->getTypeOperandSourceInfo()->getType().

print

(OS, Policy);

2115

PrintExpr(

Node

->getExprOperand());

2122 if

(

Node

->isTypeOperand()) {

2123 Node

->getTypeOperandSourceInfo()->getType().

print

(OS, Policy);

2125

PrintExpr(

Node

->getExprOperand());

2131

PrintExpr(

Node

->getBaseExpr());

2132 if

(

Node

->isArrow())

2137 Node

->getQualifierLoc().getNestedNameSpecifier())

2139

OS <<

Node

->getPropertyDecl()->getDeclName();

2143

PrintExpr(

Node

->getBase());

2145

PrintExpr(

Node

->getIdx());

2150 switch

(

Node

->getLiteralOperatorKind()) {

2152

OS << cast<StringLiteral>(

Node

->getArg(0)->IgnoreImpCasts())->getString();

2155 const auto

*DRE = cast<DeclRefExpr>(

Node

->getCallee()->IgnoreImpCasts());

2157

cast<FunctionDecl>(DRE->getDecl())->getTemplateSpecializationArgs();

2162 if

(!DRE->hadMultipleCandidates())

2163 if

(

const auto

*TD = dyn_cast<TemplateDecl>(DRE->getDecl()))

2164

TPL = TD->getTemplateParameters();

2165

OS <<

"operator\"\""

<<

Node

->getUDSuffix()->getName();

2173 char C

= (char)

P

.getAsIntegral().getZExtValue();

2180 const auto

*

Int

= cast<IntegerLiteral>(

Node

->getCookedLiteral());

2186 auto

*

Float

= cast<FloatingLiteral>(

Node

->getCookedLiteral());

2192

PrintExpr(

Node

->getCookedLiteral());

2195

OS <<

Node

->getUDSuffix()->getName();

2199

OS << (

Node

->getValue() ?

"true"

:

"false"

);

2211 if

(!

Node

->getSubExpr())

2215

PrintExpr(

Node

->getSubExpr());

2228 auto

TargetType =

Node

->getType();

2229 auto

*

Auto

= TargetType->getContainedDeducedType();

2230 bool

Bare =

Auto

&&

Auto

->isDeduced();

2235

TargetType.print(OS, Policy);

2240 if

(!

Node

->isListInitialization())

2242

PrintExpr(

Node

->getSubExpr());

2243 if

(!

Node

->isListInitialization())

2248

PrintExpr(

Node

->getSubExpr());

2253 if

(

Node

->isStdInitListInitialization())

2255 else if

(

Node

->isListInitialization())

2260

ArgEnd =

Node

->arg_end();

2261

Arg != ArgEnd; ++Arg) {

2262 if

((*Arg)->isDefaultArgument())

2264 if

(Arg !=

Node

->arg_begin())

2268 if

(

Node

->isStdInitListInitialization())

2270 else if

(

Node

->isListInitialization())

2278 bool

NeedComma =

false

;

2279 switch

(

Node

->getCaptureDefault()) {

2294

CEnd =

Node

->explicit_capture_end();

2297 if

(

C

->capturesVLAType())

2304 switch

(

C

->getCaptureKind()) {

2316

OS <<

C

->getCapturedVar()->getName();

2320

OS <<

C

->getCapturedVar()->getName();

2324

llvm_unreachable(

"VLA type in explicit captures."

);

2327 if

(

C

->isPackExpansion())

2330 if

(

Node

->isInitCapture(

C

)) {

2332 auto

*

D

= cast<VarDecl>(

C

->getCapturedVar());

2334

llvm::StringRef

Pre

;

2335

llvm::StringRef

Post

;

2337

!isa<ParenListExpr>(

D

->getInit())) {

2345

PrintExpr(

D

->getInit());

2351 if

(!

Node

->getExplicitTemplateParameters().empty()) {

2352 Node

->getTemplateParameterList()->

print

(

2353

OS,

Node

->getLambdaClass()->getASTContext(),

2357 if

(

Node

->hasExplicitParameters()) {

2367

std::string ParamStr =

2369

?

P

->getIdentifier()->deuglifiedName().str()

2370

:

P

->getNameAsString();

2371 P

->getOriginalType().print(OS, Policy, ParamStr);

2380 if

(

Node

->isMutable())

2389 if

(

Node

->hasExplicitResultType()) {

2391

Proto->getReturnType().print(OS, Policy);

2400

PrintRawCompoundStmt(

Node

->getCompoundStmtBody());

2405

TSInfo->getType().print(OS, Policy);

2411void

StmtPrinter::VisitCXXNewExpr(

CXXNewExpr

*

E

) {

2412 if

(

E

->isGlobalNew())

2415 unsigned

NumPlace =

E

->getNumPlacementArgs();

2416 if

(NumPlace > 0 && !isa<CXXDefaultArgExpr>(

E

->getPlacementArg(0))) {

2418

PrintExpr(

E

->getPlacementArg(0));

2419 for

(

unsigned

i = 1; i < NumPlace; ++i) {

2420 if

(isa<CXXDefaultArgExpr>(

E

->getPlacementArg(i)))

2423

PrintExpr(

E

->getPlacementArg(i));

2427 if

(

E

->isParenTypeId())

2430 if

(

E

->isArray()) {

2431

llvm::raw_string_ostream

s

(TypeS);

2433 if

(std::optional<Expr *> Size =

E

->getArraySize())

2434

(*Size)->printPretty(

s

, Helper, Policy);

2437 E

->getAllocatedType().print(OS, Policy, TypeS);

2438 if

(

E

->isParenTypeId())

2442 if

(InitStyle != CXXNewInitializationStyle::None) {

2443 bool

Bare = InitStyle == CXXNewInitializationStyle::Parens &&

2444

!isa<ParenListExpr>(

E

->getInitializer());

2447

PrintExpr(

E

->getInitializer());

2454 if

(

E

->isGlobalDelete())

2457 if

(

E

->isArrayForm())

2459

PrintExpr(

E

->getArgument());

2463

PrintExpr(

E

->getBase());

2468 if

(

E

->getQualifier())

2469 E

->getQualifier()->print(OS, Policy);

2473

OS << II->getName();

2475 E

->getDestroyedType().print(OS, Policy);

2479 if

(

E

->isListInitialization() && !

E

->isStdInitListInitialization())

2482 for

(

unsigned

i = 0, e =

E

->getNumArgs(); i != e; ++i) {

2483 if

(isa<CXXDefaultArgExpr>(

E

->getArg(i))) {

2489

PrintExpr(

E

->getArg(i));

2492 if

(

E

->isListInitialization() && !

E

->isStdInitListInitialization())

2498

OS <<

"<forwarded>"

;

2502

PrintExpr(

E

->getSubExpr());

2507

PrintExpr(

E

->getSubExpr());

2510void

StmtPrinter::VisitCXXUnresolvedConstructExpr(

2512 Node

->getTypeAsWritten().

print

(OS, Policy);

2513 if

(!

Node

->isListInitialization())

2515 for

(

auto

Arg =

Node

->arg_begin(), ArgEnd =

Node

->arg_end(); Arg != ArgEnd;

2517 if

(Arg !=

Node

->arg_begin())

2521 if

(!

Node

->isListInitialization())

2525void

StmtPrinter::VisitCXXDependentScopeMemberExpr(

2527 if

(!

Node

->isImplicitAccess()) {

2528

PrintExpr(

Node

->getBase());

2529

OS << (

Node

->isArrow() ?

"->"

:

"."

);

2533 if

(

Node

->hasTemplateKeyword())

2535

OS <<

Node

->getMemberNameInfo();

2536 if

(

Node

->hasExplicitTemplateArgs())

2541 if

(!

Node

->isImplicitAccess()) {

2542

PrintExpr(

Node

->getBase());

2543

OS << (

Node

->isArrow() ?

"->"

:

"."

);

2547 if

(

Node

->hasTemplateKeyword())

2549

OS <<

Node

->getMemberNameInfo();

2550 if

(

Node

->hasExplicitTemplateArgs())

2556 for

(

unsigned

I = 0, N =

E

->getNumArgs(); I != N; ++I) {

2566 E

->getQueriedType().print(OS, Policy);

2572

PrintExpr(

E

->getQueriedExpression());

2578

PrintExpr(

E

->getOperand());

2583

PrintExpr(

E

->getPattern());

2588

OS <<

"sizeof...("

<< *

E

->getPack() <<

")"

;

2592

PrintExpr(

E

->getPackIdExpression());

2594

PrintExpr(

E

->getIndexExpr());

2598void

StmtPrinter::VisitResolvedUnexpandedPackExpr(

2600

OS <<

"<<resolved pack("

;

2602 E

->getExprs().begin(),

E

->getExprs().end(),

2603

[

this

](

auto

*

X

) { PrintExpr(X); }, [

this

] { OS <<

", "

; });

2607void

StmtPrinter::VisitSubstNonTypeTemplateParmPackExpr(

2609

OS << *

Node

->getParameterPack();

2612void

StmtPrinter::VisitSubstNonTypeTemplateParmExpr(

2614

Visit(

Node

->getReplacement());

2618

OS << *

E

->getParameterPack();

2622

PrintExpr(

Node

->getSubExpr());

2627 if

(

E

->getLHS()) {

2628

PrintExpr(

E

->getLHS());

2632 if

(

E

->getRHS()) {

2634

PrintExpr(

E

->getRHS());

2641

llvm::interleaveComma(

Node

->getInitExprs(), OS,

2642

[&](

Expr

*

E

) { PrintExpr(E); });

2650 if

(

E

->getTemplateKWLoc().isValid())

2652

OS <<

E

->getFoundDecl()->getName();

2655 E

->getNamedConcept()->getTemplateParameters());

2660 auto

LocalParameters =

E

->getLocalParameters();

2661 if

(!LocalParameters.empty()) {

2663 for

(

ParmVarDecl

*LocalParam : LocalParameters) {

2664

PrintRawDecl(LocalParam);

2665 if

(LocalParam != LocalParameters.back())

2672 auto

Requirements =

E

->getRequirements();

2674 if

(

auto

*TypeReq = dyn_cast<concepts::TypeRequirement>(Req)) {

2675 if

(TypeReq->isSubstitutionFailure())

2676

OS <<

"<<error-type>>"

;

2678

TypeReq->getType()->getType().print(OS, Policy);

2679

}

else if

(

auto

*ExprReq = dyn_cast<concepts::ExprRequirement>(Req)) {

2680 if

(ExprReq->isCompound())

2682 if

(ExprReq->isExprSubstitutionFailure())

2683

OS <<

"<<error-expression>>"

;

2685

PrintExpr(ExprReq->getExpr());

2686 if

(ExprReq->isCompound()) {

2688 if

(ExprReq->getNoexceptLoc().isValid())

2690 const auto

&RetReq = ExprReq->getReturnTypeRequirement();

2691 if

(!RetReq.isEmpty()) {

2693 if

(RetReq.isSubstitutionFailure())

2694

OS <<

"<<error-type>>"

;

2695 else if

(RetReq.isTypeConstraint())

2696

RetReq.getTypeConstraint()->print(OS, Policy);

2700 auto

*NestedReq = cast<concepts::NestedRequirement>(Req);

2702 if

(NestedReq->hasInvalidConstraint())

2703

OS <<

"<<error-expression>>"

;

2705

PrintExpr(NestedReq->getConstraintExpr());

2715

Visit(S->getBody());

2720 if

(S->getOperand()) {

2722

Visit(S->getOperand());

2727void

StmtPrinter::VisitCoawaitExpr(

CoawaitExpr

*S) {

2729

PrintExpr(S->getOperand());

2734

PrintExpr(S->getOperand());

2737void

StmtPrinter::VisitCoyieldExpr(

CoyieldExpr

*S) {

2739

PrintExpr(S->getOperand());

2746

VisitStringLiteral(

Node

->getString());

2751

Visit(

E

->getSubExpr());

2757 for

(

auto

I = Ch.begin(),

E

= Ch.end(); I !=

E

; ++I) {

2758 if

(I != Ch.begin())

2767 for

(

unsigned

I = 0, N =

E

->getNumElements(); I != N; ++I) {

2774

Visit(Element.Value);

2775 if

(Element.isPackExpansion())

2783 Node

->getEncodedType().

print

(OS, Policy);

2788

OS <<

"@selector("

;

2794

OS <<

"@protocol("

<< *

Node

->getProtocol() <<

')'

;

2819 for

(

unsigned

i = 0, e = Mess->

getNumArgs

(); i != e; ++i) {

2821 if

(i > 0) OS <<

' '

;

2829

PrintExpr(Mess->

getArg

(i));

2836

OS << (

Node

->getValue() ?

"__objc_yes"

:

"__objc_no"

);

2841

PrintExpr(

E

->getSubExpr());

2846

OS <<

'('

<<

E

->getBridgeKindName();

2849

PrintExpr(

E

->getSubExpr());

2858 if

(isa<FunctionNoProtoType>(AFT)) {

2860

}

else if

(!BD->

param_empty

() || cast<FunctionProtoType>(AFT)->isVariadic()) {

2865

std::string ParamStr = (*AI)->getNameAsString();

2866

(*AI)->getType().print(OS, Policy, ParamStr);

2869 const auto

*FT = cast<FunctionProtoType>(AFT);

2870 if

(FT->isVariadic()) {

2880

PrintExpr(

Node

->getSourceExpr());

2885

llvm_unreachable(

"Cannot print TypoExpr nodes"

);

2889

OS <<

"<recovery-expr>("

;

2890 const char

*Sep =

""

;

2891 for

(

Expr

*

E

:

Node

->subExpressions()) {

2900

OS <<

"__builtin_astype("

;

2901

PrintExpr(

Node

->getSrcExpr());

2908

PrintExpr(

Node

->getArgLValue());

2921

StringRef NL,

const ASTContext

*Context)

const

{

2922

StmtPrinter

P

(Out, Helper, Policy, Indentation, NL, Context);

2923 P

.Visit(

const_cast<Stmt

*

>

(

this

));

2928 unsigned

Indentation, StringRef NL,

2930

StmtPrinter

P

(Out, Helper, Policy, Indentation, NL, Context);

2931 P

.PrintControlledStmt(

const_cast<Stmt

*

>

(

this

));

2937

llvm::raw_string_ostream TempOut(Buf);

2941

Out <<

JsonFormat

(TempOut.str(), AddQuotes);

Defines the clang::ASTContext interface.

static Decl::Kind getKind(const Decl *D)

Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....

This file defines OpenMP nodes for declarative directives.

Defines the C++ template declaration subclasses.

Defines the clang::Expr interface and subclasses for C++ expressions.

Defines enumerations for expression traits intrinsics.

Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.

Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.

Defines several types used to describe C++ lambda expressions that are shared between the parser and ...

This file defines OpenMP AST classes for clauses.

Defines some OpenMP-specific enums and functions.

Defines an enumeration for C++ overloaded operators.

static std::string toString(const clang::SanitizerSet &Sanitizers)

Produce a string containing comma-separated names of sanitizers in Sanitizers set.

Defines the clang::SourceLocation class and associated facilities.

Defines the Objective-C statement AST node classes.

This file defines OpenMP AST classes for executable directives and clauses.

static bool isImplicitThis(const Expr *E)

static bool isImplicitSelf(const Expr *E)

static void PrintFloatingLiteral(raw_ostream &OS, FloatingLiteral *Node, bool PrintSuffix)

static bool printExprAsWritten(raw_ostream &OS, Expr *E, const ASTContext *Context)

Prints the given expression using the original source text.

This file defines SYCL AST classes used to represent calls to SYCL kernels.

Defines enumerations for the type traits support.

C Language Family Type Representation.

__device__ __2f16 float __ockl_bool s

Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...

SourceManager & getSourceManager()

const LangOptions & getLangOpts() const

AddrLabelExpr - The GNU address of label extension, representing &&label.

Represents the index of the current element of an array being initialized by an ArrayInitLoopExpr.

Represents a loop initializing the elements of an array.

This class represents BOTH the OpenMP Array Section and OpenACC 'subarray', with a boolean differenti...

ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.

An Embarcadero array type trait, as used in the implementation of __array_rank and __array_extent.

AsTypeExpr - Clang builtin function __builtin_astype [OpenCL 6.2.4.2] This AST node provides support ...

AtomicExpr - Variadic atomic builtins: __atomic_exchange, __atomic_fetch_*, __atomic_load,...

Attr - This represents one attribute.

void printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const

Represents an attribute applied to a statement.

BinaryConditionalOperator - The GNU extension to the conditional operator which allows the middle ope...

A builtin binary operation expression such as "x + y" or "x <= y".

StringRef getOpcodeStr() const

Represents a block literal declaration, which is like an unnamed FunctionDecl.

param_iterator param_end()

MutableArrayRef< ParmVarDecl * >::iterator param_iterator

param_iterator param_begin()

BlockExpr - Adaptor class for mixing a BlockDecl with expressions.

BreakStmt - This represents a break.

Represents a C++2a __builtin_bit_cast(T, v) expression.

This class is used for builtin types like 'int'.

CStyleCastExpr - An explicit cast in C (C99 6.5.4) or a C-style cast in C++ (C++ [expr....

Represents a call to a CUDA kernel function.

A C++ addrspace_cast expression (currently only enabled for OpenCL).

Represents binding an expression to a temporary.

A boolean literal, per ([C++ lex.bool] Boolean literals).

CXXCatchStmt - This represents a C++ catch block.

A C++ const_cast expression (C++ [expr.const.cast]).

Represents a call to a C++ constructor.

A default argument (C++ [dcl.fct.default]).

A use of a default initializer in a constructor or in aggregate initialization.

Represents a delete expression for memory deallocation and destructor calls, e.g.

Represents a C++ member access expression where the actual member referenced could not be resolved be...

A C++ dynamic_cast expression (C++ [expr.dynamic.cast]).

Represents a folding of a pack over an operator.

CXXForRangeStmt - This represents C++0x [stmt.ranged]'s ranged for statement, represented as 'for (ra...

Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr....

Represents a call to an inherited base class constructor from an inheriting constructor.

Represents a call to a member function that may be written either with member call syntax (e....

Represents a static or instance method of a struct/union/class.

Abstract class common to all of the C++ "named"/"keyword" casts.

Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)".

Represents a C++11 noexcept expression (C++ [expr.unary.noexcept]).

The null pointer literal (C++11 [lex.nullptr])

A call to an overloaded operator written using operator syntax.

Represents a list-initialization with parenthesis.

Represents a C++ pseudo-destructor (C++ [expr.pseudo]).

A C++ reinterpret_cast expression (C++ [expr.reinterpret.cast]).

A rewritten comparison expression that was originally written using operator syntax.

An expression "T()" which creates an rvalue of a non-class type T.

A C++ static_cast expression (C++ [expr.static.cast]).

Implicit construction of a std::initializer_list<T> object from an array temporary within list-initia...

Represents a C++ functional cast expression that builds a temporary object.

Represents the this expression in C++.

A C++ throw-expression (C++ [except.throw]).

CXXTryStmt - A C++ try block, including all handlers.

A C++ typeid expression (C++ [expr.typeid]), which gets the type_info that corresponds to the supplie...

Describes an explicit type conversion that uses functional notion but could not be resolved because o...

A Microsoft C++ __uuidof expression, which gets the _GUID that corresponds to the supplied type or ex...

CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).

This captures a statement into a function.

CaseStmt - Represent a case statement.

static CharSourceRange getTokenRange(SourceRange R)

static void print(unsigned val, CharacterLiteralKind Kind, raw_ostream &OS)

ChooseExpr - GNU builtin-in function __builtin_choose_expr.

Represents a 'co_await' expression.

CompoundAssignOperator - For compound assignments (e.g.

CompoundLiteralExpr - [C99 6.5.2.5].

CompoundStmt - This represents a group of statements like { stmt stmt }.

Represents the specialization of a concept - evaluates to a prvalue of type bool.

ConditionalOperator - The ?: ternary operator.

ConstantExpr - An expression that occurs in a constant context and optionally the result of evaluatin...

ContinueStmt - This represents a continue.

ConvertVectorExpr - Clang builtin function __builtin_convertvector This AST node provides support for...

Represents a 'co_return' statement in the C++ Coroutines TS.

Represents the body of a coroutine.

Represents a 'co_yield' expression.

A reference to a declared variable, function, enum, etc.

DeclStmt - Adaptor class for mixing declarations with statements and expressions.

Decl - This represents one declaration (or definition), e.g.

const char * getDeclKindName() const

static void printGroup(Decl **Begin, unsigned NumDecls, raw_ostream &Out, const PrintingPolicy &Policy, unsigned Indentation=0)

void print(raw_ostream &Out, unsigned Indentation=0, bool PrintInstantiation=false) const

IdentifierInfo * getAsIdentifierInfo() const

Retrieve the IdentifierInfo * stored in this declaration name, or null if this declaration name isn't...

NameKind getNameKind() const

Determine what kind of name this is.

Represents a 'co_await' expression while the type of the promise is dependent.

A qualified reference to a name whose declaration cannot yet be resolved.

Represents a single C99 designator.

Represents a C99 designated initializer expression.

DoStmt - This represents a 'do/while' stmt.

void print(llvm::raw_ostream &OS, const PrintingPolicy &PP) const

Prints the node to the given output stream.

Represents a reference to #emded data.

Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...

This represents one expression.

An expression trait intrinsic.

ExtVectorElementExpr - This represents access to specific elements of a vector, and may occur on the ...

Represents difference between two FPOptions values.

Represents a member of a struct/union/class.

bool isAnonymousStructOrUnion() const

Determines whether this field is a representative for an anonymous struct or union.

ForStmt - This represents a 'for (init;cond;inc)' stmt.

ArrayRef< ParmVarDecl * > parameters() const

bool isVariadic() const

Whether this function is variadic.

Represents a reference to a function parameter pack or init-capture pack that has been substituted bu...

Represents a prototype with parameter type info, e.g.

void printExceptionSpecification(raw_ostream &OS, const PrintingPolicy &Policy) const

FunctionType - C99 6.7.5.3 - Function Declarators.

This represents a GCC inline-assembly statement extension.

GNUNullExpr - Implements the GNU __null extension, which is a name for a null pointer constant that h...

Represents a C11 generic selection.

AssociationTy< false > Association

GotoStmt - This represents a direct goto.

This class represents temporary values used to represent inout and out arguments in HLSL.

One of these records is kept for each identifier that is lexed.

StringRef getName() const

Return the actual identifier string.

IfStmt - This represents an if/then/else.

ImaginaryLiteral - We support imaginary integer and floating point literals, like "1....

ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...

Represents an implicitly-generated value initialization of an object of a given type.

IndirectGotoStmt - This represents an indirect goto.

Describes an C or C++ initializer list.

LabelStmt - Represents a label, which has a substatement.

Describes the capture of a variable or of this, or of a C++1y init-capture.

A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...

llvm::RoundingMode RoundingMode

FPExceptionModeKind

Possible floating point exception behavior.

static StringRef getSourceText(CharSourceRange Range, const SourceManager &SM, const LangOptions &LangOpts, bool *Invalid=nullptr)

Returns a string for the source that the range encompasses.

This represents a Microsoft inline-assembly statement extension.

Representation of a Microsoft __if_exists or __if_not_exists statement with a dependent name.

A member reference to an MSPropertyDecl.

MS property subscript expression.

Represents a prvalue temporary that is written into memory so that a reference can bind to it.

MatrixSubscriptExpr - Matrix subscript expression for the MatrixType extension.

MemberExpr - [C99 6.5.2.3] Structure and Union Members.

StringRef getName() const

Get the name of identifier for this declaration as a StringRef.

A C++ nested-name-specifier augmented with source location information.

NestedNameSpecifier * getNestedNameSpecifier() const

Retrieve the nested-name-specifier to which this instance refers.

Represents a C++ nested name specifier, such as "\::std::vector<int>::".

void print(raw_ostream &OS, const PrintingPolicy &Policy, bool ResolveTemplateArguments=false) const

Print this nested name specifier to the given output stream.

Represents a place-holder for an object not to be initialized by anything.

NullStmt - This is the null statement ";": C99 6.8.3p3.

An explicit cast in C or a C-style cast in C++, which uses the syntax ([s1][s2]......

This represents '#pragma omp atomic' directive.

This represents '#pragma omp barrier' directive.

This represents '#pragma omp cancel' directive.

This represents '#pragma omp cancellation point' directive.

Representation of an OpenMP canonical loop.

This represents '#pragma omp critical' directive.

This represents implicit clause 'depend' for the '#pragma omp task' directive.

This represents '#pragma omp depobj' directive.

This represents '#pragma omp dispatch' directive.

This represents '#pragma omp distribute' directive.

This represents '#pragma omp distribute parallel for' composite directive.

This represents '#pragma omp distribute parallel for simd' composite directive.

This represents '#pragma omp distribute simd' composite directive.

This represents '#pragma omp error' directive.

This is a basic class for representing single OpenMP executable directive.

This represents '#pragma omp flush' directive.

This represents '#pragma omp for' directive.

This represents '#pragma omp for simd' directive.

This represents '#pragma omp loop' directive.

Represents the '#pragma omp interchange' loop transformation directive.

This represents '#pragma omp interop' directive.

OpenMP 5.0 [2.1.6 Iterators] Iterators are identifiers that expand to multiple values in the clause o...

This represents '#pragma omp masked' directive.

This represents '#pragma omp masked taskloop' directive.

This represents '#pragma omp masked taskloop simd' directive.

This represents '#pragma omp master' directive.

This represents '#pragma omp master taskloop' directive.

This represents '#pragma omp master taskloop simd' directive.

This represents '#pragma omp ordered' directive.

This represents '#pragma omp parallel' directive.

This represents '#pragma omp parallel for' directive.

This represents '#pragma omp parallel for simd' directive.

This represents '#pragma omp parallel loop' directive.

This represents '#pragma omp parallel masked' directive.

This represents '#pragma omp parallel masked taskloop' directive.

This represents '#pragma omp parallel masked taskloop simd' directive.

This represents '#pragma omp parallel master' directive.

This represents '#pragma omp parallel master taskloop' directive.

This represents '#pragma omp parallel master taskloop simd' directive.

This represents '#pragma omp parallel sections' directive.

Represents the '#pragma omp reverse' loop transformation directive.

This represents '#pragma omp scan' directive.

This represents '#pragma omp scope' directive.

This represents '#pragma omp section' directive.

This represents '#pragma omp sections' directive.

This represents '#pragma omp simd' directive.

This represents '#pragma omp single' directive.

This represents '#pragma omp target data' directive.

This represents '#pragma omp target' directive.

This represents '#pragma omp target enter data' directive.

This represents '#pragma omp target exit data' directive.

This represents '#pragma omp target parallel' directive.

This represents '#pragma omp target parallel for' directive.

This represents '#pragma omp target parallel for simd' directive.

This represents '#pragma omp target parallel loop' directive.

This represents '#pragma omp target simd' directive.

This represents '#pragma omp target teams' directive.

This represents '#pragma omp target teams distribute' combined directive.

This represents '#pragma omp target teams distribute parallel for' combined directive.

This represents '#pragma omp target teams distribute parallel for simd' combined directive.

This represents '#pragma omp target teams distribute simd' combined directive.

This represents '#pragma omp target teams loop' directive.

This represents '#pragma omp target update' directive.

This represents '#pragma omp task' directive.

This represents '#pragma omp taskloop' directive.

This represents '#pragma omp taskloop simd' directive.

This represents '#pragma omp taskgroup' directive.

This represents '#pragma omp taskwait' directive.

This represents '#pragma omp taskyield' directive.

This represents '#pragma omp teams' directive.

This represents '#pragma omp teams distribute' directive.

This represents '#pragma omp teams distribute parallel for' composite directive.

This represents '#pragma omp teams distribute parallel for simd' composite directive.

This represents '#pragma omp teams distribute simd' combined directive.

This represents '#pragma omp teams loop' directive.

This represents the '#pragma omp tile' loop transformation directive.

This represents the '#pragma omp unroll' loop transformation directive.

ObjCArrayLiteral - used for objective-c array containers; as in: @["Hello", NSApp,...

Represents Objective-C's @catch statement.

Represents Objective-C's @finally statement.

Represents Objective-C's @synchronized statement.

Represents Objective-C's @throw statement.

Represents Objective-C's @try ... @catch ... @finally statement.

Represents Objective-C's @autoreleasepool Statement.

A runtime availability query.

ObjCBoolLiteralExpr - Objective-C Boolean Literal.

ObjCBoxedExpr - used for generalized expression boxing.

An Objective-C "bridged" cast expression, which casts between Objective-C pointers and C pointers,...

ObjCDictionaryLiteral - AST node to represent objective-c dictionary literals; as in:"name" : NSUserN...

ObjCEncodeExpr, used for @encode in Objective-C.

Represents Objective-C's collection statement.

ObjCIndirectCopyRestoreExpr - Represents the passing of a function argument by indirect copy-restore ...

ObjCIsaExpr - Represent X->isa and X.isa when X is an ObjC 'id' type.

ObjCIvarRefExpr - A reference to an ObjC instance variable.

An expression that sends a message to the given Objective-C object or class.

Expr * getArg(unsigned Arg)

getArg - Return the specified argument.

Expr * getInstanceReceiver()

Returns the object expression (receiver) for an instance message, or null for a message that is not a...

Selector getSelector() const

@ SuperInstance

The receiver is the instance of the superclass object.

@ Instance

The receiver is an object instance.

@ SuperClass

The receiver is a superclass.

@ Class

The receiver is a class.

QualType getClassReceiver() const

Returns the type of a class message send, or NULL if the message is not a class message.

ReceiverKind getReceiverKind() const

Determine the kind of receiver that this message is being sent to.

unsigned getNumArgs() const

Return the number of actual arguments in this message, not counting the receiver.

ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.

ObjCProtocolExpr used for protocol expression in Objective-C.

ObjCSelectorExpr used for @selector in Objective-C.

ObjCStringLiteral, used for Objective-C string literals i.e.

ObjCSubscriptRefExpr - used for array and dictionary subscripting.

OffsetOfExpr - [C99 7.17] - This represents an expression of the form offsetof(record-type,...

Helper class for OffsetOfExpr.

unsigned getArrayExprIndex() const

For an array element node, returns the index into the array of expressions.

IdentifierInfo * getFieldName() const

For a field or identifier offsetof node, returns the name of the field.

@ Array

An index into an array.

@ Base

An implicit indirection through a C++ base class, when the field found is in a base class.

Kind getKind() const

Determine what kind of offsetof node this is.

OpaqueValueExpr - An expression referring to an opaque object of a fixed type and value class.

This expression type represents an asterisk in an OpenACC Size-Expr, used in the 'tile' and 'gang' cl...

This class represents a compute construct, representing a 'Kind' of ‘parallel’, 'serial',...

This is the base class for an OpenACC statement-level construct, other construct types are expected t...

This class represents a 'loop' construct.

Represents a C++11 pack expansion that produces a sequence of expressions.

ParenExpr - This represents a parenthesized expression, e.g.

Represents a parameter to a function.

[C99 6.4.2.2] - A predefined identifier such as func.

StringRef getIdentKindName() const

virtual bool handledStmt(Stmt *E, raw_ostream &OS)=0

PseudoObjectExpr - An expression which accesses a pseudo-object l-value.

A (possibly-)qualified type.

void print(raw_ostream &OS, const PrintingPolicy &Policy, const Twine &PlaceHolder=Twine(), unsigned Indentation=0) const

Frontend produces RecoveryExprs on semantic errors that prevent creating other well-formed expression...

C++2a [expr.prim.req]: A requires-expression provides a concise way to express requirements on templa...

ReturnStmt - This represents a return, optionally of an expression: return; return 4;.

Represents a __leave statement.

SYCLKernelCallStmt represents the transformation that is applied to the body of a function declared w...

static std::string getPropertyNameFromSetterSelector(Selector Sel)

Return the property name for the given setter selector.

Smart pointer class that efficiently represents Objective-C method names.

StringRef getNameForSlot(unsigned argIndex) const

Retrieve the name at a given position in the selector.

const IdentifierInfo * getIdentifierInfoForSlot(unsigned argIndex) const

Retrieve the identifier at a given position in the selector.

bool isUnarySelector() const

unsigned getNumArgs() const

ShuffleVectorExpr - clang-specific builtin-in function __builtin_shufflevector.

Represents an expression that computes the length of a parameter pack.

Represents a function call to one of __builtin_LINE(), __builtin_COLUMN(), __builtin_FUNCTION(),...

StmtExpr - This is the GNU Statement Expression extension: ({int X=4; X;}).

RetTy Visit(PTR(Stmt) S, ParamTys... P)

StmtVisitor - This class implements a simple visitor for Stmt subclasses.

Stmt - This represents one statement.

void printPretty(raw_ostream &OS, PrinterHelper *Helper, const PrintingPolicy &Policy, unsigned Indentation=0, StringRef NewlineSymbol="\n", const ASTContext *Context=nullptr) const

void printJson(raw_ostream &Out, PrinterHelper *Helper, const PrintingPolicy &Policy, bool AddQuotes) const

Pretty-prints in JSON format.

SourceRange getSourceRange() const LLVM_READONLY

SourceLocation tokens are not useful in isolation - they are low level value objects created/interpre...

void printPrettyControlled(raw_ostream &OS, PrinterHelper *Helper, const PrintingPolicy &Policy, unsigned Indentation=0, StringRef NewlineSymbol="\n", const ASTContext *Context=nullptr) const

llvm::iterator_range< child_iterator > child_range

void dumpPretty(const ASTContext &Context) const

dumpPretty/printPretty - These two methods do a "pretty print" of the AST back to its original source...

StringLiteral - This represents a string literal expression, e.g.

void outputString(raw_ostream &OS) const

Represents a reference to a non-type template parameter that has been substituted with a template arg...

Represents a reference to a non-type template parameter pack that has been substituted with a non-tem...

SwitchStmt - This represents a 'switch' stmt.

A template argument list.

unsigned size() const

Retrieve the number of template arguments in this template argument list.

const TemplateArgument & get(unsigned Idx) const

Retrieve the template argument at a given index.

ArrayRef< TemplateArgument > asArray() const

Produce this as an array ref.

Represents a template argument.

ArrayRef< TemplateArgument > pack_elements() const

Iterator range referencing all of the elements of a template argument pack.

@ Pack

The template argument is actually a parameter pack.

ArgKind getKind() const

Return the kind of stored template argument.

Stores a list of template parameters for a TemplateDecl and its derived classes.

A container of type source information.

A type trait used in the implementation of various C++11 and Library TR1 trait templates.

const T * castAs() const

Member-template castAs<specific type>.

TypoExpr - Internal placeholder for expressions where typo correction still needs to be performed and...

UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand.

UnaryOperator - This represents the unary-expression's (except sizeof and alignof),...

static StringRef getOpcodeStr(Opcode Op)

getOpcodeStr - Turn an Opcode enum value into the punctuation char it corresponds to,...

A reference to a name which we were able to look up during parsing but could not resolve to a specifi...

Represents a C++ member access expression for which lookup produced a set of overloaded functions.

A call to a literal operator (C++11 [over.literal]) written as a user-defined literal (C++11 [lit....

@ LOK_String

operator "" X (const CharT *, size_t)

@ LOK_Raw

Raw form: operator "" X (const char *)

@ LOK_Floating

operator "" X (long double)

@ LOK_Integer

operator "" X (unsigned long long)

@ LOK_Template

Raw form: operator "" X<cs...> ()

@ LOK_Character

operator "" X (CharT)

Represents a call to the builtin function __builtin_va_arg.

Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...

@ CInit

C-style initialization with assignment.

@ CallInit

Call-style initialization (C++98)

WhileStmt - This represents a 'while' stmt.

A static requirement that can be used in a requires-expression to check properties of types and expre...

The JSON file list parser is used to communicate input to InstallAPI.

OverloadedOperatorKind

Enumeration specifying the different kinds of C++ overloaded operators.

@ LCK_ByCopy

Capturing by copy (a.k.a., by value)

@ LCK_ByRef

Capturing by reference.

@ LCK_VLAType

Capturing variable-length array type.

@ LCK_StarThis

Capturing the *this object by copy.

@ LCK_This

Capturing the *this object by reference.

@ If

'if' clause, allowed on all the Compute Constructs, Data Constructs, Executable Constructs,...

std::string JsonFormat(StringRef RawSR, bool AddQuotes)

const char * getTraitSpelling(ExpressionTrait T) LLVM_READONLY

Return the spelling of the type trait TT. Never null.

const FunctionProtoType * T

void printTemplateArgumentList(raw_ostream &OS, ArrayRef< TemplateArgument > Args, const PrintingPolicy &Policy, const TemplateParameterList *TPL=nullptr)

Print a template argument list, including the '<' and '>' enclosing the template arguments.

const char * getOperatorSpelling(OverloadedOperatorKind Operator)

Retrieve the spelling of the given overloaded operator, without the preceding "operator" keyword.

CXXNewInitializationStyle

const Expr * RHS

The original right-hand side.

BinaryOperatorKind Opcode

The original opcode, prior to rewriting.

const Expr * LHS

The original left-hand side.

DeclarationNameInfo - A collector data type for bundling together a DeclarationName and the correspon...

DeclarationName getName() const

getName - Returns the embedded declaration name.

void printName(raw_ostream &OS, PrintingPolicy Policy) const

printName - Print the human-readable name to a stream.

Iterator range representation begin:end[:step].

An element in an Objective-C dictionary literal.

Describes how types, statements, expressions, and declarations should be printed.

unsigned Alignof

Whether we can use 'alignof' rather than '__alignof'.

unsigned CleanUglifiedParameters

Whether to strip underscores when printing reserved parameter names.

unsigned ConstantsAsWritten

Whether we should print the constant expressions as written in the sources.

unsigned IncludeNewlines

When true, include newlines after statements like "break", etc.

unsigned Indentation

The number of spaces to use to indent each line.

unsigned TerseOutput

Provide a 'terse' output.

unsigned UnderscoreAlignof

Whether we can use '_Alignof' rather than '__alignof'.

unsigned SuppressImplicitBase

When true, don't print the implicit 'self' or 'this' expressions.

Iterator for iterating over Stmt * arrays that contain only T *.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4