Add RS-specific check forbidding array parameters in exported functions.
BUG=6902660
Change-Id: I31f0f2b51026edf450e920a5dd49810f4b191eb0
diff --git a/slang_rs_backend.cpp b/slang_rs_backend.cpp
index 2ccb2ad..d0b067e 100644
--- a/slang_rs_backend.cpp
+++ b/slang_rs_backend.cpp
@@ -104,6 +104,20 @@
for (clang::DeclGroupRef::iterator I = D.begin(), E = D.end(); I != E; I++) {
clang::FunctionDecl *FD = llvm::dyn_cast<clang::FunctionDecl>(*I);
if (FD && FD->isGlobal()) {
+ // Check that we don't have any array parameters being misintrepeted as
+ // kernel pointers due to the C type system's array to pointer decay.
+ size_t numParams = FD->getNumParams();
+ for (size_t i = 0; i < numParams; i++) {
+ const clang::ParmVarDecl *PVD = FD->getParamDecl(i);
+ clang::QualType QT = PVD->getOriginalType();
+ if (QT->isArrayType()) {
+ mDiagEngine.Report(
+ clang::FullSourceLoc(PVD->getTypeSpecStartLoc(), mSourceMgr),
+ mDiagEngine.getCustomDiagID(clang::DiagnosticsEngine::Error,
+ "exported function parameters may "
+ "not have array type: %0")) << QT;
+ }
+ }
AnnotateFunction(FD);
}
}