diff options
author | Björn Gustavsson <[email protected]> | 2019-04-09 06:37:55 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2019-04-09 06:46:31 +0200 |
commit | 23a497af427493b94739761e4d4974e12bc67579 (patch) | |
tree | d722974761354703cb9bb023d643bad44e0c7225 /lib/stdlib/src/erl_lint.erl | |
parent | 45bb3d43fdba5b085fdd2f944277784ec18e60a8 (diff) | |
download | otp-23a497af427493b94739761e4d4974e12bc67579.tar.gz otp-23a497af427493b94739761e4d4974e12bc67579.tar.bz2 otp-23a497af427493b94739761e4d4974e12bc67579.zip |
Issue an error for improper use of record_info/2 in a fun
`record_info/2` is a pseudo-function that requires literal arguments
known at compile time. Therefore, the following usage is illegal:
f() -> fun record_info/2.
However, `erl_lint` did not issue a compilation error for this usage,
and the compiler would crash in a later pass.
https://bugs.erlang.org/browse/ERL-907
Diffstat (limited to 'lib/stdlib/src/erl_lint.erl')
-rw-r--r-- | lib/stdlib/src/erl_lint.erl | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl index 00fd731e1d..e0c37ca030 100644 --- a/lib/stdlib/src/erl_lint.erl +++ b/lib/stdlib/src/erl_lint.erl @@ -2276,6 +2276,9 @@ expr({'fun',Line,Body}, Vt, St) -> case Body of {clauses,Cs} -> fun_clauses(Cs, Vt, St); + {function,record_info,2} -> + %% It is illegal to call record_info/2 with unknown arguments. + {[],add_error(Line, illegal_record_info, St)}; {function,F,A} -> %% BifClash - Fun expression %% N.B. Only allows BIFs here as well, NO IMPORTS!! |