This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: issue with placing includes in gcc-plugin.h
- From: Kugan <kugan dot vivekanandarajah at linaro dot org>
- To: Prathamesh Kulkarni <prathamesh dot kulkarni at linaro dot org>, Richard Biener <rguenther at suse dot de>
- Cc: Andrew MacLeod <amacleod at redhat dot com>, Michael Collison <michael dot collison at linaro dot org>, Maxim Kuvyrkov <maxim dot kuvyrkov at linaro dot org>, gcc at gcc dot gnu dot org
- Date: Wed, 14 Jan 2015 21:43:33 +1100
- Subject: Re: issue with placing includes in gcc-plugin.h
- Authentication-results: sourceware.org; auth=none
- References: <CAAgBjMk2mX0rXipeWkkvWDV+vDL8StbfWMaGBCyZ=RKtvud3fw at mail dot gmail dot com> <alpine dot LSU dot 2 dot 11 dot 1501141006400 dot 12482 at zhemvz dot fhfr dot qr> <CAAgBjM=q=Ci3r+Z3V4A4iD4-8dss_Xfq-ZPeXZo6fJUoT3pGJg at mail dot gmail dot com>
On 14/01/15 21:24, Prathamesh Kulkarni wrote:
> On 14 January 2015 at 14:37, Richard Biener <rguenther@suse.de> wrote:
>> On Wed, 14 Jan 2015, Prathamesh Kulkarni wrote:
>>
>>> Hi,
>>> I am having an issue with placing includes of expr.h in gcc-plugin.h.
>>> rtl.h is required to be included before expr.h, so I put it in gcc-plugin.h.
>>> However the front-ends then fail to build because rtl.h is not allowed
>>> in front-ends,
>>> and the front-ends include gcc-plugin.h (via plugin.h).
>>>
>>> For instance ada/gcc-interface/misc.c failed to build with following error:
>>> In file included from ../../gcc/gcc/gcc-plugin.h:64:0,
>>> from ../../gcc/gcc/plugin.h:23,
>>> from ../../gcc/gcc/ada/gcc-interface/misc.c:53:
>>> ../../gcc/gcc/rtl.h:20:9: error: attempt to use poisoned "GCC_RTL_H"
>>>
>>> However rtl.h is required to be included before expr.h, so we cannot skip
>>> including rtl.h in gcc-plugin.h. How do we get around this ?
>>> As a temporary hack, could we #undef IN_GCC_FRONTEND in gcc-plugin.h ?
>>> java/builtins.c does this to include expr.h.
>>
>> Err - obviously nothing in GCC itself should include gcc-plugin.h,
>> only plugins should. Do we tell plugins that they should include
>> plugin.h?! Why is the include in there?
>>
>> I'd simply remove it....
> That doesn't work.
> For instance removing plugin.h include from c/c-decl.h resulted in
> following build errors:
> ../../gcc/gcc/c/c-decl.c: In function \u2018void finish_decl(tree,
> location_t, tree, tree, tree)\u2019:
> ../../gcc/gcc/c/c-decl.c:4990:27: error:
> \u2018PLUGIN_FINISH_DECL\u2019 was not declared in this scope
> ../../gcc/gcc/c/c-decl.c:4990:51: error:
> \u2018invoke_plugin_callbacks\u2019 was not declared in this scope
> ../../gcc/gcc/c/c-decl.c: In function \u2018void finish_function()\u2019:
> ../../gcc/gcc/c/c-decl.c:9009:29: error:
> \u2018PLUGIN_PRE_GENERICIZE\u2019 was not declared in this scope
> ../../gcc/gcc/c/c-decl.c:9009:58: error:
> \u2018invoke_plugin_callbacks\u2019 was not declared in this scope
> make[3]: *** [c/c-decl.o] Error 1
> make[2]: *** [all-stage1-gcc] Error 2
> make[1]: *** [stage1-bubble] Error 2
> make: *** [all] Error 2
>
> Why do the front-ends require to include plugin.h ?
C/C++ Front-end seems to have callbacks to process declarations. Please
look at https://gcc.gnu.org/ml/gcc-patches/2010-04/msg00780.html which
added callback PLUGIN_FINISH_DECL.
Thanks,
Kugan