From: Andrew Pinski Date: Sun, 21 Jan 2007 06:51:07 +0000 (-0800) Subject: re PR objc/30479 (Precompiled headers don't seem to work with GNU ObjC) X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d2f9f9a62d25b0d4f358952430664c76a86967e9;p=platform%2Fupstream%2Fgcc.git re PR objc/30479 (Precompiled headers don't seem to work with GNU ObjC) 2007-01-20 Andrew Pinski PR objc/30479 * objc-act.c (hash_interface): Use IDENTIFIER_HASH_VALUE instead of htab_hash_pointer. (lookup_interface): Likewise. (add_class): Likewise. 2007-01-20 Andrew Pinski PR objc/30479 * objc.dg/pch: New directory. * objc.dg/pch/pch.exp: New file. * objc.dg/pch/interface-1.m: New test. * objc.dg/pch/interface-1.hs: New include file. * lib/objc.exp (objc_target_compile): Add "-x objective-c-header" in front of the sources if this is a precompiled header being compiled. From-SVN: r121024 --- diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index 0759c8d..f3aeb9b 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -1,3 +1,11 @@ +2007-01-20 Andrew Pinski + + PR objc/30479 + * objc-act.c (hash_interface): Use IDENTIFIER_HASH_VALUE instead + of htab_hash_pointer. + (lookup_interface): Likewise. + (add_class): Likewise. + 2007-01-02 Douglas Gregor * objc-act.c (objc_build_volatilized_type): Keep track of diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index bd79796..86bfd37 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -3298,7 +3298,7 @@ static hashval_t hash_interface (const void *p) { const struct interface_tuple *d = p; - return htab_hash_pointer (d->id); + return IDENTIFIER_HASH_VALUE (d->id); } static int @@ -3327,7 +3327,7 @@ lookup_interface (tree ident) { slot = (struct interface_tuple **) htab_find_slot_with_hash (interface_htab, ident, - htab_hash_pointer (ident), + IDENTIFIER_HASH_VALUE (ident), NO_INSERT); if (slot && *slot) i = (*slot)->class_name; @@ -6997,7 +6997,7 @@ add_class (tree class_name, tree name) interface_htab = htab_create_ggc (31, hash_interface, eq_interface, NULL); slot = (struct interface_tuple **) htab_find_slot_with_hash (interface_htab, name, - htab_hash_pointer (name), + IDENTIFIER_HASH_VALUE (name), INSERT); if (!*slot) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 07d2e5f..320c902 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2007-01-20 Andrew Pinski + + PR objc/30479 + * objc.dg/pch: New directory. + * objc.dg/pch/pch.exp: New file. + * objc.dg/pch/interface-1.m: New test. + * objc.dg/pch/interface-1.hs: New include file. + * lib/objc.exp (objc_target_compile): Add + "-x objective-c-header" in front of the sources if this is + a precompiled header being compiled. + 2007-01-20 Roger Sayle * gfortran.dg/array_memcpy_3.f90: New test case. diff --git a/gcc/testsuite/lib/objc.exp b/gcc/testsuite/lib/objc.exp index 18cdfea..0336d3b 100644 --- a/gcc/testsuite/lib/objc.exp +++ b/gcc/testsuite/lib/objc.exp @@ -187,6 +187,11 @@ proc objc_target_compile { source dest type options } { lappend options "additional_flags=${objc_link_flags}" append ld_library_path ":${libobjc_dir}" } + if { $type == "precompiled_header" } { + # If we generating a precompiled header, we have say this is an + # objective-C header + set source [concat "-x objective-c-header" $source] + } lappend options "compiler=$OBJC_UNDER_TEST" set_ld_library_path_env_vars diff --git a/gcc/testsuite/objc.dg/pch/interface-1.hs b/gcc/testsuite/objc.dg/pch/interface-1.hs new file mode 100644 index 0000000..fe5255a --- /dev/null +++ b/gcc/testsuite/objc.dg/pch/interface-1.hs @@ -0,0 +1,4 @@ +@interface TestClass ++ (int) test; +@end + diff --git a/gcc/testsuite/objc.dg/pch/interface-1.m b/gcc/testsuite/objc.dg/pch/interface-1.m new file mode 100644 index 0000000..9bc7ef3 --- /dev/null +++ b/gcc/testsuite/objc.dg/pch/interface-1.m @@ -0,0 +1,14 @@ +#include "interface-1.h" + +@implementation TestClass ++ (int) test +{ + return 0; +} +@end + +int main (void) +{ + return [TestClass test]; +} + diff --git a/gcc/testsuite/objc.dg/pch/pch.exp b/gcc/testsuite/objc.dg/pch/pch.exp new file mode 100644 index 0000000..ad5697b --- /dev/null +++ b/gcc/testsuite/objc.dg/pch/pch.exp @@ -0,0 +1,43 @@ +# Copyright (C) 1997, 2002, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# GCC testsuite for precompiled header interaction, +# that uses the `dg.exp' driver. + +# Load support procs. +load_lib objc-dg.exp +load_lib dg-pch.exp + +# Initialize `dg'. +dg-init + +set old_dg_do_what_default "${dg-do-what-default}" + +# Main loop. +foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.m]] { + global torture_without_loops + + # We don't try to use the loop-optimizing options, since they are highly + # unlikely to make any difference to PCH. However, we do want to + # add -O0 -g, since users who want PCH usually want debugging and quick + # compiles. + dg-pch $subdir $test [concat [list {-O0 -g}] $torture_without_loops] ".h" +} + +set dg-do-what-default "$old_dg_do_what_default" + +# All done. +dg-finish