From 30585c3565d1eee205bba753d90b6136a2771b82 Mon Sep 17 00:00:00 2001 From: drl7x Date: Wed, 28 Nov 2001 22:07:31 +0000 Subject: [PATCH] Added additional tests for buffer overflow detection fixes to the test suite. Test are fore the constructs char c[CONSTEXPR+ CONSTREXPR] and char b[UNKNOWNCONSTANT]. --- test/Makefile.am | 4 +- test/Makefile.in | 4 +- test/db2/dbase.lcs | 169 ++++++++++++------------- test/db2/empset.lcs | 73 +++++------ test/db2/erc.lcs | 56 ++++---- test/db2/eref.lcs | 68 +++++----- test/moreBufferTests2.expect | 9 ++ test/moreBufferTests2/Makefile | 7 + test/moreBufferTests2/arrayConstExpr.c | 13 ++ test/moreBufferTests2/unknownsize.c | 20 +++ 10 files changed, 225 insertions(+), 198 deletions(-) create mode 100644 test/moreBufferTests2.expect create mode 100644 test/moreBufferTests2/Makefile create mode 100644 test/moreBufferTests2/arrayConstExpr.c create mode 100644 test/moreBufferTests2/unknownsize.c diff --git a/test/Makefile.am b/test/Makefile.am index c0ede61..df0bdec 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -40,7 +40,7 @@ UNITTESTS = \ help \ fileio tainted mergestate metastate sizeof buffertest \ tests2.2 tests2.4 tests2.5 \ - simplebufferConstraintTests moreBufferTests globalbufferannotation \ + simplebufferConstraintTests moreBufferTests moreBufferTests2 globalbufferannotation \ maxset strchr for \ abstptr abstract alias alttypes ansireserved argorder \ args blocks break cases cast charlit clauses commentchar compdestroy \ @@ -158,7 +158,7 @@ fulltest: ### Rules for tests start here SUBDIRTESTS = metastate mergestate tainted fileio warnuse ensuresclauses \ - simplebufferConstraintTests moreBufferTests globalbufferannotation \ + simplebufferConstraintTests moreBufferTests moreBufferTests2 globalbufferannotation \ maxset strchr for .PHONY: abstptr diff --git a/test/Makefile.in b/test/Makefile.in index cdb51c3..155b127 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -114,7 +114,7 @@ UNITTESTS = \ help \ fileio tainted mergestate metastate sizeof buffertest \ tests2.2 tests2.4 tests2.5 \ - simplebufferConstraintTests moreBufferTests globalbufferannotation \ + simplebufferConstraintTests moreBufferTests moreBufferTests2 globalbufferannotation \ maxset strchr for \ abstptr abstract alias alttypes ansireserved argorder \ args blocks break cases cast charlit clauses commentchar compdestroy \ @@ -146,7 +146,7 @@ CLEANOUTPUT = $(GREP) -v "LCLint 3." | $(GREP) -v "$(LCLINT)" | $(GREP) -v "^mak ### Bugs fixed and new features since version 2.1b ### SUBDIRTESTS = metastate mergestate tainted fileio warnuse ensuresclauses \ - simplebufferConstraintTests moreBufferTests globalbufferannotation \ + simplebufferConstraintTests moreBufferTests moreBufferTests2 globalbufferannotation \ maxset strchr for \ tests2.2 tests2.2a tests2.4 tests2.5 db1 db2 db3 subdir = test diff --git a/test/db2/dbase.lcs b/test/db2/dbase.lcs index d5c4801..21715a0 100644 --- a/test/db2/dbase.lcs +++ b/test/db2/dbase.lcs @@ -85,27 +85,20 @@ %LCLsort __semployee0s_Struct_Arr arr _semployee0s_Struct nil %LCLsort __semployee0s_Struct_Tuple_Vec vec _semployee0s_Struct_Tuple __semployee0s_Struct_Arr %LCLsort _employee synonym _semployee0s_Struct nil -%LCLsort eref immutable nil nil -%LCLsort map immutable nil nil -%LCLsort _map_Obj obj map nil %LCLsort empset immutable nil nil %LCLsort _empset_Obj mutable empset nil -%LCLsort ereftab immutable nil nil -%LCLsort _ereftab_Obj mutable ereftab nil -%LCLsort erc immutable nil nil -%LCLsort _erc_Obj mutable erc nil -%LCLsort _sdbase1s_Struct str sdbase1s nil +%LCLsort _sdbase0s_Struct str sdbase0s nil %LCLsort h strMem _int_Obj nil %LCLsort l strMem _int_Obj nil %LCLsort j strMem __eemployee1e_Enum_Obj nil %LCLsort g strMem __eemployee0e_Enum_Obj nil %LCLsort strEnd nil nil nil -%LCLsort _sdbase1s_Struct_Tuple tup _sdbase1s_Struct nil -%LCLsort __sdbase1s_Struct_Ptr ptr _sdbase1s_Struct nil -%LCLsort __sdbase1s_Struct_Arr arr _sdbase1s_Struct nil -%LCLsort __sdbase1s_Struct_Tuple_Vec vec _sdbase1s_Struct_Tuple __sdbase1s_Struct_Arr -%LCLsort _db_q synonym _sdbase1s_Struct nil -%LCLsort _edbase2e_Enum enum edbase2e nil +%LCLsort _sdbase0s_Struct_Tuple tup _sdbase0s_Struct nil +%LCLsort __sdbase0s_Struct_Ptr ptr _sdbase0s_Struct nil +%LCLsort __sdbase0s_Struct_Arr arr _sdbase0s_Struct nil +%LCLsort __sdbase0s_Struct_Tuple_Vec vec _sdbase0s_Struct_Tuple __sdbase0s_Struct_Arr +%LCLsort _db_q synonym _sdbase0s_Struct nil +%LCLsort _edbase0e_Enum enum edbase0e nil %LCLsort missERR enumMem nil nil %LCLsort duplERR enumMem nil nil %LCLsort jobERR enumMem nil nil @@ -113,17 +106,22 @@ %LCLsort salERR enumMem nil nil %LCLsort db_OK enumMem nil nil %LCLsort enumEnd nil nil nil -%LCLsort _db_status synonym _edbase2e_Enum nil +%LCLsort _db_status synonym _edbase0e_Enum nil %LCLsort db immutable nil nil %LCLsort _db_Obj obj db nil %LCLSortTableEnd %LCLSymbolTable +%LCLop missERR : -> _edbase0e_Enum %LCLop min :int, int -> int %LCLop max :int, int -> int %LCLop 0 : -> int %LCLop 0 : -> double %LCLop 1 : -> int %LCLop 1 : -> double +%LCLop __ \select j :_semployee0s_Struct_Tuple -> _eemployee1e_Enum +%LCLop __ \select j :_semployee0s_Struct -> __eemployee1e_Enum_Obj +%LCLop __ \select j :_sdbase0s_Struct_Tuple -> _eemployee1e_Enum +%LCLop __ \select j :_sdbase0s_Struct -> __eemployee1e_Enum_Obj %LCLop if __ then __ else __ :bool, bool, bool -> bool %LCLop if __ then __ else __ :bool, int, int -> int %LCLop if __ then __ else __ :bool, double, double -> double @@ -131,15 +129,38 @@ %LCLop if __ then __ else __ :bool, char, char -> char %LCLop __ < __ :int, int -> bool %LCLop __ < __ :double, double -> bool +%LCLop __ \field_arrow j :__semployee0s_Struct_Ptr -> __eemployee1e_Enum_Obj +%LCLop __ \field_arrow j :__sdbase0s_Struct_Ptr -> __eemployee1e_Enum_Obj +%LCLop __ \select gen :_semployee0s_Struct_Tuple -> _eemployee0e_Enum +%LCLop __ \select gen :_semployee0s_Struct -> __eemployee0e_Enum_Obj %LCLop empty : -> _char_Vec %LCLop __ > __ :int, int -> bool %LCLop __ > __ :double, double -> bool +%LCLop __ \field_arrow gen :__semployee0s_Struct_Ptr -> __eemployee0e_Enum_Obj +%LCLop __ \select salary :_semployee0s_Struct_Tuple -> int +%LCLop __ \select salary :_semployee0s_Struct -> _int_Obj +%LCLop __ \select name :_semployee0s_Struct_Tuple -> _char_Vec +%LCLop __ \select name :_semployee0s_Struct -> __char_Obj_Arr %LCLop count :char, _char_Vec -> int +%LCLop __ \select g :_sdbase0s_Struct_Tuple -> _eemployee0e_Enum +%LCLop __ \select g :_sdbase0s_Struct -> __eemployee0e_Enum_Obj +%LCLop __ \field_arrow salary :__semployee0s_Struct_Ptr -> _int_Obj +%LCLop __ \select ssNum :_semployee0s_Struct_Tuple -> int +%LCLop __ \select ssNum :_semployee0s_Struct -> _int_Obj %LCLop head :_char_Vec -> char %LCLop __ \inv :double -> double +%LCLop __ \select l :_sdbase0s_Struct_Tuple -> int +%LCLop __ \select l :_sdbase0s_Struct -> _int_Obj +%LCLop __ \field_arrow name :__semployee0s_Struct_Ptr -> __char_Obj_Arr %LCLop init :_char_Vec -> _char_Vec +%LCLop __ \field_arrow g :__sdbase0s_Struct_Ptr -> __eemployee0e_Enum_Obj +%LCLop __ \select h :_sdbase0s_Struct_Tuple -> int +%LCLop __ \select h :_sdbase0s_Struct -> _int_Obj +%LCLop __ \field_arrow ssNum :__semployee0s_Struct_Ptr -> _int_Obj %LCLop isEmpty :_char_Vec -> bool +%LCLop __ \field_arrow l :__sdbase0s_Struct_Ptr -> _int_Obj %LCLop last :_char_Vec -> char +%LCLop __ \field_arrow h :__sdbase0s_Struct_Ptr -> _int_Obj %LCLop len :_char_Vec -> int %LCLop prefix :_char_Vec, int -> _char_Vec %LCLop __ / __ :double, double -> double @@ -163,14 +184,13 @@ %LCLop 7 : -> int %LCLop 8 : -> int %LCLop 9 : -> int -%LCLtag sstdlib0s struct %LCLop __ * __ :int, int -> int %LCLop __ * __ :double, double -> double +%LCLtag sstdlib0s struct %LCLop true : -> bool %LCLop false : -> bool %LCLop __ \and __ :bool, bool -> bool %LCLop __ \or __ :bool, bool -> bool -%LCLtag sstdlib1s struct %LCLop __ \eq __ :bool, bool -> bool %LCLop __ \eq __ :int, int -> bool %LCLop __ \eq __ :double, double -> bool @@ -182,21 +202,8 @@ %LCLop __ \neq __ :double, double -> bool %LCLop __ \neq __ :_char_Vec, _char_Vec -> bool %LCLop __ \neq __ :char, char -> bool -%LCLop MALE : -> _eemployee0e_Enum +%LCLtag sstdlib1s struct %LCLop { __ } :char -> _char_Vec -%LCLop FEMALE : -> _eemployee0e_Enum -%LCLop gender_ANY : -> _eemployee0e_Enum -%LCLop db_OK : -> _edbase2e_Enum -%LCLop salERR : -> _edbase2e_Enum -%LCLtag eemployee0e enum -%LCLop genderERR : -> _edbase2e_Enum -%LCLop jobERR : -> _edbase2e_Enum -%LCLop duplERR : -> _edbase2e_Enum -%LCLop MGR : -> _eemployee1e_Enum -%LCLop missERR : -> _edbase2e_Enum -%LCLop NONMGR : -> _eemployee1e_Enum -%LCLop job_ANY : -> _eemployee1e_Enum -%LCLtag eemployee1e enum %LCLop [__, __] :int, int -> _sstdlib0s_Struct_Tuple %LCLop [__, __] :int, int -> _sstdlib1s_Struct_Tuple %LCLop __ [] :__char_Obj_Ptr -> __char_Obj_Arr @@ -208,7 +215,7 @@ %LCLop __ [] :__FILE_Obj_Ptr -> __FILE_Obj_Arr %LCLop __ [] :____void_Obj_Ptr_Obj_Ptr -> ____void_Obj_Ptr_Obj_Arr %LCLop __ [] :__semployee0s_Struct_Ptr -> __semployee0s_Struct_Arr -%LCLop __ [] :__sdbase1s_Struct_Ptr -> __sdbase1s_Struct_Arr +%LCLop __ [] :__sdbase0s_Struct_Ptr -> __sdbase0s_Struct_Arr %LCLop __ |- __ :_char_Vec, char -> _char_Vec %LCLop __ [__] :_char_Vec, int -> char %LCLop __ [__] :__char_Obj_Arr, int -> _char_Obj @@ -228,48 +235,37 @@ %LCLop __ [__] :____void_Obj_Ptr_Obj_Arr, int -> ___void_Obj_Ptr_Obj %LCLop __ [__] :__semployee0s_Struct_Tuple_Vec, int -> _semployee0s_Struct_Tuple %LCLop __ [__] :__semployee0s_Struct_Arr, int -> _semployee0s_Struct -%LCLop __ [__] :__sdbase1s_Struct_Tuple_Vec, int -> _sdbase1s_Struct_Tuple -%LCLop __ [__] :__sdbase1s_Struct_Arr, int -> _sdbase1s_Struct +%LCLop __ [__] :__sdbase0s_Struct_Tuple_Vec, int -> _sdbase0s_Struct_Tuple +%LCLop __ [__] :__sdbase0s_Struct_Arr, int -> _sdbase0s_Struct %LCLop __ -| __ :char, _char_Vec -> _char_Vec -%LCLop [__, __, __, __] :int, int, _eemployee1e_Enum, _eemployee0e_Enum -> _sdbase1s_Struct_Tuple +%LCLop [__, __, __, __] :int, int, _eemployee1e_Enum, _eemployee0e_Enum -> _sdbase0s_Struct_Tuple %LCLop [__, __, __, __, __] :_eemployee1e_Enum, _eemployee0e_Enum, int, _char_Vec, int -> _semployee0s_Struct_Tuple -%LCLop __ \select quot :_sstdlib0s_Struct_Tuple -> int -%LCLop __ \select quot :_sstdlib0s_Struct -> _int_Obj -%LCLop __ \select quot :_sstdlib1s_Struct_Tuple -> int -%LCLop __ \select quot :_sstdlib1s_Struct -> _int_Obj -%LCLtag semployee0s struct %LCLop __ \leq __ :int, int -> bool %LCLop __ \leq __ :double, double -> bool -%LCLop __ \field_arrow quot :__sstdlib0s_Struct_Ptr -> _int_Obj -%LCLop __ \field_arrow quot :__sstdlib1s_Struct_Ptr -> _int_Obj %LCLop __ \select rem :_sstdlib0s_Struct_Tuple -> int %LCLop __ \select rem :_sstdlib0s_Struct -> _int_Obj %LCLop __ \select rem :_sstdlib1s_Struct_Tuple -> int %LCLop __ \select rem :_sstdlib1s_Struct -> _int_Obj -%LCLop __ \select g :_sdbase1s_Struct_Tuple -> _eemployee0e_Enum -%LCLop __ \select g :_sdbase1s_Struct -> __eemployee0e_Enum_Obj %LCLop __ \geq __ :int, int -> bool %LCLop __ \geq __ :double, double -> bool -%LCLop __ \select l :_sdbase1s_Struct_Tuple -> int -%LCLop __ \select l :_sdbase1s_Struct -> _int_Obj %LCLop __ \field_arrow rem :__sstdlib0s_Struct_Ptr -> _int_Obj %LCLop __ \field_arrow rem :__sstdlib1s_Struct_Ptr -> _int_Obj -%LCLop __ \field_arrow g :__sdbase1s_Struct_Ptr -> __eemployee0e_Enum_Obj -%LCLop __ \select h :_sdbase1s_Struct_Tuple -> int -%LCLop __ \select h :_sdbase1s_Struct -> _int_Obj -%LCLop __ \field_arrow l :__sdbase1s_Struct_Ptr -> _int_Obj +%LCLop __ \select quot :_sstdlib0s_Struct_Tuple -> int +%LCLop __ \select quot :_sstdlib0s_Struct -> _int_Obj +%LCLop __ \select quot :_sstdlib1s_Struct_Tuple -> int +%LCLop __ \select quot :_sstdlib1s_Struct -> _int_Obj +%LCLop __ \field_arrow quot :__sstdlib0s_Struct_Ptr -> _int_Obj +%LCLop __ \field_arrow quot :__sstdlib1s_Struct_Ptr -> _int_Obj %LCLop null : -> char -%LCLop __ \field_arrow h :__sdbase1s_Struct_Ptr -> _int_Obj -%LCLop __ \select ssNum :_semployee0s_Struct_Tuple -> int -%LCLop __ \select ssNum :_semployee0s_Struct -> _int_Obj -%LCLop __ \select name :_semployee0s_Struct_Tuple -> _char_Vec -%LCLop __ \select name :_semployee0s_Struct -> __char_Obj_Arr -%LCLop __ \field_arrow ssNum :__semployee0s_Struct_Ptr -> _int_Obj -%LCLop __ \select salary :_semployee0s_Struct_Tuple -> int -%LCLop __ \select salary :_semployee0s_Struct -> _int_Obj -%LCLop __ \field_arrow name :__semployee0s_Struct_Ptr -> __char_Obj_Arr -%LCLop __ \select gen :_semployee0s_Struct_Tuple -> _eemployee0e_Enum -%LCLop __ \select gen :_semployee0s_Struct -> __eemployee0e_Enum_Obj +%LCLtag eemployee0e enum +%LCLop gender_ANY : -> _eemployee0e_Enum +%LCLop FEMALE : -> _eemployee0e_Enum +%LCLop MALE : -> _eemployee0e_Enum +%LCLtag eemployee1e enum +%LCLop job_ANY : -> _eemployee1e_Enum +%LCLop NONMGR : -> _eemployee1e_Enum +%LCLop MGR : -> _eemployee1e_Enum +%LCLtag semployee0s struct %LCLop NIL : -> __char_Obj_Ptr %LCLop NIL : -> __sstdlib0s_Struct_Ptr %LCLop NIL : -> __sstdlib1s_Struct_Ptr @@ -279,15 +275,7 @@ %LCLop NIL : -> __FILE_Obj_Ptr %LCLop NIL : -> ____void_Obj_Ptr_Obj_Ptr %LCLop NIL : -> __semployee0s_Struct_Ptr -%LCLop NIL : -> __sdbase1s_Struct_Ptr -%LCLop __ \field_arrow salary :__semployee0s_Struct_Ptr -> _int_Obj -%LCLop __ \select j :_semployee0s_Struct_Tuple -> _eemployee1e_Enum -%LCLop __ \select j :_semployee0s_Struct -> __eemployee1e_Enum_Obj -%LCLop __ \select j :_sdbase1s_Struct_Tuple -> _eemployee1e_Enum -%LCLop __ \select j :_sdbase1s_Struct -> __eemployee1e_Enum_Obj -%LCLop __ \field_arrow gen :__semployee0s_Struct_Ptr -> __eemployee0e_Enum_Obj -%LCLop __ \field_arrow j :__semployee0s_Struct_Ptr -> __eemployee1e_Enum_Obj -%LCLop __ \field_arrow j :__sdbase1s_Struct_Ptr -> __eemployee1e_Enum_Obj +%LCLop NIL : -> __sdbase0s_Struct_Ptr %LCLop - __ :int -> int %LCLop - __ :double -> double %LCLop __ + __ :__char_Obj_Ptr, int -> __char_Obj_Ptr @@ -310,8 +298,8 @@ %LCLop __ + __ :int, ____void_Obj_Ptr_Obj_Ptr -> ____void_Obj_Ptr_Obj_Ptr %LCLop __ + __ :__semployee0s_Struct_Ptr, int -> __semployee0s_Struct_Ptr %LCLop __ + __ :int, __semployee0s_Struct_Ptr -> __semployee0s_Struct_Ptr -%LCLop __ + __ :__sdbase1s_Struct_Ptr, int -> __sdbase1s_Struct_Ptr -%LCLop __ + __ :int, __sdbase1s_Struct_Ptr -> __sdbase1s_Struct_Ptr +%LCLop __ + __ :__sdbase0s_Struct_Ptr, int -> __sdbase0s_Struct_Ptr +%LCLop __ + __ :int, __sdbase0s_Struct_Ptr -> __sdbase0s_Struct_Ptr %LCLop __ - __ :__char_Obj_Ptr, int -> __char_Obj_Ptr %LCLop __ - __ :__char_Obj_Ptr, __char_Obj_Ptr -> int %LCLop __ - __ :int, int -> int @@ -332,8 +320,8 @@ %LCLop __ - __ :____void_Obj_Ptr_Obj_Ptr, ____void_Obj_Ptr_Obj_Ptr -> int %LCLop __ - __ :__semployee0s_Struct_Ptr, int -> __semployee0s_Struct_Ptr %LCLop __ - __ :__semployee0s_Struct_Ptr, __semployee0s_Struct_Ptr -> int -%LCLop __ - __ :__sdbase1s_Struct_Ptr, int -> __sdbase1s_Struct_Ptr -%LCLop __ - __ :__sdbase1s_Struct_Ptr, __sdbase1s_Struct_Ptr -> int +%LCLop __ - __ :__sdbase0s_Struct_Ptr, int -> __sdbase0s_Struct_Ptr +%LCLop __ - __ :__sdbase0s_Struct_Ptr, __sdbase0s_Struct_Ptr -> int %LCLop sizeof :bool -> int %LCLop sizeof :int -> int %LCLop sizeof :char -> int @@ -343,12 +331,8 @@ %LCLop sizeof :FILE -> int %LCLop sizeof :_eemployee0e_Enum -> int %LCLop sizeof :_eemployee1e_Enum -> int -%LCLop sizeof :eref -> int -%LCLop sizeof :map -> int %LCLop sizeof :empset -> int -%LCLop sizeof :ereftab -> int -%LCLop sizeof :erc -> int -%LCLop sizeof :_edbase2e_Enum -> int +%LCLop sizeof :_edbase0e_Enum -> int %LCLop sizeof :db -> int %LCLop isSub :_char_Vec, int -> bool %LCLop isSub :__char_Obj_Arr, int -> bool @@ -368,13 +352,18 @@ %LCLop isSub :____void_Obj_Ptr_Obj_Arr, int -> bool %LCLop isSub :__semployee0s_Struct_Tuple_Vec, int -> bool %LCLop isSub :__semployee0s_Struct_Arr, int -> bool -%LCLop isSub :__sdbase1s_Struct_Tuple_Vec, int -> bool -%LCLop isSub :__sdbase1s_Struct_Arr, int -> bool +%LCLop isSub :__sdbase0s_Struct_Tuple_Vec, int -> bool +%LCLop isSub :__sdbase0s_Struct_Arr, int -> bool %LCLop succ :int -> int %LCLop pred :int -> int +%LCLop db_OK : -> _edbase0e_Enum +%LCLop salERR : -> _edbase0e_Enum +%LCLop genderERR : -> _edbase0e_Enum %LCLop abs :int -> int %LCLop abs :double -> double +%LCLop jobERR : -> _edbase0e_Enum %LCLop div :int, int -> int +%LCLop duplERR : -> _edbase0e_Enum %LCLop mod :int, int -> int %LCLtype float float exposed %LCLtype bool bool immutable @@ -1020,26 +1009,26 @@ %LCLfcn tmpnam : __char_Obj_Ptr -> __char_Obj_Ptr %LCLfcnGlobals %LCLtype db_q _db_q exposed -%LCLenumConst db_OK _edbase2e_Enum -%LCLenumConst salERR _edbase2e_Enum -%LCLenumConst genderERR _edbase2e_Enum -%LCLenumConst jobERR _edbase2e_Enum -%LCLenumConst duplERR _edbase2e_Enum -%LCLenumConst missERR _edbase2e_Enum +%LCLenumConst db_OK _edbase0e_Enum +%LCLenumConst salERR _edbase0e_Enum +%LCLenumConst genderERR _edbase0e_Enum +%LCLenumConst jobERR _edbase0e_Enum +%LCLenumConst duplERR _edbase0e_Enum +%LCLenumConst missERR _edbase0e_Enum %LCLtype db_status _db_status exposed %LCLtype db db immutable %LCLvar d _db_Obj -%LCLfcn hire : _semployee0s_Struct_Tuple -> _edbase2e_Enum +%LCLfcn hire : _semployee0s_Struct_Tuple -> _edbase0e_Enum %LCLfcnGlobals _db_Obj d; %LCLfcn uncheckedHire : _semployee0s_Struct_Tuple -> void %LCLfcnGlobals _db_Obj d; %LCLfcn fire : int -> bool %LCLfcnGlobals _db_Obj d; -%LCLfcn query : _sdbase1s_Struct_Tuple, _empset_Obj -> int +%LCLfcn query : _sdbase0s_Struct_Tuple, _empset_Obj -> int %LCLfcnGlobals _db_Obj d; %LCLfcn promote : int -> bool %LCLfcnGlobals _db_Obj d; -%LCLfcn setSalary : int, int -> _edbase2e_Enum +%LCLfcn setSalary : int, int -> _edbase0e_Enum %LCLfcnGlobals _db_Obj d; %LCLfcn db_print : -> void %LCLfcnGlobals _db_Obj d; ___FILE_Obj_Ptr_Obj stdout; diff --git a/test/db2/empset.lcs b/test/db2/empset.lcs index 5bd5246..9f3a7a8 100644 --- a/test/db2/empset.lcs +++ b/test/db2/empset.lcs @@ -85,19 +85,21 @@ %LCLsort __semployee0s_Struct_Arr arr _semployee0s_Struct nil %LCLsort __semployee0s_Struct_Tuple_Vec vec _semployee0s_Struct_Tuple __semployee0s_Struct_Arr %LCLsort _employee synonym _semployee0s_Struct nil -%LCLsort eref immutable nil nil -%LCLsort map immutable nil nil -%LCLsort _map_Obj obj map nil %LCLsort empset immutable nil nil %LCLsort _empset_Obj mutable empset nil %LCLSortTableEnd %LCLSymbolTable %LCLop min :int, int -> int %LCLop max :int, int -> int +%LCLop __ \select j :_semployee0s_Struct_Tuple -> _eemployee1e_Enum +%LCLop __ \select j :_semployee0s_Struct -> __eemployee1e_Enum_Obj %LCLop 0 : -> int %LCLop 0 : -> double %LCLop 1 : -> int %LCLop 1 : -> double +%LCLop __ \field_arrow j :__semployee0s_Struct_Ptr -> __eemployee1e_Enum_Obj +%LCLop __ \select gen :_semployee0s_Struct_Tuple -> _eemployee0e_Enum +%LCLop __ \select gen :_semployee0s_Struct -> __eemployee0e_Enum_Obj %LCLop if __ then __ else __ :bool, bool, bool -> bool %LCLop if __ then __ else __ :bool, int, int -> int %LCLop if __ then __ else __ :bool, double, double -> double @@ -105,10 +107,20 @@ %LCLop if __ then __ else __ :bool, char, char -> char %LCLop __ < __ :int, int -> bool %LCLop __ < __ :double, double -> bool +%LCLop __ \field_arrow gen :__semployee0s_Struct_Ptr -> __eemployee0e_Enum_Obj +%LCLop __ \select salary :_semployee0s_Struct_Tuple -> int +%LCLop __ \select salary :_semployee0s_Struct -> _int_Obj %LCLop empty : -> _char_Vec %LCLop __ > __ :int, int -> bool %LCLop __ > __ :double, double -> bool +%LCLop __ \select name :_semployee0s_Struct_Tuple -> _char_Vec +%LCLop __ \select name :_semployee0s_Struct -> __char_Obj_Arr +%LCLop __ \field_arrow salary :__semployee0s_Struct_Ptr -> _int_Obj +%LCLop __ \select ssNum :_semployee0s_Struct_Tuple -> int +%LCLop __ \select ssNum :_semployee0s_Struct -> _int_Obj +%LCLop __ \field_arrow name :__semployee0s_Struct_Ptr -> __char_Obj_Arr %LCLop count :char, _char_Vec -> int +%LCLop __ \field_arrow ssNum :__semployee0s_Struct_Ptr -> _int_Obj %LCLop head :_char_Vec -> char %LCLop __ \inv :double -> double %LCLop init :_char_Vec -> _char_Vec @@ -156,15 +168,7 @@ %LCLop __ \neq __ :double, double -> bool %LCLop __ \neq __ :_char_Vec, _char_Vec -> bool %LCLop __ \neq __ :char, char -> bool -%LCLop MALE : -> _eemployee0e_Enum %LCLop { __ } :char -> _char_Vec -%LCLop FEMALE : -> _eemployee0e_Enum -%LCLop gender_ANY : -> _eemployee0e_Enum -%LCLtag eemployee0e enum -%LCLop MGR : -> _eemployee1e_Enum -%LCLop NONMGR : -> _eemployee1e_Enum -%LCLop job_ANY : -> _eemployee1e_Enum -%LCLtag eemployee1e enum %LCLop [__, __] :int, int -> _sstdlib0s_Struct_Tuple %LCLop [__, __] :int, int -> _sstdlib1s_Struct_Tuple %LCLop __ [] :__char_Obj_Ptr -> __char_Obj_Arr @@ -196,35 +200,33 @@ %LCLop __ [__] :__semployee0s_Struct_Tuple_Vec, int -> _semployee0s_Struct_Tuple %LCLop __ [__] :__semployee0s_Struct_Arr, int -> _semployee0s_Struct %LCLop __ -| __ :char, _char_Vec -> _char_Vec +%LCLop __ \select rem :_sstdlib0s_Struct_Tuple -> int +%LCLop __ \select rem :_sstdlib0s_Struct -> _int_Obj +%LCLop __ \select rem :_sstdlib1s_Struct_Tuple -> int +%LCLop __ \select rem :_sstdlib1s_Struct -> _int_Obj %LCLop [__, __, __, __, __] :_eemployee1e_Enum, _eemployee0e_Enum, int, _char_Vec, int -> _semployee0s_Struct_Tuple +%LCLop __ \leq __ :int, int -> bool +%LCLop __ \leq __ :double, double -> bool +%LCLop __ \field_arrow rem :__sstdlib0s_Struct_Ptr -> _int_Obj +%LCLop __ \field_arrow rem :__sstdlib1s_Struct_Ptr -> _int_Obj %LCLop __ \select quot :_sstdlib0s_Struct_Tuple -> int %LCLop __ \select quot :_sstdlib0s_Struct -> _int_Obj %LCLop __ \select quot :_sstdlib1s_Struct_Tuple -> int %LCLop __ \select quot :_sstdlib1s_Struct -> _int_Obj -%LCLtag semployee0s struct -%LCLop __ \leq __ :int, int -> bool -%LCLop __ \leq __ :double, double -> bool -%LCLop __ \field_arrow quot :__sstdlib0s_Struct_Ptr -> _int_Obj -%LCLop __ \field_arrow quot :__sstdlib1s_Struct_Ptr -> _int_Obj -%LCLop __ \select rem :_sstdlib0s_Struct_Tuple -> int -%LCLop __ \select rem :_sstdlib0s_Struct -> _int_Obj -%LCLop __ \select rem :_sstdlib1s_Struct_Tuple -> int -%LCLop __ \select rem :_sstdlib1s_Struct -> _int_Obj %LCLop __ \geq __ :int, int -> bool %LCLop __ \geq __ :double, double -> bool -%LCLop __ \field_arrow rem :__sstdlib0s_Struct_Ptr -> _int_Obj -%LCLop __ \field_arrow rem :__sstdlib1s_Struct_Ptr -> _int_Obj +%LCLop __ \field_arrow quot :__sstdlib0s_Struct_Ptr -> _int_Obj +%LCLop __ \field_arrow quot :__sstdlib1s_Struct_Ptr -> _int_Obj %LCLop null : -> char -%LCLop __ \select ssNum :_semployee0s_Struct_Tuple -> int -%LCLop __ \select ssNum :_semployee0s_Struct -> _int_Obj -%LCLop __ \select name :_semployee0s_Struct_Tuple -> _char_Vec -%LCLop __ \select name :_semployee0s_Struct -> __char_Obj_Arr -%LCLop __ \field_arrow ssNum :__semployee0s_Struct_Ptr -> _int_Obj -%LCLop __ \select salary :_semployee0s_Struct_Tuple -> int -%LCLop __ \select salary :_semployee0s_Struct -> _int_Obj -%LCLop __ \field_arrow name :__semployee0s_Struct_Ptr -> __char_Obj_Arr -%LCLop __ \select gen :_semployee0s_Struct_Tuple -> _eemployee0e_Enum -%LCLop __ \select gen :_semployee0s_Struct -> __eemployee0e_Enum_Obj +%LCLtag eemployee0e enum +%LCLop gender_ANY : -> _eemployee0e_Enum +%LCLop FEMALE : -> _eemployee0e_Enum +%LCLop MALE : -> _eemployee0e_Enum +%LCLtag eemployee1e enum +%LCLop job_ANY : -> _eemployee1e_Enum +%LCLop NONMGR : -> _eemployee1e_Enum +%LCLop MGR : -> _eemployee1e_Enum +%LCLtag semployee0s struct %LCLop NIL : -> __char_Obj_Ptr %LCLop NIL : -> __sstdlib0s_Struct_Ptr %LCLop NIL : -> __sstdlib1s_Struct_Ptr @@ -234,11 +236,6 @@ %LCLop NIL : -> __FILE_Obj_Ptr %LCLop NIL : -> ____void_Obj_Ptr_Obj_Ptr %LCLop NIL : -> __semployee0s_Struct_Ptr -%LCLop __ \field_arrow salary :__semployee0s_Struct_Ptr -> _int_Obj -%LCLop __ \select j :_semployee0s_Struct_Tuple -> _eemployee1e_Enum -%LCLop __ \select j :_semployee0s_Struct -> __eemployee1e_Enum_Obj -%LCLop __ \field_arrow gen :__semployee0s_Struct_Ptr -> __eemployee0e_Enum_Obj -%LCLop __ \field_arrow j :__semployee0s_Struct_Ptr -> __eemployee1e_Enum_Obj %LCLop - __ :int -> int %LCLop - __ :double -> double %LCLop __ + __ :__char_Obj_Ptr, int -> __char_Obj_Ptr @@ -290,8 +287,6 @@ %LCLop sizeof :FILE -> int %LCLop sizeof :_eemployee0e_Enum -> int %LCLop sizeof :_eemployee1e_Enum -> int -%LCLop sizeof :eref -> int -%LCLop sizeof :map -> int %LCLop sizeof :empset -> int %LCLop isSub :_char_Vec, int -> bool %LCLop isSub :__char_Obj_Arr, int -> bool diff --git a/test/db2/erc.lcs b/test/db2/erc.lcs index 6003ab0..99bf8cb 100644 --- a/test/db2/erc.lcs +++ b/test/db2/erc.lcs @@ -88,30 +88,41 @@ %LCLsort eref immutable nil nil %LCLsort map immutable nil nil %LCLsort _map_Obj obj map nil -%LCLsort empset immutable nil nil -%LCLsort _empset_Obj mutable empset nil -%LCLsort ereftab immutable nil nil -%LCLsort _ereftab_Obj mutable ereftab nil %LCLsort erc immutable nil nil %LCLsort _erc_Obj mutable erc nil %LCLSortTableEnd %LCLSymbolTable %LCLop min :int, int -> int %LCLop max :int, int -> int +%LCLop __ \select ssNum :_semployee0s_Struct_Tuple -> int +%LCLop __ \select ssNum :_semployee0s_Struct -> _int_Obj %LCLop 0 : -> int %LCLop 0 : -> double +%LCLop __ \select name :_semployee0s_Struct_Tuple -> _char_Vec +%LCLop __ \select name :_semployee0s_Struct -> __char_Obj_Arr %LCLop 1 : -> int %LCLop 1 : -> double +%LCLop __ \field_arrow ssNum :__semployee0s_Struct_Ptr -> _int_Obj +%LCLop __ \select salary :_semployee0s_Struct_Tuple -> int +%LCLop __ \select salary :_semployee0s_Struct -> _int_Obj %LCLop if __ then __ else __ :bool, bool, bool -> bool %LCLop if __ then __ else __ :bool, int, int -> int %LCLop if __ then __ else __ :bool, double, double -> double %LCLop if __ then __ else __ :bool, _char_Vec, _char_Vec -> _char_Vec %LCLop if __ then __ else __ :bool, char, char -> char +%LCLop __ \field_arrow name :__semployee0s_Struct_Ptr -> __char_Obj_Arr +%LCLop __ \select gen :_semployee0s_Struct_Tuple -> _eemployee0e_Enum +%LCLop __ \select gen :_semployee0s_Struct -> __eemployee0e_Enum_Obj %LCLop __ < __ :int, int -> bool %LCLop __ < __ :double, double -> bool +%LCLop __ \field_arrow salary :__semployee0s_Struct_Ptr -> _int_Obj %LCLop empty : -> _char_Vec %LCLop __ > __ :int, int -> bool %LCLop __ > __ :double, double -> bool +%LCLop __ \field_arrow gen :__semployee0s_Struct_Ptr -> __eemployee0e_Enum_Obj +%LCLop __ \select j :_semployee0s_Struct_Tuple -> _eemployee1e_Enum +%LCLop __ \select j :_semployee0s_Struct -> __eemployee1e_Enum_Obj +%LCLop __ \field_arrow j :__semployee0s_Struct_Ptr -> __eemployee1e_Enum_Obj %LCLop count :char, _char_Vec -> int %LCLop head :_char_Vec -> char %LCLop __ \inv :double -> double @@ -160,15 +171,7 @@ %LCLop __ \neq __ :double, double -> bool %LCLop __ \neq __ :_char_Vec, _char_Vec -> bool %LCLop __ \neq __ :char, char -> bool -%LCLop MALE : -> _eemployee0e_Enum %LCLop { __ } :char -> _char_Vec -%LCLop FEMALE : -> _eemployee0e_Enum -%LCLop gender_ANY : -> _eemployee0e_Enum -%LCLtag eemployee0e enum -%LCLop MGR : -> _eemployee1e_Enum -%LCLop NONMGR : -> _eemployee1e_Enum -%LCLop job_ANY : -> _eemployee1e_Enum -%LCLtag eemployee1e enum %LCLop [__, __] :int, int -> _sstdlib0s_Struct_Tuple %LCLop [__, __] :int, int -> _sstdlib1s_Struct_Tuple %LCLop __ [] :__char_Obj_Ptr -> __char_Obj_Arr @@ -200,12 +203,11 @@ %LCLop __ [__] :__semployee0s_Struct_Tuple_Vec, int -> _semployee0s_Struct_Tuple %LCLop __ [__] :__semployee0s_Struct_Arr, int -> _semployee0s_Struct %LCLop __ -| __ :char, _char_Vec -> _char_Vec -%LCLop [__, __, __, __, __] :_eemployee1e_Enum, _eemployee0e_Enum, int, _char_Vec, int -> _semployee0s_Struct_Tuple %LCLop __ \select quot :_sstdlib0s_Struct_Tuple -> int %LCLop __ \select quot :_sstdlib0s_Struct -> _int_Obj %LCLop __ \select quot :_sstdlib1s_Struct_Tuple -> int %LCLop __ \select quot :_sstdlib1s_Struct -> _int_Obj -%LCLtag semployee0s struct +%LCLop [__, __, __, __, __] :_eemployee1e_Enum, _eemployee0e_Enum, int, _char_Vec, int -> _semployee0s_Struct_Tuple %LCLop __ \leq __ :int, int -> bool %LCLop __ \leq __ :double, double -> bool %LCLop __ \field_arrow quot :__sstdlib0s_Struct_Ptr -> _int_Obj @@ -219,16 +221,15 @@ %LCLop __ \field_arrow rem :__sstdlib0s_Struct_Ptr -> _int_Obj %LCLop __ \field_arrow rem :__sstdlib1s_Struct_Ptr -> _int_Obj %LCLop null : -> char -%LCLop __ \select ssNum :_semployee0s_Struct_Tuple -> int -%LCLop __ \select ssNum :_semployee0s_Struct -> _int_Obj -%LCLop __ \select name :_semployee0s_Struct_Tuple -> _char_Vec -%LCLop __ \select name :_semployee0s_Struct -> __char_Obj_Arr -%LCLop __ \field_arrow ssNum :__semployee0s_Struct_Ptr -> _int_Obj -%LCLop __ \select salary :_semployee0s_Struct_Tuple -> int -%LCLop __ \select salary :_semployee0s_Struct -> _int_Obj -%LCLop __ \field_arrow name :__semployee0s_Struct_Ptr -> __char_Obj_Arr -%LCLop __ \select gen :_semployee0s_Struct_Tuple -> _eemployee0e_Enum -%LCLop __ \select gen :_semployee0s_Struct -> __eemployee0e_Enum_Obj +%LCLtag eemployee0e enum +%LCLop MALE : -> _eemployee0e_Enum +%LCLop FEMALE : -> _eemployee0e_Enum +%LCLop gender_ANY : -> _eemployee0e_Enum +%LCLtag eemployee1e enum +%LCLop MGR : -> _eemployee1e_Enum +%LCLop NONMGR : -> _eemployee1e_Enum +%LCLop job_ANY : -> _eemployee1e_Enum +%LCLtag semployee0s struct %LCLop NIL : -> __char_Obj_Ptr %LCLop NIL : -> __sstdlib0s_Struct_Ptr %LCLop NIL : -> __sstdlib1s_Struct_Ptr @@ -238,11 +239,6 @@ %LCLop NIL : -> __FILE_Obj_Ptr %LCLop NIL : -> ____void_Obj_Ptr_Obj_Ptr %LCLop NIL : -> __semployee0s_Struct_Ptr -%LCLop __ \field_arrow salary :__semployee0s_Struct_Ptr -> _int_Obj -%LCLop __ \select j :_semployee0s_Struct_Tuple -> _eemployee1e_Enum -%LCLop __ \select j :_semployee0s_Struct -> __eemployee1e_Enum_Obj -%LCLop __ \field_arrow gen :__semployee0s_Struct_Ptr -> __eemployee0e_Enum_Obj -%LCLop __ \field_arrow j :__semployee0s_Struct_Ptr -> __eemployee1e_Enum_Obj %LCLop - __ :int -> int %LCLop - __ :double -> double %LCLop __ + __ :__char_Obj_Ptr, int -> __char_Obj_Ptr @@ -296,8 +292,6 @@ %LCLop sizeof :_eemployee1e_Enum -> int %LCLop sizeof :eref -> int %LCLop sizeof :map -> int -%LCLop sizeof :empset -> int -%LCLop sizeof :ereftab -> int %LCLop sizeof :erc -> int %LCLop isSub :_char_Vec, int -> bool %LCLop isSub :__char_Obj_Arr, int -> bool diff --git a/test/db2/eref.lcs b/test/db2/eref.lcs index d5ae4dc..5d35272 100644 --- a/test/db2/eref.lcs +++ b/test/db2/eref.lcs @@ -92,10 +92,15 @@ %LCLSymbolTable %LCLop min :int, int -> int %LCLop max :int, int -> int +%LCLop __ \select j :_semployee0s_Struct_Tuple -> _eemployee1e_Enum +%LCLop __ \select j :_semployee0s_Struct -> __eemployee1e_Enum_Obj %LCLop 0 : -> int %LCLop 0 : -> double %LCLop 1 : -> int %LCLop 1 : -> double +%LCLop __ \field_arrow j :__semployee0s_Struct_Ptr -> __eemployee1e_Enum_Obj +%LCLop __ \select gen :_semployee0s_Struct_Tuple -> _eemployee0e_Enum +%LCLop __ \select gen :_semployee0s_Struct -> __eemployee0e_Enum_Obj %LCLop if __ then __ else __ :bool, bool, bool -> bool %LCLop if __ then __ else __ :bool, int, int -> int %LCLop if __ then __ else __ :bool, double, double -> double @@ -103,10 +108,20 @@ %LCLop if __ then __ else __ :bool, char, char -> char %LCLop __ < __ :int, int -> bool %LCLop __ < __ :double, double -> bool +%LCLop __ \field_arrow gen :__semployee0s_Struct_Ptr -> __eemployee0e_Enum_Obj +%LCLop __ \select salary :_semployee0s_Struct_Tuple -> int +%LCLop __ \select salary :_semployee0s_Struct -> _int_Obj %LCLop empty : -> _char_Vec %LCLop __ > __ :int, int -> bool %LCLop __ > __ :double, double -> bool +%LCLop __ \select name :_semployee0s_Struct_Tuple -> _char_Vec +%LCLop __ \select name :_semployee0s_Struct -> __char_Obj_Arr +%LCLop __ \field_arrow salary :__semployee0s_Struct_Ptr -> _int_Obj +%LCLop __ \select ssNum :_semployee0s_Struct_Tuple -> int +%LCLop __ \select ssNum :_semployee0s_Struct -> _int_Obj +%LCLop __ \field_arrow name :__semployee0s_Struct_Ptr -> __char_Obj_Arr %LCLop count :char, _char_Vec -> int +%LCLop __ \field_arrow ssNum :__semployee0s_Struct_Ptr -> _int_Obj %LCLop head :_char_Vec -> char %LCLop __ \inv :double -> double %LCLop init :_char_Vec -> _char_Vec @@ -154,15 +169,7 @@ %LCLop __ \neq __ :double, double -> bool %LCLop __ \neq __ :_char_Vec, _char_Vec -> bool %LCLop __ \neq __ :char, char -> bool -%LCLop MALE : -> _eemployee0e_Enum %LCLop { __ } :char -> _char_Vec -%LCLop FEMALE : -> _eemployee0e_Enum -%LCLop gender_ANY : -> _eemployee0e_Enum -%LCLtag eemployee0e enum -%LCLop MGR : -> _eemployee1e_Enum -%LCLop NONMGR : -> _eemployee1e_Enum -%LCLop job_ANY : -> _eemployee1e_Enum -%LCLtag eemployee1e enum %LCLop [__, __] :int, int -> _sstdlib0s_Struct_Tuple %LCLop [__, __] :int, int -> _sstdlib1s_Struct_Tuple %LCLop __ [] :__char_Obj_Ptr -> __char_Obj_Arr @@ -194,35 +201,33 @@ %LCLop __ [__] :__semployee0s_Struct_Tuple_Vec, int -> _semployee0s_Struct_Tuple %LCLop __ [__] :__semployee0s_Struct_Arr, int -> _semployee0s_Struct %LCLop __ -| __ :char, _char_Vec -> _char_Vec +%LCLop __ \select rem :_sstdlib0s_Struct_Tuple -> int +%LCLop __ \select rem :_sstdlib0s_Struct -> _int_Obj +%LCLop __ \select rem :_sstdlib1s_Struct_Tuple -> int +%LCLop __ \select rem :_sstdlib1s_Struct -> _int_Obj %LCLop [__, __, __, __, __] :_eemployee1e_Enum, _eemployee0e_Enum, int, _char_Vec, int -> _semployee0s_Struct_Tuple +%LCLop __ \leq __ :int, int -> bool +%LCLop __ \leq __ :double, double -> bool +%LCLop __ \field_arrow rem :__sstdlib0s_Struct_Ptr -> _int_Obj +%LCLop __ \field_arrow rem :__sstdlib1s_Struct_Ptr -> _int_Obj %LCLop __ \select quot :_sstdlib0s_Struct_Tuple -> int %LCLop __ \select quot :_sstdlib0s_Struct -> _int_Obj %LCLop __ \select quot :_sstdlib1s_Struct_Tuple -> int %LCLop __ \select quot :_sstdlib1s_Struct -> _int_Obj -%LCLtag semployee0s struct -%LCLop __ \leq __ :int, int -> bool -%LCLop __ \leq __ :double, double -> bool -%LCLop __ \field_arrow quot :__sstdlib0s_Struct_Ptr -> _int_Obj -%LCLop __ \field_arrow quot :__sstdlib1s_Struct_Ptr -> _int_Obj -%LCLop __ \select rem :_sstdlib0s_Struct_Tuple -> int -%LCLop __ \select rem :_sstdlib0s_Struct -> _int_Obj -%LCLop __ \select rem :_sstdlib1s_Struct_Tuple -> int -%LCLop __ \select rem :_sstdlib1s_Struct -> _int_Obj %LCLop __ \geq __ :int, int -> bool %LCLop __ \geq __ :double, double -> bool -%LCLop __ \field_arrow rem :__sstdlib0s_Struct_Ptr -> _int_Obj -%LCLop __ \field_arrow rem :__sstdlib1s_Struct_Ptr -> _int_Obj +%LCLop __ \field_arrow quot :__sstdlib0s_Struct_Ptr -> _int_Obj +%LCLop __ \field_arrow quot :__sstdlib1s_Struct_Ptr -> _int_Obj %LCLop null : -> char -%LCLop __ \select ssNum :_semployee0s_Struct_Tuple -> int -%LCLop __ \select ssNum :_semployee0s_Struct -> _int_Obj -%LCLop __ \select name :_semployee0s_Struct_Tuple -> _char_Vec -%LCLop __ \select name :_semployee0s_Struct -> __char_Obj_Arr -%LCLop __ \field_arrow ssNum :__semployee0s_Struct_Ptr -> _int_Obj -%LCLop __ \select salary :_semployee0s_Struct_Tuple -> int -%LCLop __ \select salary :_semployee0s_Struct -> _int_Obj -%LCLop __ \field_arrow name :__semployee0s_Struct_Ptr -> __char_Obj_Arr -%LCLop __ \select gen :_semployee0s_Struct_Tuple -> _eemployee0e_Enum -%LCLop __ \select gen :_semployee0s_Struct -> __eemployee0e_Enum_Obj +%LCLtag eemployee0e enum +%LCLop gender_ANY : -> _eemployee0e_Enum +%LCLop FEMALE : -> _eemployee0e_Enum +%LCLop MALE : -> _eemployee0e_Enum +%LCLtag eemployee1e enum +%LCLop job_ANY : -> _eemployee1e_Enum +%LCLop NONMGR : -> _eemployee1e_Enum +%LCLop MGR : -> _eemployee1e_Enum +%LCLtag semployee0s struct %LCLop NIL : -> __char_Obj_Ptr %LCLop NIL : -> __sstdlib0s_Struct_Ptr %LCLop NIL : -> __sstdlib1s_Struct_Ptr @@ -232,11 +237,6 @@ %LCLop NIL : -> __FILE_Obj_Ptr %LCLop NIL : -> ____void_Obj_Ptr_Obj_Ptr %LCLop NIL : -> __semployee0s_Struct_Ptr -%LCLop __ \field_arrow salary :__semployee0s_Struct_Ptr -> _int_Obj -%LCLop __ \select j :_semployee0s_Struct_Tuple -> _eemployee1e_Enum -%LCLop __ \select j :_semployee0s_Struct -> __eemployee1e_Enum_Obj -%LCLop __ \field_arrow gen :__semployee0s_Struct_Ptr -> __eemployee0e_Enum_Obj -%LCLop __ \field_arrow j :__semployee0s_Struct_Ptr -> __eemployee1e_Enum_Obj %LCLop - __ :int -> int %LCLop - __ :double -> double %LCLop __ + __ :__char_Obj_Ptr, int -> __char_Obj_Ptr diff --git a/test/moreBufferTests2.expect b/test/moreBufferTests2.expect new file mode 100644 index 0000000..bf43e05 --- /dev/null +++ b/test/moreBufferTests2.expect @@ -0,0 +1,9 @@ + +unknownsize.c: (in function uknSize1) +unknownsize.c:9:3: Possible out-of-bounds store: + Unable to resolve constraint: + requires maxSet(c @ unknownsize.c:9:3) >= 9 + needed to satisfy precondition: + requires maxSet(c @ unknownsize.c:9:3) >= 9 + +Finished LCLint checking --- 1 code error found diff --git a/test/moreBufferTests2/Makefile b/test/moreBufferTests2/Makefile new file mode 100644 index 0000000..cbb3f4b --- /dev/null +++ b/test/moreBufferTests2/Makefile @@ -0,0 +1,7 @@ +.PHONY: check + +#LCLINT = lclint + +check: + $(LCLINT) -exportlocal +arraybounds +arrayboundsread unknownsize.c arrayConstExpr.c + diff --git a/test/moreBufferTests2/arrayConstExpr.c b/test/moreBufferTests2/arrayConstExpr.c new file mode 100644 index 0000000..214cfc3 --- /dev/null +++ b/test/moreBufferTests2/arrayConstExpr.c @@ -0,0 +1,13 @@ + +/*@constant int MYSIZE=10@*/ + +void arrayExpr() +{ + char string1[2 + 4]; + + char string2 [MYSIZE + 1]; + + string1[5] = 'd'; + string2[MYSIZE - 1] = 'w'; + string2[MYSIZE] = 'w'; +} diff --git a/test/moreBufferTests2/unknownsize.c b/test/moreBufferTests2/unknownsize.c new file mode 100644 index 0000000..70e1c83 --- /dev/null +++ b/test/moreBufferTests2/unknownsize.c @@ -0,0 +1,20 @@ + +/*@constant int bSIZE@*/ + +void uknSize1() +{ + char b[bSIZE]; + char c[bSIZE]; + + c[9] = 'l'; + b[sizeof b - 1] = 'd'; + +} + +void unkSize2() +{ + char b[bSIZE]; + + b[sizeof b - 1] = 'd'; + +} -- 2.45.2