This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: broken FE diagnostics wrt complex expressions


2008/8/13 Aldy Hernandez <aldyh@redhat.com>:
>
> 1. beginning/ending locations functionality as Joseph suggests.
> 2. make sure the parsers pick the proper token/location.
> 3. error reporting machinery

There are various issues that would need to be addressed to have
decent caret diagnostics:

1) We only track one location for each token, so things that are
macro-expanded are difficult to get right (in some cases we want the
original location and in other occasions we want the macro call
location. In many cases we want both). Ideally we could encode this
information in a single location_t object.

2) During parsing, token locations are underused. Ideally, every
diagnostic should use a explicit location (input_location must die).
Also, most build_something calls should take location info.

3) After parsing, few objects have location (because the
build_something functions do not typically track it). Ideally for a
binary operator we would be able to know the location of the operator
and its operands, so we can print something like (as clang does):

error: invalid operands to binary operator '+'
 ((someA.X + 40) + some.A)
 ~~~~~~~~~~~~~~~~^~~~~~~~~

4) Find a way to move from a location_t to a null-terminated const
char * as efficiently as possible. The patch I just submitted uses the
most straightforward approach but improvements should be possible.

5) Make libcpp use the diagnostics.[ch] machinery. This will simplify
many things, and avoid code duplication.

Most of these things can be tackled independently. I am slowly
tackling 2) and 4).

Cheers,

Manuel.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]