diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 50fe87cc66c618058cda2d0451368a7922a45c68..d4abc1e85b749583bf5402732e56af891a4c9fab 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+Fri Aug 20 19:07:55 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+	* rtl.c (rtx_class, note_insn_name, reg_note_name): Constify.
+
+	* rtl.h (rtx_class, reg_note_name, note_insn_name): Likewise.
+
+	* genopinit.c (gen_insn): Use accessor macro, not `rtx_class'.
+
 Fri Aug 20 18:53:43 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* rtl.h (rtx_format): Constify a char*.
diff --git a/gcc/genopinit.c b/gcc/genopinit.c
index c9dd88d5fef5226d17eef799a5ce6404cd082f32..31eecd2af8a334b6cf9552b187877cf8012a137a 100644
--- a/gcc/genopinit.c
+++ b/gcc/genopinit.c
@@ -183,7 +183,7 @@ gen_insn (insn)
 		    /* We have to be concerned about matching "gt" and
 		       missing "gtu", e.g., so verify we have reached the
 		       end of thing we are to match.  */
-		    if (*p == 0 && *q == 0 && rtx_class[op] == '<')
+		    if (*p == 0 && *q == 0 && GET_RTX_CLASS(op) == '<')
 		      break;
 		  }
 
diff --git a/gcc/rtl.c b/gcc/rtl.c
index 49f60353810292337f98f8798eaa4f41b3227e28..bf997509f7823314d4cd1605f741f89298405a23 100644
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -167,7 +167,7 @@ const char *rtx_format[] = {
 /* Indexed by rtx code, gives a character representing the "class" of
    that rtx code.  See rtl.def for documentation on the defined classes.  */
 
-char rtx_class[] = {
+const char rtx_class[] = {
 #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   CLASS, 
 #include "rtl.def"		/* rtl expressions are defined here */
 #undef DEF_RTL_EXPR
@@ -175,7 +175,7 @@ char rtx_class[] = {
 
 /* Names for kinds of NOTEs and REG_NOTEs.  */
 
-char *note_insn_name[] = { 0                    , "NOTE_INSN_DELETED",
+const char * const note_insn_name[] = { 0       , "NOTE_INSN_DELETED",
 			   "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END",
 			   "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END",
 			   "NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP",
@@ -187,7 +187,7 @@ char *note_insn_name[] = { 0                    , "NOTE_INSN_DELETED",
 			   "NOTE_INSN_RANGE_END", "NOTE_INSN_LIVE",
 			   "NOTE_INSN_BASIC_BLOCK" };
 
-char *reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0",
+const char * const reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0",
 			  "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL",
 			  "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
 			  "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
diff --git a/gcc/rtl.h b/gcc/rtl.h
index a5cb3870ec80b624a5a81bc004753f6321ba869f..381e66d74d339cb76c59dfd7f24fd835f6bfb95e 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -57,7 +57,7 @@ extern const char * const rtx_name[];
 extern const char *rtx_format[];
 #define GET_RTX_FORMAT(CODE)		(rtx_format[(int) (CODE)])
 
-extern char rtx_class[];
+extern const char rtx_class[];
 #define GET_RTX_CLASS(CODE)		(rtx_class[(int) (CODE)])
 
 /* The flags and bitfields of an ADDR_DIFF_VEC.  BASE is the base label
@@ -378,7 +378,7 @@ enum reg_note { REG_DEAD = 1, REG_INC = 2, REG_EQUIV = 3, REG_WAS_0 = 4,
 
 /* Names for REG_NOTE's in EXPR_LIST insn's.  */
 
-extern char *reg_note_name[];
+extern const char * const reg_note_name[];
 #define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int) (MODE)])
 
 /* This field is only present on CALL_INSNs.  It holds a chain of EXPR_LIST of
@@ -479,7 +479,7 @@ extern char *reg_note_name[];
 
 /* Names for NOTE insn's other than line numbers.  */
 
-extern char *note_insn_name[];
+extern const char * const note_insn_name[];
 #define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)])
 
 /* The name of a label, in case it corresponds to an explicit label