Hash :
a1f9336b
Author :
Date :
2012-12-18T11:30:39
tests: avoid a spurious failure due to a Clang bug
This version of clang:
clang version 3.2 (trunk 163574)
Target: powerpc64-unknown-linux-gnu
Thread model: posix
caused the test 't/ltcond2.sh' to spuriously fail due to what
appeared like a clang bug. Here is a part of the diagnostic (trimmed
down for better clarity):
clang: .../cfarm/llvm/lib/MC/MCAsmStreamer.cpp:338: \
virtual void {anonymous}::MCAsmStreamer::EmitLabel(llvm::MCSymbol*): \
Assertion `Symbol->isUndefined() && "Cannot define a symbol twice!"' \
failed.
...
7 clang 0x0000000012a459c4 llvm::AsmPrinter::EmitGlobalVariable\
(llvm::GlobalVariable const*) + 18446744073680468044
8 clang 0x0000000012a490a8 llvm::AsmPrinter::doFinalization\
(llvm::Module&) + 18446744073680481840
...
Stack dump:
0. Program arguments: .../opt/cfarm/clang-2012.09.10/bin/clang \
-cc1 -triple powerpc64-unknown-linux-gnu -S -disable-free \
...
1. <eof> parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module 'hello-generic.c'.
clang: error: unable to execute command: Aborted
clang: error: clang frontend command failed due to signal (use -v to \
see invocation)
clang version 3.2 (trunk 163574)
Target: powerpc64-unknown-linux-gnu
Thread model: posix
So tweak the affected test case to avoid triggering this bug. This is
the easiest way for us to keep the testsuite result clean and meaningful
on our main Clang test bed.
* t/ltcond2.sh: Prefer using "extern const char *" variables rather
than functions returning a statically allocated "const char *" variable.
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
#! /bin/sh
# Copyright (C) 2003-2012 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, 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, see <http://www.gnu.org/licenses/>.
# Test for bug in conditionals.
required='cc native libtoolize'
. test-init.sh
cat >> configure.ac << 'END'
AC_PROG_CC
AM_PROG_AR
AC_PROG_LIBTOOL
AC_SUBST([HELLO_SYSTEM], [hello-generic.lo])
AM_CONDITIONAL([LINUX], [true])
AC_OUTPUT
END
cat > Makefile.am << 'END'
lib_LTLIBRARIES = libhello.la
libhello_la_SOURCES = hello-common.c
EXTRA_libhello_la_SOURCES = hello-linux.c hello-generic.c
libhello_la_LIBADD = $(HELLO_SYSTEM)
libhello_la_DEPENDENCIES = $(HELLO_SYSTEM)
lib_LTLIBRARIES += libhello2.la
libhello2_la_SOURCES = hello-common.c
if LINUX
libhello2_la_SOURCES += hello-linux.c
else
libhello2_la_SOURCES += hello-generic.c
endif
bin_PROGRAMS = hello hello2
hello_SOURCES = main.c
hello_LDADD = libhello.la
hello2_SOURCES = main.c
hello2_LDADD = libhello2.la
check-local:
./hello$(EXEEXT) | grep hello-generic
./hello2$(EXEEXT) | grep hello-linux
: > check-ok
END
cat > hello-linux.c <<'END'
const char* str = "hello-linux";
END
cat > hello-generic.c <<'END'
const char* str = "hello-generic";
END
cat > hello-common.c <<'END'
#include <stdio.h>
extern const char* str;
void print (void)
{
puts (str);
}
END
cat > main.c <<'END'
int main (void)
{
print();
return 0;
}
END
libtoolize
$ACLOCAL
$AUTOCONF
$AUTOMAKE --add-missing
./configure
$MAKE check
test -f check-ok
: