[FIX] [HIPIFY] Matcher for new operator is missing.

https://github.com/GPUOpen-ProfessionalCompute-Tools/HIP/issues/80

Example from CUDA 8.0.44 sample (CUDASamples\0_Simple\matrixMulDrv\matrixMulDrv.cpp):
    CUjit_option *jitOptions = new CUjit_option[jitNumOptions];
where CUjit_option is enum, should be:
    hipJitOption *jitOptions = new hipJitOption[jitNumOptions];
Этот коммит содержится в:
Evgeny Mankov
2017-05-23 19:45:38 +03:00
родитель 0559fc69e9
Коммит 3d973dc4da
+37
Просмотреть файл
@@ -3095,6 +3095,35 @@ private:
return false;
}
bool cudaNewOperatorDecl(const MatchFinder::MatchResult &Result) {
if (const auto *newOperator = Result.Nodes.getNodeAs<CXXNewExpr>("cudaNewOperatorDecl")) {
const Type *t = newOperator->getType().getTypePtrOrNull();
if (t) {
SourceManager *SM = Result.SourceManager;
TypeLoc TL = newOperator->getAllocatedTypeSourceInfo()->getTypeLoc();
SourceLocation sl = TL.getUnqualifiedLoc().getLocStart();
QualType QT = t->getPointeeType();
std::string name = QT.getAsString();
const auto found = N.cuda2hipRename.find(name);
if (found != N.cuda2hipRename.end()) {
updateCounters(found->second, name);
if (!found->second.unsupported) {
StringRef repName = found->second.hipName;
Replacement Rep(*SM, sl, name.size(), repName);
FullSourceLoc fullSL(sl, *SM);
insertReplacement(Rep, fullSL);
}
}
else {
std::string msg = "the following reference is not handled: '" + name + "' [new operator].";
printHipifyMessage(*SM, sl, msg);
}
}
}
return false;
}
bool cudaSharedIncompleteArrayVar(const MatchFinder::MatchResult &Result) {
StringRef refName = "cudaSharedIncompleteArrayVar";
if (const VarDecl *sharedVar = Result.Nodes.getNodeAs<VarDecl>(refName)) {
@@ -3239,6 +3268,7 @@ public:
if (cudaParamDecl(Result)) break;
if (cudaParamDeclPtr(Result)) break;
if (cudaLaunchKernel(Result)) break;
if (cudaNewOperatorDecl(Result)) break;
if (cudaSharedIncompleteArrayVar(Result)) break;
if (stringLiteral(Result)) break;
if (unresolvedTemplateName(Result)) break;
@@ -3336,6 +3366,13 @@ void addAllMatchers(ast_matchers::MatchFinder &Finder, Cuda2HipCallback *Callbac
hasType(incompleteArrayType())))
.bind("cudaSharedIncompleteArrayVar"),
Callback);
// Example:
// CUjit_option *jitOptions = new CUjit_option[jitNumOptions];
// hipJitOption *jitOptions = new hipJitOption[jitNumOptions];
Finder.addMatcher(cxxNewExpr(isExpansionInMainFile(),
hasType(pointsTo(namedDecl(matchesName("cu.*|CU.*")))))
.bind("cudaNewOperatorDecl"),
Callback);
}
int64_t printStats(const std::string &csvFile, const std::string &srcFile,