[llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.cpp.cvs llvmAsmParser.h.cvs llvmAsmParser.y llvmAsmParser.y.cvs

Reid Spencer reid at x10sys.com
Fri Aug 18 10:33:09 PDT 2006



Changes in directory llvm/lib/AsmParser:

llvmAsmParser.cpp.cvs updated: 1.8 -> 1.9
llvmAsmParser.h.cvs updated: 1.4 -> 1.5
llvmAsmParser.y updated: 1.256 -> 1.257
llvmAsmParser.y.cvs updated: 1.8 -> 1.9
---
Log message:

Add a comment about the mechanisms used to rid AsmParser of exceptions.


---
Diffs of the changes:  (+244 -214)

 llvmAsmParser.cpp.cvs |  432 +++++++++++++++++++++++++-------------------------
 llvmAsmParser.h.cvs   |    2 
 llvmAsmParser.y       |   12 +
 llvmAsmParser.y.cvs   |   12 +
 4 files changed, 244 insertions(+), 214 deletions(-)


Index: llvm/lib/AsmParser/llvmAsmParser.cpp.cvs
diff -u llvm/lib/AsmParser/llvmAsmParser.cpp.cvs:1.8 llvm/lib/AsmParser/llvmAsmParser.cpp.cvs:1.9
--- llvm/lib/AsmParser/llvmAsmParser.cpp.cvs:1.8	Fri Aug 18 03:43:06 2006
+++ llvm/lib/AsmParser/llvmAsmParser.cpp.cvs	Fri Aug 18 12:32:55 2006
@@ -289,9 +289,19 @@
 #include <list>
 #include <utility>
 
+// The following is a gross hack. In order to rid the libAsmParser library of
+// exceptions, we have to have a way of getting the yyparse function to go into
+// an error situation. So, whenever we want an error to occur, the GenerateError
+// function (see bottom of file) sets TriggerError. Then, at the end of each 
+// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR 
+// (a goto) to put YACC in error state. Furthermore, several calls to 
+// GenerateError are made from inside productions and they must simulate the
+// previous exception behavior by exiting the production immediately. We have
+// replaced these with the GEN_ERROR macro which calls GeneratError and then
+// immediately invokes YYERROR. This would be so much cleaner if it was a 
+// recursive descent parser.
 static bool TriggerError = false;
 #define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYERROR; } }
-
 #define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
 
 int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
@@ -1175,7 +1185,7 @@
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 897 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 907 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
 typedef union YYSTYPE {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
@@ -1216,7 +1226,7 @@
   llvm::Module::Endianness                Endianness;
 } YYSTYPE;
 /* Line 196 of yacc.c.  */
-#line 1220 "llvmAsmParser.tab.c"
+#line 1230 "llvmAsmParser.tab.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -1228,7 +1238,7 @@
 
 
 /* Line 219 of yacc.c.  */
-#line 1232 "llvmAsmParser.tab.c"
+#line 1242 "llvmAsmParser.tab.c"
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
 # define YYSIZE_T __SIZE_TYPE__
@@ -1556,30 +1566,30 @@
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
-       0,  1017,  1017,  1018,  1026,  1027,  1037,  1037,  1037,  1037,
-    1037,  1038,  1038,  1038,  1039,  1039,  1039,  1039,  1039,  1039,
-    1041,  1041,  1045,  1045,  1045,  1045,  1046,  1046,  1046,  1046,
-    1047,  1047,  1048,  1048,  1051,  1055,  1060,  1061,  1062,  1063,
-    1064,  1066,  1067,  1068,  1069,  1070,  1071,  1080,  1081,  1087,
-    1088,  1096,  1104,  1105,  1110,  1111,  1112,  1117,  1131,  1131,
-    1132,  1132,  1134,  1144,  1144,  1144,  1144,  1144,  1144,  1144,
-    1145,  1145,  1145,  1145,  1145,  1145,  1146,  1150,  1154,  1161,
-    1169,  1182,  1187,  1199,  1209,  1213,  1222,  1227,  1233,  1234,
-    1238,  1242,  1253,  1279,  1293,  1323,  1349,  1370,  1383,  1393,
-    1398,  1458,  1465,  1474,  1480,  1486,  1490,  1494,  1502,  1513,
-    1545,  1553,  1575,  1586,  1592,  1600,  1606,  1612,  1621,  1625,
-    1633,  1633,  1643,  1651,  1656,  1660,  1664,  1668,  1683,  1704,
-    1707,  1710,  1710,  1717,  1717,  1725,  1728,  1731,  1735,  1748,
-    1749,  1751,  1755,  1764,  1770,  1772,  1777,  1782,  1791,  1791,
-    1792,  1792,  1794,  1801,  1807,  1814,  1818,  1824,  1829,  1834,
-    1921,  1921,  1923,  1931,  1931,  1933,  1938,  1938,  1948,  1952,
-    1957,  1961,  1965,  1969,  1973,  1977,  1981,  1985,  1989,  2014,
-    2018,  2032,  2036,  2042,  2042,  2048,  2053,  2057,  2066,  2076,
-    2081,  2092,  2104,  2108,  2112,  2116,  2120,  2135,  2140,  2194,
-    2198,  2205,  2214,  2225,  2233,  2239,  2247,  2252,  2259,  2259,
-    2261,  2265,  2272,  2285,  2297,  2308,  2321,  2329,  2337,  2345,
-    2351,  2371,  2394,  2400,  2406,  2412,  2427,  2485,  2492,  2495,
-    2500,  2504,  2511,  2516,  2521,  2526,  2531,  2539,  2550,  2564
+       0,  1027,  1027,  1028,  1036,  1037,  1047,  1047,  1047,  1047,
+    1047,  1048,  1048,  1048,  1049,  1049,  1049,  1049,  1049,  1049,
+    1051,  1051,  1055,  1055,  1055,  1055,  1056,  1056,  1056,  1056,
+    1057,  1057,  1058,  1058,  1061,  1065,  1070,  1071,  1072,  1073,
+    1074,  1076,  1077,  1078,  1079,  1080,  1081,  1090,  1091,  1097,
+    1098,  1106,  1114,  1115,  1120,  1121,  1122,  1127,  1141,  1141,
+    1142,  1142,  1144,  1154,  1154,  1154,  1154,  1154,  1154,  1154,
+    1155,  1155,  1155,  1155,  1155,  1155,  1156,  1160,  1164,  1171,
+    1179,  1192,  1197,  1209,  1219,  1223,  1232,  1237,  1243,  1244,
+    1248,  1252,  1263,  1289,  1303,  1333,  1359,  1380,  1393,  1403,
+    1408,  1468,  1475,  1484,  1490,  1496,  1500,  1504,  1512,  1523,
+    1555,  1563,  1585,  1596,  1602,  1610,  1616,  1622,  1631,  1635,
+    1643,  1643,  1653,  1661,  1666,  1670,  1674,  1678,  1693,  1714,
+    1717,  1720,  1720,  1727,  1727,  1735,  1738,  1741,  1745,  1758,
+    1759,  1761,  1765,  1774,  1780,  1782,  1787,  1792,  1801,  1801,
+    1802,  1802,  1804,  1811,  1817,  1824,  1828,  1834,  1839,  1844,
+    1931,  1931,  1933,  1941,  1941,  1943,  1948,  1948,  1958,  1962,
+    1967,  1971,  1975,  1979,  1983,  1987,  1991,  1995,  1999,  2024,
+    2028,  2042,  2046,  2052,  2052,  2058,  2063,  2067,  2076,  2086,
+    2091,  2102,  2114,  2118,  2122,  2126,  2130,  2145,  2150,  2204,
+    2208,  2215,  2224,  2235,  2243,  2249,  2257,  2262,  2269,  2269,
+    2271,  2275,  2282,  2295,  2307,  2318,  2331,  2339,  2347,  2355,
+    2361,  2381,  2404,  2410,  2416,  2422,  2437,  2495,  2502,  2505,
+    2510,  2514,  2521,  2526,  2531,  2536,  2541,  2549,  2560,  2574
 };
 #endif
 
@@ -2833,7 +2843,7 @@
   switch (yyn)
     {
         case 3:
-#line 1018 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1028 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX)     // Outside of my range!
     GEN_ERROR("Value too large for type!");
@@ -2843,7 +2853,7 @@
     break;
 
   case 5:
-#line 1027 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1037 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX)     // Outside of my range!
     GEN_ERROR("Value too large for type!");
@@ -2853,7 +2863,7 @@
     break;
 
   case 34:
-#line 1051 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1061 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.StrVal) = (yyvsp[-1].StrVal);
     CHECK_FOR_ERROR
@@ -2861,7 +2871,7 @@
     break;
 
   case 35:
-#line 1055 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1065 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.StrVal) = 0;
     CHECK_FOR_ERROR
@@ -2869,57 +2879,57 @@
     break;
 
   case 36:
-#line 1060 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1070 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
     break;
 
   case 37:
-#line 1061 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1071 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
     break;
 
   case 38:
-#line 1062 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1072 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
     break;
 
   case 39:
-#line 1063 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1073 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
     break;
 
   case 40:
-#line 1064 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1074 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
     break;
 
   case 41:
-#line 1066 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1076 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::C; ;}
     break;
 
   case 42:
-#line 1067 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1077 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::C; ;}
     break;
 
   case 43:
-#line 1068 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1078 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::CSRet; ;}
     break;
 
   case 44:
-#line 1069 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1079 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::Fast; ;}
     break;
 
   case 45:
-#line 1070 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1080 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::Cold; ;}
     break;
 
   case 46:
-#line 1071 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1081 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
                    if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
                      GEN_ERROR("Calling conv too large!");
@@ -2929,12 +2939,12 @@
     break;
 
   case 47:
-#line 1080 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1090 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = 0; ;}
     break;
 
   case 48:
-#line 1081 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1091 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.UIntVal) = (yyvsp[0].UInt64Val);
   if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
@@ -2944,12 +2954,12 @@
     break;
 
   case 49:
-#line 1087 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1097 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = 0; ;}
     break;
 
   case 50:
-#line 1088 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1098 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.UIntVal) = (yyvsp[0].UInt64Val);
   if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
@@ -2959,7 +2969,7 @@
     break;
 
   case 51:
-#line 1096 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1106 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
     if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
@@ -2970,27 +2980,27 @@
     break;
 
   case 52:
-#line 1104 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1114 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.StrVal) = 0; ;}
     break;
 
   case 53:
-#line 1105 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1115 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
     break;
 
   case 54:
-#line 1110 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1120 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {;}
     break;
 
   case 55:
-#line 1111 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1121 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {;}
     break;
 
   case 56:
-#line 1112 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1122 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV->setSection((yyvsp[0].StrVal));
     free((yyvsp[0].StrVal));
@@ -2999,7 +3009,7 @@
     break;
 
   case 57:
-#line 1117 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1127 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
       GEN_ERROR("Alignment must be a power of two!");
@@ -3009,17 +3019,17 @@
     break;
 
   case 59:
-#line 1131 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1141 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
     break;
 
   case 61:
-#line 1132 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1142 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
     break;
 
   case 62:
-#line 1134 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1144 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
@@ -3029,7 +3039,7 @@
     break;
 
   case 76:
-#line 1146 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1156 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
     CHECK_FOR_ERROR
@@ -3037,7 +3047,7 @@
     break;
 
   case 77:
-#line 1150 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1160 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
     CHECK_FOR_ERROR
@@ -3045,7 +3055,7 @@
     break;
 
   case 78:
-#line 1154 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1164 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {            // Named types are also simple types...
   (yyval.TypeVal) = new PATypeHolder(getTypeVal((yyvsp[0].ValIDVal)));
   CHECK_FOR_ERROR
@@ -3053,7 +3063,7 @@
     break;
 
   case 79:
-#line 1161 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1171 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {                   // Type UpReference
     if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range!");
     OpaqueType *OT = OpaqueType::get();        // Use temporary placeholder
@@ -3065,7 +3075,7 @@
     break;
 
   case 80:
-#line 1169 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1179 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {           // Function derived type?
     std::vector<const Type*> Params;
     for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
@@ -3082,7 +3092,7 @@
     break;
 
   case 81:
-#line 1182 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1192 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {          // Sized array type?
     (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
     delete (yyvsp[-1].TypeVal);
@@ -3091,7 +3101,7 @@
     break;
 
   case 82:
-#line 1187 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1197 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {          // Packed array type?
      const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
      if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
@@ -3107,7 +3117,7 @@
     break;
 
   case 83:
-#line 1199 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1209 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {                        // Structure type?
     std::vector<const Type*> Elements;
     for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
@@ -3121,7 +3131,7 @@
     break;
 
   case 84:
-#line 1209 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1219 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {                                  // Empty structure type?
     (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
     CHECK_FOR_ERROR
@@ -3129,7 +3139,7 @@
     break;
 
   case 85:
-#line 1213 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1223 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {                             // Pointer type?
     (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
     delete (yyvsp[-1].TypeVal);
@@ -3138,7 +3148,7 @@
     break;
 
   case 86:
-#line 1222 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1232 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeList) = new std::list<PATypeHolder>();
     (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
@@ -3147,7 +3157,7 @@
     break;
 
   case 87:
-#line 1227 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1237 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
     CHECK_FOR_ERROR
@@ -3155,7 +3165,7 @@
     break;
 
   case 89:
-#line 1234 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1244 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(Type::VoidTy);
     CHECK_FOR_ERROR
@@ -3163,7 +3173,7 @@
     break;
 
   case 90:
-#line 1238 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1248 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     ((yyval.TypeList) = new std::list<PATypeHolder>())->push_back(Type::VoidTy);
     CHECK_FOR_ERROR
@@ -3171,7 +3181,7 @@
     break;
 
   case 91:
-#line 1242 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1252 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeList) = new std::list<PATypeHolder>();
     CHECK_FOR_ERROR
@@ -3179,7 +3189,7 @@
     break;
 
   case 92:
-#line 1253 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1263 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { // Nonempty unsized arr
     const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
     if (ATy == 0)
@@ -3209,7 +3219,7 @@
     break;
 
   case 93:
-#line 1279 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1289 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
     if (ATy == 0)
@@ -3227,7 +3237,7 @@
     break;
 
   case 94:
-#line 1293 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1303 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
     if (ATy == 0)
@@ -3261,7 +3271,7 @@
     break;
 
   case 95:
-#line 1323 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1333 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { // Nonempty unsized arr
     const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal)->get());
     if (PTy == 0)
@@ -3291,7 +3301,7 @@
     break;
 
   case 96:
-#line 1349 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1359 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
     if (STy == 0)
@@ -3316,7 +3326,7 @@
     break;
 
   case 97:
-#line 1370 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1380 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
     if (STy == 0)
@@ -3333,7 +3343,7 @@
     break;
 
   case 98:
-#line 1383 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1393 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
     if (PTy == 0)
@@ -3347,7 +3357,7 @@
     break;
 
   case 99:
-#line 1393 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1403 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
     delete (yyvsp[-1].TypeVal);
@@ -3356,7 +3366,7 @@
     break;
 
   case 100:
-#line 1398 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1408 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
     if (Ty == 0)
@@ -3420,7 +3430,7 @@
     break;
 
   case 101:
-#line 1458 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1468 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
       GEN_ERROR("Mismatched types for constant expression!");
@@ -3431,7 +3441,7 @@
     break;
 
   case 102:
-#line 1465 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1475 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const Type *Ty = (yyvsp[-1].TypeVal)->get();
     if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
@@ -3443,7 +3453,7 @@
     break;
 
   case 103:
-#line 1474 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1484 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {      // integral constants
     if (!ConstantSInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type!");
@@ -3453,7 +3463,7 @@
     break;
 
   case 104:
-#line 1480 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1490 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {            // integral constants
     if (!ConstantUInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type!");
@@ -3463,7 +3473,7 @@
     break;
 
   case 105:
-#line 1486 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1496 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {                      // Boolean constants
     (yyval.ConstVal) = ConstantBool::True;
     CHECK_FOR_ERROR
@@ -3471,7 +3481,7 @@
     break;
 
   case 106:
-#line 1490 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1500 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {                     // Boolean constants
     (yyval.ConstVal) = ConstantBool::False;
     CHECK_FOR_ERROR
@@ -3479,7 +3489,7 @@
     break;
 
   case 107:
-#line 1494 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1504 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {                   // Float & Double constants
     if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
       GEN_ERROR("Floating point constant invalid for type!!");
@@ -3489,7 +3499,7 @@
     break;
 
   case 108:
-#line 1502 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1512 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!(yyvsp[-3].ConstVal)->getType()->isFirstClassType())
       GEN_ERROR("cast constant expression from a non-primitive type: '" +
@@ -3504,7 +3514,7 @@
     break;
 
   case 109:
-#line 1513 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1523 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
       GEN_ERROR("GetElementPtr requires a pointer operand!");
@@ -3540,7 +3550,7 @@
     break;
 
   case 110:
-#line 1545 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1555 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-5].ConstVal)->getType() != Type::BoolTy)
       GEN_ERROR("Select condition must be of boolean type!");
@@ -3552,7 +3562,7 @@
     break;
 
   case 111:
-#line 1553 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1563 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("Binary operator types must match!");
@@ -3578,7 +3588,7 @@
     break;
 
   case 112:
-#line 1575 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1585 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("Logical operator types must match!");
@@ -3593,7 +3603,7 @@
     break;
 
   case 113:
-#line 1586 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1596 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("setcc operand types must match!");
@@ -3603,7 +3613,7 @@
     break;
 
   case 114:
-#line 1592 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1602 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-1].ConstVal)->getType() != Type::UByteTy)
       GEN_ERROR("Shift count for shift constant must be unsigned byte!");
@@ -3615,7 +3625,7 @@
     break;
 
   case 115:
-#line 1600 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1610 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
       GEN_ERROR("Invalid extractelement operands!");
@@ -3625,7 +3635,7 @@
     break;
 
   case 116:
-#line 1606 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1616 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
       GEN_ERROR("Invalid insertelement operands!");
@@ -3635,7 +3645,7 @@
     break;
 
   case 117:
-#line 1612 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1622 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
       GEN_ERROR("Invalid shufflevector operands!");
@@ -3645,7 +3655,7 @@
     break;
 
   case 118:
-#line 1621 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1631 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
@@ -3653,7 +3663,7 @@
     break;
 
   case 119:
-#line 1625 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1635 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ConstVector) = new std::vector<Constant*>();
     (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
@@ -3662,17 +3672,17 @@
     break;
 
   case 120:
-#line 1633 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1643 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.BoolVal) = false; ;}
     break;
 
   case 121:
-#line 1633 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1643 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.BoolVal) = true; ;}
     break;
 
   case 122:
-#line 1643 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1653 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
   CurModule.ModuleDone();
@@ -3681,7 +3691,7 @@
     break;
 
   case 123:
-#line 1651 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1661 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
     CurFun.FunctionDone();
@@ -3690,7 +3700,7 @@
     break;
 
   case 124:
-#line 1656 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1666 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
     CHECK_FOR_ERROR
@@ -3698,7 +3708,7 @@
     break;
 
   case 125:
-#line 1660 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1670 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = (yyvsp[-3].ModuleVal);
     CHECK_FOR_ERROR
@@ -3706,7 +3716,7 @@
     break;
 
   case 126:
-#line 1664 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1674 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
     CHECK_FOR_ERROR
@@ -3714,7 +3724,7 @@
     break;
 
   case 127:
-#line 1668 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1678 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = CurModule.CurrentModule;
     // Emit an error if there are any unresolved types left.
@@ -3731,7 +3741,7 @@
     break;
 
   case 128:
-#line 1683 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1693 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     // Eagerly resolve types.  This is not an optimization, this is a
     // requirement that is due to the fact that we could have this:
@@ -3756,21 +3766,21 @@
     break;
 
   case 129:
-#line 1704 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1714 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {       // Function prototypes can be in const pool
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 130:
-#line 1707 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1717 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {  // Asm blocks can be in the const pool
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 131:
-#line 1710 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1720 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[0].ConstVal) == 0) GEN_ERROR("Global value initializer is not a constant!");
     CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
@@ -3778,7 +3788,7 @@
     break;
 
   case 132:
-#line 1713 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1723 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = 0;
     CHECK_FOR_ERROR
@@ -3786,7 +3796,7 @@
     break;
 
   case 133:
-#line 1717 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1727 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage,
                                              (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
@@ -3795,7 +3805,7 @@
     break;
 
   case 134:
-#line 1721 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1731 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = 0;
     CHECK_FOR_ERROR
@@ -3803,27 +3813,27 @@
     break;
 
   case 135:
-#line 1725 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1735 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { 
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 136:
-#line 1728 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1738 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 137:
-#line 1731 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1741 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { 
   ;}
     break;
 
   case 138:
-#line 1735 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1745 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
   char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
@@ -3839,17 +3849,17 @@
     break;
 
   case 139:
-#line 1748 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1758 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Endianness) = Module::BigEndian; ;}
     break;
 
   case 140:
-#line 1749 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1759 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Endianness) = Module::LittleEndian; ;}
     break;
 
   case 141:
-#line 1751 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1761 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
     CHECK_FOR_ERROR
@@ -3857,7 +3867,7 @@
     break;
 
   case 142:
-#line 1755 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1765 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[0].UInt64Val) == 32)
       CurModule.CurrentModule->setPointerSize(Module::Pointer32);
@@ -3870,7 +3880,7 @@
     break;
 
   case 143:
-#line 1764 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1774 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
     free((yyvsp[0].StrVal));
@@ -3879,7 +3889,7 @@
     break;
 
   case 145:
-#line 1772 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1782 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
           CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
           free((yyvsp[0].StrVal));
@@ -3888,7 +3898,7 @@
     break;
 
   case 146:
-#line 1777 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1787 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
           CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
           free((yyvsp[0].StrVal));
@@ -3897,19 +3907,19 @@
     break;
 
   case 147:
-#line 1782 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1792 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
           CHECK_FOR_ERROR
         ;}
     break;
 
   case 151:
-#line 1792 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1802 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.StrVal) = 0; ;}
     break;
 
   case 152:
-#line 1794 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1804 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   if (*(yyvsp[-1].TypeVal) == Type::VoidTy)
     GEN_ERROR("void typed arguments are invalid!");
@@ -3919,7 +3929,7 @@
     break;
 
   case 153:
-#line 1801 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1811 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = (yyvsp[-2].ArgList);
     (yyvsp[-2].ArgList)->push_back(*(yyvsp[0].ArgVal));
@@ -3929,7 +3939,7 @@
     break;
 
   case 154:
-#line 1807 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1817 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = new std::vector<std::pair<PATypeHolder*,char*> >();
     (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
@@ -3939,7 +3949,7 @@
     break;
 
   case 155:
-#line 1814 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1824 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = (yyvsp[0].ArgList);
     CHECK_FOR_ERROR
@@ -3947,7 +3957,7 @@
     break;
 
   case 156:
-#line 1818 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1828 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = (yyvsp[-2].ArgList);
     (yyval.ArgList)->push_back(std::pair<PATypeHolder*,
@@ -3957,7 +3967,7 @@
     break;
 
   case 157:
-#line 1824 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1834 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = new std::vector<std::pair<PATypeHolder*,char*> >();
     (yyval.ArgList)->push_back(std::make_pair(new PATypeHolder(Type::VoidTy), (char*)0));
@@ -3966,7 +3976,7 @@
     break;
 
   case 158:
-#line 1829 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1839 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = 0;
     CHECK_FOR_ERROR
@@ -3974,7 +3984,7 @@
     break;
 
   case 159:
-#line 1835 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1845 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   UnEscapeLexed((yyvsp[-5].StrVal));
   std::string FunctionName((yyvsp[-5].StrVal));
@@ -4063,7 +4073,7 @@
     break;
 
   case 162:
-#line 1923 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1933 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.FunctionVal) = CurFun.CurrentFunction;
 
@@ -4074,7 +4084,7 @@
     break;
 
   case 165:
-#line 1933 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1943 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
   CHECK_FOR_ERROR
@@ -4082,12 +4092,12 @@
     break;
 
   case 166:
-#line 1938 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1948 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { CurFun.isDeclare = true; ;}
     break;
 
   case 167:
-#line 1938 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1948 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.FunctionVal) = CurFun.CurrentFunction;
   CurFun.FunctionDone();
@@ -4096,7 +4106,7 @@
     break;
 
   case 168:
-#line 1948 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1958 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
@@ -4104,7 +4114,7 @@
     break;
 
   case 169:
-#line 1952 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1962 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
@@ -4112,7 +4122,7 @@
     break;
 
   case 170:
-#line 1957 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1967 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {    // A reference to a direct constant
     (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
     CHECK_FOR_ERROR
@@ -4120,7 +4130,7 @@
     break;
 
   case 171:
-#line 1961 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1971 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
     CHECK_FOR_ERROR
@@ -4128,7 +4138,7 @@
     break;
 
   case 172:
-#line 1965 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1975 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {                     // Perhaps it's an FP constant?
     (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
     CHECK_FOR_ERROR
@@ -4136,7 +4146,7 @@
     break;
 
   case 173:
-#line 1969 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1979 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create(ConstantBool::True);
     CHECK_FOR_ERROR
@@ -4144,7 +4154,7 @@
     break;
 
   case 174:
-#line 1973 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1983 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create(ConstantBool::False);
     CHECK_FOR_ERROR
@@ -4152,7 +4162,7 @@
     break;
 
   case 175:
-#line 1977 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1987 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::createNull();
     CHECK_FOR_ERROR
@@ -4160,7 +4170,7 @@
     break;
 
   case 176:
-#line 1981 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1991 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::createUndef();
     CHECK_FOR_ERROR
@@ -4168,7 +4178,7 @@
     break;
 
   case 177:
-#line 1985 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1995 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {     // A vector zero constant.
     (yyval.ValIDVal) = ValID::createZeroInit();
     CHECK_FOR_ERROR
@@ -4176,7 +4186,7 @@
     break;
 
   case 178:
-#line 1989 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1999 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { // Nonempty unsized packed vector
     const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
     int NumElements = (yyvsp[-1].ConstVector)->size(); 
@@ -4205,7 +4215,7 @@
     break;
 
   case 179:
-#line 2014 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2024 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
@@ -4213,7 +4223,7 @@
     break;
 
   case 180:
-#line 2018 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2028 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
     std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
@@ -4227,7 +4237,7 @@
     break;
 
   case 181:
-#line 2032 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2042 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {  // Is it an integer reference...?
     (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
     CHECK_FOR_ERROR
@@ -4235,7 +4245,7 @@
     break;
 
   case 182:
-#line 2036 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2046 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {                   // Is it a named reference...?
     (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
     CHECK_FOR_ERROR
@@ -4243,7 +4253,7 @@
     break;
 
   case 185:
-#line 2048 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2058 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)); delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
@@ -4251,7 +4261,7 @@
     break;
 
   case 186:
-#line 2053 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2063 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
     CHECK_FOR_ERROR
@@ -4259,7 +4269,7 @@
     break;
 
   case 187:
-#line 2057 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2067 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { // Do not allow functions with 0 basic blocks   
     (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
     CHECK_FOR_ERROR
@@ -4267,7 +4277,7 @@
     break;
 
   case 188:
-#line 2066 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2076 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
     InsertValue((yyvsp[0].TermInstVal));
@@ -4280,7 +4290,7 @@
     break;
 
   case 189:
-#line 2076 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2086 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
     (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
@@ -4289,7 +4299,7 @@
     break;
 
   case 190:
-#line 2081 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2091 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
 
@@ -4304,7 +4314,7 @@
     break;
 
   case 191:
-#line 2092 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2102 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
 
@@ -4319,7 +4329,7 @@
     break;
 
   case 192:
-#line 2104 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2114 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {              // Return with a result...
     (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
@@ -4327,7 +4337,7 @@
     break;
 
   case 193:
-#line 2108 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2118 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {                                       // Return with no result...
     (yyval.TermInstVal) = new ReturnInst();
     CHECK_FOR_ERROR
@@ -4335,7 +4345,7 @@
     break;
 
   case 194:
-#line 2112 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2122 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {                         // Unconditional Branch...
     (yyval.TermInstVal) = new BranchInst(getBBVal((yyvsp[0].ValIDVal)));
     CHECK_FOR_ERROR
@@ -4343,7 +4353,7 @@
     break;
 
   case 195:
-#line 2116 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2126 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {  
     (yyval.TermInstVal) = new BranchInst(getBBVal((yyvsp[-3].ValIDVal)), getBBVal((yyvsp[0].ValIDVal)), getVal(Type::BoolTy, (yyvsp[-6].ValIDVal)));
     CHECK_FOR_ERROR
@@ -4351,7 +4361,7 @@
     break;
 
   case 196:
-#line 2120 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2130 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     SwitchInst *S = new SwitchInst(getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal)), getBBVal((yyvsp[-3].ValIDVal)), (yyvsp[-1].JumpTable)->size());
     (yyval.TermInstVal) = S;
@@ -4370,7 +4380,7 @@
     break;
 
   case 197:
-#line 2135 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2145 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     SwitchInst *S = new SwitchInst(getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal)), getBBVal((yyvsp[-2].ValIDVal)), 0);
     (yyval.TermInstVal) = S;
@@ -4379,7 +4389,7 @@
     break;
 
   case 198:
-#line 2141 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2151 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const PointerType *PFTy;
     const FunctionType *Ty;
@@ -4436,7 +4446,7 @@
     break;
 
   case 199:
-#line 2194 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2204 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TermInstVal) = new UnwindInst();
     CHECK_FOR_ERROR
@@ -4444,7 +4454,7 @@
     break;
 
   case 200:
-#line 2198 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2208 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TermInstVal) = new UnreachableInst();
     CHECK_FOR_ERROR
@@ -4452,7 +4462,7 @@
     break;
 
   case 201:
-#line 2205 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2215 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.JumpTable) = (yyvsp[-5].JumpTable);
     Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
@@ -4465,7 +4475,7 @@
     break;
 
   case 202:
-#line 2214 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2224 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
     Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
@@ -4479,7 +4489,7 @@
     break;
 
   case 203:
-#line 2225 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2235 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   // Is this definition named?? if so, assign the name...
   setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
@@ -4490,7 +4500,7 @@
     break;
 
   case 204:
-#line 2233 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2243 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {    // Used for PHI nodes
     (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
     (yyval.PHIList)->push_back(std::make_pair(getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal)), getBBVal((yyvsp[-1].ValIDVal))));
@@ -4500,7 +4510,7 @@
     break;
 
   case 205:
-#line 2239 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2249 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.PHIList) = (yyvsp[-6].PHIList);
     (yyvsp[-6].PHIList)->push_back(std::make_pair(getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal)),
@@ -4510,7 +4520,7 @@
     break;
 
   case 206:
-#line 2247 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2257 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {    // Used for call statements, and memory insts...
     (yyval.ValueList) = new std::vector<Value*>();
     (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
@@ -4519,7 +4529,7 @@
     break;
 
   case 207:
-#line 2252 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2262 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValueList) = (yyvsp[-2].ValueList);
     (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal));
@@ -4528,12 +4538,12 @@
     break;
 
   case 209:
-#line 2259 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2269 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ValueList) = 0; ;}
     break;
 
   case 210:
-#line 2261 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2271 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
@@ -4541,7 +4551,7 @@
     break;
 
   case 211:
-#line 2265 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2275 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
@@ -4549,7 +4559,7 @@
     break;
 
   case 212:
-#line 2272 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2282 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() && 
         !isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
@@ -4566,7 +4576,7 @@
     break;
 
   case 213:
-#line 2285 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2295 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!(*(yyvsp[-3].TypeVal))->isIntegral()) {
       if (!isa<PackedType>((yyvsp[-3].TypeVal)->get()) ||
@@ -4582,7 +4592,7 @@
     break;
 
   case 214:
-#line 2297 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2307 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if(isa<PackedType>((*(yyvsp[-3].TypeVal)).get())) {
       GEN_ERROR(
@@ -4597,7 +4607,7 @@
     break;
 
   case 215:
-#line 2308 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2318 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     std::cerr << "WARNING: Use of eliminated 'not' instruction:"
               << " Replacing with 'xor'.\n";
@@ -4614,7 +4624,7 @@
     break;
 
   case 216:
-#line 2321 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2331 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[0].ValueVal)->getType() != Type::UByteTy)
       GEN_ERROR("Shift amount must be ubyte!");
@@ -4626,7 +4636,7 @@
     break;
 
   case 217:
-#line 2329 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2339 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!(yyvsp[0].TypeVal)->get()->isFirstClassType())
       GEN_ERROR("cast instruction to a non-primitive type: '" +
@@ -4638,7 +4648,7 @@
     break;
 
   case 218:
-#line 2337 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2347 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-4].ValueVal)->getType() != Type::BoolTy)
       GEN_ERROR("select condition must be boolean!");
@@ -4650,7 +4660,7 @@
     break;
 
   case 219:
-#line 2345 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2355 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     NewVarArgs = true;
     (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
@@ -4660,7 +4670,7 @@
     break;
 
   case 220:
-#line 2351 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2361 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     ObsoleteVarArgs = true;
     const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
@@ -4684,7 +4694,7 @@
     break;
 
   case 221:
-#line 2371 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2381 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     ObsoleteVarArgs = true;
     const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
@@ -4711,7 +4721,7 @@
     break;
 
   case 222:
-#line 2394 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2404 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
       GEN_ERROR("Invalid extractelement operands!");
@@ -4721,7 +4731,7 @@
     break;
 
   case 223:
-#line 2400 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2410 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
       GEN_ERROR("Invalid insertelement operands!");
@@ -4731,7 +4741,7 @@
     break;
 
   case 224:
-#line 2406 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2416 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
       GEN_ERROR("Invalid shufflevector operands!");
@@ -4741,7 +4751,7 @@
     break;
 
   case 225:
-#line 2412 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2422 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
     if (!Ty->isFirstClassType())
@@ -4760,7 +4770,7 @@
     break;
 
   case 226:
-#line 2427 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2437 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const PointerType *PFTy;
     const FunctionType *Ty;
@@ -4822,7 +4832,7 @@
     break;
 
   case 227:
-#line 2485 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2495 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.InstVal) = (yyvsp[0].InstVal);
     CHECK_FOR_ERROR
@@ -4830,7 +4840,7 @@
     break;
 
   case 228:
-#line 2492 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2502 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { 
     (yyval.ValueList) = (yyvsp[0].ValueList); 
     CHECK_FOR_ERROR
@@ -4838,7 +4848,7 @@
     break;
 
   case 229:
-#line 2495 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2505 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     { 
     (yyval.ValueList) = new std::vector<Value*>(); 
     CHECK_FOR_ERROR
@@ -4846,7 +4856,7 @@
     break;
 
   case 230:
-#line 2500 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2510 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
@@ -4854,7 +4864,7 @@
     break;
 
   case 231:
-#line 2504 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2514 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
@@ -4862,7 +4872,7 @@
     break;
 
   case 232:
-#line 2511 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2521 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
     delete (yyvsp[-1].TypeVal);
@@ -4871,7 +4881,7 @@
     break;
 
   case 233:
-#line 2516 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2526 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal)), (yyvsp[0].UIntVal));
     delete (yyvsp[-4].TypeVal);
@@ -4880,7 +4890,7 @@
     break;
 
   case 234:
-#line 2521 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2531 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
     delete (yyvsp[-1].TypeVal);
@@ -4889,7 +4899,7 @@
     break;
 
   case 235:
-#line 2526 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2536 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal)), (yyvsp[0].UIntVal));
     delete (yyvsp[-4].TypeVal);
@@ -4898,7 +4908,7 @@
     break;
 
   case 236:
-#line 2531 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2541 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
       GEN_ERROR("Trying to free nonpointer type " + 
@@ -4909,7 +4919,7 @@
     break;
 
   case 237:
-#line 2539 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2549 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
       GEN_ERROR("Can't load from nonpointer type: " +
@@ -4924,7 +4934,7 @@
     break;
 
   case 238:
-#line 2550 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2560 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
     if (!PT)
@@ -4942,7 +4952,7 @@
     break;
 
   case 239:
-#line 2564 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2574 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
       GEN_ERROR("getelementptr insn requires pointer operand!");
@@ -4972,7 +4982,7 @@
     }
 
 /* Line 1126 of yacc.c.  */
-#line 4976 "llvmAsmParser.tab.c"
+#line 4986 "llvmAsmParser.tab.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -5240,7 +5250,7 @@
 }
 
 
-#line 2588 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2598 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
 
 
 void llvm::GenerateError(const std::string &message, int LineNo) {


Index: llvm/lib/AsmParser/llvmAsmParser.h.cvs
diff -u llvm/lib/AsmParser/llvmAsmParser.h.cvs:1.4 llvm/lib/AsmParser/llvmAsmParser.h.cvs:1.5
--- llvm/lib/AsmParser/llvmAsmParser.h.cvs:1.4	Fri Aug 18 03:43:06 2006
+++ llvm/lib/AsmParser/llvmAsmParser.h.cvs	Fri Aug 18 12:32:55 2006
@@ -237,7 +237,7 @@
 
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 897 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 907 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
 typedef union YYSTYPE {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;


Index: llvm/lib/AsmParser/llvmAsmParser.y
diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.256 llvm/lib/AsmParser/llvmAsmParser.y:1.257
--- llvm/lib/AsmParser/llvmAsmParser.y:1.256	Fri Aug 18 03:43:06 2006
+++ llvm/lib/AsmParser/llvmAsmParser.y	Fri Aug 18 12:32:55 2006
@@ -27,9 +27,19 @@
 #include <list>
 #include <utility>
 
+// The following is a gross hack. In order to rid the libAsmParser library of
+// exceptions, we have to have a way of getting the yyparse function to go into
+// an error situation. So, whenever we want an error to occur, the GenerateError
+// function (see bottom of file) sets TriggerError. Then, at the end of each 
+// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR 
+// (a goto) to put YACC in error state. Furthermore, several calls to 
+// GenerateError are made from inside productions and they must simulate the
+// previous exception behavior by exiting the production immediately. We have
+// replaced these with the GEN_ERROR macro which calls GeneratError and then
+// immediately invokes YYERROR. This would be so much cleaner if it was a 
+// recursive descent parser.
 static bool TriggerError = false;
 #define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYERROR; } }
-
 #define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
 
 int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit


Index: llvm/lib/AsmParser/llvmAsmParser.y.cvs
diff -u llvm/lib/AsmParser/llvmAsmParser.y.cvs:1.8 llvm/lib/AsmParser/llvmAsmParser.y.cvs:1.9
--- llvm/lib/AsmParser/llvmAsmParser.y.cvs:1.8	Fri Aug 18 03:43:06 2006
+++ llvm/lib/AsmParser/llvmAsmParser.y.cvs	Fri Aug 18 12:32:55 2006
@@ -27,9 +27,19 @@
 #include <list>
 #include <utility>
 
+// The following is a gross hack. In order to rid the libAsmParser library of
+// exceptions, we have to have a way of getting the yyparse function to go into
+// an error situation. So, whenever we want an error to occur, the GenerateError
+// function (see bottom of file) sets TriggerError. Then, at the end of each 
+// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR 
+// (a goto) to put YACC in error state. Furthermore, several calls to 
+// GenerateError are made from inside productions and they must simulate the
+// previous exception behavior by exiting the production immediately. We have
+// replaced these with the GEN_ERROR macro which calls GeneratError and then
+// immediately invokes YYERROR. This would be so much cleaner if it was a 
+// recursive descent parser.
 static bool TriggerError = false;
 #define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYERROR; } }
-
 #define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
 
 int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit






More information about the llvm-commits mailing list