[perl #112786] Fix build under clang++
authorCraig A. Berry <craigberry@mac.com>
Thu, 24 May 2012 07:54:57 +0000 (00:54 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 24 May 2012 07:57:19 +0000 (00:57 -0700)
A line of code in sv.c last modified at
<http://perl5.git.perl.org/perl.git/commit/c6fb3f6e3e5160581b7?f=sv.c>
causes clang++ to fall down hard when building blead:

sv.c:13969:32: error: unexpected ':' in nested name specifier
        CV * const cv = gv ? (CV *)gv : find_runcv(NULL);
                                      ^
                                      ::
sv.c:13969:34: error: no member named 'Perl_find_runcv' in 'gv'
        CV * const cv = gv ? (CV *)gv : find_runcv(NULL);
                                   ~~~~ ^
./embed.h:137:24: note: expanded from macro 'find_runcv'
#define find_runcv(a)           Perl_find_runcv(aTHX_ a)
                                ^
sv.c:13969:50: error: expected ':'
        CV * const cv = gv ? (CV *)gv : find_runcv(NULL);
                                                        ^
                                                        :
sv.c:13969:21: note: to match this '?'
        CV * const cv = gv ? (CV *)gv : find_runcv(NULL);
                           ^
sv.c:13969:50: error: expected expression
        CV * const cv = gv ? (CV *)gv : find_runcv(NULL);
                                                        ^
14 warnings and 4 errors generated.
make: *** [sv.o] Error 1

clang++ seems to need only an extra set of parentheses to calm down
and let go of its anxieties.

[Committer’s note: Leon Timmermans points out that it's struct gv
that's confusing clang++.  So a struct name used as a variable cannot
be followed by a colon.]

sv.c

diff --git a/sv.c b/sv.c
index c96a81d..65f0e79 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -13957,7 +13957,7 @@ Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
        }
     }
     else {
-       CV * const cv = gv ? (CV *)gv : find_runcv(NULL);
+       CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
        SV *sv;
        AV *av;