diff options
author | Stephen Hines <srhines@google.com> | 2012-08-04 15:13:40 -0700 |
---|---|---|
committer | Stephen Hines <srhines@google.com> | 2012-08-04 15:15:29 -0700 |
commit | ab5a535b290d898d0c56036f642d823e3472a804 (patch) | |
tree | c8f0e54ebe6722c028a0290696c17b8a60eb1f5a | |
parent | 0a813a3ef2a82f19d7eab9e23ae8493197143803 (diff) | |
download | android_frameworks_compile_slang-ab5a535b290d898d0c56036f642d823e3472a804.tar.gz android_frameworks_compile_slang-ab5a535b290d898d0c56036f642d823e3472a804.tar.bz2 android_frameworks_compile_slang-ab5a535b290d898d0c56036f642d823e3472a804.zip |
Add RS-specific check forbidding array parameters in exported functions.
BUG=6902660
Change-Id: I31f0f2b51026edf450e920a5dd49810f4b191eb0
-rw-r--r-- | slang_rs_backend.cpp | 14 | ||||
-rw-r--r-- | tests/F_const_array_arg/stderr.txt.expect | 2 |
2 files changed, 15 insertions, 1 deletions
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 @@ bool RSBackend::HandleTopLevelDecl(clang::DeclGroupRef D) { 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); } } diff --git a/tests/F_const_array_arg/stderr.txt.expect b/tests/F_const_array_arg/stderr.txt.expect index 1572005..9b7ad1d 100644 --- a/tests/F_const_array_arg/stderr.txt.expect +++ b/tests/F_const_array_arg/stderr.txt.expect @@ -1 +1 @@ -const_array_arg.rs:4:10: error: parameters may not have array type: 'float [3]' +const_array_arg.rs:4:10: error: exported function parameters may not have array type: 'float [3]' |