Fix operand lookup in functions to check if local index out of range.
BUG= https://code.google.com/p/nativeclient/issues/detail?id=4302
R=stichnot@chromium.org
Review URL: https://codereview.chromium.org/1346723002 .
diff --git a/tests_lit/parse_errs/fcn-value-index-isnt-defined.test b/tests_lit/parse_errs/fcn-value-index-isnt-defined.test
new file mode 100644
index 0000000..9359873
--- /dev/null
+++ b/tests_lit/parse_errs/fcn-value-index-isnt-defined.test
@@ -0,0 +1,44 @@
+; Test if we detect duplicate names in a symbol table.
+
+; REQUIRES: no_minimal_build
+
+; RUN: not %pnacl_sz -bitcode-as-text \
+; RUN: %p/Inputs/fcn-value-index-isnt-defined.tbc \
+; RUN: -bitcode-format=pnacl -notranslate -build-on-read 2>&1 \
+; RUN: | FileCheck %s
+
+; CHECK: Value index {{.*}} not defined!
+
+; RUN: pnacl-bcfuzz -bitcode-as-text \
+; RUN: %p/Inputs/fcn-value-index-isnt-defined.tbc -output - \
+; RUN: | not pnacl-bcdis -no-records | FileCheck -check-prefix=ASM %s
+
+; ASM: module { // BlockID = 8
+; ASM: version 1;
+; ASM: types { // BlockID = 17
+; ASM: count 4;
+; ASM: @t0 = i32;
+; ASM: @t1 = i32 ();
+; ASM: @t2 = i8;
+; ASM: @t3 = void;
+; ASM: }
+; ASM: define external i32 @f0();
+; ASM: globals { // BlockID = 19
+; ASM: count 0;
+; ASM: }
+; ASM: valuesymtab { // BlockID = 14
+; ASM: @f0 : "f";
+; ASM: }
+; ASM: function i32 @f0() { // BlockID = 12
+; ASM: blocks 1;
+; ASM: constants { // BlockID = 11
+; ASM: i32:
+; ASM: %c0 = i32 1;
+; ASM: }
+; ASM: %b0:
+; ASM: %v0 = alloca i8, i32 %c0, align 4;
+; ASM: ret void %v1;
+; ASM: Error({{.*}}): Can't find type for %v1
+; ASM: }
+; ASM: }
+