svf-tools 1.0.862 → 1.0.863
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-doxygen/html/ObjTypeInference_8cpp_source.html +230 -230
- package/SVF-doxygen/html/ObjTypeInference_8h_source.html +8 -8
- package/SVF-doxygen/html/classSVF_1_1ObjTypeInference-members.html +1 -1
- package/SVF-doxygen/html/classSVF_1_1ObjTypeInference.html +226 -226
- package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +2 -2
- package/SVF-doxygen/html/functions_func_s.html +2 -2
- package/SVF-doxygen/html/functions_s.html +2 -2
- package/SVF-doxygen/html/search/all_12.js +1 -1
- package/SVF-doxygen/html/search/functions_12.js +1 -1
- package/package.json +1 -1
- package/svf-llvm/include/SVF-LLVM/ObjTypeInference.h +1 -1
- package/svf-llvm/lib/ObjTypeInference.cpp +11 -13
|
@@ -1858,7 +1858,7 @@ Friends</h2></td></tr>
|
|
|
1858
1858
|
<div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_a4f916c64ca04c4db30bd19fb8505724d"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a4f916c64ca04c4db30bd19fb8505724d">SVF::SymbolTableInfo::setModule</a></div><div class="ttdeci">void setModule(SVFModule *m)</div><div class="ttdoc">Module.</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00146">SymbolTableInfo.h:146</a></div></div>
|
|
1859
1859
|
<div class="ttc" id="anamespaceSVF_html_ac9a05dd7ab16e998625037aa242cd30f"><div class="ttname"><a href="namespaceSVF.html#ac9a05dd7ab16e998625037aa242cd30f">SVF::BranchInst</a></div><div class="ttdeci">llvm::BranchInst BranchInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00152">BasicTypes.h:152</a></div></div>
|
|
1860
1860
|
<div class="ttc" id="aclassSVF_1_1SVFFunction_html_a067bd6dbaf74a028d546fa56b095791b"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a067bd6dbaf74a028d546fa56b095791b">SVF::SVFFunction::getAnnotations</a></div><div class="ttdeci">const std::vector< std::string > & getAnnotations() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00466">SVFValue.h:466</a></div></div>
|
|
1861
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a99eaaef89f214fc8587349361600b44d"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a99eaaef89f214fc8587349361600b44d">SVF::ObjTypeInference::typeSizeDiffTest</a></div><div class="ttdeci">void typeSizeDiffTest(const PointerType *oPTy, const Type *iTy, const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
1861
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_a99eaaef89f214fc8587349361600b44d"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#a99eaaef89f214fc8587349361600b44d">SVF::ObjTypeInference::typeSizeDiffTest</a></div><div class="ttdeci">void typeSizeDiffTest(const PointerType *oPTy, const Type *iTy, const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00532">ObjTypeInference.cpp:532</a></div></div>
|
|
1862
1862
|
<div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_ac1a9d20d62066ec4e181fad223669e32"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ac1a9d20d62066ec4e181fad223669e32">SVF::LLVMModuleSet::getContext</a></div><div class="ttdeci">LLVMContext & getContext() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00332">LLVMModule.h:332</a></div></div>
|
|
1863
1863
|
<div class="ttc" id="aclassSVF_1_1SymbolTableBuilder_html_a4eebcc8dc7f23ead07c64bf523d0e68e"><div class="ttname"><a href="classSVF_1_1SymbolTableBuilder.html#a4eebcc8dc7f23ead07c64bf523d0e68e">SVF::SymbolTableBuilder::getTypeInference</a></div><div class="ttdeci">ObjTypeInference * getTypeInference()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableBuilder_8cpp_source.html#l00574">SymbolTableBuilder.cpp:574</a></div></div>
|
|
1864
1864
|
<div class="ttc" id="anamespaceSVF_html_a146d286041987860388da3d8bc85cee3"><div class="ttname"><a href="namespaceSVF.html#a146d286041987860388da3d8bc85cee3">SVF::ArrayType</a></div><div class="ttdeci">llvm::ArrayType ArrayType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00093">BasicTypes.h:93</a></div></div>
|
|
@@ -1922,7 +1922,7 @@ Friends</h2></td></tr>
|
|
|
1922
1922
|
<div class="ttc" id="aclassSVF_1_1SymbolTableBuilder_html_a42c69bc9ee71cc0ff322c1701b7e07bd"><div class="ttname"><a href="classSVF_1_1SymbolTableBuilder.html#a42c69bc9ee71cc0ff322c1701b7e07bd">SVF::SymbolTableBuilder::collectSVFTypeInfo</a></div><div class="ttdeci">void collectSVFTypeInfo(const Value *val)</div><div class="ttdoc">collect the syms</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableBuilder_8cpp_source.html#l00240">SymbolTableBuilder.cpp:240</a></div></div>
|
|
1923
1923
|
<div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs()</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00050">SVFUtil.h:50</a></div></div>
|
|
1924
1924
|
<div class="ttc" id="anamespaceSVF_html_afc1b50355821e7299df03b026e36f1df"><div class="ttname"><a href="namespaceSVF.html#afc1b50355821e7299df03b026e36f1df">SVF::User</a></div><div class="ttdeci">llvm::User User</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00140">BasicTypes.h:140</a></div></div>
|
|
1925
|
-
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_afe926ee3427bb329d189e0c40bb1cd60"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#afe926ee3427bb329d189e0c40bb1cd60">SVF::ObjTypeInference::validateTypeCheck</a></div><div class="ttdeci">void validateTypeCheck(const CallBase *cs)</div><div class="ttdoc">Validate type inference.</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#
|
|
1925
|
+
<div class="ttc" id="aclassSVF_1_1ObjTypeInference_html_afe926ee3427bb329d189e0c40bb1cd60"><div class="ttname"><a href="classSVF_1_1ObjTypeInference.html#afe926ee3427bb329d189e0c40bb1cd60">SVF::ObjTypeInference::validateTypeCheck</a></div><div class="ttdeci">void validateTypeCheck(const CallBase *cs)</div><div class="ttdoc">Validate type inference.</div><div class="ttdef"><b>Definition:</b> <a href="ObjTypeInference_8cpp_source.html#l00507">ObjTypeInference.cpp:507</a></div></div>
|
|
1926
1926
|
<div class="ttc" id="anamespaceSVF_html_ad11fe2412b2182365a662ff0e4639b48"><div class="ttname"><a href="namespaceSVF.html#ad11fe2412b2182365a662ff0e4639b48">SVF::SymID</a></div><div class="ttdeci">unsigned SymID</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00058">SVFType.h:58</a></div></div>
|
|
1927
1927
|
<div class="ttc" id="aclassllvm_1_1generic__bridge__gep__type__iterator_html"><div class="ttname"><a href="classllvm_1_1generic__bridge__gep__type__iterator.html">llvm::generic_bridge_gep_type_iterator</a></div><div class="ttdef"><b>Definition:</b> <a href="GEPTypeBridgeIterator_8h_source.html#l00017">GEPTypeBridgeIterator.h:17</a></div></div>
|
|
1928
1928
|
<div class="ttc" id="aclassSVF_1_1ObjTypeInfo_html_aaffd94b311238f183031a525376c55a2"><div class="ttname"><a href="classSVF_1_1ObjTypeInfo.html#aaffd94b311238f183031a525376c55a2">SVF::ObjTypeInfo::getType</a></div><div class="ttdeci">const SVFType * getType() const</div><div class="ttdoc">Get LLVM type.</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00527">SymbolTableInfo.h:527</a></div></div>
|
|
@@ -117,8 +117,8 @@ $(function() {
|
|
|
117
117
|
<li>selectClient()
|
|
118
118
|
: <a class="el" href="classSVF_1_1DDAPass.html#aa33694e0b5f30c451c229e92877e4842">SVF::DDAPass</a>
|
|
119
119
|
</li>
|
|
120
|
-
<li>
|
|
121
|
-
: <a class="el" href="classSVF_1_1ObjTypeInference.html#
|
|
120
|
+
<li>selectLargestSizedType()
|
|
121
|
+
: <a class="el" href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">SVF::ObjTypeInference</a>
|
|
122
122
|
</li>
|
|
123
123
|
<li>SelectStmt()
|
|
124
124
|
: <a class="el" href="classSVF_1_1SelectStmt.html#a995baa18cc36d0671be3e98761f9879a">SVF::SelectStmt</a>
|
|
@@ -182,8 +182,8 @@ $(function() {
|
|
|
182
182
|
<li>selectedValidationScenarios
|
|
183
183
|
: <a class="el" href="classSVF_1_1RaceResultValidator.html#a1294cb90b073ba25a8ffc06180c09419">SVF::RaceResultValidator</a>
|
|
184
184
|
</li>
|
|
185
|
-
<li>
|
|
186
|
-
: <a class="el" href="classSVF_1_1ObjTypeInference.html#
|
|
185
|
+
<li>selectLargestSizedType()
|
|
186
|
+
: <a class="el" href="classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319">SVF::ObjTypeInference</a>
|
|
187
187
|
</li>
|
|
188
188
|
<li>SelectStmt()
|
|
189
189
|
: <a class="el" href="classSVF_1_1SelectStmt.html#a995baa18cc36d0671be3e98761f9879a">SVF::SelectStmt</a>
|
|
@@ -53,7 +53,7 @@ var searchData=
|
|
|
53
53
|
['selectclient_5237',['selectClient',['../classSVF_1_1DDAPass.html#aa33694e0b5f30c451c229e92877e4842',1,'SVF::DDAPass']]],
|
|
54
54
|
['selectedvalidationscenarios_5238',['selectedValidationScenarios',['../classSVF_1_1RaceResultValidator.html#a1294cb90b073ba25a8ffc06180c09419',1,'SVF::RaceResultValidator']]],
|
|
55
55
|
['selectinst_5239',['SelectInst',['../namespaceSVF.html#ab7fac9d4a4839be445c89777e21bc307',1,'SVF']]],
|
|
56
|
-
['
|
|
56
|
+
['selectlargestsizedtype_5240',['selectLargestSizedType',['../classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319',1,'SVF::ObjTypeInference']]],
|
|
57
57
|
['selectstmt_5241',['SelectStmt',['../classSVF_1_1SelectStmt.html',1,'SVF::SelectStmt'],['../classSVF_1_1SelectStmt.html#a995baa18cc36d0671be3e98761f9879a',1,'SVF::SelectStmt::SelectStmt()'],['../classSVF_1_1SelectStmt.html#ad51a542e72f165abbba9d3242db1bea6',1,'SVF::SelectStmt::SelectStmt(const SelectStmt &)'],['../classSVF_1_1SelectStmt.html#af3ffdfb0b260754b64250f980c065198',1,'SVF::SelectStmt::SelectStmt(SVFVar *s, const OPVars &opnds, const SVFVar *cond)']]],
|
|
58
58
|
['selfcycle_5242',['SelfCycle',['../classSVF_1_1Options.html#a9ef14f68939b7678ddff83d544e024cc',1,'SVF::Options']]],
|
|
59
59
|
['seq_5243',['SEQ',['../classSVF_1_1NodeIDAllocator.html#a8cf553cd07768aad3f3b91bf3d7c6228a85142db6ed24203f054117f3a5110e2f',1,'SVF::NodeIDAllocator']]],
|
|
@@ -15,7 +15,7 @@ var searchData=
|
|
|
15
15
|
['sccrepnode_10260',['sccRepNode',['../classSVF_1_1ConstraintGraph.html#a39b973543acdcdc5493832cc9d0f586f',1,'SVF::ConstraintGraph::sccRepNode()'],['../classSVF_1_1Andersen.html#aad706e332847e6b0892350a05028ba30',1,'SVF::Andersen::sccRepNode()'],['../classSVF_1_1WPAFSSolver.html#a0bbaffd1673cc3850217afad0ca56e42',1,'SVF::WPAFSSolver::sccRepNode()'],['../classSVF_1_1WPASolver.html#a3bd463cd456a1d58242f118328f51ddb',1,'SVF::WPASolver::sccRepNode()']]],
|
|
16
16
|
['sccsubnodes_10261',['sccSubNodes',['../classSVF_1_1ConstraintGraph.html#aed605b010e313f4b11e95b83fe50e3b3',1,'SVF::ConstraintGraph::sccSubNodes()'],['../classSVF_1_1Andersen.html#acd2feff818906db49a1bb2d94c33db5f',1,'SVF::Andersen::sccSubNodes()']]],
|
|
17
17
|
['selectclient_10262',['selectClient',['../classSVF_1_1DDAPass.html#aa33694e0b5f30c451c229e92877e4842',1,'SVF::DDAPass']]],
|
|
18
|
-
['
|
|
18
|
+
['selectlargestsizedtype_10263',['selectLargestSizedType',['../classSVF_1_1ObjTypeInference.html#a205fa59a7250270b216f47df78ef2319',1,'SVF::ObjTypeInference']]],
|
|
19
19
|
['selectstmt_10264',['SelectStmt',['../classSVF_1_1SelectStmt.html#a995baa18cc36d0671be3e98761f9879a',1,'SVF::SelectStmt::SelectStmt()'],['../classSVF_1_1SelectStmt.html#ad51a542e72f165abbba9d3242db1bea6',1,'SVF::SelectStmt::SelectStmt(const SelectStmt &)'],['../classSVF_1_1SelectStmt.html#af3ffdfb0b260754b64250f980c065198',1,'SVF::SelectStmt::SelectStmt(SVFVar *s, const OPVars &opnds, const SVFVar *cond)']]],
|
|
20
20
|
['set_10265',['set',['../classSVF_1_1CondStdSet.html#ae11deddad534be115d29daad08c90599',1,'SVF::CondStdSet::set()'],['../classSVF_1_1CondPointsToSet.html#aadf2576b55bbdb82d7affc8466c09861',1,'SVF::CondPointsToSet::set()'],['../classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa',1,'SVF::PointsTo::set()'],['../classSVF_1_1CoreBitVector.html#a553e3e51bffe1aab04adc047e0fd3f24',1,'SVF::CoreBitVector::set()'],['../structSVF_1_1SparseBitVectorElement.html#a094acafea02f3c117445267e75c9a629',1,'SVF::SparseBitVectorElement::set()'],['../classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832',1,'SVF::SparseBitVector::set()'],['../WPA_2CMakeLists_8txt.html#a5b660868031b6dee85d01fea51ef09a5',1,'set(): CMakeLists.txt']]],
|
|
21
21
|
['set_5fminus_5finfinite_10266',['set_minus_infinite',['../classSVF_1_1BoundedZ3Expr.html#ae76bf19d580cbc12a40f7c1823165178',1,'SVF::BoundedZ3Expr']]],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.863",
|
|
4
4
|
"description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -99,7 +99,7 @@ private:
|
|
|
99
99
|
|
|
100
100
|
public:
|
|
101
101
|
/// Select the largest (conservative) type from all types
|
|
102
|
-
const Type *
|
|
102
|
+
const Type *selectLargestSizedType(Set<const Type *> &objTys);
|
|
103
103
|
|
|
104
104
|
u32_t objTyToNumFields(const Type *objTy);
|
|
105
105
|
|
|
@@ -140,7 +140,7 @@ const Type *ObjTypeInference::inferObjType(const Value *startValue)
|
|
|
140
140
|
{
|
|
141
141
|
types.insert(fwInferObjType(source));
|
|
142
142
|
}
|
|
143
|
-
const Type *largestTy =
|
|
143
|
+
const Type *largestTy = selectLargestSizedType(types);
|
|
144
144
|
ABORT_IFNOT(largestTy, "return type cannot be null");
|
|
145
145
|
return largestTy;
|
|
146
146
|
}
|
|
@@ -181,7 +181,7 @@ const Type *ObjTypeInference::fwInferObjType(const Value *startValue)
|
|
|
181
181
|
auto vIt = _valueToInferSites.find(pUser);
|
|
182
182
|
if (canUpdate)
|
|
183
183
|
{
|
|
184
|
-
if (vIt != _valueToInferSites.end()
|
|
184
|
+
if (vIt != _valueToInferSites.end())
|
|
185
185
|
{
|
|
186
186
|
infersites.insert(vIt->second.begin(), vIt->second.end());
|
|
187
187
|
}
|
|
@@ -352,12 +352,10 @@ const Type *ObjTypeInference::fwInferObjType(const Value *startValue)
|
|
|
352
352
|
if (canUpdate)
|
|
353
353
|
{
|
|
354
354
|
Set<const Type *> types;
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
_valueToInferSites[curValue] = infersites;
|
|
360
|
-
_valueToType[curValue] = selectLargestType(types);
|
|
355
|
+
std::transform(infersites.begin(), infersites.end(), std::inserter(types, types.begin()),
|
|
356
|
+
infersiteToType);
|
|
357
|
+
_valueToInferSites[curValue] = SVFUtil::move(infersites);
|
|
358
|
+
_valueToType[curValue] = selectLargestSizedType(types);
|
|
361
359
|
}
|
|
362
360
|
}
|
|
363
361
|
const Type *type = _valueToType[startValue];
|
|
@@ -408,7 +406,7 @@ Set<const Value *> ObjTypeInference::bwfindAllocations(const Value *startValue)
|
|
|
408
406
|
auto vIt = _valueToAllocs.find(pUser);
|
|
409
407
|
if (canUpdate)
|
|
410
408
|
{
|
|
411
|
-
if (vIt != _valueToAllocs.end()
|
|
409
|
+
if (vIt != _valueToAllocs.end())
|
|
412
410
|
{
|
|
413
411
|
sources.insert(vIt->second.begin(), vIt->second.end());
|
|
414
412
|
}
|
|
@@ -484,7 +482,7 @@ Set<const Value *> ObjTypeInference::bwfindAllocations(const Value *startValue)
|
|
|
484
482
|
}
|
|
485
483
|
if (canUpdate)
|
|
486
484
|
{
|
|
487
|
-
_valueToAllocs[curValue] = sources;
|
|
485
|
+
_valueToAllocs[curValue] = SVFUtil::move(sources);
|
|
488
486
|
}
|
|
489
487
|
}
|
|
490
488
|
Set<const Value *> srcs = _valueToAllocs[startValue];
|
|
@@ -554,17 +552,17 @@ u32_t ObjTypeInference::getArgPosInCall(const CallBase *callBase, const Value *a
|
|
|
554
552
|
}
|
|
555
553
|
|
|
556
554
|
|
|
557
|
-
const Type *ObjTypeInference::
|
|
555
|
+
const Type *ObjTypeInference::selectLargestSizedType(Set<const Type *> &objTys)
|
|
558
556
|
{
|
|
559
557
|
if (objTys.empty()) return nullptr;
|
|
560
558
|
// map type size to types from with key in descending order
|
|
561
|
-
OrderedMap<u32_t,
|
|
559
|
+
OrderedMap<u32_t, OrderedSet<const Type *>, std::greater<int>> typeSzToTypes;
|
|
562
560
|
for (const Type *ty: objTys)
|
|
563
561
|
{
|
|
564
562
|
typeSzToTypes[objTyToNumFields(ty)].insert(ty);
|
|
565
563
|
}
|
|
566
564
|
assert(!typeSzToTypes.empty() && "typeSzToTypes cannot be empty");
|
|
567
|
-
|
|
565
|
+
OrderedSet<const Type *> largestTypes;
|
|
568
566
|
std::tie(std::ignore, largestTypes) = *typeSzToTypes.begin();
|
|
569
567
|
assert(!largestTypes.empty() && "largest element cannot be empty");
|
|
570
568
|
return *largestTypes.begin();
|