]> granicus.if.org Git - clang/commit
Start implementing semantic analysis for C initializers.
authorSteve Naroff <snaroff@apple.com>
Sun, 2 Sep 2007 02:04:30 +0000 (02:04 +0000)
committerSteve Naroff <snaroff@apple.com>
Sun, 2 Sep 2007 02:04:30 +0000 (02:04 +0000)
commitf009063ab7e05be7781751ff9e4b42630f07a747
tree2b44c125aa6743d63b2a1d90ae7a9fedca8ac190
parent9dcbfa450d751bd68fc4af8b75da381d4f6984b9
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! ********************

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41671 91177308-0d34-0410-b5e6-96231b3b80d8
Sema/Sema.h
Sema/SemaDecl.cpp
Sema/SemaExpr.cpp
test/Sema/array-init.c [new file with mode: 0644]