# Wrong form classes for DW_CFA_def_cfa_expression, _expression, and _val_expression After accepting Issue [230616.1][230616.1], we made the following editorial changes (among others): - Section 6.4.2.2, p. 178, bullet 6, line 27 [`DW_CFA_def_cfa_expression`]: exprloc -> exprval. - Section 6.4.2.3, p. 180, bullet 9, line 13 [`DW_CFA_expression`]: `DW_FORM_block` -> exprloc -> exprval. - Section 6.4.2.3, p. 180, bullet 10, line 21 [`DW_CFA_val_expression`]: `DW_FORM_block` -> exprloc -> exprval. Note that Section 6.4 is now 7.4. The page numbers are now closer to 200 and 202. Also, as a result of [251030.1][251030.1], the form classes were renamed valexpr and locexpr. It seems to me that the first two, `DW_CFA_def_cfa_expression` and `DW_CFA_expression`, should be locexpr, not valexpr. These are expressions that return a location, not a value. That's the difference between `DW_CFA_expression` and `DW_CFA_val_expression`: the first gives a location, and second gives a value. In Section 8.23, Table 8.29 has `DW_CFA_def_cfa_expression` and `DW_CFA_expression` taking locexpr (correct, I think), but also lists `DW_CFA_val_expression` as taking locexpr (wrong, should be valexpr). ## Proposal In Section 7.4.2.2 CFA Definition Instructions, bullet 6, `DW_CFA_def_cfa_expression`, change "valexpr" to "locexpr". In Section 7.4.2.3 Register Rule Instructions, bullet 9, `DW_CFA_expression`, change "valexpr" to "locexpr". (Bullet 10, `DW_CFA_val_expression` is correct.) In Section 8.23 Call Frame Information, Table 8.29, in the row for `DW_CFA_val_expression`, change "locexpr" to "valexpr". (The rows for `DW_CFA_def_cfa_expression` and `DW_CFA_expression` are correct.) [230616.1]: https://dwarfstd.org/issues/230616.1.html [251030.1]: https://dwarfstd.org/issues/251030.1.html --- 2026-04-27: Accepted.