diff mbox

[C++] conversion operator names

Message ID 2a400188-733b-86b9-9c18-c694010b8074@acm.org
State New
Headers show

Commit Message

Nathan Sidwell July 3, 2017, 2:23 p.m. UTC
On 07/01/2017 05:40 PM, Andreas Schwab wrote:
> On Jun 30 2017, Nathan Sidwell <nathan@acm.org> wrote:
> 
>> 	* config-lang.in (gtfiles): Add cp/lex.c.

> That breaks obj-c++.

sorry about that.  Turns out I was only building objc not objc++, so I 
didn't notice that.  While objcp's config-lang.in claimed the first part 
of its gtfiles initializer was the same as cp's version, it had severely 
bitrotted, even before my sorting patch to the latter, and was therefore 
only working by accident already.  Yet again, specifying the same thing 
in two different places leads to breakage.  Let's not do that.

This patch changes objcp's config-lang.in to source cp's variant and 
extract the gtfiles list therefrom.  The fly in that ointment was that 
we source the lang frags from the toplevel build and the gcc dir, so 
srcdir is not consistent.  This patch makes it so by setting srcdir to 
the gcc dir when we include the lang frags from the toplevel.

And the fly in that ointment is that while the following works in bash:
   srcdir=${srcdir}/gcc . $frag
to just override srcdir during the sourcing of frag, in sh it changes 
the current shell's value too.  A little bit of explicit saving and 
restoring is needed.

I committed the attached as sufficiently obvious. (and fixed my boot 
procedure to include objc++)

nathan
diff mbox

Patch

2017-07-03  Nathan Sidwell  <nathan@acm.org>

	* configure.ac: Set srcdir when sourcing config-lang.in fragments.
	* configure: Rebuilt.

	* config-lang.in: Source cp/config-lang.in, sort objc++ gtfiles list.

Index: configure
===================================================================
--- configure	(revision 249835)
+++ configure	(working copy)
@@ -6166,7 +6166,12 @@  if test -d ${srcdir}/gcc; then
         language=
         lang_requires=
         lang_requires_boot_languages=
-        . ${lang_frag}
+        # set srcdir during sourcing lang_frag to the gcc dir.
+        # Sadly overriding srcdir on the . line doesn't work in plain sh as it
+        # polutes this shell
+        saved_srcdir=${srcdir}
+        srcdir=${srcdir}/gcc . ${lang_frag}
+        srcdir=${saved_srcdir}
         for other in ${lang_requires} ${lang_requires_boot_languages}; do
           case ,${enable_languages}, in
 	    *,$other,*) ;;
@@ -6241,7 +6246,10 @@  if test -d ${srcdir}/gcc; then
         subdir_requires=
         boot_language=no
         build_by_default=yes
-        . ${lang_frag}
+        # set srcdir during sourcing.  See above about save & restore
+        saved_srcdir=${srcdir}
+        srcdir=${srcdir}/gcc . ${lang_frag}
+        srcdir=${saved_srcdir}
         if test x${language} = x; then
           echo "${lang_frag} doesn't set \$language." 1>&2
           exit 1
Index: configure.ac
===================================================================
--- configure.ac	(revision 249835)
+++ configure.ac	(working copy)
@@ -1839,7 +1839,12 @@  if test -d ${srcdir}/gcc; then
         language=
         lang_requires=
         lang_requires_boot_languages=
-        . ${lang_frag}
+        # set srcdir during sourcing lang_frag to the gcc dir.
+        # Sadly overriding srcdir on the . line doesn't work in plain sh as it
+        # polutes this shell
+        saved_srcdir=${srcdir}
+        srcdir=${srcdir}/gcc . ${lang_frag}
+        srcdir=${saved_srcdir}
         for other in ${lang_requires} ${lang_requires_boot_languages}; do
           case ,${enable_languages}, in
 	    *,$other,*) ;;
@@ -1914,7 +1919,10 @@  if test -d ${srcdir}/gcc; then
         subdir_requires=
         boot_language=no
         build_by_default=yes
-        . ${lang_frag}
+        # set srcdir during sourcing.  See above about save & restore
+        saved_srcdir=${srcdir}
+        srcdir=${srcdir}/gcc . ${lang_frag}
+        srcdir=${saved_srcdir}
         if test x${language} = x; then
           echo "${lang_frag} doesn't set \$language." 1>&2
           exit 1
Index: gcc/objcp/config-lang.in
===================================================================
--- gcc/objcp/config-lang.in	(revision 249835)
+++ gcc/objcp/config-lang.in	(working copy)
@@ -43,8 +43,20 @@  subdir_requires="objc cp"
 # avoid having the GC stuff from that header being added to gtype-cp.h
 # or gtype-objc.h.
 
-# This list is separated in two parts: the first one is identical to
-# the C++ one, the second one contains our ObjC++ additions.
-gtfiles="\$(srcdir)/cp/rtti.c \$(srcdir)/cp/mangle.c \$(srcdir)/cp/name-lookup.h \$(srcdir)/cp/name-lookup.c \$(srcdir)/cp/cp-tree.h \$(srcdir)/cp/decl.h \$(srcdir)/cp/call.c \$(srcdir)/cp/decl.c \$(srcdir)/cp/decl2.c \$(srcdir)/cp/pt.c \$(srcdir)/cp/repo.c \$(srcdir)/cp/semantics.c \$(srcdir)/cp/tree.c \$(srcdir)/cp/parser.h \$(srcdir)/cp/parser.c \$(srcdir)/cp/method.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-pragma.h \$(srcdir)/c-family/c-pragma.c \$(srcdir)/cp/class.c \$(srcdir)/cp/cp-objcp-common.c \$(srcdir)/cp/except.c \$(srcdir)/cp/vtable-class-hierarchy.c \$(srcdir)/cp/constexpr.c \$(srcdir)/cp/cp-gimplify.c \
-\$(srcdir)/objc/objc-map.h \$(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)/c-family/c-cppbuiltin.c"
+# Get the C++ FE's gtfiles list.  Do this in a subshell, so we can
+# extract exactly the gtfiles var, but munge cp-lang.c into objcp-lang.c.
+gtfiles="$(. $srcdir/cp/config-lang.in ; \
+  echo $gtfiles | sed 's+/cp/cp-lang.c +/objcp/objcp-lang.c +')"
+
+# Now add our special bits to it.  Please keep this list sorted.
+gtfiles="$gtfiles \
+\$(srcdir)/objc/objc-act.h \
+\$(srcdir)/objc/objc-map.h \
+\$(srcdir)/c-family/c-cppbuiltin.c \
+\$(srcdir)/objc/objc-act.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)/objc/objc-runtime-shared-support.c \
+"