r297694 - Fix crash with interrupt attribute on ARM.
Eli Friedman via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 13 17:18:29 PDT 2017
Author: efriedma
Date: Mon Mar 13 19:18:29 2017
New Revision: 297694
URL: http://llvm.org/viewvc/llvm-project?rev=297694&view=rev
Log:
Fix crash with interrupt attribute on ARM.
An indirect call has no associated function declaration.
Modified:
cfe/trunk/lib/Sema/SemaExpr.cpp
cfe/trunk/test/Sema/arm-interrupt-attr.c
Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=297694&r1=297693&r2=297694&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Mon Mar 13 19:18:29 2017
@@ -5387,7 +5387,7 @@ Sema::BuildResolvedCallExpr(Expr *Fn, Na
// but can be very challenging to debug.
if (auto *Caller = getCurFunctionDecl())
if (Caller->hasAttr<ARMInterruptAttr>())
- if (!FDecl->hasAttr<ARMInterruptAttr>())
+ if (!FDecl || !FDecl->hasAttr<ARMInterruptAttr>())
Diag(Fn->getExprLoc(), diag::warn_arm_interrupt_calling_convention);
// Promote the function operand.
Modified: cfe/trunk/test/Sema/arm-interrupt-attr.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/arm-interrupt-attr.c?rev=297694&r1=297693&r2=297694&view=diff
==============================================================================
--- cfe/trunk/test/Sema/arm-interrupt-attr.c (original)
+++ cfe/trunk/test/Sema/arm-interrupt-attr.c Mon Mar 13 19:18:29 2017
@@ -28,3 +28,8 @@ __attribute__((interrupt("IRQ"))) void c
callee1(); // expected-warning {{call to function without interrupt attribute could clobber interruptee's VFP registers}}
callee2();
}
+
+void (*callee3)();
+__attribute__((interrupt("IRQ"))) void caller3() {
+ callee3(); // expected-warning {{call to function without interrupt attribute could clobber interruptee's VFP registers}}
+}
More information about the cfe-commits
mailing list