[cfe-commits] r45777 - in /cfe/trunk: Driver/RewriteTest.cpp test/Sema/rewrite-foreach-3.m
Fariborz Jahanian
fjahanian at apple.com
Wed Jan 9 10:15:42 PST 2008
Author: fjahanian
Date: Wed Jan 9 12:15:42 2008
New Revision: 45777
URL: http://llvm.org/viewvc/llvm-project?rev=45777&view=rev
Log:
Type-cast RHS of assignment to prevent warning compiling rewritten foreach code.
Added:
cfe/trunk/test/Sema/rewrite-foreach-3.m
Modified:
cfe/trunk/Driver/RewriteTest.cpp
Modified: cfe/trunk/Driver/RewriteTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/RewriteTest.cpp?rev=45777&r1=45776&r2=45777&view=diff
==============================================================================
--- cfe/trunk/Driver/RewriteTest.cpp (original)
+++ cfe/trunk/Driver/RewriteTest.cpp Wed Jan 9 12:15:42 2008
@@ -808,7 +808,7 @@
/// do {
/// if (startMutations != *enumState.mutationsPtr)
/// objc_enumerationMutation(l_collection);
-/// elem = enumState.itemsPtr[counter++];
+/// elem = (type)enumState.itemsPtr[counter++];
/// stmts;
/// } while (counter < limit);
/// } while (limit = [l_collection countByEnumeratingWithState:&enumState
@@ -826,19 +826,23 @@
const char *startBuf = SM->getCharacterData(startLoc);
const char *startCollectionBuf = SM->getCharacterData(collectionLoc);
const char *elementName;
+ std::string elementTypeAsString;
std::string buf;
buf = "\n{\n\t";
if (DeclStmt *DS = dyn_cast<DeclStmt>(S->getElement())) {
// type elem;
QualType ElementType = cast<ValueDecl>(DS->getDecl())->getType();
- buf += ElementType.getAsString();
+ elementTypeAsString = ElementType.getAsString();
+ buf += elementTypeAsString;
buf += " ";
elementName = DS->getDecl()->getName();
buf += elementName;
buf += ";\n\t";
}
- else if (DeclRefExpr *DR = dyn_cast<DeclRefExpr>(S->getElement()))
+ else if (DeclRefExpr *DR = dyn_cast<DeclRefExpr>(S->getElement())) {
elementName = DR->getDecl()->getName();
+ elementTypeAsString = DR->getDecl()->getType().getAsString();
+ }
else
assert(false && "RewriteObjCForCollectionStmt - bad element kind");
@@ -879,7 +883,7 @@
/// do {
/// if (startMutations != *enumState.mutationsPtr)
/// objc_enumerationMutation(l_collection);
- /// elem = enumState.itemsPtr[counter++];
+ /// elem = (type)enumState.itemsPtr[counter++];
buf += "if (limit) {\n\t";
buf += "unsigned long startMutations = *enumState.mutationsPtr;\n\t";
buf += "do {\n\t\t";
@@ -888,7 +892,9 @@
buf += "if (startMutations != *enumState.mutationsPtr)\n\t\t\t\t";
buf += "objc_enumerationMutation(l_collection);\n\t\t\t";
buf += elementName;
- buf += " = enumState.itemsPtr[counter++];";
+ buf += " = (";
+ buf += elementTypeAsString;
+ buf += ")enumState.itemsPtr[counter++];";
// Replace ')' in for '(' type elem in collection ')' with all of these.
Rewrite.ReplaceText(lparenLoc, 1, buf.c_str(), buf.size());
Added: cfe/trunk/test/Sema/rewrite-foreach-3.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/rewrite-foreach-3.m?rev=45777&view=auto
==============================================================================
--- cfe/trunk/test/Sema/rewrite-foreach-3.m (added)
+++ cfe/trunk/test/Sema/rewrite-foreach-3.m Wed Jan 9 12:15:42 2008
@@ -0,0 +1,29 @@
+// RUN: clang -rewrite-test %s
+
+ at protocol P @end
+
+ at interface MyList
+ at end
+
+ at implementation MyList
+- (unsigned int)countByEnumeratingWithState: (struct __objcFastEnumerationState *)state objects: (id *)items count:(unsigned int)stackcount
+{
+ return 0;
+}
+ at end
+
+ at interface MyList (BasicTest)
+- (void)compilerTestAgainst;
+ at end
+
+int LOOP();
+ at implementation MyList (BasicTest)
+- (void)compilerTestAgainst {
+ MyList * el;
+ for (el in self)
+ { LOOP(); }
+ for (MyList * el1 in self)
+ LOOP();
+}
+ at end
+
More information about the cfe-commits
mailing list