clang: include/clang/Sema/Initialization.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13#ifndef LLVM_CLANG_SEMA_INITIALIZATION_H

14#define LLVM_CLANG_SEMA_INITIALIZATION_H

15

30#include "llvm/ADT/ArrayRef.h"

31#include "llvm/ADT/SmallVector.h"

32#include "llvm/ADT/StringRef.h"

33#include "llvm/ADT/iterator_range.h"

34#include "llvm/Support/Casting.h"

35#include

36#include

37#include

38

40

45

46

47class alignas(8) InitializedEntity {

48public:

49

51

53

54

56

57

59

60

62

63

65

66

67

69

70

71

73

74

76

77

78

80

81

83

84

86

87

89

90

91

93

94

95

97

98

99

101

102

103

105

106

107

109

110

111

113

114

115

117

118

119

121

122

123

125

126

127

129

130

131

133

134

135

136

137 };

138

139private:

140

141 EntityKind Kind;

142

143

144

146

147

149

150

151 mutable unsigned ManglingNumber = 0;

152

153 struct LN {

154

155

156

157

159

160

161

162 bool NRVO;

163 };

164

165 struct VD {

166

167

168 NamedDecl *VariableOrMember;

169

170

171

172

173 bool IsImplicitFieldInit;

174

175

176

177 bool IsDefaultMemberInit;

178 };

179

180 struct C {

181

182 IdentifierInfo *VarID;

183

184

185 SourceLocation Location;

186 };

187

188 union {

189

190

192

193

194

196

197

198

199 llvm::PointerIntPair<ParmVarDecl *, 1> Parameter;

200

201

202

204

206

207

208

209

210 llvm::PointerIntPair<const CXXBaseSpecifier *, 1> Base;

211

212

213

214

216

218 };

219

221

222

223 InitializedEntity(VarDecl *Var, EntityKind EK = EK_Variable)

225

226

227

228

229 InitializedEntity(EntityKind Kind, SourceLocation Loc, QualType Type,

230 bool NRVO = false)

231 : Kind(Kind), Type(Type) {

235 }

236

237

238 InitializedEntity(FieldDecl *Member, const InitializedEntity *Parent,

239 bool Implicit, bool DefaultMemberInit,

240 bool IsParenAggInit = false)

244

245

246 InitializedEntity(ASTContext &Context, unsigned Index,

247 const InitializedEntity &Parent);

248

249

250 InitializedEntity(IdentifierInfo *VarID, QualType FieldType, SourceLocation Loc)

255 }

256

257public:

258

260 return InitializedEntity(Var);

261 }

262

263

268

269

270

273 bool Consumed = (Context.getLangOpts().ObjCAutoRefCount &&

274 Parm->hasAttr());

275

276 InitializedEntity Entity;

278 Entity.Type =

279 Context.getVariableArrayDecayedType(Type.getUnqualifiedType());

280 Entity.Parent = nullptr;

281 Entity.Parameter = {Parm, Consumed};

282 return Entity;

283 }

284

285

286

289 bool Consumed) {

290 InitializedEntity Entity;

292 Entity.Type = Context.getVariableArrayDecayedType(Type);

293 Entity.Parent = nullptr;

294 Entity.Parameter = {nullptr, Consumed};

295 return Entity;

296 }

297

298

301 InitializedEntity Entity;

303 Entity.Type = T;

304 Entity.Parent = nullptr;

305 Entity.Variable = {Param, false, false};

306 return Entity;

307 }

308

309

312 return InitializedEntity(EK_Result, ReturnLoc, Type);

313 }

314

319

324

328 BlockVarLoc, Type);

329 }

330

331

334 return InitializedEntity(EK_Exception, ThrowLoc, Type);

335 }

336

337

339 return InitializedEntity(EK_New, NewLoc, Type);

340 }

341

342

346

347

351 if (Context.getLangOpts().OpenCLCPlusPlus) {

352 assert(!Type.hasAddressSpace() && "Temporary already has address space!");

354 }

355

357 }

358

359

366

367

371 Result.MethodDecl = MD;

373 }

374

375

378 bool IsInheritedVirtualBase,

380

381

385

386

389 const InitializedEntity *Parent = nullptr,

391 return InitializedEntity(Member, Parent, Implicit, false);

392 }

393

394

397 const InitializedEntity *Parent = nullptr,

399 return InitializedEntity(Member->getAnonField(), Parent, Implicit, false);

400 }

401

402

403

405 return InitializedEntity(Member, nullptr, false,

406 false,

407 true);

408 }

409

410

413 return InitializedEntity(Member, nullptr, false, true);

414 }

415

416

419 const InitializedEntity &Parent) {

420 return InitializedEntity(Context, Index, Parent);

421 }

422

423

425 return InitializedEntity(Binding, EK_Binding);

426 }

427

428

429

430

434 return InitializedEntity(VarID, FieldType, Loc);

435 }

436

437

441 Result.TypeInfo = TSI;

443 }

444

445

447

448

449

450

451 const InitializedEntity *getParent() const { return Parent; }

452

453

455

456

457

461

462 return nullptr;

463 }

464

465

467

468

469

471

472

474

475

476

478

483

487

488

489

494

495

497 assert(getKind() == EK_Base && "Not a base specifier");

498 return Base.getPointer();

499 }

500

501

503 assert(getKind() == EK_Base && "Not a base specifier");

504 return Base.getInt();

505 }

506

507

509 return getKind() == EK_New && isa_and_nonnull(

510 getType()->getAsArrayTypeUnsafe());

511 }

512

513

514

518

519

520

524

525

526

531

532

533

538

539

540

546

547

548

552 this->Index = Index;

553 }

554

555

560

561

562

567

571

573

574

575

576 void dump() const;

577

578private:

579 unsigned dumpImpl(raw_ostream &OS) const;

580};

581

582

583

584

585class InitializationKind {

586public:

587

589

591

592

594

595

597

598

600

601

603 };

604

605private:

606

607 enum InitContext {

608

609 IC_Normal,

610

611

612 IC_ExplicitConvs,

613

614

615 IC_Implicit,

616

617

618 IC_StaticCast,

619

620

621 IC_CStyleCast,

622

623

624 IC_FunctionalCast

625 };

626

627

628 InitKind Kind : 8;

629

630

631 InitContext Context : 8;

632

633

634 SourceLocation Locations[3];

635

636 InitializationKind(InitKind Kind, InitContext Context, SourceLocation Loc1,

637 SourceLocation Loc2, SourceLocation Loc3)

638 : Kind(Kind), Context(Context) {

639 Locations[0] = Loc1;

640 Locations[1] = Loc2;

641 Locations[2] = Loc3;

642 }

643

644public:

645

649 return InitializationKind(IK_Direct, IC_Normal,

650 InitLoc, LParenLoc, RParenLoc);

651 }

652

654 return InitializationKind(IK_DirectList, IC_Normal, InitLoc, InitLoc,

655 InitLoc);

656 }

657

661 return InitializationKind(IK_DirectList, IC_Normal, InitLoc, LBraceLoc,

662 RBraceLoc);

663 }

664

665

666

671

672

675 bool InitList) {

676

677

679 IC_CStyleCast, StartLoc, TypeRange.getBegin(),

681 }

682

683

686 bool InitList) {

688 IC_FunctionalCast, StartLoc,

690 }

691

692

695 bool AllowExplicitConvs = false) {

696 return InitializationKind(IK_Copy,

697 AllowExplicitConvs? IC_ExplicitConvs : IC_Normal,

698 InitLoc, EqualLoc, EqualLoc);

699 }

700

701

703 return InitializationKind(IK_Default, IC_Normal, InitLoc, InitLoc, InitLoc);

704 }

705

706

710 bool isImplicit = false) {

711 return InitializationKind(IK_Value, isImplicit ? IC_Implicit : IC_Normal,

712 InitLoc, LParenLoc, RParenLoc);

713 }

714

715

716

726

727

731

732

734 return Context >= IC_StaticCast;

735 }

736

737

738 bool isStaticCast() const { return Context == IC_StaticCast; }

739

740

742 return Context >= IC_CStyleCast;

743 }

744

745

747 return Context == IC_CStyleCast;

748 }

749

750

752 return Context == IC_FunctionalCast;

753 }

754

755

756

757

759

760

762

763

765 return SourceRange(Locations[0], Locations[2]);

766 }

767

768

769

771 assert(Kind == IK_Copy && "Only copy initialization has an '='");

772 return Locations[1];

773 }

774

776

777

778

780

781

782

783

784

786 return isCopyInit() || Context == IC_ExplicitConvs;

787 }

788

789

790

794

795

796

797

800 "initialization have parentheses or "

801 "braces");

802 return SourceRange(Locations[1], Locations[2]);

803 }

804};

805

806

807

809public:

810

812

813

815

816

817

818

820

821

823 };

824

825

826

828

829

831

832

834

835

837

838

840

841

843

844

846

847

848

849

851

852

853

855

856

857

859

860

862

863

865

866

868

869

871

872

874

875

877

878

880

881

883

884

886

887

889

890

892

893

894

896

897

899

900

902

903

905

906

907

909

910

912

913

915

916

918

919

921

922

923

925

926

928

929

931

932

934

935

937

938

939

941

942

944

945

947

948

949

951 };

952

953

955 public:

956

958

959

961

967

968 union {

969

970

971

972

973

974

975

976

977

978

980

981

982

984

985

986

988 };

989

991 };

992

993private:

994

996

997

999

1000public:

1001

1003

1005

1006

1008

1009

1011

1012

1013

1015

1016

1017

1019

1020

1022

1023

1025

1026

1027

1029

1030

1032

1033

1035

1036

1038

1039

1041

1042

1044

1045

1047

1048

1050

1051

1053

1054

1056

1057

1059

1060

1061

1063

1064

1066

1067

1069

1070

1072

1073

1075

1076

1078

1079

1081

1082

1084

1085

1087

1088

1090

1091

1092

1094

1095

1097

1098

1100

1101

1103

1104

1106

1107

1109

1110

1112

1113

1115

1116

1117

1119

1120

1121

1123

1124

1126

1127

1128

1130

1131

1133

1134

1136 };

1137

1138private:

1139

1140 FailureKind Failure;

1141

1142

1144

1145

1147

1148

1149 QualType FailedIncompleteType;

1150

1151

1152

1153 std::string ZeroInitializationFixit;

1155

1156public:

1157

1158

1160 ZeroInitializationFixit = Fixit;

1161 ZeroInitializationFixitLoc = L;

1162 }

1163

1164private:

1165

1166

1168

1169public:

1170

1171

1172

1173

1174

1175

1176

1177

1178

1179

1180

1181

1182

1183

1184

1185

1186

1187

1188

1193 bool TopLevelOfInitList = false,

1194 bool TreatUnavailableAsInvalid = true);

1197 bool TopLevelOfInitList, bool TreatUnavailableAsInvalid);

1198

1200

1201

1202

1203

1204

1205

1206

1207

1208

1209

1210

1211

1212

1213

1214

1215

1216

1217

1218

1219

1220

1221

1226 QualType *ResultType = nullptr);

1227

1228

1229

1230

1231

1236

1237

1239

1240

1242

1243

1244 explicit operator bool() const { return Failed(); }

1245

1246

1248

1250

1253

1254 using step_range = llvm::iterator_range<step_iterator>;

1255

1257

1258

1259

1261

1262

1264

1265

1266

1268

1269

1270

1271

1272

1273

1276 bool HadMultipleCandidates);

1277

1278

1279

1280

1281

1282

1283

1284

1287

1288

1289

1290

1291

1292

1294

1295

1296

1297

1298

1299

1300

1301

1302

1303

1304

1306

1307

1308

1310

1311

1312

1316 bool HadMultipleCandidates);

1317

1318

1319

1322

1323

1324

1326

1327

1328

1330

1331

1333 QualType T, bool TopLevelOfInitList = false);

1334

1335

1337

1338

1339

1340

1341

1342

1346 bool HadMultipleCandidates,

1347 bool FromInitList, bool AsInitList);

1348

1349

1351

1352

1353

1354

1355

1356

1358

1359

1361

1362

1363

1365

1366

1368

1369

1371

1372

1374

1375

1377

1378

1379

1381

1382

1383

1385

1386

1387

1389

1390

1391

1393

1395

1396

1397

1398

1400

1401

1402

1404

1405

1408 this->Failure = Failure;

1409 assert((Failure != FK_Incomplete || !FailedIncompleteType.isNull()) &&

1410 "Incomplete type failure requires a type!");

1411 }

1412

1413

1414

1416

1417

1418

1420 return FailedCandidateSet;

1421 }

1422

1423

1424

1426 return FailedOverloadResult;

1427 }

1428

1429

1430

1432 FailedIncompleteType = IncompleteType;

1434 }

1435

1436

1438 assert(Failed() && "Not an initialization failure!");

1439 return Failure;

1440 }

1441

1442

1443

1444 void dump(raw_ostream &OS) const;

1445

1446

1447

1448 void dump() const;

1449};

1450

1451}

1452

1453#endif

Defines the clang::ASTContext interface.

TokenType getType() const

Returns the token's type, e.g.

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 the clang::LangOptions interface.

Defines the clang::SourceLocation class and associated facilities.

Defines various enumerations that describe declaration and type specifiers.

C Language Family Type Representation.

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

Represents a base class of a C++ class.

Represents a C++ constructor within a class.

A POD class for pairing a NamedDecl* with an access specifier.

The name of a declaration.

This represents one expression.

Represents a member of a struct/union/class.

Represents a function declaration or definition.

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

ImplicitConversionSequence - Represents an implicit conversion sequence, which may be a standard conv...

Represents a field injected from an anonymous union/struct into the parent scope.

Describes an C or C++ initializer list.

Describes the kind of initialization being performed, along with location information for tokens rela...

Definition Initialization.h:585

SourceLocation getLocation() const

Retrieve the location at which initialization is occurring.

Definition Initialization.h:761

static InitializationKind CreateCast(SourceRange TypeRange)

Create a direct initialization due to a cast that isn't a C-style or functional cast.

Definition Initialization.h:667

InitKind

The kind of initialization being performed.

Definition Initialization.h:588

@ IK_DirectList

Direct list-initialization.

Definition Initialization.h:593

@ IK_Value

Value initialization.

Definition Initialization.h:602

@ IK_Direct

Direct initialization.

Definition Initialization.h:590

@ IK_Copy

Copy initialization.

Definition Initialization.h:596

@ IK_Default

Default initialization.

Definition Initialization.h:599

SourceLocation getEqualLoc() const

Retrieve the location of the equal sign for copy initialization (if present).

Definition Initialization.h:770

bool isCStyleOrFunctionalCast() const

Determine whether this initialization is a C-style cast.

Definition Initialization.h:741

static InitializationKind CreateDefault(SourceLocation InitLoc)

Create a default initialization.

Definition Initialization.h:702

bool hasParenOrBraceRange() const

Determine whether this initialization has a source range containing the locations of open and closing...

Definition Initialization.h:791

bool isExplicitCast() const

Determine whether this initialization is an explicit cast.

Definition Initialization.h:733

bool isFunctionalCast() const

Determine whether this is a functional-style cast.

Definition Initialization.h:751

InitKind getKind() const

Determine the initialization kind.

Definition Initialization.h:728

static InitializationKind CreateFunctionalCast(SourceLocation StartLoc, SourceRange ParenRange, bool InitList)

Create a direct initialization for a functional cast.

Definition Initialization.h:684

bool AllowExplicit() const

Retrieve whether this initialization allows the use of explicit constructors.

Definition Initialization.h:779

static InitializationKind CreateDirect(SourceLocation InitLoc, SourceLocation LParenLoc, SourceLocation RParenLoc)

Create a direct initialization.

Definition Initialization.h:646

static InitializationKind CreateForInit(SourceLocation Loc, bool DirectInit, Expr *Init)

Create an initialization from an initializer (which, for direct initialization from a parenthesized l...

Definition Initialization.h:717

bool isImplicitValueInit() const

Determine whether this initialization is an implicit value-initialization, e.g., as occurs during agg...

Definition Initialization.h:758

bool isCStyleCast() const

Determine whether this is a C-style cast.

Definition Initialization.h:746

static InitializationKind CreateCopy(SourceLocation InitLoc, SourceLocation EqualLoc, bool AllowExplicitConvs=false)

Create a copy initialization.

Definition Initialization.h:693

static InitializationKind CreateDirectList(SourceLocation InitLoc)

Definition Initialization.h:653

bool isCopyInit() const

Definition Initialization.h:775

SourceRange getParenOrBraceRange() const

Retrieve the source range containing the locations of the open and closing parentheses or braces for ...

Definition Initialization.h:798

bool allowExplicitConversionFunctionsInRefBinding() const

Retrieve whether this initialization allows the use of explicit conversion functions when binding a r...

Definition Initialization.h:785

static InitializationKind CreateDirectList(SourceLocation InitLoc, SourceLocation LBraceLoc, SourceLocation RBraceLoc)

Definition Initialization.h:658

bool isStaticCast() const

Determine whether this initialization is a static cast.

Definition Initialization.h:738

static InitializationKind CreateValue(SourceLocation InitLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool isImplicit=false)

Create a value initialization.

Definition Initialization.h:707

SourceRange getRange() const

Retrieve the source range that covers the initialization.

Definition Initialization.h:764

static InitializationKind CreateCStyleCast(SourceLocation StartLoc, SourceRange TypeRange, bool InitList)

Create a direct initialization for a C-style cast.

Definition Initialization.h:673

A single step in the initialization sequence.

Definition Initialization.h:954

StepKind Kind

The kind of conversion or initialization step we are taking.

Definition Initialization.h:957

InitListExpr * WrappingSyntacticList

When Kind = SK_RewrapInitList, the syntactic form of the wrapping list.

Definition Initialization.h:987

ImplicitConversionSequence * ICS

When Kind = SK_ConversionSequence, the implicit conversion sequence.

Definition Initialization.h:983

struct F Function

When Kind == SK_ResolvedOverloadedFunction or Kind == SK_UserConversion, the function that the expres...

Definition Initialization.h:979

QualType Type

Definition Initialization.h:960

step_iterator step_begin() const

Definition Initialization.h:1251

void AddListInitializationStep(QualType T)

Add a list-initialization step.

ExprResult Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType=nullptr)

Perform the actual initialization of the given entity based on the computed initialization sequence.

void AddStringInitStep(QualType T)

Add a string init step.

void AddStdInitializerListConstructionStep(QualType T)

Add a step to construct a std::initializer_list object from an initializer list.

void AddConstructorInitializationStep(DeclAccessPair FoundDecl, CXXConstructorDecl *Constructor, QualType T, bool HadMultipleCandidates, bool FromInitList, bool AsInitList)

Add a constructor-initialization step.

StepKind

Describes the kind of a particular step in an initialization sequence.

Definition Initialization.h:827

@ SK_StdInitializerListConstructorCall

Perform initialization via a constructor taking a single std::initializer_list argument.

Definition Initialization.h:940

@ SK_AtomicConversion

Perform a conversion adding _Atomic to a type.

Definition Initialization.h:873

@ SK_ObjCObjectConversion

An initialization that "converts" an Objective-C object (not a point to an object) to another Objecti...

Definition Initialization.h:908

@ SK_GNUArrayInit

Array initialization (from an array rvalue) as a GNU extension.

Definition Initialization.h:920

@ SK_CastDerivedToBaseLValue

Perform a derived-to-base cast, producing an lvalue.

Definition Initialization.h:839

@ SK_ProduceObjCObject

Produce an Objective-C object pointer.

Definition Initialization.h:933

@ SK_FunctionReferenceConversion

Perform a function reference conversion, see [dcl.init.ref]p4.

Definition Initialization.h:870

@ SK_BindReference

Reference binding to an lvalue.

Definition Initialization.h:842

@ SK_ArrayLoopInit

Array initialization by elementwise copy.

Definition Initialization.h:914

@ SK_ConstructorInitialization

Perform initialization via a constructor.

Definition Initialization.h:891

@ SK_OCLSamplerInit

Initialize an OpenCL sampler from an integer.

Definition Initialization.h:943

@ SK_StringInit

Initialization by string.

Definition Initialization.h:904

@ SK_ZeroInitialization

Zero-initialize the object.

Definition Initialization.h:898

@ SK_CastDerivedToBaseXValue

Perform a derived-to-base cast, producing an xvalue.

Definition Initialization.h:836

@ SK_QualificationConversionXValue

Perform a qualification conversion, producing an xvalue.

Definition Initialization.h:864

@ SK_UserConversion

Perform a user-defined conversion, either via a conversion function or via a constructor.

Definition Initialization.h:858

@ SK_CastDerivedToBasePRValue

Perform a derived-to-base cast, producing an rvalue.

Definition Initialization.h:833

@ SK_BindReferenceToTemporary

Reference binding to a temporary.

Definition Initialization.h:845

@ SK_PassByIndirectRestore

Pass an object by indirect restore.

Definition Initialization.h:930

@ SK_ParenthesizedArrayInit

Array initialization from a parenthesized initializer list.

Definition Initialization.h:924

@ SK_ParenthesizedListInit

Initialize an aggreagate with parenthesized list of values.

Definition Initialization.h:950

@ SK_ArrayInit

Array initialization (from an array rvalue).

Definition Initialization.h:917

@ SK_ExtraneousCopyToTemporary

An optional copy of a temporary object to another temporary object, which is permitted (but not requi...

Definition Initialization.h:850

@ SK_ArrayLoopIndex

Array indexing for initialization by elementwise copy.

Definition Initialization.h:911

@ SK_ConversionSequenceNoNarrowing

Perform an implicit conversion sequence without narrowing.

Definition Initialization.h:879

@ SK_RewrapInitList

Rewrap the single-element initializer list for a reference.

Definition Initialization.h:888

@ SK_CAssignment

C assignment.

Definition Initialization.h:901

@ SK_ConstructorInitializationFromList

Perform initialization via a constructor, taking arguments from a single InitListExpr.

Definition Initialization.h:895

@ SK_PassByIndirectCopyRestore

Pass an object by indirect copy-and-restore.

Definition Initialization.h:927

@ SK_ResolveAddressOfOverloadedFunction

Resolve the address of an overloaded function to a specific function declaration.

Definition Initialization.h:830

@ SK_UnwrapInitList

Unwrap the single-element initializer list for a reference.

Definition Initialization.h:885

@ SK_FinalCopy

Direct-initialization from a reference-related object in the final stage of class copy-initialization...

Definition Initialization.h:854

@ SK_QualificationConversionLValue

Perform a qualification conversion, producing an lvalue.

Definition Initialization.h:867

@ SK_StdInitializerList

Construct a std::initializer_list from an initializer list.

Definition Initialization.h:936

@ SK_QualificationConversionPRValue

Perform a qualification conversion, producing a prvalue.

Definition Initialization.h:861

@ SK_ConversionSequence

Perform an implicit conversion sequence.

Definition Initialization.h:876

@ SK_ListInitialization

Perform list-initialization without a constructor.

Definition Initialization.h:882

@ SK_OCLZeroOpaqueType

Initialize an opaque OpenCL type (event_t, queue_t, etc.) with zero.

Definition Initialization.h:946

void AddUserConversionStep(FunctionDecl *Function, DeclAccessPair FoundDecl, QualType T, bool HadMultipleCandidates)

Add a new step invoking a conversion function, which is either a constructor or a conversion function...

void SetZeroInitializationFixit(const std::string &Fixit, SourceLocation L)

Call for initializations are invalid but that would be valid zero initialzations if Fixit was applied...

Definition Initialization.h:1159

llvm::iterator_range< step_iterator > step_range

Definition Initialization.h:1254

InitializationSequence(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, bool TopLevelOfInitList=false, bool TreatUnavailableAsInvalid=true)

Try to perform initialization of the given entity, creating a record of the steps required to perform...

void AddQualificationConversionStep(QualType Ty, ExprValueKind Category)

Add a new step that performs a qualification conversion to the given type.

void AddFunctionReferenceConversionStep(QualType Ty)

Add a new step that performs a function reference conversion to the given type.

~InitializationSequence()

void AddDerivedToBaseCastStep(QualType BaseType, ExprValueKind Category)

Add a new step in the initialization that performs a derived-to- base cast.

FailureKind getFailureKind() const

Determine why initialization failed.

Definition Initialization.h:1437

void InitializeFrom(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, bool TopLevelOfInitList, bool TreatUnavailableAsInvalid)

void AddParenthesizedListInitStep(QualType T)

void SetFailed(FailureKind Failure)

Note that this initialization sequence failed.

Definition Initialization.h:1406

bool isAmbiguous() const

Determine whether this initialization failed due to an ambiguity.

void AddUnwrapInitListInitStep(InitListExpr *Syntactic)

Only used when initializing structured bindings from an array with direct-list-initialization.

step_range steps() const

Definition Initialization.h:1256

void AddOCLZeroOpaqueTypeStep(QualType T)

Add a step to initialzie an OpenCL opaque type (event_t, queue_t, etc.) from a zero constant.

void AddFinalCopy(QualType T)

Add a new step that makes a copy of the input to an object of the given type, as the final step in cl...

OverloadingResult getFailedOverloadResult() const

Get the overloading result, for when the initialization sequence failed due to a bad overload.

Definition Initialization.h:1425

void setSequenceKind(enum SequenceKind SK)

Set the kind of sequence computed.

Definition Initialization.h:1241

void AddObjCObjectConversionStep(QualType T)

Add an Objective-C object conversion step, which is always a no-op.

void SetOverloadFailure(FailureKind Failure, OverloadingResult Result)

Note that this initialization sequence failed due to failed overload resolution.

step_iterator step_end() const

Definition Initialization.h:1252

void AddParenthesizedArrayInitStep(QualType T)

Add a parenthesized array initialization step.

void AddExtraneousCopyToTemporary(QualType T)

Add a new step that makes an extraneous copy of the input to a temporary of the same class type.

void setIncompleteTypeFailure(QualType IncompleteType)

Note that this initialization sequence failed due to an incomplete type.

Definition Initialization.h:1431

void AddOCLSamplerInitStep(QualType T)

Add a step to initialize an OpenCL sampler from an integer constant.

void AddCAssignmentStep(QualType T)

Add a C assignment step.

void AddPassByIndirectCopyRestoreStep(QualType T, bool shouldCopy)

Add a step to pass an object by indirect copy-restore.

void RewrapReferenceInitList(QualType T, InitListExpr *Syntactic)

Add steps to unwrap a initializer list for a reference around a single element and rewrap it at the e...

bool Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef< Expr * > Args)

Diagnose an potentially-invalid initialization sequence.

bool Failed() const

Determine whether the initialization sequence is invalid.

Definition Initialization.h:1247

void AddAtomicConversionStep(QualType Ty)

Add a new step that performs conversion from non-atomic to atomic type.

void dump() const

Dump a representation of this initialization sequence to standard error, for debugging purposes.

void AddConversionSequenceStep(const ImplicitConversionSequence &ICS, QualType T, bool TopLevelOfInitList=false)

Add a new step that applies an implicit conversion sequence.

void AddZeroInitializationStep(QualType T)

Add a zero-initialization step.

void AddProduceObjCObjectStep(QualType T)

Add a step to "produce" an Objective-C object (by retaining it).

enum SequenceKind getKind() const

Determine the kind of initialization sequence computed.

Definition Initialization.h:1238

SequenceKind

Describes the kind of initialization sequence computed.

Definition Initialization.h:811

@ NormalSequence

A normal sequence.

Definition Initialization.h:822

@ FailedSequence

A failed initialization sequence.

Definition Initialization.h:814

@ DependentSequence

A dependent initialization, which could not be type-checked due to the presence of dependent types or...

Definition Initialization.h:819

void AddReferenceBindingStep(QualType T, bool BindingTemporary)

Add a new step binding a reference to an object.

FailureKind

Describes why initialization failed.

Definition Initialization.h:1002

@ FK_UserConversionOverloadFailed

Overloading for a user-defined conversion failed.

Definition Initialization.h:1096

@ FK_NarrowStringIntoWideCharArray

Initializing a wide char array with narrow string literal.

Definition Initialization.h:1021

@ FK_ArrayTypeMismatch

Array type mismatch.

Definition Initialization.h:1037

@ FK_ParenthesizedListInitForReference

Reference initialized from a parenthesized initializer list.

Definition Initialization.h:1007

@ FK_NonConstLValueReferenceBindingToVectorElement

Non-const lvalue reference binding to a vector element.

Definition Initialization.h:1055

@ FK_ReferenceInitDropsQualifiers

Reference binding drops qualifiers.

Definition Initialization.h:1068

@ FK_InitListBadDestinationType

Initialization of some unused destination type with an initializer list.

Definition Initialization.h:1093

@ FK_ConversionFromPropertyFailed

Implicit conversion failed.

Definition Initialization.h:1080

@ FK_NonConstLValueReferenceBindingToUnrelated

Non-const lvalue reference binding to an lvalue of unrelated type.

Definition Initialization.h:1062

@ FK_ListConstructorOverloadFailed

Overloading for list-initialization by constructor failed.

Definition Initialization.h:1102

@ FK_ReferenceInitFailed

Reference binding failed.

Definition Initialization.h:1074

@ FK_DesignatedInitForNonAggregate

Definition Initialization.h:1132

@ FK_ArrayNeedsInitList

Array must be initialized with an initializer list.

Definition Initialization.h:1010

@ FK_PlainStringIntoUTF8Char

Initializing char8_t array with plain string literal.

Definition Initialization.h:1031

@ FK_NonConstantArrayInit

Non-constant array initializer.

Definition Initialization.h:1040

@ FK_NonConstLValueReferenceBindingToTemporary

Non-const lvalue reference binding to a temporary.

Definition Initialization.h:1049

@ FK_ConversionFailed

Implicit conversion failed.

Definition Initialization.h:1077

@ FK_ArrayNeedsInitListOrStringLiteral

Array must be initialized with an initializer list or a string literal.

Definition Initialization.h:1014

@ FK_ParenthesizedListInitForScalar

Scalar initialized from a parenthesized initializer list.

Definition Initialization.h:1086

@ FK_HLSLInitListFlatteningFailed

HLSL intialization list flattening failed.

Definition Initialization.h:1135

@ FK_PlaceholderType

Initializer has a placeholder type which cannot be resolved by initialization.

Definition Initialization.h:1118

@ FK_IncompatWideStringIntoWideChar

Initializing wide char array with incompatible wide string literal.

Definition Initialization.h:1028

@ FK_NonConstLValueReferenceBindingToMatrixElement

Non-const lvalue reference binding to a matrix element.

Definition Initialization.h:1058

@ FK_TooManyInitsForReference

Too many initializers provided for a reference.

Definition Initialization.h:1004

@ FK_NonConstLValueReferenceBindingToBitfield

Non-const lvalue reference binding to a bit-field.

Definition Initialization.h:1052

@ FK_ReferenceAddrspaceMismatchTemporary

Reference with mismatching address space binding to temporary.

Definition Initialization.h:1071

@ FK_ListInitializationFailed

List initialization failed at some point.

Definition Initialization.h:1114

@ FK_TooManyInitsForScalar

Too many initializers for scalar.

Definition Initialization.h:1083

@ FK_AddressOfOverloadFailed

Cannot resolve the address of an overloaded function.

Definition Initialization.h:1043

@ FK_VariableLengthArrayHasInitializer

Variable-length array must not have an initializer.

Definition Initialization.h:1111

@ FK_ArrayNeedsInitListOrWideStringLiteral

Array must be initialized with an initializer list or a wide string literal.

Definition Initialization.h:1018

@ FK_RValueReferenceBindingToLValue

Rvalue reference binding to an lvalue.

Definition Initialization.h:1065

@ FK_Incomplete

Initialization of an incomplete type.

Definition Initialization.h:1108

@ FK_WideStringIntoCharArray

Initializing char array with wide string literal.

Definition Initialization.h:1024

@ FK_ExplicitConstructor

List-copy-initialization chose an explicit constructor.

Definition Initialization.h:1125

@ FK_ReferenceInitOverloadFailed

Overloading due to reference initialization failed.

Definition Initialization.h:1046

@ FK_ConstructorOverloadFailed

Overloading for initialization by constructor failed.

Definition Initialization.h:1099

@ FK_ReferenceBindingToInitList

Reference initialization from an initializer list.

Definition Initialization.h:1089

@ FK_DefaultInitOfConst

Default-initialization of a 'const' object.

Definition Initialization.h:1105

@ FK_ParenthesizedListInitFailed

Parenthesized list initialization failed at some point.

Definition Initialization.h:1129

@ FK_AddressOfUnaddressableFunction

Trying to take the address of a function that doesn't support having its address taken.

Definition Initialization.h:1122

@ FK_UTF8StringIntoPlainChar

Initializing char array with UTF-8 string literal.

Definition Initialization.h:1034

bool isDirectReferenceBinding() const

Determine whether this initialization is a direct reference binding (C++ [dcl.init....

void AddArrayInitLoopStep(QualType T, QualType EltTy)

Add an array initialization loop step.

void AddAddressOverloadResolutionStep(FunctionDecl *Function, DeclAccessPair Found, bool HadMultipleCandidates)

Add a new step in the initialization that resolves the address of an overloaded function to a specifi...

void AddArrayInitStep(QualType T, bool IsGNUExtension)

Add an array initialization step.

bool isConstructorInitialization() const

Determine whether this initialization is direct call to a constructor.

SmallVectorImpl< Step >::const_iterator step_iterator

Definition Initialization.h:1249

OverloadCandidateSet & getFailedCandidateSet()

Retrieve a reference to the candidate set when overload resolution fails.

Definition Initialization.h:1419

Describes an entity that is being initialized.

Definition Initialization.h:47

static InitializedEntity InitializeBase(ASTContext &Context, const CXXBaseSpecifier *Base, bool IsInheritedVirtualBase, const InitializedEntity *Parent=nullptr)

Create the initialization entity for a base class subobject.

static InitializedEntity InitializeResult(SourceLocation ReturnLoc, QualType Type)

Create the initialization entity for the result of a function.

Definition Initialization.h:310

static InitializedEntity InitializeMember(FieldDecl *Member, const InitializedEntity *Parent=nullptr, bool Implicit=false)

Create the initialization entity for a member subobject.

Definition Initialization.h:388

VD Variable

When Kind == EK_Variable, EK_Member, EK_Binding, or EK_TemplateParameter, the variable,...

Definition Initialization.h:191

static InitializedEntity InitializeRelatedResult(ObjCMethodDecl *MD, QualType Type)

Create the initialization entity for a related result.

Definition Initialization.h:368

void setParameterCFAudited()

Definition Initialization.h:568

EntityKind getKind() const

Determine the kind of initialization.

Definition Initialization.h:446

DeclarationName getName() const

Retrieve the name of the entity being initialized.

static InitializedEntity InitializeException(SourceLocation ThrowLoc, QualType Type)

Create the initialization entity for an exception object.

Definition Initialization.h:332

unsigned allocateManglingNumber() const

Definition Initialization.h:572

QualType getType() const

Retrieve type being initialized.

Definition Initialization.h:454

static InitializedEntity InitializeTemporary(ASTContext &Context, TypeSourceInfo *TypeInfo)

Create the initialization entity for a temporary.

Definition Initialization.h:348

ValueDecl * getDecl() const

Retrieve the variable, parameter, or field being initialized.

struct C Capture

Definition Initialization.h:217

static InitializedEntity InitializeParameter(ASTContext &Context, QualType Type, bool Consumed)

Create the initialization entity for a parameter that is only known by its type.

Definition Initialization.h:287

static InitializedEntity InitializeStmtExprResult(SourceLocation ReturnLoc, QualType Type)

Definition Initialization.h:315

bool isImplicitMemberInitializer() const

Is this the implicit initialization of a member of a class from a defaulted constructor?

Definition Initialization.h:515

const InitializedEntity * getParent() const

Retrieve the parent of the entity being initialized, when the initialization itself is occurring with...

Definition Initialization.h:451

static InitializedEntity InitializeTemporary(QualType Type)

Create the initialization entity for a temporary.

Definition Initialization.h:343

bool isParameterConsumed() const

Determine whether this initialization consumes the parameter.

Definition Initialization.h:490

static InitializedEntity InitializeBinding(VarDecl *Binding)

Create the initialization entity for a structured binding.

Definition Initialization.h:424

static InitializedEntity InitializeParameter(ASTContext &Context, ParmVarDecl *Parm, QualType Type)

Create the initialization entity for a parameter, but use another type.

Definition Initialization.h:272

TypeSourceInfo * TypeInfo

When Kind == EK_Temporary or EK_CompoundLiteralInit, the type source information for the temporary.

Definition Initialization.h:203

static InitializedEntity InitializeMemberFromDefaultMemberInitializer(FieldDecl *Member)

Create the initialization entity for a default member initializer.

Definition Initialization.h:412

static InitializedEntity InitializeElement(ASTContext &Context, unsigned Index, const InitializedEntity &Parent)

Create the initialization entity for an array element.

Definition Initialization.h:417

unsigned getElementIndex() const

If this is an array, vector, or complex number element, get the element's index.

Definition Initialization.h:541

bool isInheritedVirtualBase() const

Return whether the base is an inherited virtual base.

Definition Initialization.h:502

static InitializedEntity InitializeLambdaToBlock(SourceLocation BlockVarLoc, QualType Type)

Definition Initialization.h:325

void setElementIndex(unsigned Index)

If this is already the initializer for an array or vector element, sets the element index.

Definition Initialization.h:549

SourceLocation getCaptureLoc() const

Determine the location of the capture when initializing field from a captured variable in a lambda.

Definition Initialization.h:563

static InitializedEntity InitializeBlock(SourceLocation BlockVarLoc, QualType Type)

Definition Initialization.h:320

bool isParamOrTemplateParamKind() const

Definition Initialization.h:484

static InitializedEntity InitializeNew(SourceLocation NewLoc, QualType Type)

Create the initialization entity for an object allocated via new.

Definition Initialization.h:338

llvm::PointerIntPair< const CXXBaseSpecifier *, 1 > Base

When Kind == EK_Base, the base specifier that provides the base class.

Definition Initialization.h:210

static InitializedEntity InitializeTemporary(TypeSourceInfo *TypeInfo, QualType Type)

Create the initialization entity for a temporary.

Definition Initialization.h:360

static InitializedEntity InitializeVariable(VarDecl *Var)

Create the initialization entity for a variable.

Definition Initialization.h:259

bool allowsNRVO() const

Determine whether this initialization allows the named return value optimization, which also applies ...

bool isParameterKind() const

Definition Initialization.h:479

void dump() const

Dump a representation of the initialized entity to standard error, for debugging purposes.

static InitializedEntity InitializeParameter(ASTContext &Context, ParmVarDecl *Parm)

Create the initialization entity for a parameter.

Definition Initialization.h:264

static InitializedEntity InitializeLambdaCapture(IdentifierInfo *VarID, QualType FieldType, SourceLocation Loc)

Create the initialization entity for a lambda capture.

Definition Initialization.h:431

static InitializedEntity InitializeTemplateParameter(QualType T, NamedDecl *Param)

Create the initialization entity for a template parameter.

Definition Initialization.h:299

EntityKind

Specifies the kind of entity being initialized.

Definition Initialization.h:50

@ EK_Variable

The entity being initialized is a variable.

Definition Initialization.h:52

@ EK_Temporary

The entity being initialized is a temporary object.

Definition Initialization.h:82

@ EK_Binding

The entity being initialized is a structured binding of a decomposition declaration.

Definition Initialization.h:128

@ EK_BlockElement

The entity being initialized is a field of block descriptor for the copied-in c++ object.

Definition Initialization.h:100

@ EK_MatrixElement

The entity being initialized is an element of a matrix.

Definition Initialization.h:96

@ EK_Parameter_CF_Audited

The entity being initialized is a function parameter; function is member of group of audited CF APIs.

Definition Initialization.h:124

@ EK_LambdaToBlockConversionBlockElement

The entity being initialized is a field of block descriptor for the copied-in lambda object that's us...

Definition Initialization.h:104

@ EK_Member

The entity being initialized is a non-static data member subobject.

Definition Initialization.h:72

@ EK_Base

The entity being initialized is a base member subobject.

Definition Initialization.h:85

@ EK_Result

The entity being initialized is the result of a function call.

Definition Initialization.h:61

@ EK_TemplateParameter

The entity being initialized is a non-type template parameter.

Definition Initialization.h:58

@ EK_StmtExprResult

The entity being initialized is the result of a statement expression.

Definition Initialization.h:64

@ EK_ParenAggInitMember

The entity being initialized is a non-static data member subobject of an object initialized via paren...

Definition Initialization.h:132

@ EK_VectorElement

The entity being initialized is an element of a vector.

Definition Initialization.h:92

@ EK_New

The entity being initialized is an object (or array of objects) allocated via new.

Definition Initialization.h:79

@ EK_CompoundLiteralInit

The entity being initialized is the initializer for a compound literal.

Definition Initialization.h:116

@ EK_Parameter

The entity being initialized is a function parameter.

Definition Initialization.h:55

@ EK_Delegating

The initialization is being done by a delegating constructor.

Definition Initialization.h:88

@ EK_ComplexElement

The entity being initialized is the real or imaginary part of a complex number.

Definition Initialization.h:108

@ EK_ArrayElement

The entity being initialized is an element of an array.

Definition Initialization.h:75

@ EK_LambdaCapture

The entity being initialized is the field that captures a variable in a lambda.

Definition Initialization.h:112

@ EK_Exception

The entity being initialized is an exception object that is being thrown.

Definition Initialization.h:68

@ EK_RelatedResult

The entity being implicitly initialized back to the formal result type.

Definition Initialization.h:120

StringRef getCapturedVarName() const

For a lambda capture, return the capture's name.

Definition Initialization.h:556

static InitializedEntity InitializeMemberFromParenAggInit(FieldDecl *Member)

Create the initialization entity for a member subobject initialized via parenthesized aggregate init.

Definition Initialization.h:404

SourceLocation getThrowLoc() const

Determine the location of the 'throw' keyword when initializing an exception object.

Definition Initialization.h:534

static InitializedEntity InitializeDelegation(QualType Type)

Create the initialization entity for a delegated constructor.

Definition Initialization.h:382

unsigned Index

When Kind == EK_ArrayElement, EK_VectorElement, EK_MatrixElement, or EK_ComplexElement,...

Definition Initialization.h:215

static InitializedEntity InitializeCompoundLiteralInit(TypeSourceInfo *TSI)

Create the entity for a compound literal initializer.

Definition Initialization.h:438

struct LN LocAndNRVO

Definition Initialization.h:205

static InitializedEntity InitializeMember(IndirectFieldDecl *Member, const InitializedEntity *Parent=nullptr, bool Implicit=false)

Create the initialization entity for a member subobject.

Definition Initialization.h:396

bool isVariableLengthArrayNew() const

Determine whether this is an array new with an unknown bound.

Definition Initialization.h:508

ObjCMethodDecl * MethodDecl

When Kind == EK_RelatedResult, the ObjectiveC method where result type was implicitly changed to acco...

Definition Initialization.h:195

bool isDefaultMemberInitializer() const

Is this the default member initializer of a member (specified inside the class definition)?

Definition Initialization.h:521

llvm::PointerIntPair< ParmVarDecl *, 1 > Parameter

When Kind == EK_Parameter, the ParmVarDecl, with the integer indicating whether the parameter is "con...

Definition Initialization.h:199

const CXXBaseSpecifier * getBaseSpecifier() const

Retrieve the base specifier.

Definition Initialization.h:496

SourceLocation getReturnLoc() const

Determine the location of the 'return' keyword when initializing the result of a function call.

Definition Initialization.h:527

TypeSourceInfo * getTypeSourceInfo() const

Retrieve complete type-source information for the object being constructed, if known.

Definition Initialization.h:458

ObjCMethodDecl * getMethodDecl() const

Retrieve the ObjectiveC method being initialized.

Definition Initialization.h:473

This represents a decl that may have a name.

ObjCMethodDecl - Represents an instance or class method declaration.

OverloadCandidateSet - A set of overload candidates, used in C++ overload resolution (C++ 13....

Represents a parameter to a function.

A (possibly-)qualified type.

Sema - This implements semantic analysis and AST building for C.

Encodes a location in the source.

A trivial tuple used to represent a source range.

SourceLocation getEnd() const

SourceLocation getBegin() const

A container of type source information.

QualType getType() const

Return the type wrapped by this type source info.

The base class of the type hierarchy.

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

Represents a variable declaration or definition.

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

bool isa(CodeGen::Address addr)

OverloadingResult

OverloadingResult - Capture the result of performing overload resolution.

MutableArrayRef< Expr * > MultiExprArg

@ Result

The result type of a method or function.

const FunctionProtoType * T

ExprValueKind

The categorization of expression values, currently following the C++11 scheme.

ActionResult< Expr * > ExprResult

@ Implicit

An implicit conversion.

Definition Initialization.h:962

FunctionDecl * Function

Definition Initialization.h:964

bool HadMultipleCandidates

Definition Initialization.h:963

DeclAccessPair FoundDecl

Definition Initialization.h:965