Skip to content

Commit

Permalink
Make sure CodeGenTypes correctly reconverts function types. Fixes PR1…
Browse files Browse the repository at this point in the history
…4355, a crash in IR generation.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@168112 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
eefriedman committed Nov 15, 2012
1 parent 6f9a445 commit 84fd6df
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
12 changes: 11 additions & 1 deletion lib/CodeGen/CodeGenTypes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -453,9 +453,19 @@ llvm::Type *CodeGenTypes::ConvertType(QualType T) {
// cannot lower the function type.
if (!isFuncTypeConvertible(FT)) {
// This function's type depends on an incomplete tag type.

// Force conversion of all the relevant record types, to make sure
// we re-convert the FunctionType when appropriate.
if (const RecordType *RT = FT->getResultType()->getAs<RecordType>())
ConvertRecordDeclType(RT->getDecl());
if (const FunctionProtoType *FPT = dyn_cast<FunctionProtoType>(FT))
for (unsigned i = 0, e = FPT->getNumArgs(); i != e; i++)
if (const RecordType *RT = FPT->getArgType(i)->getAs<RecordType>())
ConvertRecordDeclType(RT->getDecl());

// Return a placeholder type.
ResultType = llvm::StructType::get(getLLVMContext());

SkippedLayout = true;
break;
}
Expand Down
17 changes: 17 additions & 0 deletions test/CodeGen/incomplete-function-type-2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o - %s | FileCheck %s

// PR14355: don't crash
// Keep this test in its own file because CodeGenTypes has global state.
// CHECK: define void @test10_foo({}* %p1.coerce) nounwind {
struct test10_B;
typedef struct test10_B test10_F3(double);
void test10_foo(test10_F3 p1);
struct test10_B test10_b(double);
void test10_bar() {
test10_foo(test10_b);
}
struct test10_B {};
void test10_foo(test10_F3 p1)
{
p1(0.0);
}

0 comments on commit 84fd6df

Please sign in to comment.