aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgrischka <grischka>2013-02-14 06:53:07 +0100
committergrischka <grischka>2013-02-14 06:53:07 +0100
commit944627c479f01d919f10f9d9dd807cca43bf7aba (patch)
treea1ff856b8160b50a1d8fab477def8d5f29dafbe5
parente298f608385d51911184281f1cdb09addc560c59 (diff)
downloadtinycc-944627c479f01d919f10f9d9dd807cca43bf7aba.tar.gz
tinycc-944627c479f01d919f10f9d9dd807cca43bf7aba.tar.bz2
configure: cleanup
- add quotes: eval opt=\"$opt\" - use $source_path/conftest.c for OOT build - add fn_makelink() for OOT build - do not check lddir etc. on Windows/MSYS - formatting config-print.c - rename to conftest.c (for consistency) - change option e to b - change output from that from "yes" to "no" - remove inttypes.h dependency - simpify version output Makefile: - improve GCC warning flag checks tcc.h: - add back default CONFIG_LDDIR - add default CONFIG_TCCDIR also (just for fun) tccpp.c: - fix Christian's last warning tccpp.c: In function ‘macro_subst’: tccpp.c:2803:12: warning: ‘*((void *)&cval+4)’ is used uninitialized in this function [-Wuninitialized] That the change fixes the warning doesn't make sense but anyway. libtcc.c: - tcc_error/warning: print correct source filename/line for token :paste: (also inline :asm:) lddir and multiarch logic still needs fixing.
-rw-r--r--Makefile9
-rw-r--r--config-print.c35
-rwxr-xr-xconfigure366
-rw-r--r--conftest.c31
-rw-r--r--libtcc.c25
-rw-r--r--tcc.h6
-rw-r--r--tccasm.c3
-rw-r--r--tccpp.c7
8 files changed, 257 insertions, 225 deletions
diff --git a/Makefile b/Makefile
index 4d09e42..426fbb9 100644
--- a/Makefile
+++ b/Makefile
@@ -13,11 +13,14 @@ CFLAGS_P=$(CFLAGS) -pg -static
LIBS_P=
LDFLAGS_P=$(LDFLAGS)
-ifeq ($(patsubst %gcc,gcc,$(CC)),gcc)
-ifneq ($(GCC_MAJOR),2)
+ifeq (-$(findstring $(GCC_MAJOR),01)-,--)
CFLAGS+=-fno-strict-aliasing
-ifneq ($(GCC_MAJOR),3)
+ifeq (-$(findstring $(GCC_MAJOR),23)-,--)
CFLAGS+=-Wno-pointer-sign -Wno-sign-compare
+ifeq (-$(GCC_MAJOR)-$(findstring $(GCC_MINOR),56789)-,-4--)
+CFLAGS+=-D_FORTIFY_SOURCE=0
+else
+CFLAGS+=-Wno-unused-result
endif
endif
endif
diff --git a/config-print.c b/config-print.c
deleted file mode 100644
index 2331905..0000000
--- a/config-print.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <inttypes.h>
-#include <stdio.h>
-
-int main(int argc, char *argv[]) {
- switch(argc == 2 ? argv[1][0] : 0) {
- case 'v':
-#ifdef __GNUC__
-# if __GNUC__ >= 4
- puts("4");
-# elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
- puts("3");
-# else
- puts("2");
-# endif
-#else
- puts("0");
-#endif
- break;
- case 'm':
-#ifdef __GNUC__
- printf("%d\n", __GNUC_MINOR__);
-#else
- puts("-1");
-#endif
- break;
- case 'e':
- {
- volatile uint32_t i=0x01234567;
- if ((*((uint8_t*)(&i))) == 0x67)
- puts("yes");
- }
- break;
- }
- return 0;
-}
diff --git a/configure b/configure
index 649b67b..1f4a17d 100755
--- a/configure
+++ b/configure
@@ -2,26 +2,18 @@
#
# tcc configure script (c) 2003 Fabrice Bellard
-fn_dirname()
-{
- case $1 in
- */*) echo ${1%/*};;
- *) echo '.'
- esac
-}
-
# set temporary file name
-if test ! -z "$TMPDIR" ; then
- TMPDIR1="${TMPDIR}"
-elif test ! -z "$TEMPDIR" ; then
- TMPDIR1="${TEMPDIR}"
-else
- TMPDIR1="/tmp"
-fi
-
+# if test ! -z "$TMPDIR" ; then
+# TMPDIR1="${TMPDIR}"
+# elif test ! -z "$TEMPDIR" ; then
+# TMPDIR1="${TEMPDIR}"
+# else
+# TMPDIR1="/tmp"
+# fi
+#
# bashism: TMPN="${TMPDIR1}/tcc-conf-${RANDOM}-$$-${RANDOM}.c"
-TMPN="./conftest-$$"
+TMPN="./conftest-$$"
TMPH=$TMPN.h
# default parameters
@@ -42,12 +34,38 @@ host_cc="gcc"
ar="ar"
strip="strip"
cygwin="no"
-cpu=`uname -m`
-
+gprof="no"
+bigendian="no"
+mingw32="no"
+LIBSUF=".a"
+EXESUF=""
tcc_sysincludepaths=""
tcc_libpaths=""
tcc_crtprefix=""
tcc_elfinterp=""
+tcc_lddir=
+
+cpu=`uname -m`
+
+# OS specific
+targetos=`uname -s`
+case $targetos in
+ MINGW32*) mingw32=yes;;
+ DragonFly) noldl=yes;;
+ OpenBSD) noldl=yes;;
+ *) ;;
+esac
+
+# find source path
+# XXX: we assume an absolute path is given when launching configure,
+# except in './configure' case.
+source_path=${0%configure}
+source_path=${source_path%/}
+source_path_used="yes"
+if test -z "$source_path" -o "$source_path" = "." ; then
+ source_path=`pwd`
+ source_path_used="no"
+fi
case "$cpu" in
i386|i486|i586|i686|i86pc|BePC|i686-AT386)
@@ -89,34 +107,9 @@ case "$cpu" in
cpu="unknown"
;;
esac
-gprof="no"
-bigendian="no"
-mingw32="no"
-LIBSUF=".a"
-EXESUF=""
-
-# OS specific
-targetos=`uname -s`
-case $targetos in
- MINGW32*) mingw32=yes;;
- DragonFly) noldl=yes;;
- OpenBSD) noldl=yes;;
- *) ;;
-esac
-
-# find source path
-# XXX: we assume an absolute path is given when launching configure,
-# except in './configure' case.
-source_path=${0%configure}
-source_path=${source_path%/}
-source_path_used="yes"
-if test -z "$source_path" -o "$source_path" = "." ; then
- source_path=`pwd`
- source_path_used="no"
-fi
for opt do
- eval opt=$opt
+ eval opt=\"$opt\"
case "$opt" in
--prefix=*) prefix=`echo $opt | cut -d '=' -f 2`
;;
@@ -192,89 +185,6 @@ if test -z "$CFLAGS"; then
CFLAGS="-Wall -g -O2"
fi
-cc="${cross_prefix}${cc}"
-ar="${cross_prefix}${ar}"
-strip="${cross_prefix}${strip}"
-
-if test "$mingw32" = "yes" ; then
- LIBSUF=".lib"
- EXESUF=".exe"
-fi
-
-if test -z "$cross_prefix" ; then
-
-if ! $cc -o config-print config-print.c 2>/dev/null ; then
- echo "$cc is not able to compile TCC"
-else
- bigendian="$(./config-print e)"
- gcc_major="$(./config-print v)"
-fi
-
-else
-
-# if cross compiling, cannot launch a program, so make a static guess
-case $cpu in
- powerpc|mips|s390) bigendian=yes;;
-esac
-
-fi
-
-if test -z "$cross_prefix" ; then
- libc_dir="$(ldd ./config-print | grep libc.so | sed 's|[^/]*/\(.*/\)[^/]*|\1|')"
- multiarch_triplet=${libc_dir#*/}
- multiarch_triplet=${multiarch_triplet%/}
- lddir="${libc_dir%%/*}"
- if test -n "$multiarch_triplet" ; then
- lddir="$lddir/$multiarch_triplet"
- fi
-fi
-rm config-print
-
-if test x"$show_help" = "xyes" ; then
-cat << EOF
-Usage: configure [options]
-Options: [defaults in brackets after descriptions]
-
-Standard options:
- --help print this message
- --prefix=PREFIX install in PREFIX [$prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [same as prefix]
- --bindir=DIR user executables in DIR [EPREFIX/bin]
- --libdir=DIR object code libraries in DIR [EPREFIX/lib]
- --tccdir=DIR installation directory [EPREFIX/lib/tcc]
- --includedir=DIR C header files in DIR [PREFIX/include]
- --sharedir=DIR documentation root DIR [PREFIX]/share
- --docdir=DIR documentation in DIR [SHAREDIR/doc/tcc]
- --mandir=DIR man documentation in DIR [SHAREDIR/man]
- --infodir=DIR info documentation in DIR [SHAREDIR/info]
-
-Advanced options (experts only):
- --source-path=PATH path of source code [$source_path]
- --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
- --sysroot=PREFIX prepend PREFIX to library/include paths []
- --cc=CC use C compiler CC [$cc]
- --disable-static make libtcc.so instead of libtcc.a
- --disable-rpath disable use of -rpath with the above
- --strip-binaries strip symbol tables from resulting binaries
- --with-libgcc use /lib/libgcc_s.so.1 instead of libtcc.a
- --enable-mingw32 build windows version on linux with mingw32
- --enable-cygwin build windows version on windows with cygwin
- [requires cygwin and mingw32-make]
- --enable-cross build cross compilers
- --extra-cflags= extra compiler flags
- --extra-ldflags= extra linker options
- --with-selinux use mmap instead of exec mem
- [requires write access to /tmp]
- --sysincludepaths=... specify system include paths, colon separated
- --libpaths=... specify system library paths, colon separated
- --crtprefix=... specify locations of crt?.o, colon separated
- --elfinterp=... specify elf interpreter
-EOF
-#echo "NOTE: The object files are build at the place where configure is launched"
-exit 1
-fi
-
if test "$mingw32" = "yes" ; then
if test x"$tccdir" = x""; then
tccdir="tcc"
@@ -292,6 +202,8 @@ if test "$mingw32" = "yes" ; then
docdir="${sharedir}/doc"
mandir="${sharedir}/man"
infodir="${sharedir}/info"
+ LIBSUF=".lib"
+ EXESUF=".exe"
else
if test -z "$prefix" ; then
prefix="/usr/local"
@@ -327,6 +239,106 @@ if test x"$includedir" = x""; then
includedir="${prefix}/include"
fi
+if test x"$show_help" = "xyes" ; then
+cat << EOF
+Usage: configure [options]
+Options: [defaults in brackets after descriptions]
+
+Standard options:
+ --help print this message
+ --prefix=PREFIX install in PREFIX [$prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --tccdir=DIR installation directory [EPREFIX/lib/tcc]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --sharedir=DIR documentation root DIR [PREFIX/share]
+ --docdir=DIR documentation in DIR [SHAREDIR/doc/tcc]
+ --mandir=DIR man documentation in DIR [SHAREDIR/man]
+ --infodir=DIR info documentation in DIR [SHAREDIR/info]
+
+Advanced options (experts only):
+ --source-path=PATH path of source code [$source_path]
+ --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
+ --sysroot=PREFIX prepend PREFIX to library/include paths []
+ --cc=CC use C compiler CC [$cc]
+ --extra-cflags= specify compiler flags [$CFLAGS]
+ --extra-ldflags= specify linker options []
+ --strip-binaries strip symbol tables from resulting binaries
+ --disable-static make libtcc.so instead of libtcc.a
+ --disable-rpath disable use of -rpath with the above
+ --with-libgcc use /lib/libgcc_s.so.1 instead of libtcc.a
+ --enable-mingw32 build windows version on linux with mingw32
+ --enable-cygwin build windows version on windows with cygwin
+ --enable-cross build cross compilers
+ --with-selinux use mmap for exec mem [needs writable /tmp]
+ --sysincludepaths=... specify system include paths, colon separated
+ --libpaths=... specify system library paths, colon separated
+ --crtprefix=... specify locations of crt?.o, colon separated
+ --elfinterp=... specify elf interpreter
+EOF
+#echo "NOTE: The object files are build at the place where configure is launched"
+exit 1
+fi
+
+cc="${cross_prefix}${cc}"
+ar="${cross_prefix}${ar}"
+strip="${cross_prefix}${strip}"
+
+CONFTEST=./conftest$EXESUF
+
+if test -z "$cross_prefix" ; then
+ if ! $cc -o $CONFTEST $source_path/conftest.c 2>/dev/null ; then
+ echo "configure: error: '$cc' failed to compile conftest.c."
+ else
+ bigendian="$($CONFTEST bigendian)"
+ gcc_major="$($CONFTEST version)"
+ gcc_minor="$($CONFTEST minor)"
+ if test "$mingw32" = "no" ; then
+ libc_dir="$(ldd $CONFTEST | grep libc.so | sed 's|[^/]*/\(.*/\)[^/]*|\1|')"
+
+# gr: FIXME
+# ldd $CONFTEST gives (ubuntu 8)
+# linux-gate.so.1 => (0xb7fc3000)
+# libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e37000)
+# /lib/ld-linux.so.2 (0xb7fa9000)
+# result is crap:
+# CONFIG_LDDIR="lib/tls/i686/cmov"
+# CONFIG_MUADIR="tls/i686/cmov"
+
+ multiarch_triplet=${libc_dir#*/}
+ multiarch_triplet=${multiarch_triplet%/}
+ tcc_lddir="${libc_dir%%/*}"
+ if test -n "$multiarch_triplet" ; then
+ tcc_lddir="$tcc_lddir/$multiarch_triplet"
+ fi
+
+# gr: maybe for after the release:
+# tcc_elfinterp="$(ldd $CONFTEST | grep 'ld.*.so' | sed 's,\s*\(\S\+\).*,\1,')"
+# #echo "elfinterp $tcc_elfinterp"
+
+ fi
+ fi
+else
+ # if cross compiling, cannot launch a program, so make a static guess
+ case $cpu in
+ powerpc|mips|s390) bigendian=yes;;
+ esac
+fi
+
+# gr: maybe for after the release:
+# run compiler to see if it supports FLAG, if yes add to CFLAGS
+#cc_option() {
+# if $cc $CFLAGS $1 -S -o /dev/null -xc conftest.c >/dev/null 2>&1; then
+# CFLAGS="$CFLAGS $1"; else if test -n "$2"; then
+# CFLAGS="$CFLAGS $2"; fi; fi
+#}
+#cc_option -fno-strict-aliasing
+#cc_option -Wno-pointer-sign
+#cc_option -Wno-sign-compare
+#cc_option -Wno-unused-result -D_FORTIFY_SOURCE=0
+
cat <<EOF
Binary directory $bindir
TinyCC directory $tccdir
@@ -359,33 +371,9 @@ includedir=\$(DESTDIR)$includedir
mandir=\$(DESTDIR)$mandir
infodir=\$(DESTDIR)$infodir
docdir=\$(DESTDIR)$docdir
-EOF
-
-echo "/* Automatically generated by configure - do not modify */" > $TMPH
-print_var1()
-{
- echo "#ifndef $1" >> $TMPH
- echo "# define $1 \"$2\"" >> $TMPH
- echo "#endif" >> $TMPH
-}
-print_var2()
-{
- if test -n "$2"; then print_var1 $1 "$2"; fi
-}
-print_var2 CONFIG_SYSROOT "$sysroot"
-print_var1 CONFIG_TCCDIR "$tccdir"
-print_var2 CONFIG_TCC_SYSINCLUDEPATHS "$tcc_sysincludepaths"
-print_var2 CONFIG_TCC_LIBPATHS "$tcc_libpaths"
-print_var2 CONFIG_TCC_CRTPREFIX "$tcc_crtprefix"
-print_var2 CONFIG_TCC_ELFINTERP "$tcc_elfinterp"
-print_var2 CONFIG_MULTIARCHDIR "$multiarch_triplet"
-print_var2 CONFIG_LDDIR "$lddir"
-
-echo "#define GCC_MAJOR $gcc_major" >> $TMPH
-
-cat >> config.mak <<EOF
CC=$cc
GCC_MAJOR=$gcc_major
+GCC_MINOR=$gcc_minor
HOST_CC=$host_cc
AR=$ar
STRIP=$strip -s -R .comment -R .note
@@ -395,6 +383,28 @@ LIBSUF=$LIBSUF
EXESUF=$EXESUF
EOF
+print_def() {
+ if test -n "$2"; then
+ echo "#ifndef $1" >> $TMPH
+ echo "# define $1 \"$2\"" >> $TMPH
+ echo "#endif" >> $TMPH
+ fi
+}
+
+echo "/* Automatically generated by configure - do not modify */" > $TMPH
+
+print_def CONFIG_SYSROOT "$sysroot"
+print_def CONFIG_TCCDIR "$tccdir"
+print_def CONFIG_TCC_SYSINCLUDEPATHS "$tcc_sysincludepaths"
+print_def CONFIG_TCC_LIBPATHS "$tcc_libpaths"
+print_def CONFIG_TCC_CRTPREFIX "$tcc_crtprefix"
+print_def CONFIG_TCC_ELFINTERP "$tcc_elfinterp"
+print_def CONFIG_MULTIARCHDIR "$multiarch_triplet"
+print_def CONFIG_LDDIR "$tcc_lddir"
+
+echo "#define GCC_MAJOR $gcc_major" >> $TMPH
+echo "#define GCC_MINOR $gcc_minor" >> $TMPH
+
if test "$cpu" = "x86" ; then
echo "ARCH=i386" >> config.mak
echo "#define HOST_I386 1" >> $TMPH
@@ -421,7 +431,9 @@ else
echo "Unsupported CPU"
exit 1
fi
+
echo "TARGETOS=$targetos" >> config.mak
+
if test "$noldl" = "yes" ; then
echo "CONFIG_NOLDL=yes" >> config.mak
fi
@@ -431,7 +443,7 @@ if test "$mingw32" = "yes" ; then
fi
if test "$cygwin" = "yes" ; then
echo "#ifndef _WIN32" >> $TMPH
- echo "#define _WIN32" >> $TMPH
+ echo "# define _WIN32" >> $TMPH
echo "#endif" >> $TMPH
echo "AR=ar" >> config.mak
fi
@@ -470,21 +482,7 @@ echo "#define TCC_VERSION \"$version\"" >> $TMPH
echo "@set VERSION $version" > config.texi
echo "SRC_PATH=$source_path" >>config.mak
-# build tree in object directory if source path is different from current one
if test "$source_path_used" = "yes" ; then
- FILES="Makefile lib/Makefile tests/Makefile tests/tests2/Makefile"
- for f in $FILES ; do
- dir=`fn_dirname "$f"`
- test -d "$dir" || mkdir -p "$dir"
- # Build a symlink $f that points to $dest, its $source_path
- # counterpart.
- case $source_path in
- /*) dest=$source_path/$f;;
- *) dest=`echo "$dir/" | sed 's,^\./,,;s,[^/]*/,../,g'`
- dest=$dest$source_path/$f;;
- esac
- ln -sf $dest $f
- done
case $source_path in
/*) echo "top_srcdir=$source_path";;
*) echo "top_srcdir=\$(TOP)/$source_path";;
@@ -501,4 +499,34 @@ else
echo "config.h is unchanged"
fi
-rm -f $TMPN*
+rm -f $TMPN* $CONFTEST
+
+# ---------------------------------------------------------------------------
+# build tree in object directory if source path is different from current one
+
+fn_makelink()
+{
+ tgt=$1/$2
+ case $2 in
+ */*) dn=${2%/*}
+ test -d $dn || mkdir -p $dn
+ case $1 in
+ /*) ;;
+ *) while test $dn ; do
+ tgt=../$tgt; dn=${dn#${dn%%/*}}; dn=${dn#/}
+ done
+ ;;
+ esac
+ ;;
+ esac
+ ln -sfn $tgt $2
+}
+
+if test "$source_path_used" = "yes" ; then
+ FILES="Makefile lib/Makefile tests/Makefile tests/tests2/Makefile"
+ for f in $FILES ; do
+ fn_makelink $source_path $f
+ done
+fi
+
+# ---------------------------------------------------------------------------
diff --git a/conftest.c b/conftest.c
new file mode 100644
index 0000000..a803bff
--- /dev/null
+++ b/conftest.c
@@ -0,0 +1,31 @@
+#include <stdio.h>
+
+int main(int argc, char *argv[])
+{
+ switch(argc == 2 ? argv[1][0] : 0) {
+#ifdef __GNUC__
+ case 'v':
+ printf("%d\n", __GNUC__);
+ break;
+ case 'm':
+ printf("%d\n", __GNUC_MINOR__);
+ break;
+#else
+ case 'v':
+ case 'm':
+ puts("0");
+ break;
+#endif
+ case 'b':
+ {
+ volatile unsigned foo = 0x01234567;
+ puts(*(unsigned char*)&foo == 0x67 ? "no" : "yes");
+ break;
+ }
+ case -1:
+ /* to test -Wno-unused-result */
+ fread(NULL, 1, 1, NULL);
+ break;
+ }
+ return 0;
+}
diff --git a/libtcc.c b/libtcc.c
index cd5f13b..6ec7a83 100644
--- a/libtcc.c
+++ b/libtcc.c
@@ -567,23 +567,24 @@ static void strcat_printf(char *buf, int buf_size, const char *fmt, ...)
static void error1(TCCState *s1, int is_warning, const char *fmt, va_list ap)
{
char buf[2048];
- BufferedFile **f;
+ BufferedFile **pf, *f;
buf[0] = '\0';
- if (file) {
- for(f = s1->include_stack; f < s1->include_stack_ptr; f++)
- strcat_printf(buf, sizeof(buf), "In file included from %s:%d:\n",
- (*f)->filename, (*f)->line_num);
- if (file->line_num > 0) {
- strcat_printf(buf, sizeof(buf),
- "%s:%d: ", file->filename, file->line_num);
+ /* use upper file if inline ":asm:" or token ":paste:" */
+ for (f = file; f && f->filename[0] == ':'; f = f->prev);
+ if (f) {
+ for(pf = s1->include_stack; pf < s1->include_stack_ptr; pf++)
+ strcat_printf(buf, sizeof(buf), "In file included from %s:%d:\n",
+ (*pf)->filename, (*pf)->line_num);
+ if (f->line_num > 0) {
+ strcat_printf(buf, sizeof(buf), "%s:%d: ",
+ f->filename, f->line_num);
} else {
- strcat_printf(buf, sizeof(buf),
- "%s: ", file->filename);
+ strcat_printf(buf, sizeof(buf), "%s: ",
+ f->filename);
}
} else {
- strcat_printf(buf, sizeof(buf),
- "tcc: ");
+ strcat_printf(buf, sizeof(buf), "tcc: ");
}
if (is_warning)
strcat_printf(buf, sizeof(buf), "warning: ");
diff --git a/tcc.h b/tcc.h
index e9ce802..638540a 100644
--- a/tcc.h
+++ b/tcc.h
@@ -155,6 +155,12 @@
#ifndef CONFIG_SYSROOT
# define CONFIG_SYSROOT ""
#endif
+#ifndef CONFIG_TCCDIR
+# define CONFIG_TCCDIR "."
+#endif
+#ifndef CONFIG_LDDIR
+# define CONFIG_LDDIR "lib"
+#endif
/* path to find crt1.o, crti.o and crtn.o */
#ifndef CONFIG_TCC_CRTPREFIX
diff --git a/tccasm.c b/tccasm.c
index d1d2af1..9c77960 100644
--- a/tccasm.c
+++ b/tccasm.c
@@ -837,8 +837,7 @@ static void tcc_assemble_inline(TCCState *s1, char *str, int len)
saved_parse_flags = parse_flags;
saved_macro_ptr = macro_ptr;
- tcc_open_bf(s1, file->filename, len);
- file->line_num = file->prev->line_num;
+ tcc_open_bf(s1, ":asm:", len);
memcpy(file->buffer, str, len);
macro_ptr = NULL;
diff --git a/tccpp.c b/tccpp.c
index ac01d83..f1c9679 100644
--- a/tccpp.c
+++ b/tccpp.c
@@ -2800,13 +2800,13 @@ static inline int *macro_twosharps(const int *macro_str)
{
const int *ptr;
int t;
- CValue cval;
TokenString macro_str1;
CString cstr;
int n, start_of_nosubsts;
/* we search the first '##' */
for(ptr = macro_str;;) {
+ CValue cval;
TOK_GET(&t, &ptr, &cval);
if (t == TOK_TWOSHARPS)
break;
@@ -2835,10 +2835,9 @@ static inline int *macro_twosharps(const int *macro_str)
/* given 'a##b', remove nosubsts preceding 'b' */
while (t == TOK_NOSUBST)
t = *++ptr;
-
if (t && t != TOK_TWOSHARPS) {
+ CValue cval;
TOK_GET(&t, &ptr, &cval);
-
/* We concatenate the two tokens */
cstr_new(&cstr);
cstr_cat(&cstr, get_tok_str(tok, &tokc));
@@ -2846,7 +2845,7 @@ static inline int *macro_twosharps(const int *macro_str)
cstr_cat(&cstr, get_tok_str(t, &cval));
cstr_ccat(&cstr, '\0');
- tcc_open_bf(tcc_state, "<paste>", cstr.size);
+ tcc_open_bf(tcc_state, ":paste:", cstr.size);
memcpy(file->buffer, cstr.data, cstr.size);
for (;;) {
next_nomacro1();