Index: clang/lib/CodeGen/CGExpr.cpp =================================================================== --- clang/lib/CodeGen/CGExpr.cpp +++ clang/lib/CodeGen/CGExpr.cpp @@ -1912,7 +1912,8 @@ } if (LV.isSimple()) { - assert(!LV.getType()->isFunctionType()); + if (LV.getType()->isFunctionType()) + return RValue::get(LV.getPointer(*this)); if (LV.getType()->isConstantMatrixType()) return EmitLoadOfMatrixLValue(LV, Loc, *this); Index: clang/test/CodeGen/asm-call-func-lvalue.c =================================================================== --- /dev/null +++ clang/test/CodeGen/asm-call-func-lvalue.c @@ -0,0 +1,7 @@ +// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-unknown-linux-gnu| FileCheck %s + +void callee(void); +void caller() { + //CHECK: call void asm sideeffect "rcall $0", "n,~{dirflag},~{fpsr},~{flags}"(void ()* @callee) + asm("rcall %0"::"n"(callee)); +}