[PATCH] D146089: [Sema] Fix null pointer dereference handleAlwaysInlineAttr.

Erich Keane via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 15 12:21:47 PDT 2023


erichkeane added inline comments.


================
Comment at: clang/lib/Sema/SemaStmtAttr.cpp:236
     const Decl *Decl = CallExpr->getCalleeDecl();
     if (Decl->hasAttr<AlwaysInlineAttr>() || Decl->hasAttr<FlattenAttr>())
       S.Diag(St->getBeginLoc(), diag::warn_function_stmt_attribute_precedence)
----------------
Same fix + a test probably needed here too.


================
Comment at: clang/test/Sema/attr-alwaysinline.cpp:32
+int foo(int x) {
+    if constexpr (D > 1)
+        [[clang::always_inline]] return foo<D-1>(x + 1);
----------------
Also, I note the 'if constexpr' branch is unnecessary to reproduce this.


================
Comment at: clang/test/Sema/attr-alwaysinline.cpp:36
+        return x;
+}
+
----------------
craig.topper wrote:
> erichkeane wrote:
> > craig.topper wrote:
> > > erichkeane wrote:
> > > > Can you add a test that shows that we warn on instantiation?  This shouldn't be a dependent declrefexpr when instantiated.
> > > > 
> > > > Additionally, this would make sure that we're properly propoagating `always_inline`.
> > > Should this warn
> > > 
> > > ```
> > > template<int D> [[gnu::noinline]]                                                
> > > int bar(int x) {                                                                 
> > >     if constexpr (D > 1)                                                         
> > >         [[clang::always_inline]] return bar<D-1>(x + 1);                         
> > >     else                                                                         
> > >         return x;                                                                
> > > }                                                                                
> > >                                                                                  
> > > int baz(int x) {                                                                 
> > >   return bar<5>(x);                                                              
> > > }  
> > > ```
> > Yes, I would expect that to warn.
> It looks like handleAlwaysInlineAttr only gets called once so it doesn't get called after instantiation.
Hmm... thats unfortunate.  That means we're perhaps not instantiating it correctly.  I'll take some time to poke around as I get a chacne.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D146089/new/

https://reviews.llvm.org/D146089



More information about the cfe-commits mailing list