diff options
author | Alexander Bokovoy <ab@samba.org> | 2013-02-06 10:17:57 +0200 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2013-07-04 10:04:31 +0200 |
commit | b5a8afd6550e9091d169d3010751913bb483fc4b (patch) | |
tree | a3e0924df605ae805c27785ab16160e5b40f953a /pidl | |
parent | e98d3b7648fe298f03e408ab91b8b53904bab8ca (diff) | |
download | samba-b5a8afd6550e9091d169d3010751913bb483fc4b.tar.gz |
PIDL: fix parsing linemarkers in preprocessor output
When PIDL calls out to C preprocessor to expand IDL files
and parse the output, it filters out linemarkers and line control
information as described in http://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html
and http://gcc.gnu.org/onlinedocs/cpp/Line-Control.html#Line-Control
With gcc 4.8 stdc-predef.h is included automatically and linemarker for the
file has extended flags that PIDL couldn't parse ('system header that needs to
be extern "C" protected for C++')
Thanks to Jakub Jelinek <jakub@redhat.com> for explanation of the linemarker format.
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=906517
Reviewed-by: Andreas Schneider <asn@samba.org>
(cherry picked from commit 6ba7ab5c14801aecae96373d5a9db7ab82957526)
Signed-off-by: Andreas Schneider <asn@samba.org>
Fix bug #9636 - pidl can't parse new linemarkers in preprocessor output.
(cherry picked from commit 643571470f2e4cd2f58bd60ac7189abb826d33cc)
Diffstat (limited to 'pidl')
-rw-r--r-- | pidl/idl.yp | 4 | ||||
-rw-r--r-- | pidl/lib/Parse/Pidl/IDL.pm | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/pidl/idl.yp b/pidl/idl.yp index b5c5185fbe1..c8a65f6f629 100644 --- a/pidl/idl.yp +++ b/pidl/idl.yp @@ -610,7 +610,9 @@ again: for ($parser->YYData->{INPUT}) { if (/^\#/) { - if (s/^\# (\d+) \"(.*?)\"( \d+|)//) { + # Linemarker format is described at + # http://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html + if (s/^\# (\d+) \"(.*?)\"(( \d+){1,4}|)//) { $parser->YYData->{LINE} = $1-1; $parser->YYData->{FILE} = $2; goto again; diff --git a/pidl/lib/Parse/Pidl/IDL.pm b/pidl/lib/Parse/Pidl/IDL.pm index d4820ffe92c..6927c892556 100644 --- a/pidl/lib/Parse/Pidl/IDL.pm +++ b/pidl/lib/Parse/Pidl/IDL.pm @@ -2576,7 +2576,9 @@ again: for ($parser->YYData->{INPUT}) { if (/^\#/) { - if (s/^\# (\d+) \"(.*?)\"( \d+|)//) { + # Linemarker format is described at + # http://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html + if (s/^\# (\d+) \"(.*?)\"(( \d+){1,4}|)//) { $parser->YYData->{LINE} = $1-1; $parser->YYData->{FILE} = $2; goto again; |