diff mbox

[AVR,4.6+trunk] : PR44643 addendum

Message ID 4E0C438A.8010604@gjlay.de
State New
Headers show

Commit Message

Georg-Johann Lay June 30, 2011, 9:36 a.m. UTC
avr_insert_attributes uses TREE_READONLY on get readonlyness of node.

That does not work for C++ arrays: it gives false error
"variable must be const in order to be put into read-only section by
means of '__attribute__((progmem))'".

This patch peels arrays and uses TYPE_READONLY.

I did not open separate PR for this, tagged it as addendum to PR44643
instead.

Lightly tested on own code. There is no 'progmem' in testsuite, so
from testsuite's perspective that code is dead, anyway...

Johann

	PR target/44643
	* config/avr/avr.c (avr_insert_attributes): Use TYPE_READONLY
	instead of TREE_READONLY.

Comments

Georg-Johann Lay July 4, 2011, 10:17 a.m. UTC | #1
Georg-Johann Lay wrote:

http://gcc.gnu.org/ml/gcc-patches/2011-06/msg02318.html

> avr_insert_attributes uses TREE_READONLY on get readonlyness of node.
> 
> That does not work for C++ arrays: it gives false error
> "variable must be const in order to be put into read-only section by
> means of '__attribute__((progmem))'".
> 
> This patch peels arrays and uses TYPE_READONLY.
> 
> I did not open separate PR for this, tagged it as addendum to PR44643
> instead.
> 
> Lightly tested on own code. There is no 'progmem' in testsuite, so
> from testsuite's perspective that code is dead, anyway...
> 
> Johann
> 
> 	PR target/44643
> 	* config/avr/avr.c (avr_insert_attributes): Use TYPE_READONLY
> 	instead of TREE_READONLY.
>
Denis Chertykov July 4, 2011, 12:10 p.m. UTC | #2
2011/7/4 Georg-Johann Lay <avr@gjlay.de>:
> Georg-Johann Lay wrote:
>
> http://gcc.gnu.org/ml/gcc-patches/2011-06/msg02318.html
>
>> avr_insert_attributes uses TREE_READONLY on get readonlyness of node.
>>
>> That does not work for C++ arrays: it gives false error
>> "variable must be const in order to be put into read-only section by
>> means of '__attribute__((progmem))'".
>>
>> This patch peels arrays and uses TYPE_READONLY.
>>
>> I did not open separate PR for this, tagged it as addendum to PR44643
>> instead.
>>
>> Lightly tested on own code. There is no 'progmem' in testsuite, so
>> from testsuite's perspective that code is dead, anyway...
>>
>> Johann
>>
>>       PR target/44643
>>       * config/avr/avr.c (avr_insert_attributes): Use TYPE_READONLY
>>       instead of TREE_READONLY.

Approved.

Denis.
diff mbox

Patch

Index: config/avr/avr.c
===================================================================
--- config/avr/avr.c	(revision 175629)
+++ config/avr/avr.c	(working copy)
@@ -5030,7 +5030,19 @@  avr_insert_attributes (tree node, tree *
       && (TREE_STATIC (node) || DECL_EXTERNAL (node))
       && avr_progmem_p (node, *attributes))
     {
-      if (TREE_READONLY (node)) 
+      tree node0 = node;
+
+      /* For C++, we have to peel arrays in order to get correct
+         determination of readonlyness.  */
+      
+      do
+        node0 = TREE_TYPE (node0);
+      while (TREE_CODE (node0) == ARRAY_TYPE);
+
+      if (error_mark_node == node0)
+        return;
+      
+      if (TYPE_READONLY (node0))
         {
           static const char dsec[] = ".progmem.data";