1<html lang="en"> 2<head> 3<title>Legacy type encoding - Using the GNU Compiler Collection (GCC)</title> 4<meta http-equiv="Content-Type" content="text/html"> 5<meta name="description" content="Using the GNU Compiler Collection (GCC)"> 6<meta name="generator" content="makeinfo 4.13"> 7<link title="Top" rel="start" href="index.html#Top"> 8<link rel="up" href="Type-encoding.html#Type-encoding" title="Type encoding"> 9<link rel="next" href="_0040_0040encode.html#g_t_0040_0040encode" title="@@encode"> 10<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> 11<!-- 12Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 131998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 142010 Free Software Foundation, Inc. 15 16Permission is granted to copy, distribute and/or modify this document 17under the terms of the GNU Free Documentation License, Version 1.3 or 18any later version published by the Free Software Foundation; with the 19Invariant Sections being ``Funding Free Software'', the Front-Cover 20Texts being (a) (see below), and with the Back-Cover Texts being (b) 21(see below). A copy of the license is included in the section entitled 22``GNU Free Documentation License''. 23 24(a) The FSF's Front-Cover Text is: 25 26 A GNU Manual 27 28(b) The FSF's Back-Cover Text is: 29 30 You have freedom to copy and modify this GNU Manual, like GNU 31 software. Copies published by the Free Software Foundation raise 32 funds for GNU development.--> 33<meta http-equiv="Content-Style-Type" content="text/css"> 34<style type="text/css"><!-- 35 pre.display { font-family:inherit } 36 pre.format { font-family:inherit } 37 pre.smalldisplay { font-family:inherit; font-size:smaller } 38 pre.smallformat { font-family:inherit; font-size:smaller } 39 pre.smallexample { font-size:smaller } 40 pre.smalllisp { font-size:smaller } 41 span.sc { font-variant:small-caps } 42 span.roman { font-family:serif; font-weight:normal; } 43 span.sansserif { font-family:sans-serif; font-weight:normal; } 44--></style> 45<link rel="stylesheet" type="text/css" href="../cs.css"> 46</head> 47<body> 48<div class="node"> 49<a name="Legacy-type-encoding"></a> 50<p> 51Next: <a rel="next" accesskey="n" href="_0040encode.html#g_t_0040encode">@encode</a>, 52Up: <a rel="up" accesskey="u" href="Type-encoding.html#Type-encoding">Type encoding</a> 53<hr> 54</div> 55 56<h4 class="subsection">8.3.1 Legacy type encoding</h4> 57 58<p>Unfortunately, historically GCC used to have a number of bugs in its 59encoding code. The NeXT runtime expects GCC to emit type encodings in 60this historical format (compatible with GCC-3.3), so when using the 61NeXT runtime, GCC will introduce on purpose a number of incorrect 62encodings: 63 64 <ul> 65<li>the read-only qualifier of the pointee gets emitted before the '^'. 66The read-only qualifier of the pointer itself gets ignored, unless it 67is a typedef. Also, the 'r' is only emitted for the outermost type. 68 69 <li>32-bit longs are encoded as 'l' or 'L', but not always. For typedefs, 70the compiler uses 'i' or 'I' instead if encoding a struct field or a 71pointer. 72 73 <li><code>enum</code>s are always encoded as 'i' (int) even if they are actually 74unsigned or long. 75 76 </ul> 77 78 <p>In addition to that, the NeXT runtime uses a different encoding for 79bitfields. It encodes them as <code>b</code> followed by the size, without 80a bit offset or the underlying field type. 81 82 </body></html> 83 84