]> granicus.if.org Git - clang/commit
Fix a problem Eli ran into where we now reject incomplete arrays of
authorChris Lattner <sabre@nondot.org>
Tue, 12 Jul 2011 06:52:18 +0000 (06:52 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 12 Jul 2011 06:52:18 +0000 (06:52 +0000)
commit3a2b657088de9413714a51bff153a59565adb3ef
treecb71c19b933c4b08606c3d721695e509c3caab26
parent811bf3669f4d82c57fe3cd3c49050fdbc95d0aff
Fix a problem Eli ran into where we now reject incomplete arrays of
uncompleted struct types.  We now do what llvm-gcc does and compile
them into [i8 x 0].  If the type is later completed, we make sure that
it is appropriately cast.

We compile the terrible example to something like this now:

%struct.A = type { i32, i32, i32 }

@g = external global [0 x i8]

define void @_Z1fv() nounwind {
entry:
  call void @_Z3fooP1A(%struct.A* bitcast ([0 x i8]* @g to %struct.A*))
  ret void
}

declare void @_Z3fooP1A(%struct.A*)

define %struct.A* @_Z2f2v() nounwind {
entry:
  ret %struct.A* getelementptr inbounds ([0 x %struct.A]* bitcast ([0 x i8]* @g to [0 x %struct.A]*), i32 0, i64 1)
}

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134972 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CGExpr.cpp
lib/CodeGen/CodeGenTypes.cpp
test/CodeGenCXX/init-incomplete-type.cpp