bug-autoconf
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Autoconf 2.69 AC_PROG_CXX accepts plain C compilers


From: Peter De Wachter
Subject: Re: Autoconf 2.69 AC_PROG_CXX accepts plain C compilers
Date: Wed, 05 Feb 2014 22:36:07 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Icedove/24.2.0

On 05-02-14 21:40, Eric Blake wrote:
> Actually, in gcc's case, your proposed program is now a syntax error:
>
> $ gcc -o foo foo.c
> foo.c: In function ‘main’:
> foo.c:1:21: error: ‘new’ undeclared (first use in this function)
>  int main() { (void) new int; return 0; }
>                      ^
> foo.c:1:21: note: each undeclared identifier is reported only once for
> each function it appears in
> foo.c:1:25: error: expected ‘;’ before ‘int’
>  int main() { (void) new int; return 0; }
>
> But that's equally useful for weeding out invalid C++ compilers :)

That's because you named the file "foo.c".

$ gcc -o foo foo.cpp
/tmp/ccVVxj3a.o: In function `main':
foo.cpp:(.text+0xa): undefined reference to `operator new(unsigned long)'
collect2: error: ld returned 1 exit status

> I'm wondering if we should avoid the memory leak by using 'delete new
> int' instead of '(void) new int', just so we are less likely to trip up
> on a compiler warning causing a false negative.  Or maybe even some
> other construct that doesn't involve memory allocation but is truly a
> no-op C++ program that fails to compile under C (such as
> AC_LANG_PROGRAM([class foo]) by exploiting 'class' rather than 'new').
> Any opinions?  Otherwise, the idea for your patch looks good to me.

'delete new int' should work as well. But I don't think defining a class
is sufficient. To catch GCC, you need something that will cause a link
error. Something like this would work:

#include <string>
int main() { std::string s; return 0; }

But using the standard library is difficult if you want to support old
compilers that don't have namespace support.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]