diff --git a/cfrontend/C2Clight.ml b/cfrontend/C2Clight.ml
index fb939a406908bcebe4624826085d7a81534fe1b9..1be7aaeaa8421c7e45c6fbabda8ba0e5a63b05cf 100644
--- a/cfrontend/C2Clight.ml
+++ b/cfrontend/C2Clight.ml
@@ -764,13 +764,14 @@ let convertProgram p =
 
 (** ** Extracting information about global variables from their atom *)
 
-let type_is_readonly env t =
-  let a1 = Cutil.attributes_of_type env t in
-  let a =
-    match Cutil.unroll env t with
-    | C.TArray(ty, _, _) -> a1 @ Cutil.attributes_of_type env ty
-    | _ -> a1 in
-  List.mem C.AConst a && not (List.mem C.AVolatile a)
+let rec type_is_readonly env t =
+  let a = Cutil.attributes_of_type env t in
+  if List.mem C.AVolatile a then false else
+  if List.mem C.AConst a then true else
+  match Cutil.unroll env t with
+  | C.TArray(t', _, _) -> type_is_readonly env t'
+  | _ -> false
+  end
 
 let atom_is_static a =
   try
diff --git a/test/regression/pragmas.c b/test/regression/pragmas.c
index 43daa32a75686ca0f11f1a171035773f931db609..36361cdbf8cc00baf3da71e8fcf6b6474c24f577 100644
--- a/test/regression/pragmas.c
+++ b/test/regression/pragmas.c
@@ -35,11 +35,13 @@ int f(int n)
 /* Redefining some standard sections */
 
 #pragma section SCONST ".myconst" ".myconst" far-absolute R
+#pragma section CONST ".myconst" ".myconst" far-absolute R
 #pragma section DATA ".mysda_i" ".mysda_u" near-data RW
 #pragma section CODE ".mycode" ".mycode" standard RX
 
 const double v = 1.414;
 int w[10];
+const char t[5][5] = { 1, 2, 3 };
 
 double h(int n)
 {