[cfe-commits] r46472 - in /cfe/trunk: AST/ASTContext.cpptest/Sema/function.c
Nuno Lopes
nunoplopes at sapo.pt
Tue Jan 29 04:56:59 PST 2008
Hi,
Please consider the following:
$ gcc -fsyntax-only a.c
a.c:2: error: conflicting types for 'a'
a.c:1: error: previous declaration of 'a' was here
$ gcc -fsyntax-only -std=c99 a.c
a.c:2: error: conflicting types for 'a'
a.c:1: error: previous declaration of 'a' was here
$ ../../Debug/bin/clang -fsyntax-only a.c
$ cat a.c
void a(char*);
void a(const char*);
$ gcc --version
gcc (GCC) 4.1.2 (Gentoo 4.1.2)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
I don't have the standard at home (we have only 1 copy in the university..),
but at least gcc disagrees with clang.
Nuno
----- Original Message -----
From: "Steve Naroff" <snaroff at apple.com>
To: <cfe-commits at cs.uiuc.edu>
Sent: Tuesday, January 29, 2008 12:15 AM
Subject: [cfe-commits] r46472 - in /cfe/trunk:
AST/ASTContext.cpptest/Sema/function.c
> Author: snaroff
> Date: Mon Jan 28 18:15:50 2008
> New Revision: 46472
>
> URL: http://llvm.org/viewvc/llvm-project?rev=46472&view=rev
> Log:
>
> Fix bz1950. ASTContext::functionTypesAreCompatible() needs to operate on
> the unqualified parameter types (per C99 6.7.5.3p15).
>
>
> Modified:
> cfe/trunk/AST/ASTContext.cpp
> cfe/trunk/test/Sema/function.c
>
> Modified: cfe/trunk/AST/ASTContext.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/AST/ASTContext.cpp?rev=46472&r1=46471&r2=46472&view=diff
>
> ==============================================================================
> --- cfe/trunk/AST/ASTContext.cpp (original)
> +++ cfe/trunk/AST/ASTContext.cpp Mon Jan 28 18:15:50 2008
> @@ -1579,7 +1579,10 @@
>
> // The use of ellipsis agree...now check the argument types.
> for (unsigned i = 0; i < lproto_nargs; i++)
> - if (!typesAreCompatible(lproto->getArgType(i),
> rproto->getArgType(i)))
> + // C99 6.7.5.3p15: ...and each parameter declared with qualified type
> + // is taken as having the unqualified version of it's declared type.
> + if (!typesAreCompatible(lproto->getArgType(i).getUnqualifiedType(),
> + rproto->getArgType(i).getUnqualifiedType()))
> return false;
> return true;
> }
>
> Modified: cfe/trunk/test/Sema/function.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/function.c?rev=46472&r1=46471&r2=46472&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Sema/function.c (original)
> +++ cfe/trunk/test/Sema/function.c Mon Jan 28 18:15:50 2008
> @@ -3,6 +3,9 @@
> void f(double a[restrict][5]); // should promote to restrict ptr.
> void f(double (* restrict a)[5]);
>
> +int foo (__const char *__path);
> +int foo(__const char *__restrict __file);
> +
> void g(int (*)(const void **, const void **));
> void g(int (*compar)()) {
> }
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list