aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/test/compilation_SUITE_data/otp_5481.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/compiler/test/compilation_SUITE_data/otp_5481.erl')
-rw-r--r--lib/compiler/test/compilation_SUITE_data/otp_5481.erl527
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.
+