From patchwork Sun Feb 20 14:50:40 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: =?UTF-8?Q?Fix=20PR=20objc++/47711=20("[4.5/4.6=20Regression]=20(even=20t?= =?UTF-8?Q?rivial)=20PCH=20fails=20for=20Objective-C++")?= From: Nicola Pero X-Patchwork-Id: 83743 Message-Id: <1298213440.960720057@192.168.4.58> To: "gcc-patches@gnu.org" Date: Sun, 20 Feb 2011 15:50:40 +0100 (CET) This patch fixes PCH for ObjC++ (a regression since 4.4). The fix (and ChangeLog entries) is by me; the testcase by Iain. Bootstrapped and tested on i686 gnu-linux. The included PCH ObjC++ testcase would fail without the patch, and succeeds with it. Ok to commit ? Thanks Index: testsuite/lib/obj-c++.exp =================================================================== --- testsuite/lib/obj-c++.exp (revision 170336) +++ testsuite/lib/obj-c++.exp (working copy) @@ -362,6 +362,12 @@ proc obj-c++_target_compile { source dest type opt } } + 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 "additional_flags=[libio_include_flags]" lappend options "compiler=$OBJCXX_UNDER_TEST"; lappend options "timeout=[timeout_value]" Index: testsuite/ChangeLog =================================================================== --- testsuite/ChangeLog (revision 170336) +++ testsuite/ChangeLog (working copy) @@ -1,3 +1,12 @@ +2011-02-20 Iain Sandoe + + PR objc++/47711 + * lib/obj-c++.exp: Updated to support pch test. + * obj-c++.dg/pch: New. + * obj-c++.dg/pch/pch.exp: New. + * obj-c++.dg/pch/interface-1.mm: New. + * obj-c++.dg/pch/interface-1.hs: New. + 2011-02-20 Paolo Carlini PR c++/44118 Index: testsuite/obj-c++.dg/pch/pch.exp =================================================================== --- testsuite/obj-c++.dg/pch/pch.exp (revision 0) +++ testsuite/obj-c++.dg/pch/pch.exp (revision 0) @@ -0,0 +1,64 @@ +# Copyright (C) 1997, 2002, 2003, 2007, 2008, 2010 +# 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 3 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 GCC; see the file COPYING3. If not see +# . + +# GCC testsuite for precompiled header interaction, +# that uses the `dg.exp' driver. + +# Load support procs. +load_lib obj-c++-dg.exp +load_lib dg-pch.exp +load_lib torture-options.exp + +# Initialize `dg'. +dg-init + +torture-init + +set-torture-options $DG_TORTURE_OPTIONS + +set old_dg_do_what_default "${dg-do-what-default}" + +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. + +set mytorture [concat [list {-O0 -g}] $torture_without_loops] + +set tests [lsort [glob -nocomplain $srcdir/$subdir/*.mm]] +# Main loop. +foreach test $tests { + + dg-flags-pch $subdir $test "-fgnu-runtime" $mytorture ".h" +} + +if [istarget "*-*-darwin*" ] { + foreach test $tests { + global torture_without_loops + + # as above + dg-flags-pch $subdir $test "-fnext-runtime" $mytorture ".h" + } +} + +set dg-do-what-default "$old_dg_do_what_default" + +# All done. +torture-finish +dg-finish Index: testsuite/obj-c++.dg/pch/interface-1.mm =================================================================== --- testsuite/obj-c++.dg/pch/interface-1.mm (revision 0) +++ testsuite/obj-c++.dg/pch/interface-1.mm (revision 0) @@ -0,0 +1,14 @@ +#include "interface-1.h" + +@implementation TestClass ++ (int) test +{ + return 0; +} +@end + +int main (void) +{ + return [TestClass test]; +} + Index: testsuite/obj-c++.dg/pch/interface-1.hs =================================================================== --- testsuite/obj-c++.dg/pch/interface-1.hs (revision 0) +++ testsuite/obj-c++.dg/pch/interface-1.hs (revision 0) @@ -0,0 +1,4 @@ +@interface TestClass ++ (int) test; +@end + Index: objcp/ChangeLog =================================================================== --- objcp/ChangeLog (revision 170336) +++ objcp/ChangeLog (working copy) @@ -1,3 +1,8 @@ +2011-02-20 Nicola Pero + + PR objc++/47711 + * config-lang.in (gtfiles): Updated list. + 2011-02-17 Iain Sandoe * Make-lang.in (START_HDRS): New. Index: objcp/config-lang.in =================================================================== --- objcp/config-lang.in (revision 170336) +++ objcp/config-lang.in (working copy) @@ -37,4 +37,5 @@ build_by_default="no" lang_requires="objc c++" subdir_requires="objc cp" -gtfiles="\$(srcdir)/objc/objc-act.h \$(srcdir)/objc/objc-act.c \$(srcdir)/objc/objc-runtime-shared-support.c \$(srcdir)/objc/objc-gnu-runtime-abi-01.c \$(srcdir)/objc/objc-next-runtime-abi-01.c \$(srcdir)/objc/objc-next-runtime-abi-02.c \$(srcdir)/cp/call.c \$(srcdir)/cp/cp-tree.h \$(srcdir)/cp/decl.h \$(srcdir)/cp/decl.c \$(srcdir)/cp/decl2.c \$(srcdir)/cp/mangle.c \$(srcdir)/cp/method.c \$(srcdir)/cp/name-lookup.h \$(srcdir)/cp/name-lookup.c \$(srcdir)/cp/cp-objcp-common.c \$(srcdir)/cp/parser.c \$(srcdir)/cp/pt.c \$(srcdir)/cp/repo.c \$(srcdir)/cp/rtti.c \$(srcdir)/cp/semantics.c \$(srcdir)/cp/tree.c \$(srcdir)/cp/typeck2.c \$(srcdir)/c-family/c-common.c \$(srcdir)/c-family/c-common.h \$(srcdir)/c-family/c-objc.h \$(srcdir)/c-family/c-lex.c \$(srcdir)/c-family/c-cppbuiltin.c \$(srcdir)/c-family/c-pragma.h \$(srcdir)/c-family/c-pragma.c " +gtfiles="\$(srcdir)/objc/objc-act.h \$(srcdir)/objc/objc-act.c \$(srcdir)/objc/objc-runtime-shared-support.c \$(srcdir)/objc/objc-gnu-runtime-abi-01.c \$(srcdir)/objc/objc-next-runtime-abi-01.c \$(srcdir)/objc/objc-next-runtime-abi-02.c \$(srcdir)/cp/call.c \$(srcdir)/cp/class.c \$(srcdir)/cp/cp-tree.h \$(srcdir)/cp/decl.c \$(srcdir)/cp/decl2.c \$(srcdir)/cp/mangle.c \$(srcdir)/cp/method.c \$(srcdir)/cp/name-lookup.h \$(srcdir)/cp/name-lookup.c \$(srcdir)/cp/cp-objcp-common.c \$(srcdir)/cp/parser.c \$(srcdir)/cp/pt.c \$(srcdir)/cp/repo.c \$(srcdir)/cp/rtti.c \$(srcdir)/cp/semantics.c \$(srcdir)/cp/tree.c \$(srcdir)/cp/typeck2.c \$(srcdir)/c-family/c-common.c \$(srcdir)/c-family/c-common.h \$(srcdir)/c-family/c-objc.h \$(srcdir)/c-family/c-lex.c \$(srcdir)/c-family/c-cppbuiltin.c \$(srcdir)/c-family/c-pragma.h \$(srcdir)/c-family/c-pragma.c " +