diff options
Diffstat (limited to 'gcc/testsuite')
35 files changed, 1906 insertions, 43 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d0790f59710..92ad43cf238 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,123 @@ +2002-03-17 Richard Earnshaw <rearnsha@arm.com> + + * gcc.dg/weak-1.c: Fix scan tests. + +2002-03-15 Mark Mitchell <mark@codesourcery.com> + + * g++.dg/opt/dtor1.C: New test. + +2002-03-15 Jakub Jelinek <jakub@redhat.com> + + * gcc.c-torture/compile/20020315-1.c: New test. + +2002-03-14 Richard Earnshaw <rearnsha@arm.com> + + * gcc.c-torture/execute/20020314-1.c: New test. + +2002-03-14 Jakub Jelinek <jakub@redhat.com> + + * g++.dg/warn/Wunused-1.C: New test. + +2002-02-13 Richard Sandiford <rsandifo@redhat.com> + + * g++.dg/abi/mangle6.C: New test. + +2002-03-13 Jakub Jelinek <jakub@redhat.com> + + * gcc.c-torture/compile/20020309-2.c: New test. + + * gcc.c-torture/compile/20020312-1.c: New test. + +2002-03-12 Nathan Sidwell <nathan@codesourcery.com> + + * g++.dg/other/access1.C: New test. + +2002-03-12 Jakub Jelinek <jakub@redhat.com> + + * gcc.c-torture/execute/wchar_t-1.c: New test. + +2002-03-12 David Edelsohn <edelsohn@gnu.org> + + * gcc.dg/20020103-1.c: Add rs6000 target and macro. + +2002-03-12 Aldy Hernandez <aldyh@redhat.com> + + * gcc.dg/20020103-1.c: Add other -D ppc variants. + +2002-03-12 Kazu Hirata <kazu@hxi.com> + + * gcc.c-torture/execute/20020307-1.c: Use long. + +2002-03-12 Roger Sayle <roger@eyesopen.com> + + * gcc.dg/20020312-1.c: New test case. + +2002-03-11 Nathan Sidwell <nathan@codesourcery.com> + + * testsuite/g++.old-deja/g++.other/friend9.C: Revert DR 209 changes. + * testsuite/g++.old-deja/g++.robertl/eb56.C: Likewise. + +2002-03-11 Nathan Sidwell <nathan@codesourcery.com> + + * testsuite/g++.dg/overload/pmf1.C: New test. + +2002-03-11 Jakub Jelinek <jakub@redhat.com> + + PR optimization/5844 + * gcc.dg/20020310-1.c: New test. + +2002-03-11 Hans-Peter Nilsson <hp@bitrange.com> + + * gcc.c-torture/execute/20020227-1.c: New test. + +2002-03-09 Jakub Jelinek <jakub@redhat.com> + + * gcc.c-torture/execute/va-arg-22.c: New test. + +Sat Mar 9 07:30:53 2002 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * gcc.c-torture/compile/20020309-1.c: New test. + +2002-03-08 Jakub Jelinek <jakub@redhat.com> + + * gcc.c-torture/execute/20020307-2.c: New test. + +2002-03-08 Richard Earnshaw <rearnsha@arm.com> + + * gcc.c-torture/execute/20020307-1.c: New test. + +2002-03-05 Jakub Jelinek <jakub@redhat.com> + + * gcc.dg/20020304-1.c: New test. + + * gcc.c-torture/compile/20020304-2.c: New test. + +2002-03-04 Zack Weinberg <zack@codesourcery.com> + + * gcc.c-torture/compile/20020304-1.c: New test case + (from PR c/5830). + +2002-03-02 Nathan Sidwell <nathan@codesourcery.com> + + * g++.dg/other/classkey1.C: New test. + +2002-03-01 Richard Henderson <rth@redhat.com> + + * gcc.c-torture/compile/981223-1.x: New. + * gcc.c-torture/compile/920625-1.x: New. + +2002-02-28 Richard Henderson <rth@redhat.com> + + * g++.dg/opt/vtgc1.C: Adjust patterns for ia64. + +2002-02-26 Alexandre Oliva <aoliva@redhat.com> + + * gcc.dg/debug/20020224-1.c: New. + +2002-02-26 Jakub Jelinek <jakub@redhat.com> + + * g++.dg/debug/debug4.C: New test. + 2002-02-25 Kazu Hirata <kazu@hxi.com> * gcc.c-torture/execute/960416-1.x: New. @@ -126,7 +246,7 @@ 2002-02-12 David Billinghurst <David.Billinghurst@riotinto.com> - * gcc.dg/c99-flex-array-2.c: Add -std=iso9899:1999 + * gcc.dg/c99-flex-array-2.c: Add -std=iso9899:1999 2002-02-10 Kazu Hirata <kazu@hxi.com> @@ -171,7 +291,7 @@ 2002-02-07 David Billinghurst <David.Billinghurst@riotinto.com> PR fortran/5473 - * g77.dg/pr5473.f: Now dg-error. Add additional cases. + * g77.dg/pr5473.f: Now dg-error. Add additional cases. 2002-02-07 Richard Henderson <rth@redhat.com> @@ -368,7 +488,7 @@ * gcc.c-torture/execute/20020127-1.c: New test. 2002-01-27 David Billinghurst <David.Billinghurst@riotinto.com> - + * g77.dg/f77-edit-i-in.f: New test * g77.dg/f77-edit-i-out.f: New test diff --git a/gcc/testsuite/g++.dg/abi/mangle6.C b/gcc/testsuite/g++.dg/abi/mangle6.C new file mode 100644 index 00000000000..e17ee7e653b --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/mangle6.C @@ -0,0 +1,18 @@ +/* Check that __int128 types are mangled. */ +/* { dg-do compile { target mips64*-*-* } } */ + +typedef int int128 __attribute__ ((mode(TI))); +typedef unsigned int uint128 __attribute__ ((mode(TI))); + +struct S +{ + int128 i; + int128 func1 (int128) const { return i; } + uint128 func2 (uint128) const { return i; } +}; + +int128 (S::*ptr1) (int128) const = &S::func1; +uint128 (S::*ptr2) (uint128) const = &S::func2; + +/* { dg-final { scan-assembler _ZNK1S5func1En } } */ +/* { dg-final { scan-assembler _ZNK1S5func2Eo } } */ diff --git a/gcc/testsuite/g++.dg/debug/debug4.C b/gcc/testsuite/g++.dg/debug/debug4.C new file mode 100644 index 00000000000..8dceb0875bf --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/debug4.C @@ -0,0 +1,17 @@ +/* PR debug/5770 + This testcase failed at -O -g because the following constants + were optimized away since they were never referenced, but + since they are variables with initializers, rtl_for_decl_location + run expand_expr on their initializers and returned it. + This lead to references to constants which were deferred and thus + never emitted. */ +/* { dg-do link } */ + +static const char foo[] = "foo string"; +static const char bar[30] = "bar string"; +static const wchar_t baz[] = L"baz string"; + +int +main () +{ +} diff --git a/gcc/testsuite/g++.dg/opt/dtor1.C b/gcc/testsuite/g++.dg/opt/dtor1.C new file mode 100644 index 00000000000..0352676c5f7 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/dtor1.C @@ -0,0 +1,27 @@ +// { dg-do run } +// { dg-options "-O2" } + +int i; + +struct S { + S (); + S (const S&); + ~S (); +}; + +S::S () { ++i; } +S::S (const S&) { ++i; } +S::~S () { --i; } + +inline void f (S) { +} + +int main () { + { + S s; + f (s); + } + + return i; +} + diff --git a/gcc/testsuite/g++.dg/opt/vtgc1.C b/gcc/testsuite/g++.dg/opt/vtgc1.C index c50855529bb..511d45b36e7 100644 --- a/gcc/testsuite/g++.dg/opt/vtgc1.C +++ b/gcc/testsuite/g++.dg/opt/vtgc1.C @@ -118,16 +118,19 @@ void x3 (Multivs1 *ii) { ii->f2();} void x4 (Multiss2 *ii) { ii->f2();} void x5 (Multivv3 *ii) { ii->f2();} -// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multivv3, 0" } } -// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for Multivv3, 0" } } -// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multiss2, vtable for Base2" } } -// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multivs1, vtable for Base2" } } -// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for Multivs1, vtable for Base2" } } -// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multisv0, vtable for Side0" } } -// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for Multisv0, vtable for Side0" } } -// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Side0, 0" } } -// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for VbasedA, 0" } } -// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for VbasedA, 0" } } -// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Base2, vtable for Base1" } } -// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Base1, vtable for Base0" } } -// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Base0, 0" } } +// Use .* because of ia64's convention of marking symbols with "#", which +// makes it through the c++filt. + +// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multivv3.*0" } } +// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for Multivv3.*0" } } +// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multiss2.*vtable for Base2" } } +// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multivs1.*vtable for Base2" } } +// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for Multivs1.*vtable for Base2" } } +// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multisv0.*vtable for Side0" } } +// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for Multisv0.*vtable for Side0" } } +// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Side0.*0" } } +// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for VbasedA.*0" } } +// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for VbasedA.*0" } } +// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Base2.*vtable for Base1" } } +// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Base1.*vtable for Base0" } } +// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Base0.*0" } } diff --git a/gcc/testsuite/g++.dg/other/access1.C b/gcc/testsuite/g++.dg/other/access1.C new file mode 100644 index 00000000000..ee3239b93f2 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/access1.C @@ -0,0 +1,26 @@ +// { dg-do compile } + +// Copyright (C) 2002 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 12 Mar 2002 <nathan@codesourcery.com> + +// PR c++/5659. Failed to notice default accessed changed + +class Foo; +struct Foo +{ + static int m; +}; + +class Outer { + private: + class Inner; + Inner *i; + public: + void pub(); +}; + +struct Outer::Inner { + Inner(int i); +}; + +void Outer::pub() { i = new Inner(Foo::m); } diff --git a/gcc/testsuite/g++.dg/other/classkey1.C b/gcc/testsuite/g++.dg/other/classkey1.C new file mode 100644 index 00000000000..17fb54065d0 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/classkey1.C @@ -0,0 +1,17 @@ +// { dg-do compile } + +// Copyright (C) 2002 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 28 Feb 2002 <nathan@codesourcery.com> + +// PR 775. Some mismatches which were broken. + +template <class T> struct A {}; +union A<int> a; // { dg-error "`union' tag" "" } + +template <> union A<float> {}; // { dg-error "`union' tag" "" } + +struct B {}; +union B b; // { dg-error "`union' tag" "" } + +union C {}; +class C c; // { dg-error "`class' tag" "" } diff --git a/gcc/testsuite/g++.dg/overload/pmf1.C b/gcc/testsuite/g++.dg/overload/pmf1.C new file mode 100644 index 00000000000..772cb530529 --- /dev/null +++ b/gcc/testsuite/g++.dg/overload/pmf1.C @@ -0,0 +1,21 @@ +// { dg-do compile } + +// Copyright (C) 2002 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 04 Mar 2002 <nathan@codesourcery.com> +// Jason Merrill <jason@redhat.com> + +struct A { int i; }; +struct B: private A {}; +struct C { + C (int A::*); +}; + +int A::*aip = &A::i; + +void f (int B::*) {} // should choose this, even though it's ill-formed +void f (C) {} // even though this would be well-formed + +int main () +{ + f (aip); // { dg-error "`A' is an inaccessible base of `B'" "" } +} diff --git a/gcc/testsuite/g++.dg/warn/Wunused-1.C b/gcc/testsuite/g++.dg/warn/Wunused-1.C new file mode 100644 index 00000000000..60ceb4f076d --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wunused-1.C @@ -0,0 +1,15 @@ +// Test whether -Wunused handles empty classes the same as non-empty. +// { dg-do compile } +// { dg-options "-Wunused" } + +struct A {}; +struct B { char c; }; + +void foo () +{ + struct A a0, a1; + struct B b0, b1 = { 25 }; + + a0 = a1; // { dg-bogus "value computed is not used" } + b0 = b1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.other/crash25.C b/gcc/testsuite/g++.old-deja/g++.other/crash25.C index 0c39be8b0bd..2f471fb866f 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/crash25.C +++ b/gcc/testsuite/g++.old-deja/g++.other/crash25.C @@ -9,7 +9,7 @@ public: X::x() { // ERROR - -} // WARNING - no return +} X::~x() { // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.other/friend9.C b/gcc/testsuite/g++.old-deja/g++.other/friend9.C index e51b0274c66..442d9899e3a 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/friend9.C +++ b/gcc/testsuite/g++.old-deja/g++.other/friend9.C @@ -5,16 +5,14 @@ // Bug 853: We reported the wrong line no for a friend access violation -// Since DR 209, friend declaration access is not checked. - class F { - class Internal; + class Internal; // ERROR - is private }; class C { - friend class F::Internal; + friend class F::Internal; // ERROR - in this context public: typedef enum { A, B } e; diff --git a/gcc/testsuite/g++.old-deja/g++.robertl/eb42.C b/gcc/testsuite/g++.old-deja/g++.robertl/eb42.C deleted file mode 100644 index c27aa8d2df7..00000000000 --- a/gcc/testsuite/g++.old-deja/g++.robertl/eb42.C +++ /dev/null @@ -1,19 +0,0 @@ -//Build don't link: -#include <vector> -#include <algorithm> - -template <class T> class Expr -{ -public : -Expr(){}; -Expr(const T&){}; -}; - -template <class T > -inline bool compare(const Expr<T> a, const Expr<T> b){ return true; }; - -int main() -{ - std::vector<int> a(3); - std::sort( a.begin(), a.end(), compare ); // ERROR - no matching function -} diff --git a/gcc/testsuite/g++.old-deja/g++.robertl/eb56.C b/gcc/testsuite/g++.old-deja/g++.robertl/eb56.C index 2249a40b24c..0b4bb7dbe39 100644 --- a/gcc/testsuite/g++.old-deja/g++.robertl/eb56.C +++ b/gcc/testsuite/g++.old-deja/g++.robertl/eb56.C @@ -3,7 +3,7 @@ class foo { public: - typedef int sometype; + typedef int sometype; }; struct die : public foo::sometype { // ERROR - invalid base type diff --git a/gcc/testsuite/gcc.c-torture/compile/20020304-1.c b/gcc/testsuite/gcc.c-torture/compile/20020304-1.c new file mode 100644 index 00000000000..3940d5ffd2e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20020304-1.c @@ -0,0 +1,777 @@ +/* In 3.0, this test case (extracted from Bigloo) crashes the compiler in + bb-reorder.c. This is a regression from 2.95, already fixed in 3.1. + + Original bug report is c/5830 by Manuel Serrano <Manuel.Serrano@inria.fr>. + */ + +typedef union scmobj { + struct pair { + union scmobj *car; + union scmobj *cdr; + } pair_t; + struct vector { + long header; + int length; + union scmobj *obj0; + } vector_t; +} *obj_t; + +extern obj_t create_vector (int); +extern obj_t make_pair (obj_t, obj_t); +extern long bgl_list_length (obj_t); +extern int BGl_equalzf3zf3zz__r4_equivalence_6_2z00 (obj_t, obj_t); +extern obj_t BGl_evcompilezd2lambdazd2zz__evcompilez00 (obj_t + BgL_formalsz00_39, + obj_t BgL_bodyz00_40, + obj_t BgL_wherez00_41, + obj_t + BgL_namedzf3zf3_42, + obj_t BgL_locz00_43); + +obj_t +BGl_evcompilezd2lambdazd2zz__evcompilez00 (obj_t BgL_formalsz00_39, + obj_t BgL_bodyz00_40, + obj_t BgL_wherez00_41, + obj_t BgL_namedzf3zf3_42, + obj_t BgL_locz00_43) +{ + if (BGl_equalzf3zf3zz__r4_equivalence_6_2z00 + (BgL_formalsz00_39, + ((obj_t) (obj_t) ((long) (((long) (0) << 2) | 2))))) { + BgL_tagzd21966zd2_943: + if ((BgL_namedzf3zf3_42 != + ((obj_t) (obj_t) ((long) (((long) (1) << 2) | 2))))) { + obj_t BgL_v1042z00_998; + { + int BgL_auxz00_4066; + BgL_auxz00_4066 = (int) (((long) 3)); + BgL_v1042z00_998 = create_vector (BgL_auxz00_4066); + } + { + obj_t BgL_arg1586z00_1000; + BgL_arg1586z00_1000 = make_pair (BgL_wherez00_41, BgL_bodyz00_40); + { + int BgL_auxz00_4070; + BgL_auxz00_4070 = (int) (((long) 2)); + ((&(((obj_t) (BgL_v1042z00_998))->vector_t.obj0))[BgL_auxz00_4070] = + BgL_arg1586z00_1000, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + } + { + int BgL_auxz00_4073; + BgL_auxz00_4073 = (int) (((long) 1)); + ((&(((obj_t) (BgL_v1042z00_998))->vector_t.obj0))[BgL_auxz00_4073] = + BgL_locz00_43, ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + { + obj_t BgL_auxz00_4078; + int BgL_auxz00_4076; + { + long BgL_auxz00_4079; + { + long BgL_auxz00_4080; + BgL_auxz00_4080 = bgl_list_length (BgL_formalsz00_39); + BgL_auxz00_4079 = (BgL_auxz00_4080 + ((long) 37)); + } + BgL_auxz00_4078 = + (obj_t) ((long) (((long) (BgL_auxz00_4079) << 2) | 1)); + } + BgL_auxz00_4076 = (int) (((long) 0)); + ((&(((obj_t) (BgL_v1042z00_998))->vector_t.obj0))[BgL_auxz00_4076] = + BgL_auxz00_4078, ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + return BgL_v1042z00_998; + } else { + obj_t BgL_v1043z00_1005; + { + int BgL_auxz00_4085; + BgL_auxz00_4085 = (int) (((long) 3)); + BgL_v1043z00_1005 = create_vector (BgL_auxz00_4085); + } + { + int BgL_auxz00_4088; + BgL_auxz00_4088 = (int) (((long) 2)); + ((&(((obj_t) (BgL_v1043z00_1005))->vector_t.obj0))[BgL_auxz00_4088] = + BgL_bodyz00_40, ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + { + int BgL_auxz00_4091; + BgL_auxz00_4091 = (int) (((long) 1)); + ((&(((obj_t) (BgL_v1043z00_1005))->vector_t.obj0))[BgL_auxz00_4091] = + BgL_locz00_43, ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + { + obj_t BgL_auxz00_4096; + int BgL_auxz00_4094; + { + long BgL_auxz00_4097; + { + long BgL_auxz00_4098; + BgL_auxz00_4098 = bgl_list_length (BgL_formalsz00_39); + BgL_auxz00_4097 = (BgL_auxz00_4098 + ((long) 42)); + } + BgL_auxz00_4096 = + (obj_t) ((long) (((long) (BgL_auxz00_4097) << 2) | 1)); + } + BgL_auxz00_4094 = (int) (((long) 0)); + ((&(((obj_t) (BgL_v1043z00_1005))->vector_t.obj0))[BgL_auxz00_4094] = + BgL_auxz00_4096, ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + return BgL_v1043z00_1005; + } + } else { + if (((((long) BgL_formalsz00_39) & ((1 << 2) - 1)) == 3)) { + if (BGl_equalzf3zf3zz__r4_equivalence_6_2z00 + (((((obj_t) ((long) BgL_formalsz00_39 - 3))->pair_t).cdr), + ((obj_t) (obj_t) ((long) (((long) (0) << 2) | 2))))) { + goto BgL_tagzd21966zd2_943; + } else { + obj_t BgL_cdrzd21979zd2_953; + BgL_cdrzd21979zd2_953 = + ((((obj_t) ((long) BgL_formalsz00_39 - 3))->pair_t).cdr); + if (((((long) BgL_cdrzd21979zd2_953) & ((1 << 2) - 1)) == 3)) { + if (BGl_equalzf3zf3zz__r4_equivalence_6_2z00 + (((((obj_t) ((long) BgL_cdrzd21979zd2_953 - 3))->pair_t).cdr), + ((obj_t) (obj_t) ((long) (((long) (0) << 2) | 2))))) { + goto BgL_tagzd21966zd2_943; + } else { + obj_t BgL_cdrzd21986zd2_956; + BgL_cdrzd21986zd2_956 = + ((((obj_t) ((long) BgL_cdrzd21979zd2_953 - 3))->pair_t).cdr); + if (((((long) BgL_cdrzd21986zd2_956) & ((1 << 2) - 1)) == 3)) { + if (BGl_equalzf3zf3zz__r4_equivalence_6_2z00 + (((((obj_t) ((long) BgL_cdrzd21986zd2_956 - 3))->pair_t). + cdr), + ((obj_t) (obj_t) ((long) (((long) (0) << 2) | 2))))) { + goto BgL_tagzd21966zd2_943; + } else { + obj_t BgL_cdrzd21994zd2_959; + { + obj_t BgL_auxz00_4120; + BgL_auxz00_4120 = + ((((obj_t) ((long) BgL_cdrzd21979zd2_953 - 3))->pair_t). + cdr); + BgL_cdrzd21994zd2_959 = + ((((obj_t) ((long) BgL_auxz00_4120 - 3))->pair_t).cdr); + } + if (((((long) BgL_cdrzd21994zd2_959) & ((1 << 2) - 1)) == 3)) { + if (BGl_equalzf3zf3zz__r4_equivalence_6_2z00 + (((((obj_t) ((long) BgL_cdrzd21994zd2_959 - 3))-> + pair_t).cdr), + ((obj_t) (obj_t) ((long) (((long) (0) << 2) | 2))))) { + goto BgL_tagzd21966zd2_943; + } else { + int BgL_testz00_4128; + { + obj_t BgL_auxz00_4129; + BgL_auxz00_4129 = + ((((obj_t) ((long) BgL_formalsz00_39 - 3))->pair_t). + car); + BgL_testz00_4128 = + ((((long) BgL_auxz00_4129) & ((1 << 2) - 1)) == 3); + } + if (BgL_testz00_4128) { + BgL_tagzd21971zd2_948: + if ((BgL_namedzf3zf3_42 != + ((obj_t) (obj_t) + ((long) (((long) (1) << 2) | 2))))) { + obj_t BgL_v1052z00_1026; + { + int BgL_auxz00_4134; + BgL_auxz00_4134 = (int) (((long) 3)); + BgL_v1052z00_1026 = create_vector (BgL_auxz00_4134); + } + { + obj_t BgL_arg1606z00_1028; + { + obj_t BgL_v1053z00_1029; + { + int BgL_auxz00_4137; + BgL_auxz00_4137 = (int) (((long) 3)); + BgL_v1053z00_1029 = + create_vector (BgL_auxz00_4137); + } + { + int BgL_auxz00_4140; + BgL_auxz00_4140 = (int) (((long) 2)); + ((& + (((obj_t) (BgL_v1053z00_1029))->vector_t. + obj0))[BgL_auxz00_4140] = + BgL_formalsz00_39, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + { + int BgL_auxz00_4143; + BgL_auxz00_4143 = (int) (((long) 1)); + ((& + (((obj_t) (BgL_v1053z00_1029))->vector_t. + obj0))[BgL_auxz00_4143] = + BgL_bodyz00_40, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + { + int BgL_auxz00_4146; + BgL_auxz00_4146 = (int) (((long) 0)); + ((& + (((obj_t) (BgL_v1053z00_1029))->vector_t. + obj0))[BgL_auxz00_4146] = + BgL_wherez00_41, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + BgL_arg1606z00_1028 = BgL_v1053z00_1029; + } + { + int BgL_auxz00_4149; + BgL_auxz00_4149 = (int) (((long) 2)); + ((&(((obj_t) (BgL_v1052z00_1026))->vector_t.obj0)) + [BgL_auxz00_4149] = + BgL_arg1606z00_1028, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + } + { + int BgL_auxz00_4152; + BgL_auxz00_4152 = (int) (((long) 1)); + ((&(((obj_t) (BgL_v1052z00_1026))->vector_t.obj0)) + [BgL_auxz00_4152] = + BgL_locz00_43, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + { + obj_t BgL_auxz00_4157; + int BgL_auxz00_4155; + BgL_auxz00_4157 = + (obj_t) ((long) + (((long) (((long) 55)) << 2) | 1)); + BgL_auxz00_4155 = (int) (((long) 0)); + ((&(((obj_t) (BgL_v1052z00_1026))->vector_t.obj0)) + [BgL_auxz00_4155] = + BgL_auxz00_4157, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + return BgL_v1052z00_1026; + } else { + obj_t BgL_v1054z00_1030; + { + int BgL_auxz00_4160; + BgL_auxz00_4160 = (int) (((long) 3)); + BgL_v1054z00_1030 = create_vector (BgL_auxz00_4160); + } + { + obj_t BgL_arg1608z00_1032; + BgL_arg1608z00_1032 = + make_pair (BgL_bodyz00_40, BgL_formalsz00_39); + { + int BgL_auxz00_4164; + BgL_auxz00_4164 = (int) (((long) 2)); + ((&(((obj_t) (BgL_v1054z00_1030))->vector_t.obj0)) + [BgL_auxz00_4164] = + BgL_arg1608z00_1032, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + } + { + int BgL_auxz00_4167; + BgL_auxz00_4167 = (int) (((long) 1)); + ((&(((obj_t) (BgL_v1054z00_1030))->vector_t.obj0)) + [BgL_auxz00_4167] = + BgL_locz00_43, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + { + obj_t BgL_auxz00_4172; + int BgL_auxz00_4170; + BgL_auxz00_4172 = + (obj_t) ((long) + (((long) (((long) 56)) << 2) | 1)); + BgL_auxz00_4170 = (int) (((long) 0)); + ((&(((obj_t) (BgL_v1054z00_1030))->vector_t.obj0)) + [BgL_auxz00_4170] = + BgL_auxz00_4172, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + return BgL_v1054z00_1030; + } + } else { + int BgL_testz00_4175; + { + obj_t BgL_auxz00_4176; + { + obj_t BgL_auxz00_4177; + BgL_auxz00_4177 = + ((((obj_t) ((long) BgL_formalsz00_39 - 3))-> + pair_t).cdr); + BgL_auxz00_4176 = + ((((obj_t) ((long) BgL_auxz00_4177 - 3))->pair_t). + car); + } + BgL_testz00_4175 = + ((((long) BgL_auxz00_4176) & ((1 << 2) - 1)) == 3); + } + if (BgL_testz00_4175) { + goto BgL_tagzd21971zd2_948; + } else { + int BgL_testz00_4181; + { + obj_t BgL_auxz00_4182; + { + obj_t BgL_auxz00_4183; + { + obj_t BgL_auxz00_4184; + BgL_auxz00_4184 = + ((((obj_t) ((long) BgL_formalsz00_39 - 3))-> + pair_t).cdr); + BgL_auxz00_4183 = + ((((obj_t) ((long) BgL_auxz00_4184 - 3))-> + pair_t).cdr); + } + BgL_auxz00_4182 = + ((((obj_t) ((long) BgL_auxz00_4183 - 3))-> + pair_t).car); + } + BgL_testz00_4181 = + ((((long) BgL_auxz00_4182) & ((1 << 2) - 1)) == + 3); + } + if (BgL_testz00_4181) { + goto BgL_tagzd21971zd2_948; + } else { + goto BgL_tagzd21971zd2_948; + } + } + } + } + } else { + int BgL_testz00_4189; + { + obj_t BgL_auxz00_4190; + BgL_auxz00_4190 = + ((((obj_t) ((long) BgL_formalsz00_39 - 3))->pair_t). + car); + BgL_testz00_4189 = + ((((long) BgL_auxz00_4190) & ((1 << 2) - 1)) == 3); + } + if (BgL_testz00_4189) { + goto BgL_tagzd21971zd2_948; + } else { + int BgL_testz00_4193; + { + obj_t BgL_auxz00_4194; + { + obj_t BgL_auxz00_4195; + BgL_auxz00_4195 = + ((((obj_t) ((long) BgL_formalsz00_39 - 3))->pair_t). + cdr); + BgL_auxz00_4194 = + ((((obj_t) ((long) BgL_auxz00_4195 - 3))->pair_t). + car); + } + BgL_testz00_4193 = + ((((long) BgL_auxz00_4194) & ((1 << 2) - 1)) == 3); + } + if (BgL_testz00_4193) { + goto BgL_tagzd21971zd2_948; + } else { + int BgL_testz00_4199; + { + obj_t BgL_auxz00_4200; + { + obj_t BgL_auxz00_4201; + { + obj_t BgL_auxz00_4202; + BgL_auxz00_4202 = + ((((obj_t) ((long) BgL_formalsz00_39 - 3))-> + pair_t).cdr); + BgL_auxz00_4201 = + ((((obj_t) ((long) BgL_auxz00_4202 - 3))-> + pair_t).cdr); + } + BgL_auxz00_4200 = + ((((obj_t) ((long) BgL_auxz00_4201 - 3))->pair_t). + car); + } + BgL_testz00_4199 = + ((((long) BgL_auxz00_4200) & ((1 << 2) - 1)) == 3); + } + if (BgL_testz00_4199) { + goto BgL_tagzd21971zd2_948; + } else { + if ((BgL_namedzf3zf3_42 != + ((obj_t) (obj_t) + ((long) (((long) (1) << 2) | 2))))) { + obj_t BgL_v1050z00_1022; + { + int BgL_auxz00_4209; + BgL_auxz00_4209 = (int) (((long) 3)); + BgL_v1050z00_1022 = + create_vector (BgL_auxz00_4209); + } + { + obj_t BgL_arg1604z00_1024; + BgL_arg1604z00_1024 = + make_pair (BgL_wherez00_41, BgL_bodyz00_40); + { + int BgL_auxz00_4213; + BgL_auxz00_4213 = (int) (((long) 2)); + ((& + (((obj_t) (BgL_v1050z00_1022))->vector_t. + obj0))[BgL_auxz00_4213] = + BgL_arg1604z00_1024, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + } + { + int BgL_auxz00_4216; + BgL_auxz00_4216 = (int) (((long) 1)); + ((&(((obj_t) (BgL_v1050z00_1022))->vector_t.obj0)) + [BgL_auxz00_4216] = + BgL_locz00_43, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + { + obj_t BgL_auxz00_4221; + int BgL_auxz00_4219; + BgL_auxz00_4221 = + (obj_t) ((long) + (((long) (((long) 50)) << 2) | 1)); + BgL_auxz00_4219 = (int) (((long) 0)); + ((&(((obj_t) (BgL_v1050z00_1022))->vector_t.obj0)) + [BgL_auxz00_4219] = + BgL_auxz00_4221, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + return BgL_v1050z00_1022; + } else { + obj_t BgL_v1051z00_1025; + { + int BgL_auxz00_4224; + BgL_auxz00_4224 = (int) (((long) 3)); + BgL_v1051z00_1025 = + create_vector (BgL_auxz00_4224); + } + { + int BgL_auxz00_4227; + BgL_auxz00_4227 = (int) (((long) 2)); + ((&(((obj_t) (BgL_v1051z00_1025))->vector_t.obj0)) + [BgL_auxz00_4227] = + BgL_bodyz00_40, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + { + int BgL_auxz00_4230; + BgL_auxz00_4230 = (int) (((long) 1)); + ((&(((obj_t) (BgL_v1051z00_1025))->vector_t.obj0)) + [BgL_auxz00_4230] = + BgL_locz00_43, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + { + obj_t BgL_auxz00_4235; + int BgL_auxz00_4233; + BgL_auxz00_4235 = + (obj_t) ((long) + (((long) (((long) 54)) << 2) | 1)); + BgL_auxz00_4233 = (int) (((long) 0)); + ((&(((obj_t) (BgL_v1051z00_1025))->vector_t.obj0)) + [BgL_auxz00_4233] = + BgL_auxz00_4235, + ((obj_t) (obj_t) + ((long) (((long) (3) << 2) | 2)))); + } + return BgL_v1051z00_1025; + } + } + } + } + } + } + } else { + int BgL_testz00_4238; + { + obj_t BgL_auxz00_4239; + BgL_auxz00_4239 = + ((((obj_t) ((long) BgL_formalsz00_39 - 3))->pair_t).car); + BgL_testz00_4238 = + ((((long) BgL_auxz00_4239) & ((1 << 2) - 1)) == 3); + } + if (BgL_testz00_4238) { + goto BgL_tagzd21971zd2_948; + } else { + int BgL_testz00_4242; + { + obj_t BgL_auxz00_4243; + BgL_auxz00_4243 = + ((((obj_t) ((long) BgL_cdrzd21979zd2_953 - 3))->pair_t). + car); + BgL_testz00_4242 = + ((((long) BgL_auxz00_4243) & ((1 << 2) - 1)) == 3); + } + if (BgL_testz00_4242) { + goto BgL_tagzd21971zd2_948; + } else { + if ((BgL_namedzf3zf3_42 != + ((obj_t) (obj_t) ((long) (((long) (1) << 2) | 2))))) { + obj_t BgL_v1048z00_1018; + { + int BgL_auxz00_4248; + BgL_auxz00_4248 = (int) (((long) 3)); + BgL_v1048z00_1018 = create_vector (BgL_auxz00_4248); + } + { + obj_t BgL_arg1602z00_1020; + BgL_arg1602z00_1020 = + make_pair (BgL_wherez00_41, BgL_bodyz00_40); + { + int BgL_auxz00_4252; + BgL_auxz00_4252 = (int) (((long) 2)); + ((&(((obj_t) (BgL_v1048z00_1018))->vector_t.obj0)) + [BgL_auxz00_4252] = + BgL_arg1602z00_1020, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + } + { + int BgL_auxz00_4255; + BgL_auxz00_4255 = (int) (((long) 1)); + ((&(((obj_t) (BgL_v1048z00_1018))->vector_t.obj0)) + [BgL_auxz00_4255] = + BgL_locz00_43, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + { + obj_t BgL_auxz00_4260; + int BgL_auxz00_4258; + BgL_auxz00_4260 = + (obj_t) ((long) (((long) (((long) 49)) << 2) | 1)); + BgL_auxz00_4258 = (int) (((long) 0)); + ((&(((obj_t) (BgL_v1048z00_1018))->vector_t.obj0)) + [BgL_auxz00_4258] = + BgL_auxz00_4260, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + return BgL_v1048z00_1018; + } else { + obj_t BgL_v1049z00_1021; + { + int BgL_auxz00_4263; + BgL_auxz00_4263 = (int) (((long) 3)); + BgL_v1049z00_1021 = create_vector (BgL_auxz00_4263); + } + { + int BgL_auxz00_4266; + BgL_auxz00_4266 = (int) (((long) 2)); + ((&(((obj_t) (BgL_v1049z00_1021))->vector_t.obj0)) + [BgL_auxz00_4266] = + BgL_bodyz00_40, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + { + int BgL_auxz00_4269; + BgL_auxz00_4269 = (int) (((long) 1)); + ((&(((obj_t) (BgL_v1049z00_1021))->vector_t.obj0)) + [BgL_auxz00_4269] = + BgL_locz00_43, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + { + obj_t BgL_auxz00_4274; + int BgL_auxz00_4272; + BgL_auxz00_4274 = + (obj_t) ((long) (((long) (((long) 53)) << 2) | 1)); + BgL_auxz00_4272 = (int) (((long) 0)); + ((&(((obj_t) (BgL_v1049z00_1021))->vector_t.obj0)) + [BgL_auxz00_4272] = + BgL_auxz00_4274, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + return BgL_v1049z00_1021; + } + } + } + } + } + } else { + int BgL_testz00_4277; + { + obj_t BgL_auxz00_4278; + BgL_auxz00_4278 = + ((((obj_t) ((long) BgL_formalsz00_39 - 3))->pair_t).car); + BgL_testz00_4277 = + ((((long) BgL_auxz00_4278) & ((1 << 2) - 1)) == 3); + } + if (BgL_testz00_4277) { + goto BgL_tagzd21971zd2_948; + } else { + if ((BgL_namedzf3zf3_42 != + ((obj_t) (obj_t) ((long) (((long) (1) << 2) | 2))))) { + obj_t BgL_v1046z00_1014; + { + int BgL_auxz00_4283; + BgL_auxz00_4283 = (int) (((long) 3)); + BgL_v1046z00_1014 = create_vector (BgL_auxz00_4283); + } + { + obj_t BgL_arg1600z00_1016; + BgL_arg1600z00_1016 = + make_pair (BgL_wherez00_41, BgL_bodyz00_40); + { + int BgL_auxz00_4287; + BgL_auxz00_4287 = (int) (((long) 2)); + ((&(((obj_t) (BgL_v1046z00_1014))->vector_t.obj0)) + [BgL_auxz00_4287] = + BgL_arg1600z00_1016, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + } + { + int BgL_auxz00_4290; + BgL_auxz00_4290 = (int) (((long) 1)); + ((&(((obj_t) (BgL_v1046z00_1014))->vector_t.obj0)) + [BgL_auxz00_4290] = + BgL_locz00_43, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + { + obj_t BgL_auxz00_4295; + int BgL_auxz00_4293; + BgL_auxz00_4295 = + (obj_t) ((long) (((long) (((long) 48)) << 2) | 1)); + BgL_auxz00_4293 = (int) (((long) 0)); + ((&(((obj_t) (BgL_v1046z00_1014))->vector_t.obj0)) + [BgL_auxz00_4293] = + BgL_auxz00_4295, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + return BgL_v1046z00_1014; + } else { + obj_t BgL_v1047z00_1017; + { + int BgL_auxz00_4298; + BgL_auxz00_4298 = (int) (((long) 3)); + BgL_v1047z00_1017 = create_vector (BgL_auxz00_4298); + } + { + int BgL_auxz00_4301; + BgL_auxz00_4301 = (int) (((long) 2)); + ((&(((obj_t) (BgL_v1047z00_1017))->vector_t.obj0)) + [BgL_auxz00_4301] = + BgL_bodyz00_40, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + { + int BgL_auxz00_4304; + BgL_auxz00_4304 = (int) (((long) 1)); + ((&(((obj_t) (BgL_v1047z00_1017))->vector_t.obj0)) + [BgL_auxz00_4304] = + BgL_locz00_43, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + { + obj_t BgL_auxz00_4309; + int BgL_auxz00_4307; + BgL_auxz00_4309 = + (obj_t) ((long) (((long) (((long) 52)) << 2) | 1)); + BgL_auxz00_4307 = (int) (((long) 0)); + ((&(((obj_t) (BgL_v1047z00_1017))->vector_t.obj0)) + [BgL_auxz00_4307] = + BgL_auxz00_4309, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + return BgL_v1047z00_1017; + } + } + } + } + } else { + if ((BgL_namedzf3zf3_42 != + ((obj_t) (obj_t) ((long) (((long) (1) << 2) | 2))))) { + obj_t BgL_v1044z00_1010; + { + int BgL_auxz00_4314; + BgL_auxz00_4314 = (int) (((long) 3)); + BgL_v1044z00_1010 = create_vector (BgL_auxz00_4314); + } + { + obj_t BgL_arg1598z00_1012; + BgL_arg1598z00_1012 = make_pair (BgL_wherez00_41, BgL_bodyz00_40); + { + int BgL_auxz00_4318; + BgL_auxz00_4318 = (int) (((long) 2)); + ((&(((obj_t) (BgL_v1044z00_1010))->vector_t.obj0)) + [BgL_auxz00_4318] = + BgL_arg1598z00_1012, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + } + { + int BgL_auxz00_4321; + BgL_auxz00_4321 = (int) (((long) 1)); + ((&(((obj_t) (BgL_v1044z00_1010))->vector_t.obj0))[BgL_auxz00_4321] + = + BgL_locz00_43, ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + { + obj_t BgL_auxz00_4326; + int BgL_auxz00_4324; + BgL_auxz00_4326 = + (obj_t) ((long) (((long) (((long) 47)) << 2) | 1)); + BgL_auxz00_4324 = (int) (((long) 0)); + ((&(((obj_t) (BgL_v1044z00_1010))->vector_t.obj0))[BgL_auxz00_4324] + = + BgL_auxz00_4326, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + return BgL_v1044z00_1010; + } else { + obj_t BgL_v1045z00_1013; + { + int BgL_auxz00_4329; + BgL_auxz00_4329 = (int) (((long) 3)); + BgL_v1045z00_1013 = create_vector (BgL_auxz00_4329); + } + { + int BgL_auxz00_4332; + BgL_auxz00_4332 = (int) (((long) 2)); + ((&(((obj_t) (BgL_v1045z00_1013))->vector_t.obj0))[BgL_auxz00_4332] + = + BgL_bodyz00_40, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + { + int BgL_auxz00_4335; + BgL_auxz00_4335 = (int) (((long) 1)); + ((&(((obj_t) (BgL_v1045z00_1013))->vector_t.obj0))[BgL_auxz00_4335] + = + BgL_locz00_43, ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + { + obj_t BgL_auxz00_4340; + int BgL_auxz00_4338; + BgL_auxz00_4340 = + (obj_t) ((long) (((long) (((long) 51)) << 2) | 1)); + BgL_auxz00_4338 = (int) (((long) 0)); + ((&(((obj_t) (BgL_v1045z00_1013))->vector_t.obj0))[BgL_auxz00_4338] + = + BgL_auxz00_4340, + ((obj_t) (obj_t) ((long) (((long) (3) << 2) | 2)))); + } + return BgL_v1045z00_1013; + } + } + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/20020304-2.c b/gcc/testsuite/gcc.c-torture/compile/20020304-2.c new file mode 100644 index 00000000000..9a162d4935d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20020304-2.c @@ -0,0 +1,10 @@ +/* This testcase ICEd because a SUBREG of MEM/v was never + simplified. */ +volatile unsigned long long *a; + +unsigned char +foo (void) +{ + unsigned char b = (*a != 0); + return b; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/20020309-1.c b/gcc/testsuite/gcc.c-torture/compile/20020309-1.c new file mode 100644 index 00000000000..b74061764de --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20020309-1.c @@ -0,0 +1,14 @@ +int +sub1 (char *p, int i) +{ + char j = p[i]; + + { + void + sub2 () + { + i = 2; + p = p + 2; + } + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/20020309-2.c b/gcc/testsuite/gcc.c-torture/compile/20020309-2.c new file mode 100644 index 00000000000..77699e43d3d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20020309-2.c @@ -0,0 +1,16 @@ +/* This testcase ICEd on IA-32 at -O2, because loop was calling convert_modes + between a MODE_FLOAT and MODE_INT class modes. */ + +typedef union +{ + double d; + long long ll; +} A; + +void +foo (A x, A **y, A z) +{ + for (; *y; y++) + if (x.ll == 262 && (*y)->d == z.d) + break; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/20020312-1.c b/gcc/testsuite/gcc.c-torture/compile/20020312-1.c new file mode 100644 index 00000000000..9f61dae64a5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20020312-1.c @@ -0,0 +1,19 @@ +/* PR optimization/5892 */ +typedef struct { unsigned long a; unsigned int b, c; } A; +typedef struct { unsigned long a; A *b; int c; } B; + +static inline unsigned int +bar (unsigned int x) +{ + unsigned long r; + asm ("" : "=r" (r) : "0" (x)); + return r >> 31; +} + +int foo (B *x) +{ + A *y; + y = x->b; + y->b = bar (x->c); + y->c = ({ unsigned int z = 1; (z << 24) | (z >> 24); }); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/20020315-1.c b/gcc/testsuite/gcc.c-torture/compile/20020315-1.c new file mode 100644 index 00000000000..c6c9daa2f72 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20020315-1.c @@ -0,0 +1,34 @@ +/* PR bootstrap/4128 */ + +extern int bar (char *, char *, int, int); +extern long baz (char *, char *, int, int); + +int sgt (char *a, char *b, int c, int d) +{ + return bar (a, b, c, d) > 0; +} + +long dgt (char *a, char *b, int c, int d) +{ + return baz (a, b, c, d) > 0; +} + +int sne (char *a, char *b, int c, int d) +{ + return bar (a, b, c, d) != 0; +} + +long dne (char *a, char *b, int c, int d) +{ + return baz (a, b, c, d) != 0; +} + +int seq (char *a, char *b, int c, int d) +{ + return bar (a, b, c, d) == 0; +} + +long deq (char *a, char *b, int c, int d) +{ + return baz (a, b, c, d) == 0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920625-1.x b/gcc/testsuite/gcc.c-torture/compile/920625-1.x new file mode 100644 index 00000000000..c88a02e9086 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920625-1.x @@ -0,0 +1,25 @@ +# The problem on IA-64 is that if-conversion creates a sequence +# +# (p17) cmp.geu p6, p7 = r48, r15 +# (p16) cmp.gtu p6, p7 = r48, r15 +# +# where p16 and p17 are complemenary, but the assembler DV validation +# code doesn't recognize that p6 and p7 are complimentary, and so +# we end up warning for a later use +# +# (p6) addl r14 = 1, r0 +# (p7) mov r14 = r0 +# +# that appears to be a WAW violation. + +set torture_eval_before_compile { + + set compiler_conditional_xfail_data { + "missing .pred.rel.mutex directive" \ + "ia64-*-*" \ + { "-O2" "-O3" "-Os" } \ + { "" } + } +} + +return 0 diff --git a/gcc/testsuite/gcc.c-torture/compile/981223-1.x b/gcc/testsuite/gcc.c-torture/compile/981223-1.x new file mode 100644 index 00000000000..f8d2aa6f938 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/981223-1.x @@ -0,0 +1,20 @@ +# The problem on IA-64 is that the assembler emits +# +# Warning: Additional NOP may be necessary to workaround Itanium +# processor A/B step errata +# +# This can be fixed by adding "-mb-step" to the command line, which +# does in fact add the extra nop, if someone can tell me how to do +# that for a c-torture compile test. + +set torture_eval_before_compile { + + set compiler_conditional_xfail_data { + "need -mb-step" \ + "ia64-*-*" \ + { "-O2" "-O3" "-Os" } \ + { "" } + } +} + +return 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/20020227-1.c b/gcc/testsuite/gcc.c-torture/execute/20020227-1.c new file mode 100644 index 00000000000..0f83088bff9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20020227-1.c @@ -0,0 +1,30 @@ +/* This testcase failed on mmix-knuth-mmixware. Problem was with storing + to an unaligned mem:SC, gcc tried doing it by parts from a (concat:SC + (reg:SF 293) (reg:SF 294)). */ + +typedef __complex__ float cf; +struct x { char c; cf f; } __attribute__ ((__packed__)); +extern void f2 (struct x*); +extern void f1 (void); +int +main (void) +{ + f1 (); + exit (0); +} + +void +f1 (void) +{ + struct x s; + s.f = 1; + s.c = 42; + f2 (&s); +} + +void +f2 (struct x *y) +{ + if (y->f != 1 || y->c != 42) + abort (); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/20020307-1.c b/gcc/testsuite/gcc.c-torture/execute/20020307-1.c new file mode 100644 index 00000000000..c6379de3e8b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20020307-1.c @@ -0,0 +1,69 @@ +#define MASK(N) ((1UL << (N)) - 1) +#define BITS(N) ((1UL << ((N) - 1)) + 2) + +#define FUNC(N) void f##N(long j) { if ((j & MASK(N)) >= BITS(N)) abort();} + +FUNC(3) +FUNC(4) +FUNC(5) +FUNC(6) +FUNC(7) +FUNC(8) +FUNC(9) +FUNC(10) +FUNC(11) +FUNC(12) +FUNC(13) +FUNC(14) +FUNC(15) +FUNC(16) +FUNC(17) +FUNC(18) +FUNC(19) +FUNC(20) +FUNC(21) +FUNC(22) +FUNC(23) +FUNC(24) +FUNC(25) +FUNC(26) +FUNC(27) +FUNC(28) +FUNC(29) +FUNC(30) +FUNC(31) + +int main () +{ + f3(0); + f4(0); + f5(0); + f6(0); + f7(0); + f8(0); + f9(0); + f10(0); + f11(0); + f12(0); + f13(0); + f14(0); + f15(0); + f16(0); + f17(0); + f18(0); + f19(0); + f20(0); + f21(0); + f22(0); + f23(0); + f24(0); + f25(0); + f26(0); + f27(0); + f28(0); + f29(0); + f30(0); + f31(0); + + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/20020307-2.c b/gcc/testsuite/gcc.c-torture/execute/20020307-2.c new file mode 100644 index 00000000000..0e67a2cf8c7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20020307-2.c @@ -0,0 +1,55 @@ +/* PR c/3711 + This testcase ICEd on IA-32 at -O0 and was miscompiled otherwise, + because std_expand_builtin_va_arg didn't handle variable size types. */ + +#include <stdarg.h> + +extern void abort (void); +extern void exit (int); + +void bar (int c) +{ + static int d = '0'; + + if (c != d++) + abort (); + if (c < '0' || c > '9') + abort (); +} + +void foo (int size, ...) +{ + struct + { + char x[size]; + } d; + va_list ap; + int i; + + va_start (ap, size); + d = va_arg (ap, typeof (d)); + for (i = 0; i < size; i++) + bar (d.x[i]); + d = va_arg (ap, typeof (d)); + for (i = 0; i < size; i++) + bar (d.x[i]); + va_end (ap); +} + +int main (void) +{ + struct { char a[5]; } x, y; + + x.a[0] = '0'; + x.a[1] = '1'; + x.a[2] = '2'; + x.a[3] = '3'; + x.a[4] = '4'; + y.a[0] = '5'; + y.a[1] = '6'; + y.a[2] = '7'; + y.a[3] = '8'; + y.a[4] = '9'; + foo (5, x, y); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/20020314-1.c b/gcc/testsuite/gcc.c-torture/execute/20020314-1.c new file mode 100644 index 00000000000..28288c82c8b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20020314-1.c @@ -0,0 +1,36 @@ +void f(void * a, double y) +{ +} + +double g (double a, double b, double c, double d) +{ + double x, y, z; + void *p; + + x = a + b; + y = c * d; + + p = alloca (16); + + f(p, y); + z = x * y * a; + + return z + b; +} + +main () +{ + double a, b, c, d; + a = 1.0; + b = 0.0; + c = 10.0; + d = 0.0; + + if (g (a, b, c, d) != 0.0) + abort (); + + if (a != 1.0 || b != 0.0 || c != 10.0 || d != 0.0) + abort (); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-22.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-22.c new file mode 100644 index 00000000000..46b8dcbe825 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/va-arg-22.c @@ -0,0 +1,78 @@ +#include <stdarg.h> + +extern void abort (void); +extern void exit (int); + +void bar (int n, int c) +{ + static int lastn = -1, lastc = -1; + + if (lastn != n) + { + if (lastc != lastn) + abort (); + lastc = 0; + lastn = n; + } + + if (c != (char) (lastc ^ (n << 3))) + abort (); + lastc++; +} + +#define D(N) typedef struct { char x[N]; } A##N; +D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7) +D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15) +D(16) D(31) D(32) D(35) D(72) +#undef D + +void foo (int size, ...) +{ +#define D(N) A##N a##N; +D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7) +D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15) +D(16) D(31) D(32) D(35) D(72) +#undef D + va_list ap; + int i; + + if (size != 21) + abort (); + va_start (ap, size); +#define D(N) \ + a##N = va_arg (ap, typeof (a##N)); \ + for (i = 0; i < N; i++) \ + bar (N, a##N.x[i]); +D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7) +D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15) +D(16) D(31) D(32) D(35) D(72) +#undef D + va_end (ap); +} + +int main (void) +{ +#define D(N) A##N a##N; +D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7) +D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15) +D(16) D(31) D(32) D(35) D(72) +#undef D + int i; + +#define D(N) \ + for (i = 0; i < N; i++) \ + a##N.x[i] = i ^ (N << 3); +D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7) +D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15) +D(16) D(31) D(32) D(35) D(72) +#undef D + + foo (21 +#define D(N) , a##N +D(0) D(1) D(2) D(3) D(4) D(5) D(6) D(7) +D(8) D(9) D(10) D(11) D(12) D(13) D(14) D(15) +D(16) D(31) D(32) D(35) D(72) +#undef D + ); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/wchar_t-1.c b/gcc/testsuite/gcc.c-torture/execute/wchar_t-1.c new file mode 100644 index 00000000000..51f91d6ad46 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/wchar_t-1.c @@ -0,0 +1,16 @@ +typedef __WCHAR_TYPE__ wchar_t; +wchar_t x[] = L"Ä"; +wchar_t y = L'Ä'; +extern void abort (void); +extern void exit (int); + +int main (void) +{ + if (sizeof (x) / sizeof (wchar_t) != 2) + abort (); + if (x[0] != L'Ä' || x[1] != L'\0') + abort (); + if (y != L'Ä') + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.dg/20020103-1.c b/gcc/testsuite/gcc.dg/20020103-1.c index 1d94f7ebffc..7a5fdbe4b45 100644 --- a/gcc/testsuite/gcc.dg/20020103-1.c +++ b/gcc/testsuite/gcc.dg/20020103-1.c @@ -1,6 +1,6 @@ /* Verify that constant equivalences get reloaded properly, either by being spilled to the stack, or regenerated, but not dropped to memory. */ -/* { dg-do compile { target i?86-*-* powerpc-*-* alpha*-*-* } } */ +/* { dg-do compile { target i?86-*-* powerpc-*-* rs6000-*-* alpha*-*-* } } */ /* { dg-options "-O2 -fpic -fno-omit-frame-pointer" } */ /* { dg-final { scan-assembler-not "LC" } } */ @@ -8,7 +8,7 @@ #if defined(__i386__) #define clobber \ asm volatile("#asm" : : : "si", "di") -#elif defined(__powerpc__) || defined(__PPC__) +#elif defined(__powerpc__) || defined(__PPC__) || defined(__ppc__) || defined(__POWERPC__) || defined(PPC) || defined (_IBMR2) #define clobber \ asm volatile("#asm" : : : "14", "15", "16", "17", "18", "19", "20", \ "21", "22", "23", "24", "25", "26", "27", "28", "29") diff --git a/gcc/testsuite/gcc.dg/20020304-1.c b/gcc/testsuite/gcc.dg/20020304-1.c new file mode 100644 index 00000000000..f6d6b4e49a7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/20020304-1.c @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fssa -fssa-ccp" } */ + +double a[10][35], b[10][8]; +int c, c, d, e, f, g, h; + +int foo () +{ + int i, j, k, l; + + if (c > 10) + c = 10; + + for (j = 0; j < c; j++) + { + k = 0; + for (l = 0; l < h; l++) + { + if (d != 5) + return -1; + k = l * g; + a[j][k] = (double) e; k++; + a[j][k] = (double) f; k++; + } + for (i = 0;i < 35; i++) + { + if (a[j][i] >= 0.9) + a[j][i] = 0.9; + if (a[j][i] <= 0.1) + a[j][i] = 0.1; + } + k = 0; + b[j][k] = (double) e; k++; + b[j][k] = (double) f; k++; + } + return 0; +} diff --git a/gcc/testsuite/gcc.dg/20020310-1.c b/gcc/testsuite/gcc.dg/20020310-1.c new file mode 100644 index 00000000000..ec722ecc4aa --- /dev/null +++ b/gcc/testsuite/gcc.dg/20020310-1.c @@ -0,0 +1,54 @@ +/* PR optimization/5844 + This testcase was miscompiled because of an rtx sharing bug. */ +/* { dg-do run } */ +/* { dg-options "-O2" } */ +/* { dg-options "-O2 -mcpu=i586" { target i?86-*-* } } */ + +struct A +{ + struct A *a; + int b; +}; + +struct B +{ + struct A *c; + unsigned int d; +}; + +struct A p = { &p, -1 }; +struct B q = { &p, 0 }; + +extern void abort (void); +extern void exit (int); + +struct B * +foo (void) +{ + return &q; +} + +void +bar (void) +{ + struct B *e = foo (); + struct A *f = e->c; + int g = f->b; + + if (++g == 0) + { + e->d++; + e->c = f->a; + } + + f->b = g; +} + +int +main () +{ + bar (); + if (p.b != 0 || q.d != 1 || q.c != &p) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.dg/20020312-1.c b/gcc/testsuite/gcc.dg/20020312-1.c new file mode 100644 index 00000000000..978401862a4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/20020312-1.c @@ -0,0 +1,10 @@ +/* This testcase ICEd on alpha because of an unrecognized insn formed + by conditional move optimization using an incorrect mode. */ +/* { dg-do compile } */ +/* { dg-options "-O -ffast-math" } */ + +char* +barf (double x) +{ + return (x<0.0) ? "foo" : "bar"; +} diff --git a/gcc/testsuite/gcc.dg/20020312-2.c b/gcc/testsuite/gcc.dg/20020312-2.c new file mode 100644 index 00000000000..889e152be34 --- /dev/null +++ b/gcc/testsuite/gcc.dg/20020312-2.c @@ -0,0 +1,139 @@ +/* PR 5878. + + We ICEd in verify_local_live_at_start because we incorrectly forced + the PIC register live between BAR and BAZ. We did this because the + definition of PIC_OFFSET_TABLE_REGNUM was incorrectly not INVALID_REGNUM + when !flag_pic for most targets. */ + +/* { dg-do run } */ +/* { dg-options "-O -fno-pic" } */ + +#if #cpu(a29k) +/* No pic register. */ +#elif defined(__alpha__) +/* PIC register is $29, but is used even without -fpic. */ +#elif defined(__arc__) +# define PIC_REG "26" +#elif defined(__arm__) +# define PIC_REG "9" +#elif defined(AVR) +/* No pic register. */ +#elif defined(__clipper__) +/* No pic register. */ +#elif defined(__convex__) +/* No pic register. */ +#elif defined(__cris__) +# define PIC_REG "0" +#elif defined(__D30V__) +/* No pic register. */ +#elif defined(__dsp1600__) +/* No pic register. */ +#elif defined(__elxsi__) +/* No pic register. */ +#elif defined(__fr30__) +/* No pic register. */ +#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) +/* No pic register. */ +#elif #cpu(i370) +/* No pic register. */ +#elif defined(__i386__) +# define PIC_REG "ebx" +#elif defined(__i860__) +/* No pic register. */ +#elif defined(__i960__) +/* No pic register. */ +#elif defined(__ia64__) +/* PIC register is r1, but is used even without -fpic. */ +#elif defined(__M32R__) +/* No pic register. */ +#elif defined(__m68k__) +# define PIC_REG "a5" +#elif defined(__m88k__) +# define PIC_REG "25" +#elif defined(__mc68hc1x__) +/* No pic register. */ +#elif defined(__mcore__) +/* No pic register. */ +#elif defined(__mips__) +/* PIC register is $28, but is used even without -fpic. */ +#elif defined(__mn10200__) +/* No pic register. */ +#elif defined(__mn10300__) +/* No pic register. */ +#elif #cpu(ns32k) +/* No pic register. */ +#elif defined(__parisc__) +/* PIC register is %r27 or %r19, but is used even without -fpic. */ +#elif defined(__pdp11__) +/* No pic register. */ +#elif defined(__pj__) +/* No pic register. */ +#elif defined(__powerpc__) +# ifdef __darwin__ +# define PIC_REG "31" +# else +# define PIC_REG "30" +# endif +#elif defined(__ibm032__) /* aka romp */ +/* No pic register. */ +#elif defined(__s390__) +# define PIC_REG "12" +#elif defined(__sparc__) +# define PIC_REG "l7" +#elif defined(__v850) +/* No pic register. */ +#elif defined(__vax__) +/* No pic register. */ +#elif defined(__we32000__) +/* No pic register. */ +#elif defined(__xstormy16__) +/* No pic register. */ +#elif defined(__XTENSA__) +/* No pic register. */ +#else +# error "Modify the test for your target." +#endif + +#ifdef PIC_REG +register void *reg __asm__(PIC_REG); +#else +/* We really need a global register variable set to the PIC register + to expose the bug. Oh well, let the test case not fail. */ +static void *reg; +#endif + +void * __attribute__((noinline)) +dummy (void *x) +{ + return x; +} + +void +f (void) +{ + goto *dummy (&&bar); + for (;;) + { + foo: + reg = (void *) 1; + if (!reg) + goto baz; + reg = &&foo; + } + + bar: + baz: + reg = 0; +} + +int +main() +{ + void *old_reg = reg; + reg = (void *) 1; + f (); + if (reg) + abort (); + reg = old_reg; + return 0; +} diff --git a/gcc/testsuite/gcc.dg/20020313-1.c b/gcc/testsuite/gcc.dg/20020313-1.c new file mode 100644 index 00000000000..f0ae6d4bde4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/20020313-1.c @@ -0,0 +1,70 @@ +/* PR 5312 + The problem here is that the ia64 scheduler saw a sequence of L L M type + insns, and messed up its internal state on which slot it was issuing + to, and aborted. */ + +/* { dg-do compile { target ia64-*-* } } */ +/* { dg-options "-O2 -mconstant-gp" } */ + +typedef unsigned long __u64; +typedef unsigned int __u32; +typedef struct { } spinlock_t; +struct cpuinfo_ia64 { + union { + struct { + __u32 irq_count; + __u32 bh_count; + } f; + __u64 irq_and_bh_counts; + } irq_stat; + __u32 softirq_pending; +} __attribute__ ((aligned ((1UL << 14)))) ; +enum +{ + TCA_UNSPEC, + TCA_KIND, + TCA_OPTIONS, + TCA_STATS, + TCA_XSTATS, + TCA_RATE, +}; +struct tc_stats +{ + __u64 bytes; + __u32 packets; + __u32 drops; + __u32 overlimits; + __u32 bps; + __u32 pps; + __u32 qlen; + __u32 backlog; + spinlock_t *lock; +}; +struct sk_buff { + unsigned int data_len; + unsigned char *tail; + unsigned char *end; +}; +static inline int skb_is_nonlinear(const struct sk_buff *skb) +{ + return skb->data_len; +} +static inline int skb_tailroom(const struct sk_buff *skb) +{ + return skb_is_nonlinear(skb) ? 0 : skb->end-skb->tail; +} +struct rtattr +{ + unsigned short rta_len; + unsigned short rta_type; +}; +int qdisc_copy_stats(struct sk_buff *skb, struct tc_stats *st) +{ + do { do { (((struct cpuinfo_ia64 *) (0xa000000000000000 + 2*(1UL << 14)))->irq_stat.f.bh_count)++; __asm__ __volatile__("": : :"memory"); } while (0); (void)(st->lock); } while (0); + ({ if (skb_tailroom(skb) < (int)( (((( ((sizeof(struct rtattr))+4 -1) & ~(4 -1) ) + ((char*)&st->lock - (char*)st)))+4 -1) & ~(4 -1) )) goto rtattr_failure; __rta_fill(skb, TCA_STATS, (char*)&st->lock - (char*)st, st); }); + do { do { } while(0); do { do { __asm__ __volatile__("": : :"memory"); (((struct cpuinfo_ia64 *) (0xa000000000000000 + 2*(1UL << 14)))->irq_stat.f.bh_count)--; } while (0); if (__builtin_expect((((struct cpuinfo_ia64 *) (0xa000000000000000 + 2*(1UL << 14)))->softirq_pending), 0) && (((struct cpuinfo_ia64 *) (0xa000000000000000 + 2*(1UL << 14)))->irq_stat.f.bh_count) == 0) do_softirq(); } while (0); } while (0); + return 0; +rtattr_failure: + do { do { } while(0); do { do { __asm__ __volatile__("": : :"memory"); (((struct cpuinfo_ia64 *) (0xa000000000000000 + 2*(1UL << 14)))->irq_stat.f.bh_count)--; } while (0); if (__builtin_expect((((struct cpuinfo_ia64 *) (0xa000000000000000 + 2*(1UL << 14)))->softirq_pending), 0) && (((struct cpuinfo_ia64 *) (0xa000000000000000 + 2*(1UL << 14)))->irq_stat.f.bh_count) == 0) do_softirq(); } while (0); } while (0); + return -1; +} diff --git a/gcc/testsuite/gcc.dg/debug/20020224-1.c b/gcc/testsuite/gcc.dg/debug/20020224-1.c new file mode 100644 index 00000000000..c61a17aed10 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/20020224-1.c @@ -0,0 +1,60 @@ +/* { dg-do compile } */ + +/* Here's the deal: f3 is not inlined because it's too big, but f2 and + f1 are inlined into it. We used to fail to emit debugging info for + t1, because it was moved inside the (inlined) block of f1, marked + as abstract, then we'd crash. */ + +#define UNUSED __attribute__((unused)) +#define EXT __extension__ + +int undef(void); + +inline static void +f1 (int i UNUSED) +{ +} + +inline static void +f2 (void) +{ + f1 (EXT ({ int t1 UNUSED; undef (); })); +} + +inline static void +f3 (void) +{ + int v1 UNUSED; + int v2 UNUSED; + + EXT ({ int t2 UNUSED; if (0) undef (); 0; }) + && EXT ({ int t3 UNUSED; if (0) undef (); 0; }); + + if (1) + { + undef (); + if (1) + f2 (); + } + + { + undef (); + } +} + +inline static void +f4 (void) +{ + EXT ({ undef (); 1; }) && EXT ({ int t4 UNUSED = ({ 1; }); 1; }); + + { } + + EXT ({ int t5 UNUSED; if (0) undef (); 0; }); + + f4 (); + + undef (); + f3 (); + + return; +} diff --git a/gcc/testsuite/gcc.dg/weak-1.c b/gcc/testsuite/gcc.dg/weak-1.c new file mode 100644 index 00000000000..894a248a6f9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak-1.c @@ -0,0 +1,51 @@ +/* { dg-do compile } */ +/* COFF does not support weak, and dg doesn't support UNSUPPORTED. */ +/* { dg-do compile { xfail *-*-coff i?86-pc-cygwin } } */ + +/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t]_?a" } } */ +/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t]_?b" } } */ +/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t]_?c" } } */ +/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t]_?d" } } */ +/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t]_?e" } } */ +/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t]_?g" } } */ +/* { dg-final { scan-assembler-not "weak\[^ \t\]*\[ \t]_?i" } } */ +/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t]_?j" } } */ + +#pragma weak a +int a; + +int b; +#pragma weak b + +#pragma weak c +extern int c; +int c; + +extern int d; +#pragma weak d +int d; + +#pragma weak e +void e(void) { } + +#if 0 +/* This permutation is illegal. */ +void f(void) { } +#pragma weak f +#endif + +#pragma weak g +int g = 1; + +#if 0 +/* This permutation is illegal. */ +int h = 1; +#pragma weak h +#endif + +#pragma weak i +extern int i; + +#pragma weak j +extern int j; +int use_j() { return j; } |