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