/*
 *  Copyright (C) 2007 PathScale, LLC.  All Rights Reserved.
 */

/*
 *  Copyright (C) 2006. QLogic Corporation. All Rights Reserved.
 */

/*
 * Copyright 2004, 2005, 2006 PathScale, Inc.  All Rights Reserved.
 */

/*

  Copyright (C) 2000, 2001 Silicon Graphics, Inc.  All Rights Reserved.

   Path64 is free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   Path64 is distributed in the hope that it will be useful, but WITHOUT
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
   License for more details.

   You should have received a copy of the GNU General Public License
   along with Path64; see the file COPYING.  If not, write to the Free
   Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
   02110-1301, USA.

   Special thanks goes to SGI for their continued support to open source

*/

/* ====================================================================
 * ====================================================================
 *
 * Module: erglob.cxx
 * $Revision: 1.18 $
 * $Date: 05/03/10 16:47:52-08:00 $
 * $Author: bos@eng-25.internal.keyresearch.com $
 * $Source: /home/bos/bk/kpro64-pending/common/com/SCCS/s.erglob.desc $
 *
 * Revision history:
 *  07-Sep-89 - Original Version
 *  24-Jan-91 - Copied for TP/Muse
 *  21-Oct-91 - Finished removing Josie messages.
 *
 * Description:
 *
 * Provide the global error message descriptors for the error codes
 * defined in erglob.h.
 *
 * ====================================================================
 * ====================================================================
 */

#include "erglob.h"

ERROR_DESC EDESC_Globals[] = {
  /* The following error code should be the first global error code:
   * it is used to report unrecognized error codes.
   */
  { EC_Undef_Code,	EM_Compiler | EM_Unknown | ES_ERRPHASE,	RAG_EN_NONE,
    "Unknown error code %d",
    1, ET_INT, 0, 0, 0, 0, 0 },

  /* The following provide predefined error codes for lazy users:
   * the message parameters are a string identifying the location
   * of the error, and a second parameter of the indicated type.
   */
  { EC_Misc_Int,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Lazy error report in %s: %d",
    2, ET_STRING, ET_INT, 0,0,0,0 },
  { EC_Misc_Float,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Lazy error report in %s: %s",
    2, ET_STRING, ET_FLOAT, 0,0,0,0 },
  { EC_Misc_Double,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Lazy error report in %s: %s",
    2, ET_STRING, ET_DOUBLE, 0,0,0,0 },
  { EC_Misc_Pointer,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Lazy error report in %s: %s",
    2, ET_STRING, ET_POINTER, 0,0,0,0 },
  { EC_Misc_String,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Lazy error report in %s: %s",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
  { EC_Misc_Strtab,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Lazy error report in %s: %s",
    2, ET_STRING, ET_STRTAB, 0,0,0,0 },
  { EC_Misc_Symtab,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Lazy error report in %s: %s",
    2, ET_STRING, ET_SYMTAB, 0,0,0,0 },
  { EC_Misc_TN,		EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Lazy error report in %s: %s",
    2, ET_STRING, ET_TN, 0,0,0,0 },
  { EC_Misc_Node,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Lazy error report in %s: %s",
    2, ET_STRING, ET_NODE, 0,0,0,0 },

  { EC_Signal,		EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Signal %s in phase %s -- processing aborted",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
  { EC_Too_Many,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Too many errors (%d) -- processing aborted",
    1, ET_INT, 0,0,0,0,0 },
  { EC_Unimplemented,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Unimplemented function %s",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Obsolete,	EM_Compiler | ES_WARNING,	RAG_EN_NONE,
    "Obsolete function %s: replace by %s",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
  { EC_Assertion,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Assertion failed in %s:%d : %s",
    3, ET_STRING, ET_INT, ET_STRING, 0, 0, 0 },
  { EC_Bad_Assertion,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "BAD Assertion failure in %s:%d : %s",
    3, ET_STRING, ET_INT, ET_STRING, 0, 0, 0 },
  { EC_Null_Addr,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "NULL address in %s",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_No_Mem,		EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Out of memory in %s",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Mem_Leak,	EM_Compiler | ES_WARNING,	RAG_EN_NONE,
    "%s: Memory leak -- call the plumber",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Invalid_Case,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Invalid switch statement case reached in %s:%d",
    2, ET_STRING, ET_INT, 0,0,0,0 },
  { EC_Development_Warning,	EM_Compiler | ES_WARNING,	RAG_EN_NONE,
    "Lazy warning report in %s: %s",
    2, ET_STRING, ET_STRING, 0,0,0,0 },

#if defined( KEY)
  { EC_Unimplemented_Feature,   EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "%s not implemented", 1, ET_STRING, 0,0,0,0,0 },
  { EC_Misc_User_Abort,		EM_User | ES_ERRABORT,		RAG_EN_NONE,
    "%s", 1, ET_STRING, 0,0,0,0,0 },
#endif // KEY

  { EC_Trace_Func,	EM_Compiler | ES_WARNING,	RAG_EN_NONE,
    "Trace flag function value (%d) too small",
    1, ET_INT, 0,0,0,0,0 },
  { EC_Trace_Phase,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Trace flag phase value (%d) out of range (%d..%d)",
    3, ET_INT, ET_INT, ET_INT, 0,0,0 },
  { EC_Trace_BBs,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Too many trace BBs defined (-tb%d)",
    1, ET_INT, 0,0,0,0,0 },
  { EC_Trace_PUs,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Too many trace PUs defined (-tf%s)",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Trace_REGIONs,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Too many trace REGIONs defined (-tg%s)",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Trace_Open,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Opening trace file %s: %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Trace_Control,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Control option (-tc%d) out of range [0..%d]",
    2, ET_INT, ET_INT, 0,0,0,0 },

  /* Command line processing: */
  { EC_Flag_Digit,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Option digit (%c) too large for radix",
    1, ET_INT, 0,0,0,0,0 },
  { EC_Flag_Range,	EM_User | ES_WARNING,	RAG_EN_NONE,
    /* print ET_INT64 as a string */
    "Option value (%s) out of range (%s..%s) in \"%s\"",
    4, ET_INT64, ET_INT64, ET_INT64, ET_STRING, 0,0 },
  { EC_Flag_Int_Expected,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Integer argument expected in option: %s",
    1, ET_STRING, 0, 0, 0, 0, 0 },
  { EC_List_Flag,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Unrecognized listing option (-l%c) in \"%s\"",
    2, ET_INT, ET_STRING, 0,0,0,0 },
  { EC_Trace_Flag,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Unrecognized trace option (-t%c) in \"%s\"",
    2, ET_INT, ET_STRING, 0,0,0,0 },
  { EC_Target_Flag,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Unrecognized target specifier (%c) in \"%s\"",
    2, ET_INT, ET_STRING, 0,0,0,0 },
  { EC_Target_Dup,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Duplicate target specifier ignored (-T%c) in \"%s\"",
    2, ET_INT, ET_STRING, 0,0,0,0 },
  { EC_Unknown_Flag,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Unrecognized option (%c) in \"%s\"",
    2, ET_INT, ET_STRING, 0,0,0,0 },
  { EC_File_Name,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Malformed file option (-f%c) in \"%s\"",
    2, ET_INT, ET_STRING, 0,0,0,0 },
  { EC_File_Flag,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Unrecognized file flag option (%c) in \"%s\"",
    2, ET_INT, ET_STRING, 0,0,0,0 },
  { EC_Arg_Flag,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Unrecognized pass-through option (-W%c) in \"%s\"",
    2, ET_INT, ET_STRING, 0,0,0,0 },
  { EC_Dir_Flag,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Unrecognized component directory option (-Y%c) in \"%s\"",
    2, ET_INT, ET_STRING, 0,0,0,0 },
  { EC_Flag_Opt,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Missing flag option for -%c in \"%s\"",
    2, ET_INT, ET_STRING, 0,0,0,0 },
  { EC_No_Sources,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "No source files specified in command line",
    0, 0,0,0,0,0,0 },
  { EC_Not_In_Grp,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Option '%s' not in group '%s' (%s)",
    3, ET_STRING, ET_STRING, ET_STRING, 0,0,0 },
  { EC_Ambig_In_Grp,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Option '%s' ambiguous in group '%s' (%s)",
    3, ET_STRING, ET_STRING, ET_STRING, 0,0,0 },
  { EC_Inv_Grp_Val,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Option '%s' in group '%s' has invalid value %s (%s)",
    4, ET_STRING, ET_STRING, ET_STRING, ET_STRING, 0,0 },
  { EC_Fix_g_O,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "-g conflicts with -O -- turned down to -O0",
    0, 0,0,0,0,0,0 },
  { EC_GOT_Size,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Both large and small GOT requested.  Using default (%s).",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Inv_SpecFile,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Can't open -%s specfile \"%s\"",
    2, ET_STRING, ET_STRING, 0, 0,0,0 },
  { EC_SpecFile_Opt,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Invalid option \"%s\" in -%s specfile \"%s\"",
    3, ET_STRING, ET_STRING, ET_STRING, 0,0,0 },
  { EC_Opt_Conflict,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Conflicting options \"-%s\" and \"-%s\": \"%s\" assumed",
    3, ET_STRING, ET_STRING, ET_STRING, 0,0,0 },
  { EC_Obsolete_Opt,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Obsolete option \"-%s\" -- ignored",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Replaced_Opt,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Obsolete option \"-%s\" ignored -- see \"-%s\"",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
  { EC_Unimp_Opt,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Unimplemented option \"-%s\" -- ignored",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Inv_Opt_Val,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Invalid option value in \"-%s\" -- ignored",
    1, ET_STRING, 0,0,0,0,0 },
#ifdef KEY
  { EC_No_Opt_Val,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Option  \"%s\" in group '%s' should be provided a value -- ignored",
    2, ET_STRING, ET_STRING,0,0,0,0 },
  { EC_No_Apo_Early_Mp,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "-OPT:early_mp=on ignored since it is not allowed under -apo",
    0, 0,0,0,0,0,0 },
#endif
  /* Control processing: */
  { EC_Unimp_Ctrl,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Unimplemented control \'%s\' -- ignored",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Unrec_Group,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Unrecognized control group \'%s\' -- ignored",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Ctrl_Syntax,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Syntax error in control \'%s\' -- ignored",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Ctrl_Paren,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Unbalanced parentheses in control \'%s\' -- ignored",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Unimp_Align,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Unimplemented alignment control \'%s=%d\' -- ignored",
    2, ET_STRING, ET_INT, 0,0,0,0 },
  { EC_Unimp_Actrl,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Unrecognized or unimplemented -A control or group name \'%s\'",
    1, ET_STRING, 0, 0,0,0,0 },
  { EC_Inv_Ctrl_Val,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Invalid value \'%s\' of control \'%s\' -- ignored",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
  { EC_Ctrl_Numeric,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Control \'%s\' takes numeric values -- ignored",
    1, ET_STRING, 0, 0,0,0,0 },
  { EC_Ctrl_Integer,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Control group \'%s\' takes integer values -- ignored",
    1, ET_STRING, 0, 0,0,0,0 },
  { EC_Ctrl_Range,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Value (%d) of control \'%s\' out of range (%d..%d) -- ignored",
    4, ET_INT, ET_STRING, ET_INT, ET_INT, 0,0 },
  { EC_Group_Range,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Value (%d) of control group \'%s\' out of range (%d..%d) -- ignored",
    4, ET_INT, ET_STRING, ET_INT, ET_INT, 0,0 },
  { EC_Group_Mult,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Multiple values of control group \'%s\' found -- ignored",
    1, ET_STRING, 0, 0,0,0,0 },
  { EC_File_Scope,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Attempt to change FILE or COMPILATION scope control \'%s\' by pragma",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Routine_Scope,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Attempt to change ROUTINE scope control \'%s\' inside routine",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Unimp_Once,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "%once not implemented for LOOP scope control \'%s\' -- ignored",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Change_AA,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Attempt to change AA value of \'%s\' -- ignored",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Change_BE,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Value of \'%s\' can't be changed in back end -- ignored",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Override,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Overriding explicit setting of \'%s\' by \'%s\'",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
  { EC_Inv_Ctrl_Chg,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Invalid change in controls ALIAS, CALLMOD, or REG in routine \'%s\'",
    1, ET_SYMTAB, 0,0,0,0,0 },

  /* Bit vector support: */
  { EC_BV_Invalid,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Invalid bit vector reference (bit %d) in %s:%d",
    3, ET_INT, ET_STRING, ET_INT, 0,0,0 },
  { EC_BV_Length,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Bit vector lengths don't match in %s",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Zero_Input,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Zero input to %s",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Not_Power_2,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Input to %s not a power of two: %08x",
    2, ET_STRING, ET_INT, 0,0,0,0 },
 
  /* Olimit support: */
  /* NOTE: Olimit_opt not fully supported */
  { EC_Olimit_Exceeded,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Olimit was exceeded on function %s; will not perform function-scope optimization.\n"
    "\tTo still perform function-scope optimization, use -OPT:Olimit=0 (no limit) or -OPT:Olimit=%d",
    2, ET_STRING, ET_INT, 0,0,0,0 },
  { EC_File_Olimit_Exceeded,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "To override Olimit for all functions in file, use -OPT:Olimit=%d\n"
    "\t(Compiler may run out of memory or run very slowly for"
    " large Olimit values)",
    1, ET_INT, 0, 0,0,0,0 },
  { EC_Not_Optimized,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Function %s (#%d) was not optimized",
    2, ET_STRING, ET_INT, 0,0,0,0 },
  { EC_LNO_Backoff,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Function %s was optimized with -LNO:ou=%d:fusion=%d",
    3, ET_STRING, ET_INT, ET_INT,0,0,0 },
  { EC_ORI_Invoked,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Olimit was exceeded on function %s; will insert regions.\n"
    "\tTo optimize without regions use -OPT:Olimit=0\n"
    "\tor -OPT:Olimit_opt=off to avoid optimization",
    2, ET_STRING, ET_INT, 0,0,0,0 },
  { EC_Region_Skipped,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Region %d was skipped",
    1, ET_INT, 0, 0,0,0,0 },

   /* non-ANSI setjmp support */
  { EC_Not_Ansi_Setjmp,       EM_User | ES_WARNING,   RAG_EN_NONE,
     "Function %s (#%d) is optimized at -O%d because of non-ANSI setjmp",
     3, ET_STRING, ET_INT, ET_INT,0,0,0 },

#ifdef KEY
   /* Olimit support warnings: */
  { EC_Olimit_Slow,	EM_User | ES_WARNING,   RAG_EN_NONE,
    "Optimizing huge function %s because Olimit has been overridden;\n"
    "\tcompiler may run out of memory or run very slowly",
    2, ET_STRING, ET_INT, 0,0,0,0 },

   /* Inconsistent IPA optimization options passed */
  { EC_Ipa_Options,	EM_User | ES_WARNING,   RAG_EN_NONE,
    "Inconsistent optimization options detected between files involved\n"
    "\tin inter-procedural optimization.\n" 
    "\tOptimization options will be honored for the functions in each file.",
    0, 0, 0, 0, 0, 0, 0 },
   /* Inconsistent types for same symbol */
  { EC_Inc_Types,	EM_User | ES_ERRABORT,   RAG_EN_NONE,
    "Symbol %s declared both as function and variable\n",
    1, ET_STRING, 0, 0, 0, 0, 0 },
#endif

  /* Tree (ND) support: */
  { EC_B_Access,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Bad B stack access to B[%d]: nc=%d",
    2, ET_INT, ET_INT, 0, 0, 0, 0 },
  { EC_Ill_Tree_Op,	EM_Compiler | ES_WARNING,	RAG_EN_NONE,
    "Unimplemented ND operator (%s) in %s",
    2, ET_STRING, ET_STRING, 0, 0, 0, 0 },
  { EC_Bad_Tree,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Bad tree node (0x%x: %s) in %s",
    3, ET_POINTER, ET_NODE, ET_STRING, 0, 0, 0 },
  { EC_Null_Tree,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Null tree in %s",
    1, ET_STRING, 0, 0, 0, 0, 0 },
  { EC_Inv_Treenum,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid treenum %d for (0x%x: %s) at line %d",
    4, ET_INT, ET_POINTER, ET_NODE, ET_INT, 0, 0 },

#if defined( KEY)
  { EC_Bad_Omp,		EM_User | ES_ERRABORT,		RAG_EN_NONE,
    "%s", 1, ET_STRING, 0, 0, 0, 0, 0 },
  { EC_Ill_Alias,	EM_User | ES_ERRABORT,		RAG_EN_NONE,
    "Declaration of alias \"%s\" does not match its target \"%s\".",
    2, ET_STRING, ET_STRING, 0, 0, 0, 0 },
  { EC_Misc_Asm,	EM_User | ES_ERRABORT,		RAG_EN_NONE,
    "%s", 1, ET_STRING, 0, 0, 0, 0, 0 },
#endif /* KEY */

  { EC_Ill_Align,	EM_User | ES_WARNING ,	RAG_EN_NONE,
    "Illegal alignment (%d) in %s",
    2, ET_INT, ET_STRING, 0, 0, 0, 0 },

  /* Region errors: */
  { EC_Rgn_Ill_Entry,	EM_User | ES_ERRABORT,		RAG_EN_NONE,
    "A goto outside a region cannot jump to a label inside a region, %s at line %d",
    2, ET_STRING, ET_INT, 0, 0, 0, 0 },
  { EC_Rgn_Ill_Exit,	EM_User | ES_ERRABORT,		RAG_EN_NONE,
    "A goto inside a parallel construct cannot jump to a label outside the construct, %s at line %d",
    2, ET_STRING, ET_INT, 0, 0, 0, 0 },

  /* Symbol table (TY, FLD, ST, etc.) support: */
  { EC_Ill_Scope,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Illegal scope (%d) in %s",
    2, ET_INT, ET_STRING, 0, 0, 0, 0 },
  { EC_Null_TY,		EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Null TY in %s",
    1, ET_STRING, 0, 0, 0, 0, 0 },
  { EC_Null_FLD,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Null FLD in %s",
    1, ET_STRING, 0, 0, 0, 0, 0 },
  { EC_Null_ST,		EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Null ST in %s",
    1, ET_STRING, 0, 0, 0, 0, 0 },
  { EC_Inv_ST,		EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid ST '%s' in %s",
    2, ET_SYMTAB, ET_STRING, 0, 0, 0, 0 },
  { EC_Sym_Class,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Illegal class (%s) for %s in %s",
    3, ET_STRING, ET_SYMTAB, ET_STRING, 0, 0, 0 },
  { EC_Acc_Class,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid access of symbol %s: is class %s, should be %s",
    3, ET_SYMTAB, ET_STRING, ET_STRING, 0, 0, 0 },
  { EC_Acc_Class2,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid access of symbol %s: is class %s, should be %s or %s",
    4, ET_SYMTAB, ET_STRING, ET_STRING, ET_STRING, 0, 0 },
  { EC_Acc_Class3,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid access of symbol %s: is class %s, should be %s, %s or %s",
    5, ET_SYMTAB, ET_STRING, ET_STRING, ET_STRING, ET_STRING, 0 },
  { EC_Sym_Sclass,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Illegal storage class (%s) for %s in %s",
    3, ET_STRING, ET_SYMTAB, ET_STRING, 0, 0, 0 },
  { EC_Acc_Sclass,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid access of symbol %s: is storage class %s, should be %s",
    3, ET_SYMTAB, ET_STRING, ET_STRING, 0, 0, 0 },
  { EC_Acc_Aform,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid access of symbol %s: is address form %s, should be %s",
    3, ET_SYMTAB, ET_STRING, ET_STRING, 0, 0, 0 },
  { EC_Inv_TY,		EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid TY '%s' in %s",
    2, ET_STRING, ET_STRING, 0, 0, 0, 0 },
  { EC_Typ_Kind,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Illegal kind (%s) for %s in %s",
    3, ET_STRING, ET_STRING, ET_STRING, 0, 0, 0 },
  { EC_Typ_Size,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Type '%s' has invalid size %d in %s",
    3, ET_STRING, ET_INT, ET_STRING, 0, 0, 0 },
  { EC_Acc_Kind,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid access of type %s (TY%d): is kind %s, should be %s",
    4, ET_STRING, ET_INT, ET_STRING, ET_STRING, 0, 0 },
  { EC_Acc_Kind2,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid access of type %s (TY%d): is kind %s, should be %s or %s",
    5, ET_STRING, ET_INT, ET_STRING, ET_STRING, ET_STRING, 0 },
  { EC_Trunc_Sym,	EM_Compiler | ES_ADVISORY,	RAG_EN_NONE,
    "Truncating symbol to %d chars: %s...",
    2, ET_INT, ET_STRING, 0, 0, 0, 0 },
  { EC_No_Scope,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Can't find scope number %d in %s",
    2, ET_INT, ET_STRING, 0, 0, 0, 0 },
  { EC_Bad_Scope,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Expected scope number %d in %s",
    2, ET_INT, ET_STRING, 0, 0, 0, 0 },
  { EC_Inv_Slink,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid static link chain while accessing %s in %s",
    2, ET_SYMTAB, ET_STRING, 0, 0, 0, 0 },
  { EC_Excess_Count,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Too many %s in %s: limit is %d",
    3, ET_SYMTAB, ET_STRING, ET_INT, 0, 0, 0 },


  /* BB/INS/TN support: */
  { EC_Ill_BB_Kind,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Illegal basic block kind (%d) in BB:%d",
    2, ET_INT, ET_INT, 0, 0, 0, 0 },
  { EC_Ill_BB_Cond,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Illegal BB_LOGIF condition (%d) for BB:%d in %s",
    3, ET_INT, ET_INT, ET_STRING, 0, 0, 0 },
  { EC_PU_BB_Count,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid value (%d) of PU_BB_Count (max %d) in %s",
    3, ET_INT, ET_INT, ET_STRING, 0, 0, 0 },
  { EC_Null_Goto,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid NULL branch target of BB:%d in %s",
    2, ET_INT, ET_STRING, 0, 0, 0, 0 },
  { EC_TN_Count,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Too many TNs created: %s",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Out_Of,		EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Ran out of %s in %s",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
  { EC_TN_Size,		EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Illegal TN size: %d",
    1, ET_INT, 0,0,0,0,0 },
  { EC_Null_XTN,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Null XTN for %s (flags 0x%08x) in %s",
    3, ET_TN, ET_INT, ET_STRING, 0,0,0 },
  { EC_Ill_XTN,		EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Illegal to create XTN for %s (flags 0x%08x) in %s",
    3, ET_TN, ET_INT, ET_STRING, 0,0,0 },
  { EC_XTN_Kind,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid XTN kind for %s (flags 0x%08x) -- should be %s",
    3, ET_TN, ET_INT, ET_STRING, 0,0,0 },
  { EC_Dup_XTN,		EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "%s already has an XTN",
    1, ET_TN, 0,0,0,0,0 },
  { EC_Inv_Match_TN,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "%s has an invalid match_tn: %s",
    2, ET_TN, ET_TN, 0,0,0,0 },
  { EC_Null_TN,		EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Null TN in %s",
    1, ET_STRING, 0, 0, 0, 0, 0 },

/* Constant handling: */
  { EC_Ill_Divide,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Attempted divide by zero",
    0, 0, 0, 0, 0, 0, 0 },
  { EC_Ill_Modulus,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Attempted modulus by zero",
    0, 0, 0, 0, 0, 0, 0 },
  { EC_Ill_UDivide,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Attempted unsigned divide by zero",
    0, 0, 0, 0, 0, 0, 0 },
  { EC_Ill_UModulus,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Attempted unsigned modulus by zero",
    0, 0, 0, 0, 0, 0, 0 },
  { EC_Large_Const,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Constant (%s) is too large",
    1, ET_STRING, 0, 0, 0, 0, 0 },
  { EC_Exp_Oflow,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Exponentiation (%d**%d) overflow",
    2, ET_INT, ET_INT, 0, 0, 0, 0 },
  { EC_Ill_Int_Oflow,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Constant Integer overflow (%d %s %d)",
    3, ET_INT, ET_STRING, ET_INT, 0, 0, 0 },
  { EC_Ill_Quad_Const,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Illegal Quad Constant (0x%8.8x%8.8x %8.8x%8.8x) -- high half zero, low half non-zero",
    4, ET_INT, ET_INT, ET_INT, ET_INT, 0, 0 },

/* TDT manipulation: */
  { EC_TDT,		EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Inconsistent TDT: %s",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Bad_Segment,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Invalid memory segment %d in %s",
    2, ET_INT, ET_STRING, 0, 0, 0, 0 },
  { EC_Bad_Base,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Invalid base symbol '%s' for memory segment %d in %s",
    3, ET_SYMTAB, ET_INT, ET_STRING, 0, 0, 0 },
  { EC_Inv_RClass,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Invalid register class %s replacing %s",
    2, ET_STRING, ET_STRING, 0, 0, 0, 0 },
  { EC_Inv_Mtype,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Invalid machine type %s in %s",
    2, ET_STRING, ET_STRING, 0, 0, 0, 0 },
  { EC_Quad_Unimpl,	EM_Compiler | ES_WARNING,	RAG_EN_NONE,
    "Unimplemented quad FP function: %s",
    1, ET_STRING, 0,0,0,0,0 },

/* Elf and Dwarf Generation: */
  { EC_Elf_Idx,  	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid elf symbol index %d in %s",
    2, ET_INT, ET_STRING, 0, 0,0,0 },
  { EC_Elf_Align,       EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Buffer offset %d not aligned at %d",
    2, ET_INT, ET_INT, 0, 0,0,0 },
  { EC_Elf_Error,       EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Elf error: %s",
    1, ET_STRING, 0, 0, 0,0,0 },
  { EC_Elf_Size64,      EM_Compiler | ES_ERRPHASE,      RAG_EN_NONE,
    "Size too large (%s) in %s",
     2, ET_INT64, ET_STRING, 0, 0,0,0 },
  { EC_Elf_Ofst64,      EM_Compiler | ES_ERRPHASE,      RAG_EN_NONE,
    "Offset too large (%s) in %s",
    2, ET_INT64, ET_STRING, 0, 0,0,0 },

/* IR writer/reader (mtob/btom): */
  { EC_Neg_Treenum,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid tree number %d for %s in %s: should be negative",
    3, ET_INT, ET_NODE, ET_STRING, 0, 0, 0 },
  { EC_Out_Of_Sync,	EM_Compiler | ES_ERRPHASE,	RAG_EN_NONE,
    "ACIR reader out of sync after %s: %8x",
    2, ET_STRING, ET_INT, 0, 0, 0, 0 },
  { EC_Seek_DotB,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Seek failure for %s to %ld from %d: %s",
    4, ET_STRING, ET_INT, ET_INT32, ET_SYSERR, 0, 0 },
  { EC_Read_DotB,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Failed to read %d bytes (actual %d) from %s: %s",
    4, ET_INT, ET_INT, ET_STRING, ET_SYSERR, 0, 0 },
  { EC_Write_DotB,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Failed to write %d bytes (actual %d) to %s: %s",
    4, ET_INT, ET_INT, ET_STRING, ET_SYSERR, 0, 0 },

/* Configuration: */
  { EC_Inv_Target,	EM_User | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid target %s specification (%d)",
    2, ET_STRING, ET_INT, 0, 0, 0, 0 },
  { EC_Inv_TARG,	EM_User | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid target group option -TARG:%s=%s",
    2, ET_STRING, ET_STRING, 0, 0, 0, 0 },
  { EC_Incons_TARG,	EM_User | ES_ERRPHASE,	RAG_EN_NONE,
    "Inconsistent target group options -TARG:%s=%s:%s=%s",
    4, ET_STRING, ET_STRING, ET_STRING, ET_STRING, 0, 0 },
  { EC_Inv_FPRs,	EM_User | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid floating point register count -TARG:fp_regs=%d",
    1, ET_INT, 0, 0, 0, 0, 0 },
  { EC_FPR_16,		EM_User | ES_WARNING,	RAG_EN_NONE,
    "16 floating point registers not fully supported for mips3/4 ISA",
    0, 0, 0, 0, 0, 0, 0 },
  { EC_FPR_32,		EM_User | ES_ERRPHASE,	RAG_EN_NONE,
    "32 floating point registers invalid for mips1 ISA",
    0, 0, 0, 0, 0, 0, 0 },
  { EC_Inv_OPT,		EM_User | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid optimization group option -OPT:%s=%s",
    2, ET_STRING, ET_STRING, 0, 0, 0, 0 },
  { EC_Inv_x87_Prec,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Invalid x87 floating point precision: %d-bit",
    1, ET_INT, 0, 0, 0, 0, 0 },
/* Pragma errors: */
  { EC_Pragma_Scope,	EM_Compiler | ES_WARNING,	RAG_EN_NONE,
    "Pragma %s ignored: no relevant %s scope",
    2, ET_STRING, ET_STRING, 0, 0, 0, 0 },
  { EC_Is_Bad_Pragma_Abort, EM_User | ES_ERRABORT, RAG_EN_NONE,
    "Pragma %s(%s): %s",
    3, ET_STRING, ET_STRING, ET_STRING, 0,0,0 },

/* Constant folding errors: */
  { EC_Zero_And,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Unusual expression (<Boolean> & %s) will always be FALSE",
    1, ET_INT64, 0, 0, 0, 0, 0 },

/* Command-line SWP option processing: */
  { EC_Ambig_P_Heur,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Priority heuristic '%s' ambiguous", 1, ET_STRING, 0, 0, 0, 0},
  { EC_Not_P_Heur,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "No priority heuristic called '%s'", 1, ET_STRING, 0, 0, 0, 0},
  { EC_Bad_P_Heur_S,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Malformed priority heuristic string starting at '%s'",
    1, ET_STRING, 0, 0, 0, 0},
  { EC_P_Heur_No_II_BT,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "No per-II backtrack limit given for priority heuristic '%s'",
    1, ET_STRING, 0, 0, 0, 0},
  { EC_P_Heur_No_II_MU,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "No per-II memory usage backtrack limit given for priority heuristic '%s'",
    1, ET_STRING, 0, 0, 0, 0},
  { EC_P_Heur_No_II_RA,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "No per-II register allocation limit given for priority heuristic '%s'",
    1, ET_STRING, 0, 0, 0, 0},
  { EC_P_Heur_No_BT,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "No backtrack limit given for priority heuristic '%s'",
    1, ET_STRING, 0, 0, 0, 0},
  { EC_P_Heur_No_MU,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "No memory usage backtrack limit given for priority heuristic '%s'",
    1, ET_STRING, 0, 0, 0, 0},
  { EC_P_Heur_No_RA,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "No register allocation limit given for priority heuristic '%s'",
    1, ET_STRING, 0, 0, 0, 0},


/* ====================================================================
 *
 * File manipulation error descriptors
 *
 * ====================================================================
 */

  { EC_Src_Exists,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Source file (%s) already exists",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Src_Open,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't open source file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Src_Create,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't create source file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Src_Delete,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't delete source file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Src_Close,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Closing source file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_No_Src,		EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Source file (%s) does not exist",
    1, ET_STRING, 0,0,0,0,0 },

  { EC_Trc_Exists,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Trace file (%s) already exists",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Trc_Open,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't open trace file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Trc_Create,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't create trace file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Trc_Delete,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't delete trace file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Trc_Close,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Closing trace file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_No_Trc,		EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Trace file (%s) does not exist",
    1, ET_STRING, 0,0,0,0,0 },

  { EC_Lst_Exists,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Listing file (%s) already exists",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Lst_Open,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't open listing file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Lst_Create,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't create listing file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Lst_Delete,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't delete listing file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Lst_Close,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Closing listing file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_No_Lst,		EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Listing file (%s) does not exist",
    1, ET_STRING, 0,0,0,0,0 },

  { EC_Cpp_Exists,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Cpp output file (%s) already exists",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Cpp_Open,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't open cpp output file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Cpp_Create,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't create cpp output file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Cpp_Delete,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't delete cpp output file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Cpp_Close,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Closing cpp output file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_No_Cpp,		EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Cpp output file (%s) does not exist",
    1, ET_STRING, 0,0,0,0,0 },

  { EC_IR_Exists,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Intermediate compiler file (%s) already exists",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_IR_Open,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't open intermediate compiler file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_IR_Create,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't create intermediate compiler file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_IR_Delete,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't delete intermediate compiler file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_IR_Close,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Closing intermediate compiler file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_IR_Write,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Writing intermediate compiler file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_IR_Magic,	EM_User | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid magic number (%x) for intermediate compiler file (%s)",
    2, ET_INT, ET_STRING, 0,0,0,0 },
  { EC_IR_Revision,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Invalid format revision (%s) for intermediate compiler file (%s)",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
  { EC_No_IR,		EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Intermediate compiler file (%s) does not exist",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_IR_Scn_Read,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Can't read %s section in intermediate compiler file %s",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
  { EC_IR_Scn_Write,	EM_Compiler | ES_ERRABORT,	RAG_EN_NONE,
    "Can't write %s section in intermediate compiler file %s",
    2, ET_STRING, ET_STRING, 0,0,0,0 },

  { EC_Ipa_Exists,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "IPA file (%s) already exists",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Ipa_Open,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't open IPA file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Ipa_Create,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't create IPA file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Ipa_Delete,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't delete IPA file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Ipa_Close,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Closing IPA file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_No_Ipa,		EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "IPA file (%s) does not exist",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Inv_Ipa,		EM_User | ES_ERRPHASE,	RAG_EN_NONE,
    "Invalid IPA file (%s) -- ignoring",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Obs_Ipa,		EM_User | ES_ERRPHASE,	RAG_EN_NONE,
    "Out of date IPA file (%s) -- ignoring",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Ipa_Rename,      EM_User | ES_ERRPHASE,  RAG_EN_NONE,
    "Cannot rename %s to %s",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
#ifdef KEY
  { EC_Ipa_Infile,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't read IPA input file: %s",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Ipa_Outfile,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't create IPA output file: %s",
    1, ET_STRING, 0,0,0,0,0 },
#endif
  { EC_Asm_Exists,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Assembly file (%s) already exists",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Asm_Open,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't open assembly file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Asm_Create,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't create assembly file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Asm_Delete,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't delete assembly file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Asm_Close,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Closing assembly file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_No_Asm,		EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Assembly file (%s) does not exist",
    1, ET_STRING, 0,0,0,0,0 },
#if defined( KEY)
  { EC_Asm_Write,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Cannot write assembly file (%s)",
    1, ET_STRING, 0,0,0,0,0 },
#endif

  { EC_X_Exists,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    ".X file (%s) already exists",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_X_Open,		EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't open .X file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_X_Create,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't create .X file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_X_Delete,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't delete .X file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_X_Close,		EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Closing .X file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_No_X,		EM_User | ES_ERRABORT,	RAG_EN_NONE,
    ".X file (%s) does not exist",
    1, ET_STRING, 0,0,0,0,0 },

  /* Cpp invocation errors: */
  { EC_Cpp_Prep,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Cpp error preprocessing %s",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Cpp_Exec,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Attempting to preprocess %s: %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },

  /* Linker invocation errors: */
  { EC_Link,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Link error",
    0, 0, 0,0,0,0,0 },
  { EC_Link_Exec,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Attempting to link: %s",
    1, ET_SYSERR, 0, 0,0,0,0 },
  
  /* Transformation log file error */
  { EC_Tlog_Exists,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Transformation log file (%s) already exists",
    1, ET_STRING, 0,0,0,0,0 },
  { EC_Tlog_Open,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't open transformation log file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Tlog_Create,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't create transformation log file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Tlog_Delete,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't delete transformation log file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Tlog_Close,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Closing transformation log file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_No_Tlog,		EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Transformation log file (%s) does not exist",
    1, ET_STRING, 0,0,0,0,0 },

  /* Feedback file errors: */
  { EC_FB_File_Fmt,     EM_User | ES_ERRABORT,  RAG_EN_NONE,
    "Feedback file format not recognized in %s (%s)",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
  { EC_FB_Dup_Scn,      EM_User | ES_WARNING,   RAG_EN_NONE,
    "Feedback file %s has duplicate %s section; using the last one",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
  { EC_FB_Miss_Scn,     EM_User | ES_ERRABORT,  RAG_EN_NONE,
    "Feedback file %s is missing %s section",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
  { EC_FB_Unk_Scn,      EM_User | ES_WARNING,   RAG_EN_NONE,
    "Feedback file %s contains unrecognized section",
    2, ET_STRING, 0,0,0,0,0 },
  { EC_FB_Ent_Size,     EM_User | ES_ERRABORT,  RAG_EN_NONE,
    "Feedback file %s %s entries of wrong size: expect %d; got %d",
    4, ET_STRING, ET_STRING, ET_INT, ET_INT, 0,0 },
  { EC_FB_File_Old,     EM_User | ES_ERRABORT,  RAG_EN_NONE,
    "Feedback file checksum error; %s probably outdated",
    1, ET_STRING, 0,0,0,0,0 },
#ifdef KEY
  { EC_FB_No_File,     EM_User | ES_ERRABORT,   RAG_EN_NONE,
    "No feedback file with prefix: %s",
    1, ET_STRING, 0,0,0,0,0 },
#endif
  { EC_Cif_Open,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't open CIF file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Cif_Write,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't write to CIF file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_Cif_Close,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Closing CIF file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_GI_Fork,	EM_User | ES_WARNING,	RAG_EN_NONE,
    "Cannot fork global index process for CIF file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_GI_Exec,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Cannot invoke global index process for CIF file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },

  { EC_IPALNO_Create,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't create .IPALNO file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_IPALNO_Close,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Problem closing .IPALNO file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_IPALNO_Open,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Can't open .IPALNO file (%s): %s",
    2, ET_STRING, ET_SYSERR, 0,0,0,0 },
  { EC_IPALNO_Revision,	EM_User | ES_ERRABORT,	RAG_EN_NONE,
    "Invalid format revision (%s) for .IPALNO file (%s)",
    2, ET_STRING, ET_STRING, 0,0,0,0 },
  
  { EC_IP_Load_Dso, EM_Compiler | ES_ERRABORT,  RAG_EN_NONE,
    "Can't dladd %s: %s ",
    2, ET_STRING, ET_STRING, 0,0,0,0 },

  /* All error descriptor lists must end with a -1 error code: */
  { -1,	0, RAG_EN_NONE, "", 0, 0,0,0,0,0,0 }
};
