On Tue, Nov 15, 2022 at 01:35:05PM -0500, David Malcolm wrote: > On Mon, 2022-11-14 at 15:42 -0500, Marek Polacek wrote: > > On Fri, Nov 11, 2022 at 10:23:10PM -0500, David Malcolm wrote: > > > Changes since v1: ported the doc changes from texinfo to sphinx > > > > > > Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. > > > > > > Are the C frontend parts OK for trunk? (I can self-approve the > > > analyzer parts) > > > > Sorry for the delay. > > > > > The patch adds an interface for frontends to call into the analyzer > > > as > > > the translation unit finishes. The analyzer can then call back > > > into the > > > frontend to ask about the values of the named constants it cares > > > about > > > whilst the frontend's data structures are still around. > > > > > > The patch implements this for the C frontend, which looks up the > > > names > > > by looking for named CONST_DECLs (which handles enum values). > > > Failing > > > that, it attempts to look up the values of macros but only the > > > simplest > > > cases are supported (a non-traditional macro with a single > > > CPP_NUMBER > > > token). It does this by building a buffer containing the macro > > > definition and rerunning a lexer on it. > > > > > > The analyzer gracefully handles the cases where named values aren't > > > found (such as anything more complicated than described above). > > > > > > The patch ports the analyzer to use this mechanism for "O_RDONLY", > > > "O_WRONLY", and "O_ACCMODE". I have successfully tested my socket > > > patch > > > to also use this for "SOCK_STREAM" and "SOCK_DGRAM", so the > > > technique > > > seems to work. > > > > So this works well for code like > > > > enum __socket_type { > > SOCK_STREAM = 1, > > > > #define SOCK_STREAM SOCK_STREAM > > }; > > > > ? > > Yes: c_translation_unit::lookup_constant_by_id does the "lookup_name" > first, and this finds the CONST_DECL, so it doesn't need to look at > macros for this case.
Ah, nice. > I've added a testcase for this in the v3 patch (gcc.dg/analyzer/named- > constants-via-enum-and-macro.c) Thanks. > Thanks for the review. Here's a v3 version of the patch. > > Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. > > Are the C FE parts OK for trunk? Ok, thanks. Marek