[cfe-commits] r41671 - in /cfe/trunk: Sema/Sema.h Sema/SemaDecl.cpp Sema/SemaExpr.cpp test/Sema/array-init.c

Steve Naroff snaroff at apple.com
Mon Sep 17 07:35:53 PDT 2007


On Sep 17, 2007, at 1:52 AM, Bill Wendling wrote:

> Hi Steve,
>
> It looks as if Sema::CheckAssignmentConstraints doesn't strip off  
> the reference before doing the checking. However, I don't know if  
> this is the correct place (I've lost track of what you guys are  
> doing w.r.t. initialization checks). Do you think this is the best  
> place or should it go somewhere else?
>

CheckAssignmentConstraints() is used for assignment, argument  
passing, variable initialization, and function return values. If the  
bug below exists for all of these usages, then  
CheckAssignmentConstraints() is the place to fix it.

If the bug is specific to variable initialization, then the fix would  
likely go in Sema::CheckSingleInitializer().

snaroff


> -bw
>
> On Sep 1, 2007, at 7:04 PM, Steve Naroff wrote:
>
>> Author: snaroff
>> Date: Sat Sep  1 21:04:30 2007
>> New Revision: 41671
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=41671&view=rev
>> Log:
>>
>> Start implementing semantic analysis for C initializers.
>>
>> Step 1: Start instantiating InitListExpr's.
>> Step 2: Call newly added function Sema::CheckInitializer() from  
>> Sema::ParseDeclarator().
>> Step 3: Give InitListExpr's a preliminary type.
>> Step 4: Start emitting diagnostics for simple assignments.
>>
>> Note:
>>
>> As a result of step 1, the CodeGen/mandel.c test asserts  
>> "Unimplemented agg expr!", which is expected.
>>
>> As a result of step 4, the test below now fails. This isn't  
>> expected and needs to be investigated (it appears type checking  
>> for C++ references is flawed in some way).
>>
>> ******************** TEST 'Sema/cxx-references.cpp' FAILED!  
>> ********************
>> Command:
>>  clang -fsyntax-only Sema/cxx-references.cpp
>> Output:
>> Sema/cxx-references.cpp:8:12: warning: incompatible pointer types  
>> assigning 'int &*' to 'int *'
>>   int *p = &r;
>>            ^~
>> Sema/cxx-references.cpp:10:20: error: incompatible types assigning  
>> 'int (int)' to 'int (&)(int)'
>>   int (&rg)(int) = g;
>>                    ^
>> Sema/cxx-references.cpp:13:18: error: incompatible types assigning  
>> 'int [3]' to 'int (&)[3]'
>>   int (&ra)[3] = a;
>>                  ^
>> Sema/cxx-references.cpp:16:14: error: incompatible types assigning  
>> 'int *' to 'int *&'
>>   int *& P = Q;
>>              ^
>> 4 diagnostics generated.
>> ******************** TEST 'Sema/cxx-references.cpp' FAILED!  
>> ********************
>




More information about the cfe-commits mailing list