diff --git a/tests/F_one_definition_rule1/def1.rs b/tests/F_one_definition_rule1/def1.rs
new file mode 100644
index 0000000..7b0b225
--- /dev/null
+++ b/tests/F_one_definition_rule1/def1.rs
@@ -0,0 +1,9 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different number of members
+typedef struct DifferentDefinition1{
+	int member1;
+} DifferentDefinition1;
+
+DifferentDefinition1 o1;
diff --git a/tests/F_one_definition_rule1/def2.rs b/tests/F_one_definition_rule1/def2.rs
new file mode 100644
index 0000000..f770a5e
--- /dev/null
+++ b/tests/F_one_definition_rule1/def2.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different number of members
+typedef struct DifferentDefinition1{
+	int member1;
+	float member2;
+} DifferentDefinition1;
+
+DifferentDefinition1 o1;
diff --git a/tests/F_one_definition_rule1/stderr.txt.expect b/tests/F_one_definition_rule1/stderr.txt.expect
new file mode 100644
index 0000000..326c544
--- /dev/null
+++ b/tests/F_one_definition_rule1/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition1' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/tests/F_one_definition_rule1/stdout.txt.expect b/tests/F_one_definition_rule1/stdout.txt.expect
new file mode 100644
index 0000000..497e947
--- /dev/null
+++ b/tests/F_one_definition_rule1/stdout.txt.expect
@@ -0,0 +1,4 @@
+Generating ScriptC_def1.java ...
+Generating ScriptField_DifferentDefinition1.java ...
+Generating ScriptC_def2.java ...
+Generating ScriptField_DifferentDefinition1.java ...
diff --git a/tests/F_one_definition_rule2/def1.rs b/tests/F_one_definition_rule2/def1.rs
new file mode 100644
index 0000000..7c8cd97
--- /dev/null
+++ b/tests/F_one_definition_rule2/def1.rs
@@ -0,0 +1,9 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different number of members
+typedef struct DifferentDefinition2{
+	int member1;
+} DifferentDefinition2;
+
+DifferentDefinition2 o2;
diff --git a/tests/F_one_definition_rule2/def2.rs b/tests/F_one_definition_rule2/def2.rs
new file mode 100644
index 0000000..1d64772
--- /dev/null
+++ b/tests/F_one_definition_rule2/def2.rs
@@ -0,0 +1,8 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different number of members
+typedef struct DifferentDefinition2{
+} DifferentDefinition2;
+
+DifferentDefinition2 o2;
diff --git a/tests/F_one_definition_rule2/stderr.txt.expect b/tests/F_one_definition_rule2/stderr.txt.expect
new file mode 100644
index 0000000..a5f7a4f
--- /dev/null
+++ b/tests/F_one_definition_rule2/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition2' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/tests/F_one_definition_rule2/stdout.txt.expect b/tests/F_one_definition_rule2/stdout.txt.expect
new file mode 100644
index 0000000..b483b4b
--- /dev/null
+++ b/tests/F_one_definition_rule2/stdout.txt.expect
@@ -0,0 +1,4 @@
+Generating ScriptC_def1.java ...
+Generating ScriptField_DifferentDefinition2.java ...
+Generating ScriptC_def2.java ...
+Generating ScriptField_DifferentDefinition2.java ...
diff --git a/tests/F_one_definition_rule3/def1.rs b/tests/F_one_definition_rule3/def1.rs
new file mode 100644
index 0000000..8a8d15b
--- /dev/null
+++ b/tests/F_one_definition_rule3/def1.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different type
+typedef struct DifferentDefinition3{
+	int member1;
+	float member2;
+} DifferentDefinition3;
+
+DifferentDefinition3 o3;
diff --git a/tests/F_one_definition_rule3/def2.rs b/tests/F_one_definition_rule3/def2.rs
new file mode 100644
index 0000000..b574be3
--- /dev/null
+++ b/tests/F_one_definition_rule3/def2.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different type
+typedef struct DifferentDefinition3{
+	int member1;
+	int member2;
+} DifferentDefinition3;
+
+DifferentDefinition3 o3;
diff --git a/tests/F_one_definition_rule3/stderr.txt.expect b/tests/F_one_definition_rule3/stderr.txt.expect
new file mode 100644
index 0000000..b9c9894
--- /dev/null
+++ b/tests/F_one_definition_rule3/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition3' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/tests/F_one_definition_rule3/stdout.txt.expect b/tests/F_one_definition_rule3/stdout.txt.expect
new file mode 100644
index 0000000..3121fdc
--- /dev/null
+++ b/tests/F_one_definition_rule3/stdout.txt.expect
@@ -0,0 +1,4 @@
+Generating ScriptC_def1.java ...
+Generating ScriptField_DifferentDefinition3.java ...
+Generating ScriptC_def2.java ...
+Generating ScriptField_DifferentDefinition3.java ...
diff --git a/tests/F_one_definition_rule4/def1.rs b/tests/F_one_definition_rule4/def1.rs
new file mode 100644
index 0000000..52b6395
--- /dev/null
+++ b/tests/F_one_definition_rule4/def1.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different name
+typedef struct DifferentDefinition4{
+	int member1;
+	float member2;
+} DifferentDefinition4;
+
+DifferentDefinition4 o4;
diff --git a/tests/F_one_definition_rule4/def2.rs b/tests/F_one_definition_rule4/def2.rs
new file mode 100644
index 0000000..54157b3
--- /dev/null
+++ b/tests/F_one_definition_rule4/def2.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different name
+typedef struct DifferentDefinition4{
+	int member1;
+	float member3;
+} DifferentDefinition4;
+
+DifferentDefinition4 o4;
diff --git a/tests/F_one_definition_rule4/stderr.txt.expect b/tests/F_one_definition_rule4/stderr.txt.expect
new file mode 100644
index 0000000..93a3add
--- /dev/null
+++ b/tests/F_one_definition_rule4/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition4' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/tests/F_one_definition_rule4/stdout.txt.expect b/tests/F_one_definition_rule4/stdout.txt.expect
new file mode 100644
index 0000000..5f71ee1
--- /dev/null
+++ b/tests/F_one_definition_rule4/stdout.txt.expect
@@ -0,0 +1,4 @@
+Generating ScriptC_def1.java ...
+Generating ScriptField_DifferentDefinition4.java ...
+Generating ScriptC_def2.java ...
+Generating ScriptField_DifferentDefinition4.java ...
diff --git a/tests/F_one_definition_rule5/def1.rs b/tests/F_one_definition_rule5/def1.rs
new file mode 100644
index 0000000..203cdbe
--- /dev/null
+++ b/tests/F_one_definition_rule5/def1.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different order(POD)
+typedef struct DifferentDefinition5{
+	int member1;
+	float member2;
+} DifferentDefinition5;
+
+DifferentDefinition5 o5;
diff --git a/tests/F_one_definition_rule5/def2.rs b/tests/F_one_definition_rule5/def2.rs
new file mode 100644
index 0000000..02a76b4
--- /dev/null
+++ b/tests/F_one_definition_rule5/def2.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different order(POD)
+typedef struct DifferentDefinition5{
+	float member2;
+	int member1;
+} DifferentDefinition5;
+
+DifferentDefinition5 o5;
diff --git a/tests/F_one_definition_rule5/stderr.txt.expect b/tests/F_one_definition_rule5/stderr.txt.expect
new file mode 100644
index 0000000..ca39889
--- /dev/null
+++ b/tests/F_one_definition_rule5/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition5' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/tests/F_one_definition_rule5/stdout.txt.expect b/tests/F_one_definition_rule5/stdout.txt.expect
new file mode 100644
index 0000000..8bdc8a0
--- /dev/null
+++ b/tests/F_one_definition_rule5/stdout.txt.expect
@@ -0,0 +1,4 @@
+Generating ScriptC_def1.java ...
+Generating ScriptField_DifferentDefinition5.java ...
+Generating ScriptC_def2.java ...
+Generating ScriptField_DifferentDefinition5.java ...
diff --git a/tests/F_one_definition_rule6/def1.rs b/tests/F_one_definition_rule6/def1.rs
new file mode 100644
index 0000000..2bc8b04
--- /dev/null
+++ b/tests/F_one_definition_rule6/def1.rs
@@ -0,0 +1,11 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: mix
+typedef struct DifferentDefinition6{
+	int member1;
+	float member2;
+	float member3;
+} DifferentDefinition6;
+
+DifferentDefinition6 o6;
diff --git a/tests/F_one_definition_rule6/def2.rs b/tests/F_one_definition_rule6/def2.rs
new file mode 100644
index 0000000..7d46c56
--- /dev/null
+++ b/tests/F_one_definition_rule6/def2.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: mix
+typedef struct DifferentDefinition6{
+	float member5;
+	int member2;
+} DifferentDefinition6;
+
+DifferentDefinition6 o6;
diff --git a/tests/F_one_definition_rule6/stderr.txt.expect b/tests/F_one_definition_rule6/stderr.txt.expect
new file mode 100644
index 0000000..a127b1a
--- /dev/null
+++ b/tests/F_one_definition_rule6/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition6' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/tests/F_one_definition_rule6/stdout.txt.expect b/tests/F_one_definition_rule6/stdout.txt.expect
new file mode 100644
index 0000000..1fee5ab
--- /dev/null
+++ b/tests/F_one_definition_rule6/stdout.txt.expect
@@ -0,0 +1,4 @@
+Generating ScriptC_def1.java ...
+Generating ScriptField_DifferentDefinition6.java ...
+Generating ScriptC_def2.java ...
+Generating ScriptField_DifferentDefinition6.java ...
diff --git a/tests/F_one_definition_rule7/def1.rs b/tests/F_one_definition_rule7/def1.rs
new file mode 100644
index 0000000..1edda16
--- /dev/null
+++ b/tests/F_one_definition_rule7/def1.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different typedef
+typedef int Type1;
+typedef struct DifferentDefinition7{
+	Type1 member1;
+} DifferentDefinition7;
+
+DifferentDefinition7 o7;
diff --git a/tests/F_one_definition_rule7/def2.rs b/tests/F_one_definition_rule7/def2.rs
new file mode 100644
index 0000000..e071fb5
--- /dev/null
+++ b/tests/F_one_definition_rule7/def2.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different typedef
+typedef float Type1;
+typedef struct DifferentDefinition7{
+	Type1 member1;
+} DifferentDefinition7;
+
+DifferentDefinition7 o7;
diff --git a/tests/F_one_definition_rule7/stderr.txt.expect b/tests/F_one_definition_rule7/stderr.txt.expect
new file mode 100644
index 0000000..805d342
--- /dev/null
+++ b/tests/F_one_definition_rule7/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition7' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/tests/F_one_definition_rule7/stdout.txt.expect b/tests/F_one_definition_rule7/stdout.txt.expect
new file mode 100644
index 0000000..f205430
--- /dev/null
+++ b/tests/F_one_definition_rule7/stdout.txt.expect
@@ -0,0 +1,4 @@
+Generating ScriptC_def1.java ...
+Generating ScriptField_DifferentDefinition7.java ...
+Generating ScriptC_def2.java ...
+Generating ScriptField_DifferentDefinition7.java ...
diff --git a/tests/F_one_definition_rule8/def1.rs b/tests/F_one_definition_rule8/def1.rs
new file mode 100644
index 0000000..724776e
--- /dev/null
+++ b/tests/F_one_definition_rule8/def1.rs
@@ -0,0 +1,14 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef int Type1;
+typedef struct DifferentDefinition7{
+	Type1 member1;
+} DifferentDefinition7;
+
+// expected-error: two level
+typedef struct DifferentDefinition8{
+	struct DifferentDefinition7 member1;
+} DifferentDefinition8;
+
+DifferentDefinition8 o8;
diff --git a/tests/F_one_definition_rule8/def2.rs b/tests/F_one_definition_rule8/def2.rs
new file mode 100644
index 0000000..91d67b8
--- /dev/null
+++ b/tests/F_one_definition_rule8/def2.rs
@@ -0,0 +1,14 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef float Type1;
+typedef struct DifferentDefinition7{
+	Type1 member1;
+} DifferentDefinition7;
+
+// expected-error: two level
+typedef struct DifferentDefinition8{
+	DifferentDefinition7 member1;
+} DifferentDefinition8;
+
+DifferentDefinition8 o8;
diff --git a/tests/F_one_definition_rule8/stderr.txt b/tests/F_one_definition_rule8/stderr.txt
new file mode 100644
index 0000000..cb95533
--- /dev/null
+++ b/tests/F_one_definition_rule8/stderr.txt
@@ -0,0 +1 @@
+error: type 'DifferentDefinition8' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/tests/F_one_definition_rule8/stderr.txt.expect b/tests/F_one_definition_rule8/stderr.txt.expect
new file mode 100644
index 0000000..cb95533
--- /dev/null
+++ b/tests/F_one_definition_rule8/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition8' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/tests/F_one_definition_rule8/stdout.txt b/tests/F_one_definition_rule8/stdout.txt
new file mode 100644
index 0000000..cb2c1e0
--- /dev/null
+++ b/tests/F_one_definition_rule8/stdout.txt
@@ -0,0 +1,6 @@
+Generating ScriptC_def1.java ...
+Generating ScriptField_DifferentDefinition7.java ...
+Generating ScriptField_DifferentDefinition8.java ...
+Generating ScriptC_def2.java ...
+Generating ScriptField_DifferentDefinition7.java ...
+Generating ScriptField_DifferentDefinition8.java ...
diff --git a/tests/F_one_definition_rule8/stdout.txt.expect b/tests/F_one_definition_rule8/stdout.txt.expect
new file mode 100644
index 0000000..cb2c1e0
--- /dev/null
+++ b/tests/F_one_definition_rule8/stdout.txt.expect
@@ -0,0 +1,6 @@
+Generating ScriptC_def1.java ...
+Generating ScriptField_DifferentDefinition7.java ...
+Generating ScriptField_DifferentDefinition8.java ...
+Generating ScriptC_def2.java ...
+Generating ScriptField_DifferentDefinition7.java ...
+Generating ScriptField_DifferentDefinition8.java ...
diff --git a/tests/F_one_definition_rule8/tmp/def1.bc b/tests/F_one_definition_rule8/tmp/def1.bc
new file mode 100644
index 0000000..76d3f95
--- /dev/null
+++ b/tests/F_one_definition_rule8/tmp/def1.bc
Binary files differ
diff --git a/tests/F_one_definition_rule8/tmp/def2.bc b/tests/F_one_definition_rule8/tmp/def2.bc
new file mode 100644
index 0000000..7d23740
--- /dev/null
+++ b/tests/F_one_definition_rule8/tmp/def2.bc
Binary files differ
diff --git a/tests/F_one_definition_rule8/tmp/foo/ScriptC_def1.java b/tests/F_one_definition_rule8/tmp/foo/ScriptC_def1.java
new file mode 100644
index 0000000..79c977d
--- /dev/null
+++ b/tests/F_one_definition_rule8/tmp/foo/ScriptC_def1.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source RenderScript file: def1.rs
+ */
+package foo;
+
+import android.renderscript.*;
+import android.content.res.Resources;
+import android.util.Log;
+
+/**
+ * @hide
+ */
+public class ScriptC_def1 extends ScriptC {
+    // Constructor
+    public  ScriptC_def1(RenderScript rs, Resources resources, int id) {
+        super(rs, resources, id);
+    }
+
+    public  ScriptC_def1(RenderScript rs, Resources resources, int id, boolean isRoot) {
+        super(rs, resources, id);
+    }
+
+    private final static int mExportVarIdx_o8 = 0;
+    private ScriptField_DifferentDefinition8.Item mExportVar_o8;
+    public void set_o8(ScriptField_DifferentDefinition8.Item v) {
+        mExportVar_o8 = v;
+        FieldPacker fp = new FieldPacker(4);
+        fp.addI32(v.member1.member1);
+        setVar(mExportVarIdx_o8, fp);
+    }
+
+    public ScriptField_DifferentDefinition8.Item get_o8() {
+        return mExportVar_o8;
+    }
+
+}
+
diff --git a/tests/F_one_definition_rule8/tmp/foo/ScriptC_def2.java b/tests/F_one_definition_rule8/tmp/foo/ScriptC_def2.java
new file mode 100644
index 0000000..638da6f
--- /dev/null
+++ b/tests/F_one_definition_rule8/tmp/foo/ScriptC_def2.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source RenderScript file: def2.rs
+ */
+package foo;
+
+import android.renderscript.*;
+import android.content.res.Resources;
+import android.util.Log;
+
+/**
+ * @hide
+ */
+public class ScriptC_def2 extends ScriptC {
+    // Constructor
+    public  ScriptC_def2(RenderScript rs, Resources resources, int id) {
+        super(rs, resources, id);
+    }
+
+    public  ScriptC_def2(RenderScript rs, Resources resources, int id, boolean isRoot) {
+        super(rs, resources, id);
+    }
+
+    private final static int mExportVarIdx_o8 = 0;
+    private ScriptField_DifferentDefinition8.Item mExportVar_o8;
+    public void set_o8(ScriptField_DifferentDefinition8.Item v) {
+        mExportVar_o8 = v;
+        FieldPacker fp = new FieldPacker(4);
+        fp.addF32(v.member1.member1);
+        setVar(mExportVarIdx_o8, fp);
+    }
+
+    public ScriptField_DifferentDefinition8.Item get_o8() {
+        return mExportVar_o8;
+    }
+
+}
+
diff --git a/tests/F_one_definition_rule8/tmp/foo/ScriptField_DifferentDefinition7.java b/tests/F_one_definition_rule8/tmp/foo/ScriptField_DifferentDefinition7.java
new file mode 100644
index 0000000..ab0e792
--- /dev/null
+++ b/tests/F_one_definition_rule8/tmp/foo/ScriptField_DifferentDefinition7.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source RenderScript file: def2.rs
+ */
+package foo;
+
+import android.renderscript.*;
+import android.content.res.Resources;
+import android.util.Log;
+
+/**
+ * @hide
+ */
+public class ScriptField_DifferentDefinition7 extends android.renderscript.Script.FieldBase {
+    static public class Item {
+        public static final int sizeof = 4;
+
+        float member1;
+
+        Item() {
+        }
+
+    }
+
+    private Item mItemArray[];
+    private FieldPacker mIOBuffer;
+    public static Element createElement(RenderScript rs) {
+        Element.Builder eb = new Element.Builder(rs);
+        eb.add(Element.F32(rs), "member1");
+        return eb.create();
+    }
+
+    public  ScriptField_DifferentDefinition7(RenderScript rs, int count) {
+        mItemArray = null;
+        mIOBuffer = null;
+        mElement = createElement(rs);
+        init(rs, count);
+    }
+
+    private void copyToArray(Item i, int index) {
+        if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */);
+        mIOBuffer.reset(index * Item.sizeof);
+        mIOBuffer.addF32(i.member1);
+    }
+
+    public void set(Item i, int index, boolean copyNow) {
+        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+        mItemArray[index] = i;
+        if (copyNow)  {
+            copyToArray(i, index);
+            mAllocation.subData1D(index, 1, mIOBuffer.getData());
+        }
+
+    }
+
+    public Item get(int index) {
+        if (mItemArray == null) return null;
+        return mItemArray[index];
+    }
+
+    public void set_member1(int index, float v, boolean copyNow) {
+        if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */);
+        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+        if (mItemArray[index] == null) mItemArray[index] = new Item();
+        mItemArray[index].member1 = v;
+        if (copyNow)  {
+            mIOBuffer.reset(index * Item.sizeof);
+            mIOBuffer.addF32(v);
+            FieldPacker fp = new FieldPacker(4);
+            fp.addF32(v);
+            mAllocation.subElementData(index, 0, fp);
+        }
+
+    }
+
+    public float get_member1(int index) {
+        if (mItemArray == null) return 0;
+        return mItemArray[index].member1;
+    }
+
+    public void copyAll() {
+        for (int ct = 0; ct < mItemArray.length; ct++) copyToArray(mItemArray[ct], ct);
+        mAllocation.data(mIOBuffer.getData());
+    }
+
+    public void resize(int newSize) {
+        if (mItemArray != null)  {
+            int oldSize = mItemArray.length;
+            int copySize = Math.min(oldSize, newSize);
+            if (newSize == oldSize) return;
+            Item ni[] = new Item[newSize];
+            System.arraycopy(mItemArray, 0, ni, 0, copySize);
+            mItemArray = ni;
+        }
+
+        mAllocation.resize(newSize);
+    }
+
+}
+
diff --git a/tests/F_one_definition_rule8/tmp/foo/ScriptField_DifferentDefinition8.java b/tests/F_one_definition_rule8/tmp/foo/ScriptField_DifferentDefinition8.java
new file mode 100644
index 0000000..e7741bc
--- /dev/null
+++ b/tests/F_one_definition_rule8/tmp/foo/ScriptField_DifferentDefinition8.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source RenderScript file: def2.rs
+ */
+package foo;
+
+import android.renderscript.*;
+import android.content.res.Resources;
+import android.util.Log;
+
+/**
+ * @hide
+ */
+public class ScriptField_DifferentDefinition8 extends android.renderscript.Script.FieldBase {
+    static public class Item {
+        public static final int sizeof = 4;
+
+        ScriptField_DifferentDefinition7.Item member1;
+
+        Item() {
+            member1 = new ScriptField_DifferentDefinition7.Item();
+        }
+
+    }
+
+    private Item mItemArray[];
+    private FieldPacker mIOBuffer;
+    public static Element createElement(RenderScript rs) {
+        Element.Builder eb = new Element.Builder(rs);
+        Element.Builder eb_ = new Element.Builder(rs);
+        eb_.add(Element.F32(rs), "member1");
+        eb.add(eb_.create(), "member1");
+        return eb.create();
+    }
+
+    public  ScriptField_DifferentDefinition8(RenderScript rs, int count) {
+        mItemArray = null;
+        mIOBuffer = null;
+        mElement = createElement(rs);
+        init(rs, count);
+    }
+
+    private void copyToArray(Item i, int index) {
+        if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */);
+        mIOBuffer.reset(index * Item.sizeof);
+        mIOBuffer.addF32(i.member1.member1);
+    }
+
+    public void set(Item i, int index, boolean copyNow) {
+        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+        mItemArray[index] = i;
+        if (copyNow)  {
+            copyToArray(i, index);
+            mAllocation.subData1D(index, 1, mIOBuffer.getData());
+        }
+
+    }
+
+    public Item get(int index) {
+        if (mItemArray == null) return null;
+        return mItemArray[index];
+    }
+
+    public void set_member1(int index, ScriptField_DifferentDefinition7.Item v, boolean copyNow) {
+        if (mIOBuffer == null) mIOBuffer = new FieldPacker(Item.sizeof * getType().getX()/* count */);
+        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+        if (mItemArray[index] == null) mItemArray[index] = new Item();
+        mItemArray[index].member1 = v;
+        if (copyNow)  {
+            mIOBuffer.reset(index * Item.sizeof);
+            mIOBuffer.addF32(v.member1);
+            FieldPacker fp = new FieldPacker(4);
+            fp.addF32(v.member1);
+            mAllocation.subElementData(index, 0, fp);
+        }
+
+    }
+
+    public ScriptField_DifferentDefinition7.Item get_member1(int index) {
+        if (mItemArray == null) return null;
+        return mItemArray[index].member1;
+    }
+
+    public void copyAll() {
+        for (int ct = 0; ct < mItemArray.length; ct++) copyToArray(mItemArray[ct], ct);
+        mAllocation.data(mIOBuffer.getData());
+    }
+
+    public void resize(int newSize) {
+        if (mItemArray != null)  {
+            int oldSize = mItemArray.length;
+            int copySize = Math.min(oldSize, newSize);
+            if (newSize == oldSize) return;
+            Item ni[] = new Item[newSize];
+            System.arraycopy(mItemArray, 0, ni, 0, copySize);
+            mItemArray = ni;
+        }
+
+        mAllocation.resize(newSize);
+    }
+
+}
+
diff --git a/tests/P_one_definition_rule/def1.rs b/tests/P_one_definition_rule/def1.rs
new file mode 100644
index 0000000..1e0cebe
--- /dev/null
+++ b/tests/P_one_definition_rule/def1.rs
@@ -0,0 +1,16 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef struct SameDefinition1{
+	int member1;
+	float member2;
+	int member3;
+	int member4;
+	float member5;
+	float member6;
+	int member7;
+	int member8;
+	int member9;
+} SameDefinition1;
+
+SameDefinition1 o1;
diff --git a/tests/P_one_definition_rule/def2.rs b/tests/P_one_definition_rule/def2.rs
new file mode 100644
index 0000000..1e0cebe
--- /dev/null
+++ b/tests/P_one_definition_rule/def2.rs
@@ -0,0 +1,16 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef struct SameDefinition1{
+	int member1;
+	float member2;
+	int member3;
+	int member4;
+	float member5;
+	float member6;
+	int member7;
+	int member8;
+	int member9;
+} SameDefinition1;
+
+SameDefinition1 o1;
diff --git a/tests/P_one_definition_rule/stderr.txt.expect b/tests/P_one_definition_rule/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/P_one_definition_rule/stderr.txt.expect
diff --git a/tests/P_one_definition_rule/stdout.txt.expect b/tests/P_one_definition_rule/stdout.txt.expect
new file mode 100644
index 0000000..da4e0c1
--- /dev/null
+++ b/tests/P_one_definition_rule/stdout.txt.expect
@@ -0,0 +1,4 @@
+Generating ScriptC_def1.java ...
+Generating ScriptField_SameDefinition1.java ...
+Generating ScriptC_def2.java ...
+Generating ScriptField_SameDefinition1.java ...
