@@ -1457,48 +1457,62 @@ std::string Option{"Config"};
1457
1457
Mgr->getAnalyzerOptions().getCheckerStringOption(this, Option);*/
1458
1458
StringRef ConfigFile = " /local/workspace/llvm-project/clang/test/Analysis/Inputs/fread-summary.yaml" ;
1459
1459
llvm::Optional<SummaryConfiguration> Config =
1460
- getConfiguration<SummaryConfiguration>(*Mgr, this , Option, ConfigFile);
1461
- llvm::errs ()<<" Config :" <<Config.hasValue ()<<" \n " ;
1462
- if (Config.has_value ()){
1463
- for (const SummaryConfiguration::Summary &s : Config->summaries ){
1464
- llvm::errs ()<<" Config :" <<s.name <<" \n " ;
1465
-
1466
- ArgTypes args;
1467
- for (const std::string &t: s.signature .argTypes ){
1468
- auto ltype = lookupTy (t);
1469
- if (ltype.has_value ()){
1470
- llvm::errs ()<<" type string:" <<t<<" \n " ;
1471
- ltype->dump ();
1472
- args.push_back (lookupTy (t));
1473
- }
1460
+ getConfiguration<SummaryConfiguration>(*Mgr, this , Option, ConfigFile);
1461
+ llvm::errs () << " Config :" << Config.has_value () << " \n " ;
1462
+
1463
+ auto GetTypeFromStr = [&](StringRef TypeName) {
1464
+ Optional<QualType> LType = lookupTy (TypeName);
1465
+ if (LType)
1466
+ return *LType;
1467
+
1468
+ return llvm::StringSwitch<QualType>(TypeName)
1469
+ .Case (" void *" , VoidPtrTy)
1470
+ .Case (" void * restrict" , VoidPtrRestrictTy)
1471
+ .Default (Irrelevant);
1472
+ };
1473
+
1474
+ if (Config.has_value ()) {
1475
+ for (const SummaryConfiguration::Summary &s : Config->summaries ) {
1476
+ ArgTypes Args;
1477
+ for (const std::string &TypeName : s.signature .argTypes ) {
1478
+ llvm::errs () << " arg type string:" << TypeName << " \n " ;
1479
+ QualType Type = GetTypeFromStr (TypeName);
1480
+ llvm::errs () << " arg type dump:" ;
1481
+ Type.dump ();
1482
+ llvm::errs () << " \n " ;
1483
+
1484
+ Args.push_back (Type);
1474
1485
}
1475
- RetType rt = lookupTy (s.signature .returnType );
1476
- auto GetSummary = [s]() {
1486
+
1487
+ const std::string &RetTypeName = s.signature .returnType ;
1488
+ llvm::errs () << " ret type string:" << RetTypeName << " \n " ;
1489
+ QualType RetType = GetTypeFromStr (RetTypeName);
1490
+ llvm::errs () << " ret type dump:" ;
1491
+
1492
+ auto GetSummary = [&s]() {
1477
1493
switch (s.evaluationType ) {
1478
1494
case SummaryConfiguration::EvaluationType::NoEvalCall:
1479
1495
return Summary (NoEvalCall);
1480
1496
case SummaryConfiguration::EvaluationType::EvalCallAsPure:
1481
1497
return Summary (EvalCallAsPure);
1482
1498
}
1483
1499
};
1500
+
1484
1501
Summary summary = GetSummary ();
1485
1502
1486
- for (const SummaryConfiguration::ArgConstraint &ac: s.argConstraints ){
1487
- switch (ac.type ){
1488
- case SummaryConfiguration::ArgConstraintType::NotNull:
1489
- summary.ArgConstraint (NotNull (ac.arg ));
1490
- break ;
1491
- case SummaryConfiguration::ArgConstraintType::BufferSize:
1492
- summary.ArgConstraint (BufferSize (ac.bufferArg ,ac.sizeArg , ac.countArg ));
1493
- break ;
1503
+ for (const SummaryConfiguration::ArgConstraint &AC : s.argConstraints ) {
1504
+ switch (AC.type ) {
1505
+ case SummaryConfiguration::ArgConstraintType::NotNull:
1506
+ summary.ArgConstraint (NotNull (AC.arg ));
1507
+ break ;
1508
+ case SummaryConfiguration::ArgConstraintType::BufferSize:
1509
+ summary.ArgConstraint (
1510
+ BufferSize (AC.bufferArg , AC.sizeArg , AC.countArg ));
1511
+ break ;
1494
1512
}
1495
1513
}
1496
1514
1497
- addToFunctionSummaryMap (
1498
- s.name ,
1499
- Signature (args,
1500
- rt),
1501
- summary);
1515
+ addToFunctionSummaryMap (s.name , Signature (Args, RetType), summary);
1502
1516
}
1503
1517
}
1504
1518
/*
0 commit comments