[llvm-commits] [llvm] r50139 - in /llvm/trunk/lib/AsmParser: llvmAsmParser.cpp.cvs llvmAsmParser.y.cvs
Chris Lattner
sabre at nondot.org
Tue Apr 22 22:37:08 PDT 2008
Author: lattner
Date: Wed Apr 23 00:37:08 2008
New Revision: 50139
URL: http://llvm.org/viewvc/llvm-project?rev=50139&view=rev
Log:
regenerate
Modified:
llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs
llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs
Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs?rev=50139&r1=50138&r2=50139&view=diff
==============================================================================
--- llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs (original)
+++ llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs Wed Apr 23 00:37:08 2008
@@ -1843,24 +1843,24 @@
1248, 1249, 1250, 1253, 1254, 1259, 1260, 1267, 1268, 1274,
1275, 1284, 1292, 1293, 1298, 1299, 1300, 1305, 1318, 1318,
1318, 1318, 1318, 1318, 1318, 1321, 1325, 1329, 1336, 1341,
- 1349, 1380, 1405, 1410, 1420, 1430, 1434, 1444, 1451, 1460,
- 1467, 1472, 1477, 1484, 1485, 1492, 1499, 1507, 1513, 1525,
- 1553, 1569, 1596, 1624, 1650, 1670, 1696, 1716, 1728, 1735,
- 1801, 1811, 1821, 1827, 1837, 1843, 1853, 1858, 1863, 1876,
- 1888, 1910, 1918, 1924, 1935, 1940, 1945, 1951, 1957, 1966,
- 1970, 1978, 1978, 1981, 1981, 1984, 1996, 2017, 2022, 2030,
- 2031, 2035, 2035, 2039, 2039, 2042, 2045, 2069, 2081, 2080,
- 2092, 2091, 2101, 2100, 2111, 2151, 2154, 2160, 2170, 2174,
- 2179, 2181, 2186, 2191, 2200, 2210, 2221, 2225, 2234, 2243,
- 2248, 2374, 2374, 2376, 2385, 2385, 2387, 2392, 2404, 2408,
- 2413, 2417, 2421, 2425, 2429, 2433, 2437, 2441, 2445, 2470,
- 2474, 2484, 2488, 2492, 2497, 2504, 2504, 2510, 2519, 2524,
- 2529, 2533, 2542, 2551, 2560, 2564, 2568, 2573, 2580, 2587,
- 2591, 2596, 2606, 2625, 2634, 2715, 2719, 2726, 2737, 2750,
- 2760, 2771, 2781, 2792, 2800, 2810, 2817, 2820, 2821, 2828,
- 2832, 2837, 2853, 2870, 2884, 2898, 2910, 2918, 2925, 2931,
- 2937, 2943, 2958, 3044, 3049, 3053, 3060, 3067, 3075, 3082,
- 3090, 3098, 3112, 3129, 3137
+ 1349, 1378, 1403, 1408, 1418, 1428, 1432, 1442, 1449, 1458,
+ 1465, 1470, 1475, 1482, 1483, 1490, 1497, 1505, 1511, 1523,
+ 1551, 1567, 1594, 1622, 1648, 1668, 1694, 1714, 1726, 1733,
+ 1799, 1809, 1819, 1825, 1835, 1841, 1851, 1856, 1861, 1874,
+ 1886, 1908, 1916, 1922, 1933, 1938, 1943, 1949, 1955, 1964,
+ 1968, 1976, 1976, 1979, 1979, 1982, 1994, 2015, 2020, 2028,
+ 2029, 2033, 2033, 2037, 2037, 2040, 2043, 2067, 2079, 2078,
+ 2090, 2089, 2099, 2098, 2109, 2149, 2152, 2158, 2168, 2172,
+ 2177, 2179, 2184, 2189, 2198, 2208, 2219, 2223, 2232, 2241,
+ 2246, 2375, 2375, 2377, 2386, 2386, 2388, 2393, 2405, 2409,
+ 2414, 2418, 2422, 2426, 2430, 2434, 2438, 2442, 2446, 2471,
+ 2475, 2485, 2489, 2493, 2498, 2505, 2505, 2511, 2520, 2525,
+ 2530, 2534, 2543, 2552, 2561, 2565, 2569, 2574, 2581, 2588,
+ 2592, 2597, 2607, 2626, 2635, 2720, 2724, 2731, 2742, 2755,
+ 2765, 2776, 2786, 2797, 2805, 2815, 2822, 2825, 2826, 2833,
+ 2837, 2842, 2858, 2875, 2889, 2903, 2915, 2923, 2930, 2936,
+ 2942, 2948, 2963, 3053, 3058, 3062, 3069, 3076, 3084, 3091,
+ 3099, 3107, 3121, 3138, 3146
};
#endif
@@ -4067,12 +4067,10 @@
{
// Allow but ignore attributes on function types; this permits auto-upgrade.
// FIXME: remove in LLVM 3.0.
- const Type* RetTy = *(yyvsp[(1) - (5)].TypeVal);
- if (!(RetTy->isFirstClassType() || RetTy == Type::VoidTy ||
- isa<StructType>(RetTy) ||
- isa<OpaqueType>(RetTy)))
- GEN_ERROR("LLVM Functions cannot return aggregates");
-
+ const Type *RetTy = *(yyvsp[(1) - (5)].TypeVal);
+ if (!FunctionType::isValidReturnType(RetTy))
+ GEN_ERROR("Invalid result type for LLVM function");
+
std::vector<const Type*> Params;
TypeWithAttrsList::iterator I = (yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E = (yyvsp[(3) - (5)].TypeWithAttrsList)->end();
for (; I != E; ++I ) {
@@ -4098,7 +4096,7 @@
break;
case 151:
-#line 1380 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1378 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
// Allow but ignore attributes on function types; this permits auto-upgrade.
// FIXME: remove in LLVM 3.0.
@@ -4126,7 +4124,7 @@
break;
case 152:
-#line 1405 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1403 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Sized array type?
(yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val))));
delete (yyvsp[(4) - (5)].TypeVal);
@@ -4135,7 +4133,7 @@
break;
case 153:
-#line 1410 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1408 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Vector type?
const llvm::Type* ElemTy = (yyvsp[(4) - (5)].TypeVal)->get();
if ((unsigned)(yyvsp[(2) - (5)].UInt64Val) != (yyvsp[(2) - (5)].UInt64Val))
@@ -4149,7 +4147,7 @@
break;
case 154:
-#line 1420 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1418 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Structure type?
std::vector<const Type*> Elements;
for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(2) - (3)].TypeList)->begin(),
@@ -4163,7 +4161,7 @@
break;
case 155:
-#line 1430 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1428 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Empty structure type?
(yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
CHECK_FOR_ERROR
@@ -4171,7 +4169,7 @@
break;
case 156:
-#line 1434 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1432 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
std::vector<const Type*> Elements;
for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(3) - (5)].TypeList)->begin(),
@@ -4185,7 +4183,7 @@
break;
case 157:
-#line 1444 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1442 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Empty structure type?
(yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
CHECK_FOR_ERROR
@@ -4193,7 +4191,7 @@
break;
case 158:
-#line 1451 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1449 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
// Allow but ignore attributes on function types; this permits auto-upgrade.
// FIXME: remove in LLVM 3.0.
@@ -4203,7 +4201,7 @@
break;
case 159:
-#line 1460 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1458 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (1)].TypeVal))->getDescription());
@@ -4214,14 +4212,14 @@
break;
case 160:
-#line 1467 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1465 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
;}
break;
case 161:
-#line 1472 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1470 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.TypeWithAttrsList) = new TypeWithAttrsList();
(yyval.TypeWithAttrsList)->push_back((yyvsp[(1) - (1)].TypeWithAttrs));
@@ -4230,7 +4228,7 @@
break;
case 162:
-#line 1477 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1475 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
((yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList))->push_back((yyvsp[(3) - (3)].TypeWithAttrs));
CHECK_FOR_ERROR
@@ -4238,7 +4236,7 @@
break;
case 164:
-#line 1485 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1483 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList);
TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
@@ -4249,7 +4247,7 @@
break;
case 165:
-#line 1492 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1490 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.TypeWithAttrsList) = new TypeWithAttrsList;
TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
@@ -4260,7 +4258,7 @@
break;
case 166:
-#line 1499 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1497 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.TypeWithAttrsList) = new TypeWithAttrsList();
CHECK_FOR_ERROR
@@ -4268,7 +4266,7 @@
break;
case 167:
-#line 1507 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1505 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.TypeList) = new std::list<PATypeHolder>();
(yyval.TypeList)->push_back(*(yyvsp[(1) - (1)].TypeVal));
@@ -4278,7 +4276,7 @@
break;
case 168:
-#line 1513 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1511 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
((yyval.TypeList)=(yyvsp[(1) - (3)].TypeList))->push_back(*(yyvsp[(3) - (3)].TypeVal));
delete (yyvsp[(3) - (3)].TypeVal);
@@ -4287,7 +4285,7 @@
break;
case 169:
-#line 1525 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1523 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Nonempty unsized arr
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
@@ -4319,7 +4317,7 @@
break;
case 170:
-#line 1553 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1551 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
@@ -4339,7 +4337,7 @@
break;
case 171:
-#line 1569 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1567 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
@@ -4370,7 +4368,7 @@
break;
case 172:
-#line 1596 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1594 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Nonempty unsized arr
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
@@ -4402,7 +4400,7 @@
break;
case 173:
-#line 1624 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1622 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (4)].TypeVal)->get());
if (STy == 0)
@@ -4432,7 +4430,7 @@
break;
case 174:
-#line 1650 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1648 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
@@ -4456,7 +4454,7 @@
break;
case 175:
-#line 1670 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1668 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (6)].TypeVal)->get());
if (STy == 0)
@@ -4486,7 +4484,7 @@
break;
case 176:
-#line 1696 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1694 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (5)].TypeVal))->getDescription());
@@ -4510,7 +4508,7 @@
break;
case 177:
-#line 1716 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1714 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
@@ -4526,7 +4524,7 @@
break;
case 178:
-#line 1728 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1726 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
@@ -4537,7 +4535,7 @@
break;
case 179:
-#line 1735 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1733 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
@@ -4607,7 +4605,7 @@
break;
case 180:
-#line 1801 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1799 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
@@ -4621,7 +4619,7 @@
break;
case 181:
-#line 1811 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1809 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
@@ -4635,7 +4633,7 @@
break;
case 182:
-#line 1821 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1819 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // integral constants
if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val)))
GEN_ERROR("Constant value doesn't fit in type");
@@ -4645,7 +4643,7 @@
break;
case 183:
-#line 1827 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1825 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // arbitrary precision integer constants
uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
@@ -4659,7 +4657,7 @@
break;
case 184:
-#line 1837 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1835 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // integral constants
if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val)))
GEN_ERROR("Constant value doesn't fit in type");
@@ -4669,7 +4667,7 @@
break;
case 185:
-#line 1843 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1841 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // arbitrary precision integer constants
uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
@@ -4683,7 +4681,7 @@
break;
case 186:
-#line 1853 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1851 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Boolean constants
assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
(yyval.ConstVal) = ConstantInt::getTrue();
@@ -4692,7 +4690,7 @@
break;
case 187:
-#line 1858 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1856 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Boolean constants
assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
(yyval.ConstVal) = ConstantInt::getFalse();
@@ -4701,7 +4699,7 @@
break;
case 188:
-#line 1863 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1861 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Floating point constants
if (!ConstantFP::isValueValidForType((yyvsp[(1) - (2)].PrimType), *(yyvsp[(2) - (2)].FPVal)))
GEN_ERROR("Floating point constant invalid for type");
@@ -4716,7 +4714,7 @@
break;
case 189:
-#line 1876 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1874 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (6)].TypeVal))->getDescription());
@@ -4732,7 +4730,7 @@
break;
case 190:
-#line 1888 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1886 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!isa<PointerType>((yyvsp[(3) - (5)].ConstVal)->getType()))
GEN_ERROR("GetElementPtr requires a pointer operand");
@@ -4758,7 +4756,7 @@
break;
case 191:
-#line 1910 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1908 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if ((yyvsp[(3) - (8)].ConstVal)->getType() != Type::Int1Ty)
GEN_ERROR("Select condition must be of boolean type");
@@ -4770,7 +4768,7 @@
break;
case 192:
-#line 1918 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1916 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
GEN_ERROR("Binary operator types must match");
@@ -4780,7 +4778,7 @@
break;
case 193:
-#line 1924 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1922 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
GEN_ERROR("Logical operator types must match");
@@ -4795,7 +4793,7 @@
break;
case 194:
-#line 1935 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1933 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
GEN_ERROR("icmp operand types must match");
@@ -4804,7 +4802,7 @@
break;
case 195:
-#line 1940 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1938 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
GEN_ERROR("fcmp operand types must match");
@@ -4813,7 +4811,7 @@
break;
case 196:
-#line 1945 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1943 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!ExtractElementInst::isValidOperands((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal)))
GEN_ERROR("Invalid extractelement operands");
@@ -4823,7 +4821,7 @@
break;
case 197:
-#line 1951 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1949 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!InsertElementInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
GEN_ERROR("Invalid insertelement operands");
@@ -4833,7 +4831,7 @@
break;
case 198:
-#line 1957 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1955 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!ShuffleVectorInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
GEN_ERROR("Invalid shufflevector operands");
@@ -4843,7 +4841,7 @@
break;
case 199:
-#line 1966 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1964 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
((yyval.ConstVector) = (yyvsp[(1) - (3)].ConstVector))->push_back((yyvsp[(3) - (3)].ConstVal));
CHECK_FOR_ERROR
@@ -4851,7 +4849,7 @@
break;
case 200:
-#line 1970 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1968 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ConstVector) = new std::vector<Constant*>();
(yyval.ConstVector)->push_back((yyvsp[(1) - (1)].ConstVal));
@@ -4860,27 +4858,27 @@
break;
case 201:
-#line 1978 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1976 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ (yyval.BoolVal) = false; ;}
break;
case 202:
-#line 1978 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1976 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ (yyval.BoolVal) = true; ;}
break;
case 203:
-#line 1981 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1979 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ (yyval.BoolVal) = true; ;}
break;
case 204:
-#line 1981 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1979 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ (yyval.BoolVal) = false; ;}
break;
case 205:
-#line 1984 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1982 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
const Type* VTy = (yyvsp[(1) - (2)].TypeVal)->get();
Value *V = getVal(VTy, (yyvsp[(2) - (2)].ValIDVal));
@@ -4896,7 +4894,7 @@
break;
case 206:
-#line 1996 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1994 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
Constant *Val = (yyvsp[(3) - (6)].ConstVal);
const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get();
@@ -4912,7 +4910,7 @@
break;
case 207:
-#line 2017 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2015 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
CurModule.ModuleDone();
@@ -4921,7 +4919,7 @@
break;
case 208:
-#line 2022 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2020 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
CurModule.ModuleDone();
@@ -4930,12 +4928,12 @@
break;
case 211:
-#line 2035 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2033 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ CurFun.isDeclare = false; ;}
break;
case 212:
-#line 2035 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2033 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CurFun.FunctionDone();
CHECK_FOR_ERROR
@@ -4943,26 +4941,26 @@
break;
case 213:
-#line 2039 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2037 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ CurFun.isDeclare = true; ;}
break;
case 214:
-#line 2039 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2037 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CHECK_FOR_ERROR
;}
break;
case 215:
-#line 2042 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2040 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CHECK_FOR_ERROR
;}
break;
case 216:
-#line 2045 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2043 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (3)].TypeVal))->getDescription());
@@ -4990,7 +4988,7 @@
break;
case 217:
-#line 2069 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2067 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
ResolveTypeTo((yyvsp[(1) - (3)].StrVal), (yyvsp[(3) - (3)].PrimType));
@@ -5005,7 +5003,7 @@
break;
case 218:
-#line 2081 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2079 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
/* "Externally Visible" Linkage */
if ((yyvsp[(5) - (6)].ConstVal) == 0)
@@ -5017,14 +5015,14 @@
break;
case 219:
-#line 2088 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2086 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CurGV = 0;
;}
break;
case 220:
-#line 2092 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2090 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if ((yyvsp[(6) - (7)].ConstVal) == 0)
GEN_ERROR("Global value initializer is not a constant");
@@ -5034,14 +5032,14 @@
break;
case 221:
-#line 2097 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2095 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CurGV = 0;
;}
break;
case 222:
-#line 2101 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2099 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(6) - (7)].TypeVal))->getDescription());
@@ -5052,7 +5050,7 @@
break;
case 223:
-#line 2107 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2105 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CurGV = 0;
CHECK_FOR_ERROR
@@ -5060,7 +5058,7 @@
break;
case 224:
-#line 2111 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2109 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
std::string Name;
if ((yyvsp[(1) - (5)].StrVal)) {
@@ -5104,21 +5102,21 @@
break;
case 225:
-#line 2151 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2149 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CHECK_FOR_ERROR
;}
break;
case 226:
-#line 2154 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2152 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CHECK_FOR_ERROR
;}
break;
case 227:
-#line 2160 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2158 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
if (AsmSoFar.empty())
@@ -5131,7 +5129,7 @@
break;
case 228:
-#line 2170 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2168 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CurModule.CurrentModule->setTargetTriple(*(yyvsp[(3) - (3)].StrVal));
delete (yyvsp[(3) - (3)].StrVal);
@@ -5139,7 +5137,7 @@
break;
case 229:
-#line 2174 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2172 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CurModule.CurrentModule->setDataLayout(*(yyvsp[(3) - (3)].StrVal));
delete (yyvsp[(3) - (3)].StrVal);
@@ -5147,7 +5145,7 @@
break;
case 231:
-#line 2181 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2179 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CurModule.CurrentModule->addLibrary(*(yyvsp[(3) - (3)].StrVal));
delete (yyvsp[(3) - (3)].StrVal);
@@ -5156,7 +5154,7 @@
break;
case 232:
-#line 2186 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2184 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CurModule.CurrentModule->addLibrary(*(yyvsp[(1) - (1)].StrVal));
delete (yyvsp[(1) - (1)].StrVal);
@@ -5165,14 +5163,14 @@
break;
case 233:
-#line 2191 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2189 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CHECK_FOR_ERROR
;}
break;
case 234:
-#line 2200 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2198 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
@@ -5186,7 +5184,7 @@
break;
case 235:
-#line 2210 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2208 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
@@ -5200,7 +5198,7 @@
break;
case 236:
-#line 2221 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2219 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ArgList) = (yyvsp[(1) - (1)].ArgList);
CHECK_FOR_ERROR
@@ -5208,7 +5206,7 @@
break;
case 237:
-#line 2225 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2223 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ArgList) = (yyvsp[(1) - (3)].ArgList);
struct ArgListEntry E;
@@ -5221,7 +5219,7 @@
break;
case 238:
-#line 2234 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2232 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ArgList) = new ArgListType;
struct ArgListEntry E;
@@ -5234,7 +5232,7 @@
break;
case 239:
-#line 2243 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2241 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ArgList) = 0;
CHECK_FOR_ERROR
@@ -5242,7 +5240,7 @@
break;
case 240:
-#line 2249 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2247 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
std::string FunctionName(*(yyvsp[(3) - (10)].StrVal));
delete (yyvsp[(3) - (10)].StrVal); // Free strdup'd memory!
@@ -5252,6 +5250,9 @@
if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[(2) - (10)].TypeVal)))
GEN_ERROR("Reference to abstract result: "+ (yyvsp[(2) - (10)].TypeVal)->get()->getDescription());
+ if (!FunctionType::isValidReturnType(*(yyvsp[(2) - (10)].TypeVal)))
+ GEN_ERROR("Invalid result type for LLVM function");
+
std::vector<const Type*> ParamTypeList;
SmallVector<ParamAttrsWithIndex, 8> Attrs;
if ((yyvsp[(7) - (10)].ParamAttrs) != ParamAttr::None)
@@ -5370,7 +5371,7 @@
break;
case 243:
-#line 2376 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2377 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.FunctionVal) = CurFun.CurrentFunction;
@@ -5382,7 +5383,7 @@
break;
case 246:
-#line 2387 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2388 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
CHECK_FOR_ERROR
@@ -5390,7 +5391,7 @@
break;
case 247:
-#line 2392 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2393 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
CurFun.CurrentFunction->setLinkage((yyvsp[(1) - (3)].Linkage));
CurFun.CurrentFunction->setVisibility((yyvsp[(2) - (3)].Visibility));
@@ -5401,7 +5402,7 @@
break;
case 248:
-#line 2404 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2405 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.BoolVal) = false;
CHECK_FOR_ERROR
@@ -5409,7 +5410,7 @@
break;
case 249:
-#line 2408 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2409 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.BoolVal) = true;
CHECK_FOR_ERROR
@@ -5417,7 +5418,7 @@
break;
case 250:
-#line 2413 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2414 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // A reference to a direct constant
(yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].SInt64Val));
CHECK_FOR_ERROR
@@ -5425,7 +5426,7 @@
break;
case 251:
-#line 2417 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2418 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].UInt64Val));
CHECK_FOR_ERROR
@@ -5433,7 +5434,7 @@
break;
case 252:
-#line 2421 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2422 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Perhaps it's an FP constant?
(yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].FPVal));
CHECK_FOR_ERROR
@@ -5441,7 +5442,7 @@
break;
case 253:
-#line 2425 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2426 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
CHECK_FOR_ERROR
@@ -5449,7 +5450,7 @@
break;
case 254:
-#line 2429 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2430 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
CHECK_FOR_ERROR
@@ -5457,7 +5458,7 @@
break;
case 255:
-#line 2433 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2434 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ValIDVal) = ValID::createNull();
CHECK_FOR_ERROR
@@ -5465,7 +5466,7 @@
break;
case 256:
-#line 2437 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2438 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ValIDVal) = ValID::createUndef();
CHECK_FOR_ERROR
@@ -5473,7 +5474,7 @@
break;
case 257:
-#line 2441 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2442 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // A vector zero constant.
(yyval.ValIDVal) = ValID::createZeroInit();
CHECK_FOR_ERROR
@@ -5481,7 +5482,7 @@
break;
case 258:
-#line 2445 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2446 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Nonempty unsized packed vector
const Type *ETy = (*(yyvsp[(2) - (3)].ConstVector))[0]->getType();
int NumElements = (yyvsp[(2) - (3)].ConstVector)->size();
@@ -5510,7 +5511,7 @@
break;
case 259:
-#line 2470 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2471 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].ConstVal));
CHECK_FOR_ERROR
@@ -5518,7 +5519,7 @@
break;
case 260:
-#line 2474 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2475 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ValIDVal) = ValID::createInlineAsm(*(yyvsp[(3) - (5)].StrVal), *(yyvsp[(5) - (5)].StrVal), (yyvsp[(2) - (5)].BoolVal));
delete (yyvsp[(3) - (5)].StrVal);
@@ -5528,7 +5529,7 @@
break;
case 261:
-#line 2484 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2485 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Is it an integer reference...?
(yyval.ValIDVal) = ValID::createLocalID((yyvsp[(1) - (1)].UIntVal));
CHECK_FOR_ERROR
@@ -5536,7 +5537,7 @@
break;
case 262:
-#line 2488 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2489 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ValIDVal) = ValID::createGlobalID((yyvsp[(1) - (1)].UIntVal));
CHECK_FOR_ERROR
@@ -5544,7 +5545,7 @@
break;
case 263:
-#line 2492 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2493 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Is it a named reference...?
(yyval.ValIDVal) = ValID::createLocalName(*(yyvsp[(1) - (1)].StrVal));
delete (yyvsp[(1) - (1)].StrVal);
@@ -5553,7 +5554,7 @@
break;
case 264:
-#line 2497 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2498 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Is it a named reference...?
(yyval.ValIDVal) = ValID::createGlobalName(*(yyvsp[(1) - (1)].StrVal));
delete (yyvsp[(1) - (1)].StrVal);
@@ -5562,7 +5563,7 @@
break;
case 267:
-#line 2510 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2511 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
@@ -5573,7 +5574,7 @@
break;
case 268:
-#line 2519 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2520 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ValueList) = new std::vector<Value *>();
(yyval.ValueList)->push_back((yyvsp[(1) - (1)].ValueVal));
@@ -5582,7 +5583,7 @@
break;
case 269:
-#line 2524 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2525 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
((yyval.ValueList)=(yyvsp[(1) - (3)].ValueList))->push_back((yyvsp[(3) - (3)].ValueVal));
CHECK_FOR_ERROR
@@ -5590,7 +5591,7 @@
break;
case 270:
-#line 2529 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2530 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
CHECK_FOR_ERROR
@@ -5598,7 +5599,7 @@
break;
case 271:
-#line 2533 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2534 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Do not allow functions with 0 basic blocks
(yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
CHECK_FOR_ERROR
@@ -5606,7 +5607,7 @@
break;
case 272:
-#line 2542 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2543 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
setValueName((yyvsp[(3) - (3)].TermInstVal), (yyvsp[(2) - (3)].StrVal));
CHECK_FOR_ERROR
@@ -5618,7 +5619,7 @@
break;
case 273:
-#line 2551 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2552 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[(2) - (2)].InstVal)))
if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
@@ -5631,7 +5632,7 @@
break;
case 274:
-#line 2560 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2561 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Empty space between instruction lists
(yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum), 0);
CHECK_FOR_ERROR
@@ -5639,7 +5640,7 @@
break;
case 275:
-#line 2564 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2565 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Only the unwind to block
(yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum), getBBVal((yyvsp[(3) - (3)].ValIDVal)));
CHECK_FOR_ERROR
@@ -5647,7 +5648,7 @@
break;
case 276:
-#line 2568 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2569 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Labelled (named) basic block
(yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName(*(yyvsp[(1) - (1)].StrVal)), 0);
delete (yyvsp[(1) - (1)].StrVal);
@@ -5656,7 +5657,7 @@
break;
case 277:
-#line 2573 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2574 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName(*(yyvsp[(1) - (4)].StrVal)), getBBVal((yyvsp[(4) - (4)].ValIDVal)));
delete (yyvsp[(1) - (4)].StrVal);
@@ -5665,7 +5666,7 @@
break;
case 278:
-#line 2580 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2581 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Return with a result...
ValueList &VL = *(yyvsp[(2) - (2)].ValueList);
assert(!VL.empty() && "Invalid ret operands!");
@@ -5676,7 +5677,7 @@
break;
case 279:
-#line 2587 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2588 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Return with no result...
(yyval.TermInstVal) = ReturnInst::Create();
CHECK_FOR_ERROR
@@ -5684,7 +5685,7 @@
break;
case 280:
-#line 2591 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2592 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Unconditional Branch...
BasicBlock* tmpBB = getBBVal((yyvsp[(3) - (3)].ValIDVal));
CHECK_FOR_ERROR
@@ -5693,7 +5694,7 @@
break;
case 281:
-#line 2596 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2597 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
assert(cast<IntegerType>((yyvsp[(2) - (9)].PrimType))->getBitWidth() == 1 && "Not Bool?");
BasicBlock* tmpBBA = getBBVal((yyvsp[(6) - (9)].ValIDVal));
@@ -5707,7 +5708,7 @@
break;
case 282:
-#line 2606 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2607 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
Value* tmpVal = getVal((yyvsp[(2) - (9)].PrimType), (yyvsp[(3) - (9)].ValIDVal));
CHECK_FOR_ERROR
@@ -5730,7 +5731,7 @@
break;
case 283:
-#line 2625 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2626 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
Value* tmpVal = getVal((yyvsp[(2) - (8)].PrimType), (yyvsp[(3) - (8)].ValIDVal));
CHECK_FOR_ERROR
@@ -5743,7 +5744,7 @@
break;
case 284:
-#line 2635 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2636 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
// Handle the short syntax
@@ -5760,6 +5761,10 @@
GEN_ERROR("Short call syntax cannot be used with varargs");
ParamTypes.push_back(Ty);
}
+
+ if (!FunctionType::isValidReturnType(*(yyvsp[(3) - (14)].TypeVal)))
+ GEN_ERROR("Invalid result type for LLVM function");
+
Ty = FunctionType::get((yyvsp[(3) - (14)].TypeVal)->get(), ParamTypes, false);
PFTy = PointerType::getUnqual(Ty);
}
@@ -5827,7 +5832,7 @@
break;
case 285:
-#line 2715 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2720 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.TermInstVal) = new UnwindInst();
CHECK_FOR_ERROR
@@ -5835,7 +5840,7 @@
break;
case 286:
-#line 2719 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2724 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.TermInstVal) = new UnreachableInst();
CHECK_FOR_ERROR
@@ -5843,7 +5848,7 @@
break;
case 287:
-#line 2726 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2731 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.JumpTable) = (yyvsp[(1) - (6)].JumpTable);
Constant *V = cast<Constant>(getExistingVal((yyvsp[(2) - (6)].PrimType), (yyvsp[(3) - (6)].ValIDVal)));
@@ -5858,7 +5863,7 @@
break;
case 288:
-#line 2737 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2742 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
Constant *V = cast<Constant>(getExistingVal((yyvsp[(1) - (5)].PrimType), (yyvsp[(2) - (5)].ValIDVal)));
@@ -5874,7 +5879,7 @@
break;
case 289:
-#line 2750 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2755 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
// Is this definition named?? if so, assign the name...
setValueName((yyvsp[(2) - (2)].InstVal), (yyvsp[(1) - (2)].StrVal));
@@ -5886,7 +5891,7 @@
break;
case 290:
-#line 2760 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2765 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ // Used for PHI nodes
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (6)].TypeVal))->getDescription());
@@ -5901,7 +5906,7 @@
break;
case 291:
-#line 2771 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2776 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.PHIList) = (yyvsp[(1) - (7)].PHIList);
Value* tmpVal = getVal((yyvsp[(1) - (7)].PHIList)->front().first->getType(), (yyvsp[(4) - (7)].ValIDVal));
@@ -5913,7 +5918,7 @@
break;
case 292:
-#line 2781 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2786 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
// FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
if (!UpRefs.empty())
@@ -5928,7 +5933,7 @@
break;
case 293:
-#line 2792 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2797 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
// FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
// Labels are only valid in ASMs
@@ -5940,7 +5945,7 @@
break;
case 294:
-#line 2800 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2805 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
// FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
if (!UpRefs.empty())
@@ -5954,7 +5959,7 @@
break;
case 295:
-#line 2810 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2815 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
// FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
(yyval.ParamList) = (yyvsp[(1) - (6)].ParamList);
@@ -5965,17 +5970,17 @@
break;
case 296:
-#line 2817 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2822 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ (yyval.ParamList) = new ParamList(); ;}
break;
case 297:
-#line 2820 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2825 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{ (yyval.ValueList) = new std::vector<Value*>(); ;}
break;
case 298:
-#line 2821 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2826 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.ValueList) = (yyvsp[(1) - (3)].ValueList);
(yyval.ValueList)->push_back((yyvsp[(3) - (3)].ValueVal));
@@ -5984,7 +5989,7 @@
break;
case 299:
-#line 2828 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2833 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.BoolVal) = true;
CHECK_FOR_ERROR
@@ -5992,7 +5997,7 @@
break;
case 300:
-#line 2832 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2837 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.BoolVal) = false;
CHECK_FOR_ERROR
@@ -6000,7 +6005,7 @@
break;
case 301:
-#line 2837 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2842 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
@@ -6020,7 +6025,7 @@
break;
case 302:
-#line 2853 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2858 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
@@ -6041,7 +6046,7 @@
break;
case 303:
-#line 2870 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2875 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
@@ -6059,7 +6064,7 @@
break;
case 304:
-#line 2884 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2889 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
@@ -6077,7 +6082,7 @@
break;
case 305:
-#line 2898 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2903 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
@@ -6093,7 +6098,7 @@
break;
case 306:
-#line 2910 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2915 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if ((yyvsp[(2) - (6)].ValueVal)->getType() != Type::Int1Ty)
GEN_ERROR("select condition must be boolean");
@@ -6105,7 +6110,7 @@
break;
case 307:
-#line 2918 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2923 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
@@ -6116,7 +6121,7 @@
break;
case 308:
-#line 2925 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2930 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!ExtractElementInst::isValidOperands((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal)))
GEN_ERROR("Invalid extractelement operands");
@@ -6126,7 +6131,7 @@
break;
case 309:
-#line 2931 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2936 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!InsertElementInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
GEN_ERROR("Invalid insertelement operands");
@@ -6136,7 +6141,7 @@
break;
case 310:
-#line 2937 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2942 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!ShuffleVectorInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
GEN_ERROR("Invalid shufflevector operands");
@@ -6146,7 +6151,7 @@
break;
case 311:
-#line 2943 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2948 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
const Type *Ty = (yyvsp[(2) - (2)].PHIList)->front().first->getType();
if (!Ty->isFirstClassType())
@@ -6165,7 +6170,7 @@
break;
case 312:
-#line 2959 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2964 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
// Handle the short syntax
@@ -6182,6 +6187,10 @@
GEN_ERROR("Short call syntax cannot be used with varargs");
ParamTypes.push_back(Ty);
}
+
+ if (!FunctionType::isValidReturnType(*(yyvsp[(3) - (8)].TypeVal)))
+ GEN_ERROR("Invalid result type for LLVM function");
+
Ty = FunctionType::get((yyvsp[(3) - (8)].TypeVal)->get(), ParamTypes, false);
PFTy = PointerType::getUnqual(Ty);
}
@@ -6254,7 +6263,7 @@
break;
case 313:
-#line 3044 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 3053 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.InstVal) = (yyvsp[(1) - (1)].InstVal);
CHECK_FOR_ERROR
@@ -6262,7 +6271,7 @@
break;
case 314:
-#line 3049 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 3058 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.BoolVal) = true;
CHECK_FOR_ERROR
@@ -6270,7 +6279,7 @@
break;
case 315:
-#line 3053 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 3062 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
(yyval.BoolVal) = false;
CHECK_FOR_ERROR
@@ -6278,7 +6287,7 @@
break;
case 316:
-#line 3060 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 3069 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
@@ -6289,7 +6298,7 @@
break;
case 317:
-#line 3067 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 3076 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
@@ -6301,7 +6310,7 @@
break;
case 318:
-#line 3075 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 3084 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
@@ -6312,7 +6321,7 @@
break;
case 319:
-#line 3082 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 3091 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
@@ -6324,7 +6333,7 @@
break;
case 320:
-#line 3090 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 3099 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!isa<PointerType>((yyvsp[(2) - (2)].ValueVal)->getType()))
GEN_ERROR("Trying to free nonpointer type " +
@@ -6335,7 +6344,7 @@
break;
case 321:
-#line 3098 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 3107 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
@@ -6353,7 +6362,7 @@
break;
case 322:
-#line 3112 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 3121 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (7)].TypeVal))->getDescription());
@@ -6374,7 +6383,7 @@
break;
case 323:
-#line 3129 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 3138 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
Value *TmpVal = getVal((yyvsp[(2) - (5)].TypeVal)->get(), (yyvsp[(3) - (5)].ValIDVal));
if (!GetResultInst::isValidOperands(TmpVal, (yyvsp[(5) - (5)].UInt64Val)))
@@ -6386,7 +6395,7 @@
break;
case 324:
-#line 3137 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 3146 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
{
if (!UpRefs.empty())
GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (4)].TypeVal))->getDescription());
@@ -6406,7 +6415,7 @@
/* Line 1267 of yacc.c. */
-#line 6410 "llvmAsmParser.tab.c"
+#line 6419 "llvmAsmParser.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -6620,7 +6629,7 @@
}
-#line 3154 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 3163 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
// common code from the two 'RunVMAsmParser' functions
Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs?rev=50139&r1=50138&r2=50139&view=diff
==============================================================================
--- llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs (original)
+++ llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs Wed Apr 23 00:37:08 2008
@@ -1349,12 +1349,10 @@
| Types '(' ArgTypeListI ')' OptFuncAttrs {
// Allow but ignore attributes on function types; this permits auto-upgrade.
// FIXME: remove in LLVM 3.0.
- const Type* RetTy = *$1;
- if (!(RetTy->isFirstClassType() || RetTy == Type::VoidTy ||
- isa<StructType>(RetTy) ||
- isa<OpaqueType>(RetTy)))
- GEN_ERROR("LLVM Functions cannot return aggregates");
-
+ const Type *RetTy = *$1;
+ if (!FunctionType::isValidReturnType(RetTy))
+ GEN_ERROR("Invalid result type for LLVM function");
+
std::vector<const Type*> Params;
TypeWithAttrsList::iterator I = $3->begin(), E = $3->end();
for (; I != E; ++I ) {
@@ -2255,6 +2253,9 @@
if (!CurFun.isDeclare && CurModule.TypeIsUnresolved($2))
GEN_ERROR("Reference to abstract result: "+ $2->get()->getDescription());
+ if (!FunctionType::isValidReturnType(*$2))
+ GEN_ERROR("Invalid result type for LLVM function");
+
std::vector<const Type*> ParamTypeList;
SmallVector<ParamAttrsWithIndex, 8> Attrs;
if ($7 != ParamAttr::None)
@@ -2648,6 +2649,10 @@
GEN_ERROR("Short call syntax cannot be used with varargs");
ParamTypes.push_back(Ty);
}
+
+ if (!FunctionType::isValidReturnType(*$3))
+ GEN_ERROR("Invalid result type for LLVM function");
+
Ty = FunctionType::get($3->get(), ParamTypes, false);
PFTy = PointerType::getUnqual(Ty);
}
@@ -2972,6 +2977,10 @@
GEN_ERROR("Short call syntax cannot be used with varargs");
ParamTypes.push_back(Ty);
}
+
+ if (!FunctionType::isValidReturnType(*$3))
+ GEN_ERROR("Invalid result type for LLVM function");
+
Ty = FunctionType::get($3->get(), ParamTypes, false);
PFTy = PointerType::getUnqual(Ty);
}
More information about the llvm-commits
mailing list