[cfe-commits] r46472 - in /cfe/trunk: AST/ASTContext.cpptest/Sema/function.c
Steve Naroff
snaroff at apple.com
Tue Jan 29 06:45:19 PST 2008
This is definitely a bug.
I started looking into this yesterday (I discovered it while fixing
bz1950 for you:-) Unlike bz1950, the precise location of the fix is a
little troublesome. I believe the fix is to
ASTContext::typesAreCompatible(), however this causes some tests to
fail (which will take some time to track down).
Thanks,
snaroff
On Jan 29, 2008, at 4:56 AM, Nuno Lopes wrote:
> 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