Merge "Prevent NULL dereference g_impl not initialized"
diff --git a/JniInvocation.c b/JniInvocation.c
index 222ec6a..9cfb084 100644
--- a/JniInvocation.c
+++ b/JniInvocation.c
@@ -87,14 +87,20 @@
 //
 
 jint JNI_GetDefaultJavaVMInitArgs(void* vmargs) {
+  ALOG_ALWAYS_FATAL_IF(NULL == g_impl.JNI_GetDefaultJavaVMInitArgs, "Runtime library not loaded.");
   return g_impl.JNI_GetDefaultJavaVMInitArgs(vmargs);
 }
 
 jint JNI_CreateJavaVM(JavaVM** p_vm, JNIEnv** p_env, void* vm_args) {
+  ALOG_ALWAYS_FATAL_IF(NULL == g_impl.JNI_CreateJavaVM, "Runtime library not loaded.");
   return g_impl.JNI_CreateJavaVM(p_vm, p_env, vm_args);
 }
 
 jint JNI_GetCreatedJavaVMs(JavaVM** vms, jsize size, jsize* vm_count) {
+  if (NULL == g_impl.JNI_GetCreatedJavaVMs) {
+    *vm_count = 0;
+    return JNI_OK;
+  }
   return g_impl.JNI_GetCreatedJavaVMs(vms, size, vm_count);
 }
 
diff --git a/tests/Android.bp b/tests/Android.bp
index 9ac1260..89dbaf9 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -41,9 +41,6 @@
         // Enable warning of converting ints to void*.
         "-Wint-to-void-pointer-cast",
 
-        // Enable warning of wrong unused annotations.
-        "-Wused-but-marked-unused",
-
         // Enable warning for deprecated language features.
         "-Wdeprecated",
 
diff --git a/tests/JniInvocation_test.cpp b/tests/JniInvocation_test.cpp
index cc18032..783eddf 100644
--- a/tests/JniInvocation_test.cpp
+++ b/tests/JniInvocation_test.cpp
@@ -17,8 +17,8 @@
 #include "../JniInvocation-priv.h"
 
 #include <gtest/gtest.h>
+#include <jni.h>
 
-#include "string.h"
 
 static const char* kDefaultJniInvocationLibrary = "libart.so";
 static const char* kTestNonNull = "libartd.so";
@@ -51,3 +51,21 @@
     result = JniInvocationGetLibraryWith(nullptr, false, nullptr);
     EXPECT_STREQ(result, kDefaultJniInvocationLibrary);
 }
+
+TEST(JNIInvocation, GetDefaultJavaVMInitArgsBeforeInit) {
+    EXPECT_DEATH(JNI_GetDefaultJavaVMInitArgs(nullptr), "Runtime library not loaded.");
+}
+
+TEST(JNIInvocation, CreateJavaVMBeforeInit) {
+    JavaVM *vm;
+    JNIEnv *env;
+    EXPECT_DEATH(JNI_CreateJavaVM(&vm, &env, nullptr), "Runtime library not loaded.");
+}
+
+TEST(JNIInvocation, GetCreatedJavaVMsBeforeInit) {
+    jsize vm_count;
+    JavaVM *vm;
+    int status = JNI_GetCreatedJavaVMs(&vm, 1, &vm_count);
+    EXPECT_EQ(status, JNI_OK);
+    EXPECT_EQ(vm_count, 0);
+}