diff --git a/src/kernel_internals/parsing/cparser.mly b/src/kernel_internals/parsing/cparser.mly index 965974d98d91be45ac1eb29b2ebb856e2b26b2f3..7da75c2c4a11cc2ee4e1c1d97e3be8f2341c9254 100644 --- a/src/kernel_internals/parsing/cparser.mly +++ b/src/kernel_internals/parsing/cparser.mly @@ -736,10 +736,7 @@ string_constant: back to a string for easy viewing. */ string_list { intlist_to_string (fst $1), snd $1 } ; -one_string_constant: -/* Don't concat multiple strings. For asm templates. */ - CST_STRING { intlist_to_string (fst $1) } -; + string_list: one_string { fst $1, snd $1 } | string_list one_string { merge_string $1 $2 } @@ -1674,8 +1671,8 @@ asmattr: | CONST asmattr { ("const", []) :: $2 } ; asmtemplate: - one_string_constant { [$1] } -| one_string_constant asmtemplate { $1 :: $2 } + one_string { [intlist_to_string (fst $1)] } +| one_string asmtemplate { intlist_to_string (fst $1) :: $2 } ; asmoutputs: /* empty */ { None } @@ -1711,8 +1708,8 @@ asmclobber: | COLON asmcloberlst_ne asmlabels { $2,$3 } ; asmcloberlst_ne: - one_string_constant { [$1] } -| one_string_constant COMMA asmcloberlst_ne { $1 :: $3 } + string_constant { [fst $1] } +| string_constant COMMA asmcloberlst_ne { fst $1 :: $3 } ; asmlabels: | /* empty */ { [] } diff --git a/tests/syntax/assembly_gmp.c b/tests/syntax/assembly_gmp.c index 91147a158763ae13d17eecc141f65177efbffdcc..0d39854c42ebfe3febd235f71c57c8f1622c99ba 100644 --- a/tests/syntax/assembly_gmp.c +++ b/tests/syntax/assembly_gmp.c @@ -191,4 +191,7 @@ asm("sidt %0\n" : :"m"(loc)); asm ("movq $36, (%0)": : "r"(pulValue)); +int a = 2, b = 3; + __asm__("mov %1, %0" : "=r"(a) :"r"(b): "%""eax"); + } diff --git a/tests/syntax/oracle/assembly_gmp.0.res.oracle b/tests/syntax/oracle/assembly_gmp.0.res.oracle index 64d451b45f1a20cc24976fa1ca92cb13c5d54f14..eb6853729c532ff192694d011b4a8e2b0a5795db 100644 --- a/tests/syntax/oracle/assembly_gmp.0.res.oracle +++ b/tests/syntax/oracle/assembly_gmp.0.res.oracle @@ -140,6 +140,11 @@ void f(void) \from (indirect: pulValue), *(pulValue + (..)); */ __asm__ ("movq $36, (%0)" : : "r" (pulValue)); + int a = 2; + int b = 3; + /*@ assigns a; + assigns a \from b; */ + __asm__ ("mov %1, %0" : "=r" (a) : "r" (b) : "%eax"); return; } diff --git a/tests/syntax/oracle/assembly_gmp.1.res.oracle b/tests/syntax/oracle/assembly_gmp.1.res.oracle index 34e7312b07b692b03ba45ef8ca317bb7153bd342..63a12b1b07bab4c049fb972e2f853cc2330cf8dd 100644 --- a/tests/syntax/oracle/assembly_gmp.1.res.oracle +++ b/tests/syntax/oracle/assembly_gmp.1.res.oracle @@ -123,6 +123,11 @@ void f(void) \from (indirect: pulValue), *(pulValue + (..)); */ __asm__ ("movq $36, (%0)" : : "r" (pulValue)); + int a = 2; + int b = 3; + /*@ assigns a; + assigns a \from b; */ + __asm__ ("mov %1, %0" : "=r" (a) : "r" (b) : "%eax"); return; } diff --git a/tests/syntax/oracle/assembly_gmp.2.res.oracle b/tests/syntax/oracle/assembly_gmp.2.res.oracle index 914bb19ed1476f45db64f94d9d29cbdd5a6d1830..2684a9a66550dfd450d38cd9166036597ebdab3b 100644 --- a/tests/syntax/oracle/assembly_gmp.2.res.oracle +++ b/tests/syntax/oracle/assembly_gmp.2.res.oracle @@ -122,6 +122,11 @@ void f(void) \from (indirect: pulValue), *(pulValue + (..)); */ __asm__ ("movq $36, (%0)" : : "r" (pulValue)); + int a = 2; + int b = 3; + /*@ assigns a; + assigns a \from b; */ + __asm__ ("mov %1, %0" : "=r" (a) : "r" (b) : "%eax"); return; }