[cfe-commits] r75383 - in /cfe/trunk: lib/CodeGen/CGObjCMac.cpp test/CodeGenObjC/for-in.m
Daniel Dunbar
daniel at zuster.org
Sat Jul 11 13:32:50 PDT 2009
Author: ddunbar
Date: Sat Jul 11 15:32:50 2009
New Revision: 75383
URL: http://llvm.org/viewvc/llvm-project?rev=75383&view=rev
Log:
Generate correct prototype for objc_enumerationMutation.
- This was a latent bug exposed by the recent objc type changes.
Added:
cfe/trunk/test/CodeGenObjC/for-in.m
Modified:
cfe/trunk/lib/CodeGen/CGObjCMac.cpp
Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=75383&r1=75382&r2=75383&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Sat Jul 11 15:32:50 2009
@@ -314,11 +314,14 @@
}
llvm::Constant *getEnumerationMutationFn() {
+ CodeGen::CodeGenTypes &Types = CGM.getTypes();
+ ASTContext &Ctx = CGM.getContext();
// void objc_enumerationMutation (id)
- std::vector<const llvm::Type*> Args;
- Args.push_back(ObjectPtrTy);
- llvm::FunctionType *FTy =
- llvm::FunctionType::get(llvm::Type::VoidTy, Args, false);
+ llvm::SmallVector<QualType,16> Params;
+ QualType IdType = Ctx.getObjCIdType();
+ Params.push_back(IdType);
+ const llvm::FunctionType *FTy =
+ Types.GetFunctionType(Types.getFunctionInfo(Ctx.VoidTy, Params), false);
return CGM.CreateRuntimeFunction(FTy, "objc_enumerationMutation");
}
Added: cfe/trunk/test/CodeGenObjC/for-in.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/for-in.m?rev=75383&view=auto
==============================================================================
--- cfe/trunk/test/CodeGenObjC/for-in.m (added)
+++ cfe/trunk/test/CodeGenObjC/for-in.m Sat Jul 11 15:32:50 2009
@@ -0,0 +1,44 @@
+// RUN: clang-cc -emit-llvm %s -o %t
+
+void p(const char*, ...);
+
+ at interface NSArray
++(NSArray*) arrayWithObjects: (id) first, ...;
+-(unsigned) count;
+ at end
+ at interface NSString
+-(const char*) cString;
+ at end
+
+#define S(n) @#n
+#define L1(n) S(n+0),S(n+1)
+#define L2(n) L1(n+0),L1(n+2)
+#define L3(n) L2(n+0),L2(n+4)
+#define L4(n) L3(n+0),L3(n+8)
+#define L5(n) L4(n+0),L4(n+16)
+#define L6(n) L5(n+0),L5(n+32)
+
+void t0() {
+ NSArray *array = [NSArray arrayWithObjects: L1(0), (void*)0];
+
+ p("array.length: %d\n", [array count]);
+ unsigned index = 0;
+ for (NSString *i in array) {
+ p("element %d: %s\n", index++, [i cString]);
+ }
+}
+
+void t1() {
+ NSArray *array = [NSArray arrayWithObjects: L6(0), (void*)0];
+
+ p("array.length: %d\n", [array count]);
+ unsigned index = 0;
+ for (NSString *i in array) {
+ index++;
+ if (index == 10)
+ continue;
+ p("element %d: %s\n", index, [i cString]);
+ if (index == 55)
+ break;
+ }
+}
More information about the cfe-commits
mailing list