[Bug rust/21484] watch -location does not work with rust

cvs-commit at gcc dot gnu.org sourceware-bugzilla@sourceware.org
Sat May 20 04:14:00 GMT 2017


https://sourceware.org/bugzilla/show_bug.cgi?id=21484

--- Comment #2 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tom Tromey <tromey@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=43cc5389bc4662b31cad02a9f13358bd367d0ab3

commit 43cc5389bc4662b31cad02a9f13358bd367d0ab3
Author: Tom Tromey <tom@tromey.com>
Date:   Sun May 14 11:12:14 2017 -0600

    Use watchpoint's language when re-parsing expression

    PR rust/21484 notes that watch -location does not work with Rust:

        (gdb) watch -location a
        syntax error in expression, near `) 0x00007fffffffe0f4'.

    update_watchpoint tries to tell gdb that the new expression it creates
    has C syntax:

          /* The above expression is in C.  */
          b->language = language_c;

    However, update_watchpoint doesn't actually use this language when
    re-parsing the expression.

    Originally I was going to fix this by saving and restoring the
    language in update_watchpoint, but this regressed
    gdb.dlang/watch-loc.exp, because the constructed expression actually
    has D syntax (specifically the name is not parseable by C).

    Next I looked at directly constructing an expression, and not relying
    on the parser at all; but it seemed to me that upon a re-set, we'd
    want to reparse the type, and there is no existing API to do this
    correctly.

    So, in the end I made a hook to let each language choose what
    expression to use.  I made all the languages other than Rust use the C
    expression, because that is the status quo ante.  However, this is
    probably not truly correct.  After this patch, at least, it is easy to
    correct by someone who knows the language(s) in question.

    Regtested by the buildbot.

    ChangeLog
    2017-05-19  Tom Tromey  <tom@tromey.com>

        PR rust/21484:
        * rust-lang.c (exp_descriptor_rust): New function.
        (rust_language_defn): Use it.
        * p-lang.c (pascal_language_defn): Update.
        * opencl-lang.c (opencl_language_defn): Update.
        * objc-lang.c (objc_language_defn): Update.
        * m2-lang.c (m2_language_defn): Update.
        * language.h (struct language_defn)
        <la_watch_location_expression>: New member.
        * language.c (unknown_language_defn, auto_language_defn)
        (local_language_defn): Update.
        * go-lang.c (go_language_defn): Update.
        * f-lang.c (f_language_defn): Update.
        * d-lang.c (d_language_defn): Update.
        * c-lang.h (c_watch_location_expression): Declare.
        * c-lang.c (c_watch_location_expression): New function.
        (c_language_defn, cplus_language_defn, asm_language_defn)
        (minimal_language_defn): Use it.
        * breakpoint.c (watch_command_1): Call
        la_watch_location_expression.
        * ada-lang.c (ada_language_defn): Update.

    testsuite/ChangeLog
    2017-05-19  Tom Tromey  <tom@tromey.com>

        PR rust/21484:
        * gdb.rust/watch.exp: New file.
        * gdb.rust/watch.rs: New file.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the Gdb-prs mailing list