diff options
Diffstat (limited to 'lib/compiler/test/compilation_SUITE_data/otp_5481.erl')
-rw-r--r-- | lib/compiler/test/compilation_SUITE_data/otp_5481.erl | 527 |
1 files changed, 527 insertions, 0 deletions
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_5481.erl b/lib/compiler/test/compilation_SUITE_data/otp_5481.erl new file mode 100644 index 0000000000..5cf114ac4e --- /dev/null +++ b/lib/compiler/test/compilation_SUITE_data/otp_5481.erl @@ -0,0 +1,527 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2005-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% +-module(otp_5481). + +-export([?MODULE/0,encode_cc_clpn/1,get_oper_status/2,foo/0]). + +?MODULE() -> + ok. + +-record(pchVp, {vplEntry, + vplLastChange, + vplReceiveTrafficDescrIndex = 0, + vplTransmitTrafficDescrIndex = 0, + vplConnId, + vplGroupShapingId}). + +-record(pchVc, {vclEntry, + vclLastChange, + vplConnId, + vclConnId, + vclShapingMode = 1}). +-record(spvcVpc, {spvcVpcEntry, + currentState, + spvcRerCap = false, + spvcRerStatus = false}). +-record(spvcVpcPerm, {spvcVpcEntry, + spvcVpcTargetAddress, + spvcVpcTargetSelectType, + spvcVpcUserName, + spvcVpcProviderName, + spvcVpcApplication}). +-record(spvcVcc, {spvcVccEntry, + spvcVccTargetAddress, + spvcVccTargetSelectType, + spvcVccTargetVpi, + spvcVccApplication, + spvcVccFrKey, + spvcVccTranslationMode, + spvcRerCap = false, + currentState, + spvcRerStatus = false}). +-record(spvcVccPerm, {spvcVccEntry, + spvcVccTargetAddress, + spvcVccTargetSelectType, + spvcVccTargetVpi, + spvcVccTargetType, + spvcVccApplication, + spvcVccFrKey, + spvcVccTranslationMode = 2}). +-record(spvcObj, {spvcEntry, + spvcTargetAddress, + spvcTargetSelectType, + spvcTargetVpi, + spvcTargetVci, + spvcLastReleaseCause, + spvcLastReleaseDiagnostic, + spvcRetryInterval = 1000, + spvcRetryTimer = 0, + spvcRetryThreshold = 1, + spvcRetryFailures = 0, + spvcRetryLimit = 15, + spvcFrKey, + spvcVccTranslationMode = 2, + spvcRerCap = false, + spvcRerStatus = false}). +-record(spvcTargetVc, {entry, + userName = [], + providerName = [], + opState, + rowStatus}). + +-record(spvcTargetVp, {entry, + userName = [], + providerName = [], + opState, + rowStatus}). + +-record(spvcFr, {spvcFrEntry, + spvcFrAtmEntry, + spvcFrTargetAddress, + spvcFrTargetSelectType, + spvcFrProviderName, + currentState}). + +-record(spvcFrPerm, {spvcFrEntry, + spvcFrAtmEntry, + spvcFrAtmTranslation, + spvcFrAdminStatus, + spvcFrConnect}). + +-record(hci_clpn, {hci_pci, + hci_type_of_number, + hci_numbering_plan_indicator, + hci_presentation_indicator, + hci_screening_indicator, + hci_number_digits, + hci_incomplete_indicator = 0, + hci_binary}). + +encode_cc_clpn(Spvc) when Spvc#spvcObj.spvcFrKey == undefined -> + If = case Spvc of + Spvc when record(Spvc,spvcObj) -> + case Spvc#spvcObj.spvcEntry of + {If_Value,_,_,_} -> + If_Value; + {If_Value,_,_} -> + If_Value + end; + Spvc when record(Spvc,spvcVcc) -> + {If_Value,_,_,_} = Spvc#spvcVcc.spvcVccEntry, + If_Value; + Spvc when record(Spvc,spvcVpc) -> + {If_Value,_,_} = Spvc#spvcVpc.spvcVpcEntry, + If_Value; + Spvc when record(Spvc,spvcVpcPerm) -> + {If_Value,_,_} = Spvc#spvcVpcPerm.spvcVpcEntry, + If_Value; + Spvc when record(Spvc,spvcVccPerm) -> + {If_Value,_,_,_} = Spvc#spvcVccPerm.spvcVccEntry, + If_Value; + Spvc when record(Spvc,spvcTargetVc) -> + {If_Value,_,_} = Spvc#spvcTargetVc.entry, + If_Value; + Spvc when record(Spvc,spvcTargetVp) -> + {If_Value,_} = Spvc#spvcTargetVp.entry, + If_Value; + Spvc when record(Spvc,pchVc) -> + {If_Value,_,_} = Spvc#pchVc.vclEntry, + If_Value; + Spvc when record(Spvc,pchVp) -> + {If_Value,_} = Spvc#pchVp.vplEntry, + If_Value; + Spvc when record(Spvc,spvcFr) -> + {If_Value,_} = Spvc#spvcFr.spvcFrEntry, + If_Value; + Spvc when record(Spvc,spvcFrPerm) -> + {If_Value,_} = Spvc#spvcFrPerm.spvcFrEntry, + If_Value; + {If_Value,_,_,_} -> + If_Value; + {If_Value,_,_} -> + If_Value; + {If_Value,_} -> + If_Value; + [If_Value|_] -> + If_Value; + _ -> + error + end, + Col = [2], + SpvcAddress = case x:x(get_next,[If],Col) of + [{[2,If,20|Address],_}] -> + Address; + _ -> + lists:duplicate(20,0) + end, + #hci_clpn{hci_type_of_number = 0, + hci_numbering_plan_indicator = 2, + hci_presentation_indicator = 0, + hci_screening_indicator = 1, + hci_number_digits = SpvcAddress}; +encode_cc_clpn(Spvc) -> + {If,_} = Spvc#spvcObj.spvcFrKey, + Col = [4], + SpvcFrAddress = case x:x(get_next,[If],Col) of + [{[4,If,20|Address],_}] -> + Address; + _ -> + lists:duplicate(20,0) + end, + #hci_clpn{hci_type_of_number = 0, + hci_numbering_plan_indicator = 2, + hci_presentation_indicator = 0, + hci_screening_indicator = 1, + hci_number_digits = SpvcFrAddress}. + + + +get_oper_status(spvcVpc,Obj) when record(Obj,spvcVpc) -> + State = Obj#spvcVpc.currentState, + LinkState = get_link_opstate(case Obj of + Obj when record(Obj,spvcObj) -> + case Obj#spvcObj.spvcEntry of + {If_Value,_,_,_} -> + If_Value; + {If_Value,_,_} -> + If_Value + end; + Obj when record(Obj,spvcVcc) -> + {If_Value,_,_,_} = +Obj#spvcVcc.spvcVccEntry, + If_Value; + Obj when record(Obj,spvcVpc) -> + {If_Value,_,_} = Obj#spvcVpc.spvcVpcEntry, + If_Value; + Obj when record(Obj,spvcVpcPerm) -> + {If_Value,_,_} = +Obj#spvcVpcPerm.spvcVpcEntry, + If_Value; + Obj when record(Obj,spvcVccPerm) -> + {If_Value,_,_,_} = +Obj#spvcVccPerm.spvcVccEntry, + If_Value; + Obj when record(Obj,spvcTargetVc) -> + {If_Value,_,_} = Obj#spvcTargetVc.entry, + If_Value; + Obj when record(Obj,spvcTargetVp) -> + {If_Value,_} = Obj#spvcTargetVp.entry, + If_Value; + Obj when record(Obj,pchVc) -> + {If_Value,_,_} = Obj#pchVc.vclEntry, + If_Value; + Obj when record(Obj,pchVp) -> + {If_Value,_} = Obj#pchVp.vplEntry, + If_Value; + Obj when record(Obj,spvcFr) -> + {If_Value,_} = Obj#spvcFr.spvcFrEntry, + If_Value; + Obj when record(Obj,spvcFrPerm) -> + {If_Value,_} = Obj#spvcFrPerm.spvcFrEntry, + If_Value; + {If_Value,_,_,_} -> + If_Value; + {If_Value,_,_} -> + If_Value; + {If_Value,_} -> + If_Value; + [If_Value|_] -> + If_Value; + _ -> + error + end), + debug_disabled, + case {State,LinkState} of + {not_in_service,_} -> + 10; + {created,_} -> + 10; + {_,disabled} -> + 6; + {wait,_} -> + 2; + {outgoing_callproceeding,_} -> + 2; + {release_at_restart,_} -> + 2; + {active,_} -> + 3; + {rest_in_peace,_} -> + 4; + {_Other,_} -> + 1 + end; +get_oper_status(spvcVpc,_) -> + debug_disabled, + 1; +get_oper_status(spvcVcc,Obj) when record(Obj,spvcVcc) -> + State = Obj#spvcVcc.currentState, + LinkState = get_link_opstate(case Obj of + Obj when record(Obj,spvcObj) -> + case Obj#spvcObj.spvcEntry of + {If_Value,_,_,_} -> + If_Value; + {If_Value,_,_} -> + If_Value + end; + Obj when record(Obj,spvcVcc) -> + {If_Value,_,_,_} = +Obj#spvcVcc.spvcVccEntry, + If_Value; + Obj when record(Obj,spvcVpc) -> + {If_Value,_,_} = Obj#spvcVpc.spvcVpcEntry, + If_Value; + Obj when record(Obj,spvcVpcPerm) -> + {If_Value,_,_} = +Obj#spvcVpcPerm.spvcVpcEntry, + If_Value; + Obj when record(Obj,spvcVccPerm) -> + {If_Value,_,_,_} = +Obj#spvcVccPerm.spvcVccEntry, + If_Value; + Obj when record(Obj,spvcTargetVc) -> + {If_Value,_,_} = Obj#spvcTargetVc.entry, + If_Value; + Obj when record(Obj,spvcTargetVp) -> + {If_Value,_} = Obj#spvcTargetVp.entry, + If_Value; + Obj when record(Obj,pchVc) -> + {If_Value,_,_} = Obj#pchVc.vclEntry, + If_Value; + Obj when record(Obj,pchVp) -> + {If_Value,_} = Obj#pchVp.vplEntry, + If_Value; + Obj when record(Obj,spvcFr) -> + {If_Value,_} = Obj#spvcFr.spvcFrEntry, + If_Value; + Obj when record(Obj,spvcFrPerm) -> + {If_Value,_} = Obj#spvcFrPerm.spvcFrEntry, + If_Value; + {If_Value,_,_,_} -> + If_Value; + {If_Value,_,_} -> + If_Value; + {If_Value,_} -> + If_Value; + [If_Value|_] -> + If_Value; + _ -> + error + end), + debug_disabled, + case {State,LinkState} of + {not_in_service,_} -> + 10; + {created,_} -> + 10; + {_,disabled} -> + 6; + {wait,_} -> + 2; + {outgoing_callproceeding,_} -> + 2; + {release_at_restart,_} -> + 2; + {active,_} -> + 3; + {rest_in_peace,_} -> + 4; + {_Other,_} -> + 1 + end; +get_oper_status(spvcVcc,_) -> + debug_disabled, + 1; +get_oper_status(spvcTargetVp,Obj) when record(Obj,spvcTargetVp) -> + debug_disabled, + Key = Obj#spvcTargetVp.entry, + case get_link_opstate(case Key of + Key when record(Key,spvcObj) -> + case Key#spvcObj.spvcEntry of + {If_Value,_,_,_} -> + If_Value; + {If_Value,_,_} -> + If_Value + end; + Key when record(Key,spvcVcc) -> + {If_Value,_,_,_} = Key#spvcVcc.spvcVccEntry, + If_Value; + Key when record(Key,spvcVpc) -> + {If_Value,_,_} = Key#spvcVpc.spvcVpcEntry, + If_Value; + Key when record(Key,spvcVpcPerm) -> + {If_Value,_,_} = Key#spvcVpcPerm.spvcVpcEntry, + If_Value; + Key when record(Key,spvcVccPerm) -> + {If_Value,_,_,_} = Key#spvcVccPerm.spvcVccEntry, + If_Value; + Key when record(Key,spvcTargetVc) -> + {If_Value,_,_} = Key#spvcTargetVc.entry, + If_Value; + Key when record(Key,spvcTargetVp) -> + {If_Value,_} = Key#spvcTargetVp.entry, + If_Value; + Key when record(Key,pchVc) -> + {If_Value,_,_} = Key#pchVc.vclEntry, + If_Value; + Key when record(Key,pchVp) -> + {If_Value,_} = Key#pchVp.vplEntry, + If_Value; + Key when record(Key,spvcFr) -> + {If_Value,_} = Key#spvcFr.spvcFrEntry, + If_Value; + Key when record(Key,spvcFrPerm) -> + {If_Value,_} = Key#spvcFrPerm.spvcFrEntry, + If_Value; + {If_Value,_,_,_} -> + If_Value; + {If_Value,_,_} -> + If_Value; + {If_Value,_} -> + If_Value; + [If_Value|_] -> + If_Value; + _ -> + error + end) of + disabled -> + debug_disabled, + 4; + enabled -> + debug_disabled, + case (x:x({pchVp,Key}))#pchVp.vplConnId of + undefined -> + debug_disabled, + 3; + _ -> + debug_disabled, + 2 + end + end; +get_oper_status(spvcTargetVp,_) -> + debug_disabled, + 1; +get_oper_status(spvcTargetVc,Obj) when record(Obj,spvcTargetVc) -> + debug_disabled, + Key = Obj#spvcTargetVc.entry, + case get_link_opstate(case Key of + Key when record(Key,spvcObj) -> + case Key#spvcObj.spvcEntry of + {If_Value,_,_,_} -> + If_Value; + {If_Value,_,_} -> + If_Value + end; + Key when record(Key,spvcVcc) -> + {If_Value,_,_,_} = Key#spvcVcc.spvcVccEntry, + If_Value; + Key when record(Key,spvcVpc) -> + {If_Value,_,_} = Key#spvcVpc.spvcVpcEntry, + If_Value; + Key when record(Key,spvcVpcPerm) -> + {If_Value,_,_} = Key#spvcVpcPerm.spvcVpcEntry, + If_Value; + Key when record(Key,spvcVccPerm) -> + {If_Value,_,_,_} = Key#spvcVccPerm.spvcVccEntry, + If_Value; + Key when record(Key,spvcTargetVc) -> + {If_Value,_,_} = Key#spvcTargetVc.entry, + If_Value; + Key when record(Key,spvcTargetVp) -> + {If_Value,_} = Key#spvcTargetVp.entry, + If_Value; + Key when record(Key,pchVc) -> + {If_Value,_,_} = Key#pchVc.vclEntry, + If_Value; + Key when record(Key,pchVp) -> + {If_Value,_} = Key#pchVp.vplEntry, + If_Value; + Key when record(Key,spvcFr) -> + {If_Value,_} = Key#spvcFr.spvcFrEntry, + If_Value; + Key when record(Key,spvcFrPerm) -> + {If_Value,_} = Key#spvcFrPerm.spvcFrEntry, + If_Value; + {If_Value,_,_,_} -> + If_Value; + {If_Value,_,_} -> + If_Value; + {If_Value,_} -> + If_Value; + [If_Value|_] -> + If_Value; + _ -> + error + end) of + disabled -> + debug_disabled, + 4; + enabled -> + debug_disabled, + case (x:x({pchVc,Key}))#pchVc.vclConnId of + undefined -> + debug_disabled, + 3; + _ -> + debug_disabled, + 2 + end + end; +get_oper_status(spvcTargetVc,_) -> + debug_disabled, + 1. + +get_link_opstate(If) -> + debug_disabled, + case x:x(x:x(If),cnhChi,get_link_opstate,[If]) of + {genError,_} -> + debug_disabled, + disabled; + Return -> + debug_disabled, + Return + end. + +-record(record_A,{ + field_1, + field_2, + field_3, + field_4, + field_5 + }). +-record(record_B, { field_1 }). +-record(record_C, { }). + +foo() -> + case something of + [#record_A{} = A] -> + B = foo3(#record_C{}), + C = element(B, A), + foo2(A), + D = C#record_B.field_1, + foo4(A#record_A.field_4, + B, + #record_C{}, + D) + end. + +foo2(_) -> ok. +foo3(_) -> 1. +foo4(_,_,_,_) -> ok. + |