tree.h (CONSTRUCTOR_BITFIELD_P): True if NODE...
* tree.h (CONSTRUCTOR_BITFIELD_P): True if NODE, a FIELD_DECL, is
to be processed as a bitfield for constructor output purposes.
* output.h (initializer_constant_valid_for_bitfield_p): Declare
new function.
* varasm.c (oc_local_state): New type, output_constructor
local state to support communication with helpers.
(oc_outer_state): New type, output_constructor outer state of
relevance in recursive calls.
(output_constructor_array_range): New output_constructor helper,
extracted code for an array range element.
(output_constructor_regular_field): New output_constructor helper,
extracted code for an element that is not a bitfield.
(output_constructor_bitfield): New output_constructor helper,
extracted code for a bitfield element. Accept an OUTER state
argument for recursive processing. Recurse on record or array
CONSTRUCTOR values, possibly past noop conversions.
(initializer_constant_valid_for_bitfield_p): New predicate. Whether
VALUE is a valid constant-valued expression for use in a static
bit-field initializer.
(output_constructor): Rework to use helpers. Accept and honor an
OUTER state argument for recursive calls. Return total size. Be
prepared for nested constructors initializing bitfields.
(output_constant): Feed OUTER in calls to output_constructor.
ada/
* gcc-interface/utils2.c (gnat_build_constructor): Factor
out code. Use initializer_constant_valid_for_bitfield_p and
CONSTRUCTOR_BITFIELD_P for bit-fields.
testsuite/
* gnat.dg/oconst[1-6].ad[bs]: New tests. Also support for ...
* gnat.dg/test_oconst.adb: New test.
Co-Authored-By:
Eric Botcazou <ebotcazou@adacore.com>
From-SVN: r148045
Showing
- gcc/ChangeLog 27 additions, 0 deletionsgcc/ChangeLog
- gcc/ada/ChangeLog 7 additions, 0 deletionsgcc/ada/ChangeLog
- gcc/ada/gcc-interface/utils2.c 12 additions, 11 deletionsgcc/ada/gcc-interface/utils2.c
- gcc/output.h 5 additions, 0 deletionsgcc/output.h
- gcc/testsuite/ChangeLog 5 additions, 0 deletionsgcc/testsuite/ChangeLog
- gcc/testsuite/gnat.dg/oconst1.adb 18 additions, 0 deletionsgcc/testsuite/gnat.dg/oconst1.adb
- gcc/testsuite/gnat.dg/oconst1.ads 25 additions, 0 deletionsgcc/testsuite/gnat.dg/oconst1.ads
- gcc/testsuite/gnat.dg/oconst2.adb 15 additions, 0 deletionsgcc/testsuite/gnat.dg/oconst2.adb
- gcc/testsuite/gnat.dg/oconst2.ads 23 additions, 0 deletionsgcc/testsuite/gnat.dg/oconst2.ads
- gcc/testsuite/gnat.dg/oconst3.adb 16 additions, 0 deletionsgcc/testsuite/gnat.dg/oconst3.adb
- gcc/testsuite/gnat.dg/oconst3.ads 26 additions, 0 deletionsgcc/testsuite/gnat.dg/oconst3.ads
- gcc/testsuite/gnat.dg/oconst4.adb 24 additions, 0 deletionsgcc/testsuite/gnat.dg/oconst4.adb
- gcc/testsuite/gnat.dg/oconst4.ads 66 additions, 0 deletionsgcc/testsuite/gnat.dg/oconst4.ads
- gcc/testsuite/gnat.dg/oconst5.adb 15 additions, 0 deletionsgcc/testsuite/gnat.dg/oconst5.adb
- gcc/testsuite/gnat.dg/oconst5.ads 27 additions, 0 deletionsgcc/testsuite/gnat.dg/oconst5.ads
- gcc/testsuite/gnat.dg/oconst6.ads 18 additions, 0 deletionsgcc/testsuite/gnat.dg/oconst6.ads
- gcc/testsuite/gnat.dg/test_oconst.adb 13 additions, 0 deletionsgcc/testsuite/gnat.dg/test_oconst.adb
- gcc/tree.h 5 additions, 0 deletionsgcc/tree.h
- gcc/varasm.c 468 additions, 274 deletionsgcc/varasm.c
Loading
Please register or sign in to comment