Skip to content

Commit fe3db33

Browse files
committed
C++: Add explicit and default initialization subclasses for ConstructorFieldInit
1 parent cc99867 commit fe3db33

2 files changed

Lines changed: 68 additions & 43 deletions

File tree

cpp/ql/lib/semmle/code/cpp/exprs/Call.qll

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -585,12 +585,15 @@ class ConstructorDelegationInit extends ConstructorBaseInit, @ctordelegatinginit
585585

586586
/**
587587
* An initialization of a member variable performed as part of a
588-
* constructor's explicit initializer list or implicit actions.
588+
* constructor's initializer list or by default initialization.
589+
*
589590
* In the example below, member variable `b` is being initialized by
590-
* constructor parameter `a`:
591+
* constructor parameter `a`, and `c` is initialized by default
592+
* initialization:
591593
* ```
592594
* struct S {
593595
* int b;
596+
* int c = 3;
594597
* S(int a): b(a) {}
595598
* } s(2);
596599
* ```
@@ -616,6 +619,28 @@ class ConstructorFieldInit extends ConstructorInit, @ctorfieldinit {
616619
override predicate mayBeGloballyImpure() { this.getExpr().mayBeGloballyImpure() }
617620
}
618621

622+
/**
623+
* An initialization of a member variable performed as part of a
624+
* constructor's explicit initializer list.
625+
*/
626+
class ConstructorDirectFieldInit extends ConstructorFieldInit {
627+
ConstructorDirectFieldInit() { exists(this.getChild(0)) }
628+
629+
override string getAPrimaryQlClass() { result = "ConstructorDirectFieldInit" }
630+
}
631+
632+
/**
633+
* An initialization of a member variable performed by default
634+
* initialization.
635+
*/
636+
class ConstructorDefaultFieldInit extends ConstructorFieldInit {
637+
ConstructorDefaultFieldInit() {
638+
not exists(this.getChild(0)) and exists(this.getTarget().getInitializer())
639+
}
640+
641+
override string getAPrimaryQlClass() { result = "ConstructorDefaultFieldInit" }
642+
}
643+
619644
/**
620645
* A call to a destructor of a base class or field as part of a destructor's
621646
* compiler-generated actions.

cpp/ql/test/library-tests/ir/ir/PrintAST.expected

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ bad_asts.cpp:
277277
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
278278
#-----| Type = [LValueReferenceType] const Point &
279279
# 19| <initializations>:
280-
# 19| getInitializer(0): [ConstructorFieldInit] constructor init of field x
280+
# 19| getInitializer(0): [ConstructorDirectFieldInit] constructor init of field x
281281
# 19| Type = [IntType] int
282282
# 19| ValueCategory = prvalue
283283
# 19| getExpr(): [ReferenceFieldAccess] x
@@ -289,7 +289,7 @@ bad_asts.cpp:
289289
# 19| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
290290
# 19| Type = [SpecifiedType] const Point
291291
# 19| ValueCategory = lvalue
292-
# 19| getInitializer(1): [ConstructorFieldInit] constructor init of field y
292+
# 19| getInitializer(1): [ConstructorDirectFieldInit] constructor init of field y
293293
# 19| Type = [IntType] int
294294
# 19| ValueCategory = prvalue
295295
# 19| getExpr(): [ReferenceFieldAccess] y
@@ -8986,20 +8986,20 @@ ir.cpp:
89868986
# 658| [Constructor] void C::C()
89878987
# 658| <params>:
89888988
# 658| <initializations>:
8989-
# 659| getInitializer(0): [ConstructorFieldInit] constructor init of field m_a
8989+
# 659| getInitializer(0): [ConstructorDirectFieldInit] constructor init of field m_a
89908990
# 659| Type = [IntType] int
89918991
# 659| ValueCategory = prvalue
89928992
# 659| getExpr(): [Literal] 1
89938993
# 659| Type = [IntType] int
89948994
# 659| Value = [Literal] 1
89958995
# 659| ValueCategory = prvalue
8996-
# 663| getInitializer(1): [ConstructorFieldInit] constructor init of field m_b
8996+
# 663| getInitializer(1): [ConstructorDirectFieldInit] constructor init of field m_b
89978997
# 663| Type = [Struct] String
89988998
# 663| ValueCategory = prvalue
89998999
# 663| getExpr(): [ConstructorCall] call to String
90009000
# 663| Type = [VoidType] void
90019001
# 663| ValueCategory = prvalue
9002-
# 660| getInitializer(2): [ConstructorFieldInit] constructor init of field m_c
9002+
# 660| getInitializer(2): [ConstructorDirectFieldInit] constructor init of field m_c
90039003
# 660| Type = [PlainCharType] char
90049004
# 660| ValueCategory = prvalue
90059005
# 660| getExpr(): [Literal] 3
@@ -9011,14 +9011,14 @@ ir.cpp:
90119011
# 660| Type = [PlainCharType] char
90129012
# 660| Value = [CStyleCast] 3
90139013
# 660| ValueCategory = prvalue
9014-
# 661| getInitializer(3): [ConstructorFieldInit] constructor init of field m_e
9014+
# 661| getInitializer(3): [ConstructorDirectFieldInit] constructor init of field m_e
90159015
# 661| Type = [VoidPointerType] void *
90169016
# 661| ValueCategory = prvalue
90179017
# 661| getExpr(): [Literal] 0
90189018
# 661| Type = [VoidPointerType] void *
90199019
# 661| Value = [Literal] 0
90209020
# 661| ValueCategory = prvalue
9021-
# 662| getInitializer(4): [ConstructorFieldInit] constructor init of field m_f
9021+
# 662| getInitializer(4): [ConstructorDirectFieldInit] constructor init of field m_f
90229022
# 662| Type = [Struct] String
90239023
# 662| ValueCategory = prvalue
90249024
# 662| getExpr(): [ConstructorCall] call to String
@@ -9474,7 +9474,7 @@ ir.cpp:
94749474
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
94759475
#-----| Type = [LValueReferenceType] const Base &
94769476
# 745| <initializations>:
9477-
# 745| getInitializer(0): [ConstructorFieldInit] constructor init of field base_s
9477+
# 745| getInitializer(0): [ConstructorDirectFieldInit] constructor init of field base_s
94789478
# 745| Type = [Struct] String
94799479
# 745| ValueCategory = prvalue
94809480
# 745| getExpr(): [ConstructorCall] call to String
@@ -9485,7 +9485,7 @@ ir.cpp:
94859485
# 748| [Constructor] void Base::Base()
94869486
# 748| <params>:
94879487
# 748| <initializations>:
9488-
# 748| getInitializer(0): [ConstructorFieldInit] constructor init of field base_s
9488+
# 748| getInitializer(0): [ConstructorDirectFieldInit] constructor init of field base_s
94899489
# 748| Type = [Struct] String
94909490
# 748| ValueCategory = prvalue
94919491
# 748| getExpr(): [ConstructorCall] call to String
@@ -9593,7 +9593,7 @@ ir.cpp:
95939593
# 757| getInitializer(0): [ConstructorDirectInit] call to Base
95949594
# 757| Type = [VoidType] void
95959595
# 757| ValueCategory = prvalue
9596-
# 757| getInitializer(1): [ConstructorFieldInit] constructor init of field middle_s
9596+
# 757| getInitializer(1): [ConstructorDirectFieldInit] constructor init of field middle_s
95979597
# 757| Type = [Struct] String
95989598
# 757| ValueCategory = prvalue
95999599
# 757| getExpr(): [ConstructorCall] call to String
@@ -9704,7 +9704,7 @@ ir.cpp:
97049704
# 766| getInitializer(0): [ConstructorDirectInit] call to Middle
97059705
# 766| Type = [VoidType] void
97069706
# 766| ValueCategory = prvalue
9707-
# 766| getInitializer(1): [ConstructorFieldInit] constructor init of field derived_s
9707+
# 766| getInitializer(1): [ConstructorDirectFieldInit] constructor init of field derived_s
97089708
# 766| Type = [Struct] String
97099709
# 766| ValueCategory = prvalue
97109710
# 766| getExpr(): [ConstructorCall] call to String
@@ -9743,7 +9743,7 @@ ir.cpp:
97439743
# 775| getInitializer(0): [ConstructorVirtualInit] call to Base
97449744
# 775| Type = [VoidType] void
97459745
# 775| ValueCategory = prvalue
9746-
# 775| getInitializer(1): [ConstructorFieldInit] constructor init of field middlevb1_s
9746+
# 775| getInitializer(1): [ConstructorDirectFieldInit] constructor init of field middlevb1_s
97479747
# 775| Type = [Struct] String
97489748
# 775| ValueCategory = prvalue
97499749
# 775| getExpr(): [ConstructorCall] call to String
@@ -9782,7 +9782,7 @@ ir.cpp:
97829782
# 784| getInitializer(0): [ConstructorVirtualInit] call to Base
97839783
# 784| Type = [VoidType] void
97849784
# 784| ValueCategory = prvalue
9785-
# 784| getInitializer(1): [ConstructorFieldInit] constructor init of field middlevb2_s
9785+
# 784| getInitializer(1): [ConstructorDirectFieldInit] constructor init of field middlevb2_s
97869786
# 784| Type = [Struct] String
97879787
# 784| ValueCategory = prvalue
97889788
# 784| getExpr(): [ConstructorCall] call to String
@@ -9827,7 +9827,7 @@ ir.cpp:
98279827
# 793| getInitializer(2): [ConstructorDirectInit] call to MiddleVB2
98289828
# 793| Type = [VoidType] void
98299829
# 793| ValueCategory = prvalue
9830-
# 793| getInitializer(3): [ConstructorFieldInit] constructor init of field derivedvb_s
9830+
# 793| getInitializer(3): [ConstructorDirectFieldInit] constructor init of field derivedvb_s
98319831
# 793| Type = [Struct] String
98329832
# 793| ValueCategory = prvalue
98339833
# 793| getExpr(): [ConstructorCall] call to String
@@ -15190,7 +15190,7 @@ ir.cpp:
1519015190
# 1508| getInitializer(0): [ConstructorInit] constructor init
1519115191
# 1508| Type = [Struct] Inheritance_Test_B
1519215192
# 1508| ValueCategory = prvalue
15193-
# 1508| getInitializer(1): [ConstructorFieldInit] constructor init of field x
15193+
# 1508| getInitializer(1): [ConstructorDirectFieldInit] constructor init of field x
1519415194
# 1508| Type = [IntType] int
1519515195
# 1508| ValueCategory = prvalue
1519615196
# 1508| getExpr(): [Literal] 42
@@ -15414,7 +15414,7 @@ ir.cpp:
1541415414
# 1533| [Constructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct()
1541515415
# 1533| <params>:
1541615416
# 1533| <initializations>:
15417-
# 1533| getInitializer(0): [ConstructorFieldInit] constructor init of field x
15417+
# 1533| getInitializer(0): [ConstructorDefaultFieldInit] constructor init of field x
1541815418
# 1533| Type = [IntType] int
1541915419
# 1533| ValueCategory = prvalue
1542015420
# 1533| getEntryPoint(): [BlockStmt] { ... }
@@ -15434,25 +15434,25 @@ ir.cpp:
1543415434
# 1537| [Constructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct()
1543515435
# 1537| <params>:
1543615436
# 1537| <initializations>:
15437-
# 1537| getInitializer(0): [ConstructorFieldInit] constructor init of field i
15437+
# 1537| getInitializer(0): [ConstructorDefaultFieldInit] constructor init of field i
1543815438
# 1537| Type = [IntType] int
1543915439
# 1537| ValueCategory = prvalue
15440-
# 1537| getInitializer(1): [ConstructorFieldInit] constructor init of field d
15440+
# 1537| getInitializer(1): [ConstructorDefaultFieldInit] constructor init of field d
1544115441
# 1537| Type = [DoubleType] double
1544215442
# 1537| ValueCategory = prvalue
15443-
# 1537| getInitializer(2): [ConstructorFieldInit] constructor init of field r
15443+
# 1537| getInitializer(2): [ConstructorDefaultFieldInit] constructor init of field r
1544415444
# 1537| Type = [LValueReferenceType] int &
1544515445
# 1537| ValueCategory = prvalue
15446-
# 1537| getInitializer(3): [ConstructorFieldInit] constructor init of field p
15446+
# 1537| getInitializer(3): [ConstructorDefaultFieldInit] constructor init of field p
1544715447
# 1537| Type = [IntPointerType] int *
1544815448
# 1537| ValueCategory = prvalue
15449-
# 1537| getInitializer(4): [ConstructorFieldInit] constructor init of field xs
15449+
# 1537| getInitializer(4): [ConstructorDefaultFieldInit] constructor init of field xs
1545015450
# 1537| Type = [CTypedefType,NestedTypedefType] ArrayType
1545115451
# 1537| ValueCategory = prvalue
15452-
# 1537| getInitializer(5): [ConstructorFieldInit] constructor init of field r_alt
15452+
# 1537| getInitializer(5): [ConstructorDefaultFieldInit] constructor init of field r_alt
1545315453
# 1537| Type = [CTypedefType,NestedTypedefType] RefType
1545415454
# 1537| ValueCategory = prvalue
15455-
# 1537| getInitializer(6): [ConstructorFieldInit] constructor init of field m
15455+
# 1537| getInitializer(6): [ConstructorDirectFieldInit] constructor init of field m
1545615456
# 1537| Type = [Struct] StructuredBindingDataMemberMemberStruct
1545715457
# 1537| ValueCategory = prvalue
1545815458
# 1537| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberMemberStruct
@@ -15465,7 +15465,7 @@ ir.cpp:
1546515465
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
1546615466
#-----| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct &
1546715467
# 1537| <initializations>:
15468-
# 1537| getInitializer(0): [ConstructorFieldInit] constructor init of field i
15468+
# 1537| getInitializer(0): [ConstructorDirectFieldInit] constructor init of field i
1546915469
# 1537| Type = [IntType] int
1547015470
# 1537| ValueCategory = prvalue
1547115471
# 1537| getExpr(): [ReferenceFieldAccess] i
@@ -15477,7 +15477,7 @@ ir.cpp:
1547715477
# 1537| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
1547815478
# 1537| Type = [SpecifiedType] const StructuredBindingDataMemberStruct
1547915479
# 1537| ValueCategory = lvalue
15480-
# 1537| getInitializer(1): [ConstructorFieldInit] constructor init of field d
15480+
# 1537| getInitializer(1): [ConstructorDirectFieldInit] constructor init of field d
1548115481
# 1537| Type = [DoubleType] double
1548215482
# 1537| ValueCategory = prvalue
1548315483
# 1537| getExpr(): [ReferenceFieldAccess] d
@@ -15489,7 +15489,7 @@ ir.cpp:
1548915489
# 1537| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
1549015490
# 1537| Type = [SpecifiedType] const StructuredBindingDataMemberStruct
1549115491
# 1537| ValueCategory = lvalue
15492-
# 1537| getInitializer(2): [ConstructorFieldInit] constructor init of field b
15492+
# 1537| getInitializer(2): [ConstructorDirectFieldInit] constructor init of field b
1549315493
# 1537| Type = [IntType] unsigned int
1549415494
# 1537| ValueCategory = prvalue
1549515495
# 1537| getExpr(): [ReferenceFieldAccess] b
@@ -15501,7 +15501,7 @@ ir.cpp:
1550115501
# 1537| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
1550215502
# 1537| Type = [SpecifiedType] const StructuredBindingDataMemberStruct
1550315503
# 1537| ValueCategory = lvalue
15504-
# 1537| getInitializer(3): [ConstructorFieldInit] constructor init of field r
15504+
# 1537| getInitializer(3): [ConstructorDirectFieldInit] constructor init of field r
1550515505
# 1537| Type = [LValueReferenceType] int &
1550615506
# 1537| ValueCategory = prvalue
1550715507
# 1537| getExpr(): [ReferenceFieldAccess] r
@@ -15513,7 +15513,7 @@ ir.cpp:
1551315513
# 1537| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
1551415514
# 1537| Type = [SpecifiedType] const StructuredBindingDataMemberStruct
1551515515
# 1537| ValueCategory = lvalue
15516-
# 1537| getInitializer(4): [ConstructorFieldInit] constructor init of field p
15516+
# 1537| getInitializer(4): [ConstructorDirectFieldInit] constructor init of field p
1551715517
# 1537| Type = [IntPointerType] int *
1551815518
# 1537| ValueCategory = prvalue
1551915519
# 1537| getExpr(): [ReferenceFieldAccess] p
@@ -15525,7 +15525,7 @@ ir.cpp:
1552515525
# 1537| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
1552615526
# 1537| Type = [SpecifiedType] const StructuredBindingDataMemberStruct
1552715527
# 1537| ValueCategory = lvalue
15528-
# 1537| getInitializer(5): [ConstructorFieldInit] constructor init of field xs
15528+
# 1537| getInitializer(5): [ConstructorDirectFieldInit] constructor init of field xs
1552915529
# 1537| Type = [CTypedefType,NestedTypedefType] ArrayType
1553015530
# 1537| ValueCategory = prvalue
1553115531
# 1537| getExpr(): [ReferenceFieldAccess] xs
@@ -15537,7 +15537,7 @@ ir.cpp:
1553715537
# 1537| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
1553815538
# 1537| Type = [SpecifiedType] const StructuredBindingDataMemberStruct
1553915539
# 1537| ValueCategory = lvalue
15540-
# 1537| getInitializer(6): [ConstructorFieldInit] constructor init of field r_alt
15540+
# 1537| getInitializer(6): [ConstructorDirectFieldInit] constructor init of field r_alt
1554115541
# 1537| Type = [CTypedefType,NestedTypedefType] RefType
1554215542
# 1537| ValueCategory = prvalue
1554315543
# 1537| getExpr(): [ReferenceFieldAccess] r_alt
@@ -15549,7 +15549,7 @@ ir.cpp:
1554915549
# 1537| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
1555015550
# 1537| Type = [SpecifiedType] const StructuredBindingDataMemberStruct
1555115551
# 1537| ValueCategory = lvalue
15552-
# 1537| getInitializer(7): [ConstructorFieldInit] constructor init of field m
15552+
# 1537| getInitializer(7): [ConstructorDirectFieldInit] constructor init of field m
1555315553
# 1537| Type = [Struct] StructuredBindingDataMemberMemberStruct
1555415554
# 1537| ValueCategory = prvalue
1555515555
# 1537| getExpr(): [ReferenceFieldAccess] m
@@ -15918,13 +15918,13 @@ ir.cpp:
1591815918
# 1590| [Constructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet()
1591915919
# 1590| <params>:
1592015920
# 1590| <initializations>:
15921-
# 1590| getInitializer(0): [ConstructorFieldInit] constructor init of field i
15921+
# 1590| getInitializer(0): [ConstructorDefaultFieldInit] constructor init of field i
1592215922
# 1590| Type = [IntType] int
1592315923
# 1590| ValueCategory = prvalue
15924-
# 1590| getInitializer(1): [ConstructorFieldInit] constructor init of field d
15924+
# 1590| getInitializer(1): [ConstructorDefaultFieldInit] constructor init of field d
1592515925
# 1590| Type = [DoubleType] double
1592615926
# 1590| ValueCategory = prvalue
15927-
# 1590| getInitializer(2): [ConstructorFieldInit] constructor init of field r
15927+
# 1590| getInitializer(2): [ConstructorDefaultFieldInit] constructor init of field r
1592815928
# 1590| Type = [LValueReferenceType] int &
1592915929
# 1590| ValueCategory = prvalue
1593015930
# 1590| getEntryPoint(): [BlockStmt] { ... }
@@ -15934,7 +15934,7 @@ ir.cpp:
1593415934
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
1593515935
#-----| Type = [LValueReferenceType] const StructuredBindingTupleRefGet &
1593615936
# 1590| <initializations>:
15937-
# 1590| getInitializer(0): [ConstructorFieldInit] constructor init of field i
15937+
# 1590| getInitializer(0): [ConstructorDirectFieldInit] constructor init of field i
1593815938
# 1590| Type = [IntType] int
1593915939
# 1590| ValueCategory = prvalue
1594015940
# 1590| getExpr(): [ReferenceFieldAccess] i
@@ -15946,7 +15946,7 @@ ir.cpp:
1594615946
# 1590| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
1594715947
# 1590| Type = [SpecifiedType] const StructuredBindingTupleRefGet
1594815948
# 1590| ValueCategory = lvalue
15949-
# 1590| getInitializer(1): [ConstructorFieldInit] constructor init of field d
15949+
# 1590| getInitializer(1): [ConstructorDirectFieldInit] constructor init of field d
1595015950
# 1590| Type = [DoubleType] double
1595115951
# 1590| ValueCategory = prvalue
1595215952
# 1590| getExpr(): [ReferenceFieldAccess] d
@@ -15958,7 +15958,7 @@ ir.cpp:
1595815958
# 1590| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
1595915959
# 1590| Type = [SpecifiedType] const StructuredBindingTupleRefGet
1596015960
# 1590| ValueCategory = lvalue
15961-
# 1590| getInitializer(2): [ConstructorFieldInit] constructor init of field r
15961+
# 1590| getInitializer(2): [ConstructorDirectFieldInit] constructor init of field r
1596215962
# 1590| Type = [LValueReferenceType] int &
1596315963
# 1590| ValueCategory = prvalue
1596415964
# 1590| getExpr(): [ReferenceFieldAccess] r
@@ -16327,10 +16327,10 @@ ir.cpp:
1632716327
# 1657| [Constructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet()
1632816328
# 1657| <params>:
1632916329
# 1657| <initializations>:
16330-
# 1657| getInitializer(0): [ConstructorFieldInit] constructor init of field i
16330+
# 1657| getInitializer(0): [ConstructorDefaultFieldInit] constructor init of field i
1633116331
# 1657| Type = [IntType] int
1633216332
# 1657| ValueCategory = prvalue
16333-
# 1657| getInitializer(1): [ConstructorFieldInit] constructor init of field r
16333+
# 1657| getInitializer(1): [ConstructorDefaultFieldInit] constructor init of field r
1633416334
# 1657| Type = [LValueReferenceType] int &
1633516335
# 1657| ValueCategory = prvalue
1633616336
# 1657| getEntryPoint(): [BlockStmt] { ... }
@@ -19817,7 +19817,7 @@ ir.cpp:
1981719817
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
1981819818
#-----| Type = [LValueReferenceType] const ClassWithDestructor &
1981919819
# 2188| <initializations>:
19820-
# 2188| getInitializer(0): [ConstructorFieldInit] constructor init of field x
19820+
# 2188| getInitializer(0): [ConstructorDirectFieldInit] constructor init of field x
1982119821
# 2188| Type = [CharPointerType] char *
1982219822
# 2188| ValueCategory = prvalue
1982319823
# 2188| getExpr(): [ReferenceFieldAccess] x
@@ -50386,7 +50386,7 @@ perf-regression.cpp:
5038650386
# 6| [Constructor] void Big::Big()
5038750387
# 6| <params>:
5038850388
# 6| <initializations>:
50389-
# 6| getInitializer(0): [ConstructorFieldInit] constructor init of field buffer
50389+
# 6| getInitializer(0): [ConstructorDirectFieldInit] constructor init of field buffer
5039050390
# 6| Type = [ArrayType] char[1073741824]
5039150391
# 6| ValueCategory = prvalue
5039250392
# 6| getExpr(): [ArrayAggregateLiteral] {...}

0 commit comments

Comments
 (0)