diff options
-rw-r--r-- | cparser/Elab.ml | 5 | ||||
-rw-r--r-- | cparser/ExtendedAsm.ml | 2 |
2 files changed, 5 insertions, 2 deletions
diff --git a/cparser/Elab.ml b/cparser/Elab.ml index d0de1058..cff9ed5b 100644 --- a/cparser/Elab.ml +++ b/cparser/Elab.ml @@ -2879,6 +2879,11 @@ let rec elab_stmt env ctx s = let a = elab_cvspecs env cv_specs in let s = elab_simple_string loc wide chars in let outputs,env = mmap (elab_asm_operand ctx loc) env outputs in + List.iter + (fun (lbl, cst, e) -> + if not (is_modifiable_lvalue env e) then + error loc "asm output is not a modifiable l-value";) + outputs; let inputs ,env= mmap (elab_asm_operand ctx loc) env inputs in let flags = List.map (fun (w,c) -> elab_simple_string loc w c) flags in { sdesc = Sasm(a, s, outputs, inputs, flags); diff --git a/cparser/ExtendedAsm.ml b/cparser/ExtendedAsm.ml index 6cd95aec..8b694ac4 100644 --- a/cparser/ExtendedAsm.ml +++ b/cparser/ExtendedAsm.ml @@ -126,8 +126,6 @@ let transf_outputs loc env = function | [] -> (None, [], StringMap.empty, 0, 0) | [(lbl, cstr, e)] -> - if not (is_modifiable_lvalue env e) then - error loc "asm output is not a modifiable l-value"; let valid = Str.string_match re_valid_output cstr 0 in if valid && String.contains cstr 'r' then if is_reg_pair env e.etyp then |