Merge "Check and propogate errors from llvm." into honeycomb

This commit is contained in:
Jason Sams
2011-01-19 16:49:17 -08:00
committed by Android (Google) Code Review
3 changed files with 19 additions and 11 deletions

View File

@@ -56,6 +56,9 @@ public class ScriptC extends Script {
protected ScriptC(RenderScript rs, Resources resources, int resourceID) { protected ScriptC(RenderScript rs, Resources resources, int resourceID) {
super(0, rs); super(0, rs);
int id = internalCreate(rs, resources, resourceID); int id = internalCreate(rs, resources, resourceID);
if (id == 0) {
throw new RSRuntimeException("Loading of ScriptC script failed.");
}
setID(id); setID(id);
} }

View File

@@ -467,7 +467,7 @@ extern const char rs_runtime_lib_bc[];
extern unsigned rs_runtime_lib_bc_size; extern unsigned rs_runtime_lib_bc_size;
#endif #endif
void ScriptCState::runCompiler(Context *rsc, bool ScriptCState::runCompiler(Context *rsc,
ScriptC *s, ScriptC *s,
const char *resName, const char *resName,
const char *cacheDir) { const char *cacheDir) {
@@ -482,7 +482,7 @@ void ScriptCState::runCompiler(Context *rsc,
s->mEnviroment.mScriptText, s->mEnviroment.mScriptText,
s->mEnviroment.mScriptTextLength, 0) != 0) { s->mEnviroment.mScriptTextLength, 0) != 0) {
LOGE("bcc: FAILS to read bitcode"); LOGE("bcc: FAILS to read bitcode");
// Handle Fatal Error return false;
} }
#if 1 #if 1
@@ -493,14 +493,14 @@ void ScriptCState::runCompiler(Context *rsc,
/*"1" means skip buffer here, and let libbcc decide*/, /*"1" means skip buffer here, and let libbcc decide*/,
0) != 0) { 0) != 0) {
LOGE("bcc: FAILS to link bitcode"); LOGE("bcc: FAILS to link bitcode");
// Handle Fatal Error return false;
} }
#endif #endif
char *cachePath = genCacheFileName(cacheDir, resName, ".oBCC"); char *cachePath = genCacheFileName(cacheDir, resName, ".oBCC");
if (bccPrepareExecutable(s->mBccScript, cachePath, 0) != 0) { if (bccPrepareExecutable(s->mBccScript, cachePath, 0) != 0) {
LOGE("bcc: FAILS to prepare executable"); LOGE("bcc: FAILS to prepare executable");
// Handle Fatal Error return false;
} }
free(cachePath); free(cachePath);
@@ -547,7 +547,7 @@ void ScriptCState::runCompiler(Context *rsc,
continue; continue;
} }
LOGE("Invalid version pragma value: %s\n", values[i]); LOGE("Invalid version pragma value: %s\n", values[i]);
// Handle Fatal Error return false;
} }
if (!strcmp(keys[i], "stateVertex")) { if (!strcmp(keys[i], "stateVertex")) {
@@ -559,7 +559,7 @@ void ScriptCState::runCompiler(Context *rsc,
continue; continue;
} }
LOGE("Unrecognized value %s passed to stateVertex", values[i]); LOGE("Unrecognized value %s passed to stateVertex", values[i]);
// Handle Fatal Error return false;
} }
if (!strcmp(keys[i], "stateRaster")) { if (!strcmp(keys[i], "stateRaster")) {
@@ -571,7 +571,7 @@ void ScriptCState::runCompiler(Context *rsc,
continue; continue;
} }
LOGE("Unrecognized value %s passed to stateRaster", values[i]); LOGE("Unrecognized value %s passed to stateRaster", values[i]);
// Handle Fatal Error return false;
} }
if (!strcmp(keys[i], "stateFragment")) { if (!strcmp(keys[i], "stateFragment")) {
@@ -583,7 +583,7 @@ void ScriptCState::runCompiler(Context *rsc,
continue; continue;
} }
LOGE("Unrecognized value %s passed to stateFragment", values[i]); LOGE("Unrecognized value %s passed to stateFragment", values[i]);
// Handle Fatal Error return false;
} }
if (!strcmp(keys[i], "stateStore")) { if (!strcmp(keys[i], "stateStore")) {
@@ -595,9 +595,10 @@ void ScriptCState::runCompiler(Context *rsc,
continue; continue;
} }
LOGE("Unrecognized value %s passed to stateStore", values[i]); LOGE("Unrecognized value %s passed to stateStore", values[i]);
// Handle Fatal Error return false;
} }
} }
return true;
} }
namespace android { namespace android {
@@ -630,7 +631,11 @@ RsScript rsi_ScriptCCreate(Context *rsc,
ss->mScript.clear(); ss->mScript.clear();
s->incUserRef(); s->incUserRef();
ss->runCompiler(rsc, s.get(), resName, cacheDir); if (!ss->runCompiler(rsc, s.get(), resName, cacheDir)) {
// Error during compile, destroy s and return null.
s->zeroUserRef();
return NULL;
}
ss->clear(rsc); ss->clear(rsc);
return s.get(); return s.get();
} }

View File

@@ -81,7 +81,7 @@ public:
void init(Context *rsc); void init(Context *rsc);
void clear(Context *rsc); void clear(Context *rsc);
void runCompiler(Context *rsc, ScriptC *s, const char *resName, const char *cacheDir); bool runCompiler(Context *rsc, ScriptC *s, const char *resName, const char *cacheDir);
struct SymbolTable_t { struct SymbolTable_t {
const char * mName; const char * mName;