Add 9 tests on one definition rule.

Change-Id: I09aebb069ea4dc5104b04527f522318e1f7bf164
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 ...