diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 46b655fb15ba7d9ced6424d18fe242e15525f947..05dfa724e99a8f7d089173b4e3e71ae2347ca450 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2004-09-08 Ziemowit Laski <zlaski@apple.com> + + * objc.dg/bitfield-2.m: Make 'id' definition a typedef. + * obj.dg/bitfield-4.m: Allow 'unsigned' in addition to 'unsigned int' + in error message. + * objc.dg/id-1.m: Attempt to define 'id' in an incompatible fashion. + * objc.dg/method-6.m: Allow 'unsigned' in addition to 'unsigned int' + in error message. + * objc.dg/proto-qual-1.m: Protocol qualifiers now appear before the + types they qualify. + * objc.dg/type-size-2.m: Fix wording in comment. + * objc.dg/va-meth-1.m: New test case. + 2004-09-06 H.J. Lu <hongjiu.lu@intel.com> PR c/16633: diff --git a/gcc/testsuite/objc.dg/bitfield-2.m b/gcc/testsuite/objc.dg/bitfield-2.m index 83b317483711f05abb8f193ec0e1d0c6ecba5fd5..6875c6c4d8748837fd0d359cc0095bfc19105dc3 100644 --- a/gcc/testsuite/objc.dg/bitfield-2.m +++ b/gcc/testsuite/objc.dg/bitfield-2.m @@ -4,7 +4,7 @@ /* { dg-options "-fnext-runtime -fsigned-char" } */ /* { dg-do run { target *-*-darwin* } } */ -struct objc_object { struct objc_class *class_pointer; } *id; +typedef struct objc_object { struct objc_class *class_pointer; } *id; extern void abort(void); extern int strcmp(const char *, const char *); diff --git a/gcc/testsuite/objc.dg/bitfield-4.m b/gcc/testsuite/objc.dg/bitfield-4.m index 858bac2b00391b99dd2384ff0eff9729e5301577..4883497e8bb8b72446cc7b2ad7b559b372801cc5 100644 --- a/gcc/testsuite/objc.dg/bitfield-4.m +++ b/gcc/testsuite/objc.dg/bitfield-4.m @@ -19,11 +19,10 @@ @implementation WithBitfields { char *isa; /* { dg-error "conflicting instance variable type .char \\*isa." } */ /* { dg-error "previous declaration of .void \\*isa." "" { target *-*-* } 12 } */ - unsigned a: 5; /* { dg-error "conflicting instance variable type .unsigned a: 5." } */ - /* { dg-error "previous declaration of .unsigned a: 3." "" { target *-*-* } 13 } */ + unsigned a: 5; /* { dg-error "conflicting instance variable type .unsigned( int)? a: 5." } */ + /* { dg-error "previous declaration of .unsigned( int)? a: 3." "" { target *-*-* } 13 } */ signed b: 4; /* This one is fine. */ int c: 3; /* { dg-error "conflicting instance variable type .int c: 3." } */ /* { dg-error "previous declaration of .int c: 5." "" { target *-*-* } 15 } */ } @end - diff --git a/gcc/testsuite/objc.dg/id-1.m b/gcc/testsuite/objc.dg/id-1.m index abc17bc67cc80e11dce04d43cacfb735f5bda361..ceb4d898131cc27947892bf488cf9a3b49000fef 100644 --- a/gcc/testsuite/objc.dg/id-1.m +++ b/gcc/testsuite/objc.dg/id-1.m @@ -1,6 +1,7 @@ -/* Test the id type warning. */ +/* Test attempt to redefine 'id' in an incompatible fashion. */ /* { dg-do compile } */ -typedef int id; +typedef int id; /* { dg-error "conflicting types for .id." } */ +/* { dg-error "previous declaration of .id. was here" "" { target *-*-* } 0 } */ -id b; /* { dg-warning "nexpected type for `id'" } */ +id b; diff --git a/gcc/testsuite/objc.dg/method-6.m b/gcc/testsuite/objc.dg/method-6.m index a4ca787b7f66ac5503fa42fc9593cd46e0077f8d..8bed64bee1a5f94f49cd44762aa4cea0522195ef 100644 --- a/gcc/testsuite/objc.dg/method-6.m +++ b/gcc/testsuite/objc.dg/method-6.m @@ -19,7 +19,7 @@ void foo(void) { Class receiver; [receiver port]; /* { dg-warning "multiple methods named .\\+port. found" } */ - /* { dg-warning "using .\\-\\(unsigned\\)port." "" { target *-*-* } 9 } */ + /* { dg-warning "using .\\-\\(unsigned( int)?\\)port." "" { target *-*-* } 9 } */ /* { dg-warning "also found .\\+\\(Protocol \\*\\)port." "" { target *-*-* } 14 } */ [receiver starboard]; /* { dg-warning ".Class. may not respond to .\\+starboard." } */ diff --git a/gcc/testsuite/objc.dg/proto-qual-1.m b/gcc/testsuite/objc.dg/proto-qual-1.m index 0f1c3102d2756f8bbc8ff73af85bde5ad2f28d16..126bae76e8915405f2823019dc155a995112d7c3 100644 --- a/gcc/testsuite/objc.dg/proto-qual-1.m +++ b/gcc/testsuite/objc.dg/proto-qual-1.m @@ -43,10 +43,10 @@ static void scan_initial(const char *pattern) { int main(void) { meth = [proto descriptionForInstanceMethod: @selector(address:with:)]; - scan_initial("O@%u@%u:%uNR@%uo^^S%u"); + scan_initial("O@%u@%u:%uRN@%uo^^S%u"); CHECK_IF(offs3 == offs2 + aligned_sizeof(id) && totsize == offs3 + aligned_sizeof(unsigned)); meth = [proto descriptionForClassMethod: @selector(retainArgument:with:)]; - scan_initial("Vv%u@%u:%uOo@%un^*%u"); + scan_initial("Vv%u@%u:%uoO@%un^*%u"); CHECK_IF(offs3 == offs2 + aligned_sizeof(id) && totsize == offs3 + aligned_sizeof(char **)); return 0; } diff --git a/gcc/testsuite/objc.dg/type-size-2.m b/gcc/testsuite/objc.dg/type-size-2.m index 446de48345a17fff504d212f23f08956a61484ef..da6bdb8f9fb3ce2dac64293a6a8fda1e288122ae 100644 --- a/gcc/testsuite/objc.dg/type-size-2.m +++ b/gcc/testsuite/objc.dg/type-size-2.m @@ -1,6 +1,6 @@ /* Make sure that array arguments to methods are given the size of pointers. */ /* As in the case of ivars, arrays without size (e.g., 'int []') are - encoded as pointers as well. */ + encoded as pointers. */ /* Contributed by Ziemowit Laski <zlaski@apple.com>. */ /* { dg-do run } */ diff --git a/gcc/testsuite/objc.dg/va-meth-1.m b/gcc/testsuite/objc.dg/va-meth-1.m new file mode 100644 index 0000000000000000000000000000000000000000..751b6484545d2fa47d5044ddd0a059d43416c21d --- /dev/null +++ b/gcc/testsuite/objc.dg/va-meth-1.m @@ -0,0 +1,69 @@ +/* Based on objc/execute/va_method.m, by Nicola Pero */ +/* { dg-do run } */ + +#include <objc/Object.h> +#include <stdarg.h> +#include <stdlib.h> + +/* Test methods with "C-style" trailing arguments, with or without ellipsis. */ + +@interface MathClass: Object +/* sum positive numbers; -1 ends the list */ ++ (int) sum: (int)firstNumber, int secondNumber, ...; ++ (int) prod: (int) firstNumber, int secondNumber, int thirdNumber; ++ (int) minimum: (int) firstNumber, ...; +@end + +@implementation MathClass ++ (int) sum: (int)firstNumber, int secondNumber, ... +{ + va_list ap; + int sum = 0, number = 0; + + va_start (ap, secondNumber); + number = firstNumber + secondNumber; + + while (number >= 0) + { + sum += number; + number = va_arg (ap, int); + } + + va_end (ap); + + return sum; +} ++ (int) prod: (int) firstNumber, int secondNumber, int thirdNumber { + return firstNumber * secondNumber * thirdNumber; +} ++ (int) minimum: (int)firstNumber, ... +{ + va_list ap; + int minimum = 999, number = 0; + + va_start (ap, firstNumber); + number = firstNumber; + + while (number >= 0) + { + minimum = (minimum < number ? minimum: number); + number = va_arg (ap, int); + } + + va_end (ap); + + return minimum; +} +@end + +int main (void) +{ + if ([MathClass sum: 1, 2, 3, 4, 5, -1] != 15) + abort (); + if ([MathClass prod: 4, 5, 6] != 120) + abort (); + if ([MathClass minimum: 17, 9, 133, 84, 35, -1] != 9) + abort (); + + return 0; +}