[llvm-commits] [dragonegg] r159117 - in /dragonegg/trunk/test/validator/objc: ./ 2007-04-03-ObjcEH.m 2007-05-02-Strong.m 2007-10-18-ProDescriptor.m 2007-10-23-GC-WriteBarrier.m 2008-10-3-EhValue.m 2008-11-12-Metadata.m 2009-02-05-VolatileProp.m 2009-04-28-bitfield-vs-vbc.m 2010-02-23-DbgInheritance.m 2010-03-17-StructRef.m
Duncan Sands
baldrick at free.fr
Sun Jun 24 09:23:27 PDT 2012
Author: baldrick
Date: Sun Jun 24 11:23:27 2012
New Revision: 159117
URL: http://llvm.org/viewvc/llvm-project?rev=159117&view=rev
Log:
Add a few objective-c testcases.
Added:
dragonegg/trunk/test/validator/objc/
dragonegg/trunk/test/validator/objc/2007-04-03-ObjcEH.m
dragonegg/trunk/test/validator/objc/2007-05-02-Strong.m
dragonegg/trunk/test/validator/objc/2007-10-18-ProDescriptor.m
dragonegg/trunk/test/validator/objc/2007-10-23-GC-WriteBarrier.m
dragonegg/trunk/test/validator/objc/2008-10-3-EhValue.m
dragonegg/trunk/test/validator/objc/2008-11-12-Metadata.m
dragonegg/trunk/test/validator/objc/2009-02-05-VolatileProp.m
dragonegg/trunk/test/validator/objc/2009-04-28-bitfield-vs-vbc.m
dragonegg/trunk/test/validator/objc/2010-02-23-DbgInheritance.m
dragonegg/trunk/test/validator/objc/2010-03-17-StructRef.m
Added: dragonegg/trunk/test/validator/objc/2007-04-03-ObjcEH.m
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/test/validator/objc/2007-04-03-ObjcEH.m?rev=159117&view=auto
==============================================================================
--- dragonegg/trunk/test/validator/objc/2007-04-03-ObjcEH.m (added)
+++ dragonegg/trunk/test/validator/objc/2007-04-03-ObjcEH.m Sun Jun 24 11:23:27 2012
@@ -0,0 +1,29 @@
+// RUN: %dragonegg -fobjc-exceptions -S %s -o /dev/null
+
+ at interface B
+-(int)bar;
+ at end
+
+ at interface A
+-(void) Foo:(int) state;
+ at end
+
+ at implementation A
+- (void) Foo:(int) state {
+
+ int wasResponded = 0;
+ @try {
+ if (state) {
+ B * b = 0;
+ @try { }
+ @finally {
+ wasResponded = ![b bar];
+ }
+ }
+ }
+ @finally {
+ }
+}
+ at end
+
+
Added: dragonegg/trunk/test/validator/objc/2007-05-02-Strong.m
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/test/validator/objc/2007-05-02-Strong.m?rev=159117&view=auto
==============================================================================
--- dragonegg/trunk/test/validator/objc/2007-05-02-Strong.m (added)
+++ dragonegg/trunk/test/validator/objc/2007-05-02-Strong.m Sun Jun 24 11:23:27 2012
@@ -0,0 +1,23 @@
+// RUN: %dragonegg -S %s -fobjc-gc -o /dev/null
+typedef int NSInteger;
+typedef struct _NSRect {
+ int origin;
+ int size;
+} NSRect;
+
+__attribute__((objc_gc(strong))) NSRect *_cachedRectArray;
+extern const NSRect NSZeroRect;
+ at interface A{
+}
+-(void)bar:(NSInteger *)rectCount;
+ at end
+
+ at implementation A
+
+-(void)bar:(NSInteger *)rectCount {
+ NSRect appendRect = NSZeroRect;
+
+ _cachedRectArray[*rectCount - 1] = NSZeroRect;
+}
+
+ at end
Added: dragonegg/trunk/test/validator/objc/2007-10-18-ProDescriptor.m
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/test/validator/objc/2007-10-18-ProDescriptor.m?rev=159117&view=auto
==============================================================================
--- dragonegg/trunk/test/validator/objc/2007-10-18-ProDescriptor.m (added)
+++ dragonegg/trunk/test/validator/objc/2007-10-18-ProDescriptor.m Sun Jun 24 11:23:27 2012
@@ -0,0 +1,19 @@
+// RUN: %dragonegg -x objective-c -S %s -o /dev/null
+ at protocol O
+ at end
+ at interface O < O > {
+}
+ at end
+struct A {
+};
+ at protocol AB
+- (unsigned) ver;
+ at end
+ at interface AGy:O < AB > {
+}
+ at end
+ at implementation AGy
+- (unsigned) ver {
+}
+ at end
+
Added: dragonegg/trunk/test/validator/objc/2007-10-23-GC-WriteBarrier.m
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/test/validator/objc/2007-10-23-GC-WriteBarrier.m?rev=159117&view=auto
==============================================================================
--- dragonegg/trunk/test/validator/objc/2007-10-23-GC-WriteBarrier.m (added)
+++ dragonegg/trunk/test/validator/objc/2007-10-23-GC-WriteBarrier.m Sun Jun 24 11:23:27 2012
@@ -0,0 +1,9 @@
+// RUN: %dragonegg -x objective-c -S %s -o /dev/null -fobjc-gc
+// rdar://5541393
+
+typedef unsigned int NSUInteger;
+__attribute__((objc_gc(strong))) float *_scores;
+
+void foo(int i, float f) {
+ _scores[i] = f;
+}
Added: dragonegg/trunk/test/validator/objc/2008-10-3-EhValue.m
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/test/validator/objc/2008-10-3-EhValue.m?rev=159117&view=auto
==============================================================================
--- dragonegg/trunk/test/validator/objc/2008-10-3-EhValue.m (added)
+++ dragonegg/trunk/test/validator/objc/2008-10-3-EhValue.m Sun Jun 24 11:23:27 2012
@@ -0,0 +1,50 @@
+// RUN: %dragonegg -fobjc-exceptions -w -x objective-c -S %s -o /dev/null
+
+ at interface Object {
+ at public
+ Class isa;
+}
++initialize;
++alloc;
++new;
++free;
+-free;
++(Class)class;
+-(Class)class;
+-init;
+-superclass;
+-(const char *)name;
+ at end
+
+ at interface Frob: Object
+ at end
+
+ at implementation Frob: Object
+ at end
+
+static Frob* _connection = ((void *)0);
+
+extern void abort(void);
+
+void test (Object* sendPort)
+{
+ int cleanupPorts = 1;
+ Frob* receivePort = ((void *)0);
+
+ @try {
+ receivePort = (Frob *) -1;
+ _connection = (Frob *) -1;
+ receivePort = ((void *)0);
+ sendPort = ((void *)0);
+ cleanupPorts = 0;
+ @throw [Object new];
+ }
+ @catch(Frob *obj) {
+ if(!(0)) abort();
+ }
+ @catch(id exc) {
+ if(!(!receivePort)) abort();
+ if(!(!sendPort)) abort();
+ if(!(!cleanupPorts)) abort();
+ }
+}
Added: dragonegg/trunk/test/validator/objc/2008-11-12-Metadata.m
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/test/validator/objc/2008-11-12-Metadata.m?rev=159117&view=auto
==============================================================================
--- dragonegg/trunk/test/validator/objc/2008-11-12-Metadata.m (added)
+++ dragonegg/trunk/test/validator/objc/2008-11-12-Metadata.m Sun Jun 24 11:23:27 2012
@@ -0,0 +1,14 @@
+// RUN: %dragonegg -x objective-c -m64 -S %s -o /dev/null
+
+ at interface A
+ at end
+ at protocol P
+ at end
+ at interface B : A <P>
+{
+}
+ at end
+ at implementation B
+- (void)test {
+}
+ at end
Added: dragonegg/trunk/test/validator/objc/2009-02-05-VolatileProp.m
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/test/validator/objc/2009-02-05-VolatileProp.m?rev=159117&view=auto
==============================================================================
--- dragonegg/trunk/test/validator/objc/2009-02-05-VolatileProp.m (added)
+++ dragonegg/trunk/test/validator/objc/2009-02-05-VolatileProp.m Sun Jun 24 11:23:27 2012
@@ -0,0 +1,11 @@
+/* RUN: %dragonegg -fobjc-exceptions -w -x objective-c -S %s -o /dev/null -pedantic-errors
+ rdar://6551276 */
+
+void foo(const unsigned short *);
+void bar() {
+ unsigned short *s[3];
+ int i;
+ @try { } @catch (id anException) { }
+ foo(2+s[i]);
+}
+
Added: dragonegg/trunk/test/validator/objc/2009-04-28-bitfield-vs-vbc.m
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/test/validator/objc/2009-04-28-bitfield-vs-vbc.m?rev=159117&view=auto
==============================================================================
--- dragonegg/trunk/test/validator/objc/2009-04-28-bitfield-vs-vbc.m (added)
+++ dragonegg/trunk/test/validator/objc/2009-04-28-bitfield-vs-vbc.m Sun Jun 24 11:23:27 2012
@@ -0,0 +1,127 @@
+// RUN: %dragonegg -S -x objective-c -m32 %s -o /dev/null
+// This used to crash, 6831493.
+#include <stdlib.h>
+
+struct s0 {
+ double x;
+};
+
+ at interface I2 {
+ struct s0 _iv1;
+}
+ at end
+
+ at interface I3 : I2 {
+ unsigned int _iv2 :1;
+ unsigned : 0;
+ unsigned int _iv3 : 3;
+}
+ at end
+
+ at interface I4 : I3 {
+ char _iv4;
+}
+ at end
+
+ at interface I5 : I4 {
+ char _iv5;
+ int _iv6;
+ int _iv7;
+}
+
+ at property int P1;
+ at end
+
+ at implementation I2
+ at end
+
+ at implementation I3
+ at end
+
+ at implementation I4
+ at end
+
+ at interface I5 ()
+ at property int P2;
+ at end
+
+#if 0
+int g2 = sizeof(I2);
+int g3 = sizeof(I3);
+int g4 = sizeof(I4);
+int g5_0 = sizeof(I5);
+#endif
+
+ at implementation I5
+#ifdef __x86_64
+ at synthesize P1 = _MadeUpName;
+ at synthesize P2 = _AnotherMadeUpName;
+#else
+ at synthesize P1 = _iv6;
+ at synthesize P2 = _iv7;
+#endif
+ at end
+
+#if 0
+int g5_1 = sizeof(I5);
+#endif
+
+ at interface T0_I0 {
+ double iv_A_0;
+ char iv_A_1;
+}
+ at end
+
+ at interface T0_I1 : T0_I0 {
+ char iv_B_0;
+}
+ at end
+
+ at interface T0_I2 : T0_I1 {
+ char iv_C_0;
+}
+ at end
+
+#if 0
+int g6 = sizeof(T0_I0);
+int g7 = sizeof(T0_I1);
+int g8 = sizeof(T0_I2);
+#endif
+
+ at implementation T0_I0 @end
+ at implementation T0_I1 @end
+ at implementation T0_I2 @end
+
+void f0(I2*i2,I3*i3,I4*i4,I5*i5,T0_I0*t0_i0,T0_I1*t0_i1,T0_I2*t0_i2) {
+}
+
+// Thomas Wang's ui32 hash.
+unsigned hash_ui32_to_ui32(unsigned a) {
+ a = (a ^ 61) ^ (a >> 16);
+ a = a + (a << 3);
+ a = a ^ (a >> 4);
+ a = a * 0x27d4eb2d;
+ a = a ^ (a >> 15);
+ return a;
+}
+
+unsigned char hash_ui32_to_ui8(unsigned ui) {
+ ui = hash_ui32_to_ui32(ui);
+ ui ^= ui>>8;
+ ui ^= ui>>8;
+ ui ^= ui>>8;
+ return (unsigned char) ui;
+}
+
+void *init() {
+ unsigned i, N = 1024;
+ unsigned char *p = malloc(N);
+ for (i=0; i != N; ++i)
+ p[i] = hash_ui32_to_ui8(i);
+ return p;
+}
+
+int main(){
+ void *p = init();
+ f0(p,p,p,p,p,p,p);
+}
Added: dragonegg/trunk/test/validator/objc/2010-02-23-DbgInheritance.m
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/test/validator/objc/2010-02-23-DbgInheritance.m?rev=159117&view=auto
==============================================================================
--- dragonegg/trunk/test/validator/objc/2010-02-23-DbgInheritance.m (added)
+++ dragonegg/trunk/test/validator/objc/2010-02-23-DbgInheritance.m Sun Jun 24 11:23:27 2012
@@ -0,0 +1,10 @@
+// RUN: %dragonegg %s -S -g -o - | FileCheck %s
+// CHECK-NOT: DW_TAG_member
+// Interface P should not be a member of interface I in debug info.
+ at interface P
+ at end
+
+ at interface I : P
+ at end
+
+void fn(I *iptr) {}
Added: dragonegg/trunk/test/validator/objc/2010-03-17-StructRef.m
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/test/validator/objc/2010-03-17-StructRef.m?rev=159117&view=auto
==============================================================================
--- dragonegg/trunk/test/validator/objc/2010-03-17-StructRef.m (added)
+++ dragonegg/trunk/test/validator/objc/2010-03-17-StructRef.m Sun Jun 24 11:23:27 2012
@@ -0,0 +1,43 @@
+// RUN: %dragonegg %s -m64 -S -o - | FileCheck %s
+// Bitfield references must not touch memory outside of the enclosing
+// struct. Radar 7639995
+typedef signed char BOOL;
+ at protocol NSObject
+- (id)init;
+ at end
+ at interface NSObject <NSObject> {}
+ at end
+ at interface IMAVChatParticipant : NSObject {
+ int _ardRole;
+ int _state;
+ int _avRelayStatus;
+ int _chatEndedReason;
+ int _chatError;
+ unsigned _sendingAudio:1;
+ unsigned _sendingVideo:1;
+ unsigned _sendingAuxVideo:1;
+ unsigned _audioMuted:1;
+ unsigned _videoPaused:1;
+ unsigned _networkStalled:1;
+ unsigned _isInitiator:1;
+ unsigned _isAOLInterop:1;
+ unsigned _isRecording:1;
+ unsigned _isUsingICE:1;
+}
+ at end
+ at implementation IMAVChatParticipant
+- (id) init {
+ self = [super init];
+ if ( self ) {
+ BOOL blah = (BOOL)1;
+ // We're expecting these three bitfield assignments will generate i8 stores.
+ _sendingAudio = (BOOL)1;
+ _isUsingICE = (BOOL)1;
+ _isUsingICE = blah;
+ // CHECK: store i8
+ // CHECK: store i8
+ // CHECK: store i8
+ }
+ return self;
+}
+ at end
More information about the llvm-commits
mailing list