Thanks for the heads up. Looks like we have a different default C++ standard enabled than what the tests got in my local testing. I’ll revert and make a fix.
> On Mar 16, 2023, at 7:53 PM, Voss, Matthew <matthew.v...@sony.com> wrote: > > Hi Craig, > > There are some failures on the PS5 buildbot after this change. Could you take > a look? > > https://lab.llvm.org/buildbot/#/builders/216/builds/18474 > > Thanks, > Matt > >> -----Original Message----- >> From: cfe-commits <cfe-commits-boun...@lists.llvm.org> On Behalf Of Craig >> Topper via cfe-commits >> Sent: Thursday, March 16, 2023 5:52 PM >> To: cfe-commits@lists.llvm.org >> Subject: [clang] 1029747 - [Sema] Fix null pointer dereference >> handleAlwaysInlineAttr. >> >> >> Author: Craig Topper >> Date: 2023-03-16T17:49:34-07:00 >> New Revision: 10297470e953f4f3968c54c851c8af82b07af00b >> >> URL: INVALID URI REMOVED >> project/commit/10297470e953f4f3968c54c851c8af82b07af00b__;!!JmoZiZGBv >> 3RvKRSx!5T2bYoGu6_sqxRYd-ZFC--KklLgMVa3mP6dp- >> DaM426lCB_1eQvZAEGwE8Pe2BFekx30eRBU7KU4wdK2-3ln_WfRflk$ >> DIFF: INVALID URI REMOVED >> project/commit/10297470e953f4f3968c54c851c8af82b07af00b.diff__;!!JmoZiZ >> GBv3RvKRSx!5T2bYoGu6_sqxRYd-ZFC--KklLgMVa3mP6dp- >> DaM426lCB_1eQvZAEGwE8Pe2BFekx30eRBU7KU4wdK2-3lnHdJlBwk$ >> >> LOG: [Sema] Fix null pointer dereference handleAlwaysInlineAttr. >> >> It's possible for `getCalleeDecl()` to return a null pointer. >> >> This was encountered by a user of our downstream compiler. >> >> The case involved a DependentScopeDeclRefExpr. >> >> Since this seems to only be for a warning diagnostic, I skipped the >> diagnostic >> check if it returned null. But mabye there's a different way to fix this. >> >> Reviewed By: erichkeane >> >> Differential Revision: >> https://reviews.llvm.org/D146089 >> 3RvKRSx!5T2bYoGu6_sqxRYd-ZFC--KklLgMVa3mP6dp- >> DaM426lCB_1eQvZAEGwE8Pe2BFekx30eRBU7KU4wdK2-3lnaIroE7Q$ >> >> Added: >> >> >> Modified: >> clang/lib/Sema/SemaStmtAttr.cpp >> clang/test/Sema/attr-alwaysinline.cpp >> clang/test/Sema/attr-noinline.cpp >> >> Removed: >> >> >> >> ################################################################# >> ############### >> diff --git a/clang/lib/Sema/SemaStmtAttr.cpp >> b/clang/lib/Sema/SemaStmtAttr.cpp index 6d443837a4c5..eeef85373ccb >> 100644 >> --- a/clang/lib/Sema/SemaStmtAttr.cpp >> +++ b/clang/lib/Sema/SemaStmtAttr.cpp >> @@ -233,7 +233,8 @@ static Attr *handleNoInlineAttr(Sema &S, Stmt *St, >> const ParsedAttr &A, >> >> for (const auto *CallExpr : CEF.getCallExprs()) { >> const Decl *Decl = CallExpr->getCalleeDecl(); >> - if (Decl->hasAttr<AlwaysInlineAttr>() || Decl->hasAttr<FlattenAttr>()) >> + if (Decl && >> + (Decl->hasAttr<AlwaysInlineAttr>() || >> + Decl->hasAttr<FlattenAttr>())) >> S.Diag(St->getBeginLoc(), >> diag::warn_function_stmt_attribute_precedence) >> << A << (Decl->hasAttr<AlwaysInlineAttr>() ? 0 : 1); >> } >> @@ -259,7 +260,7 @@ static Attr *handleAlwaysInlineAttr(Sema &S, Stmt *St, >> const ParsedAttr &A, >> >> for (const auto *CallExpr : CEF.getCallExprs()) { >> const Decl *Decl = CallExpr->getCalleeDecl(); >> - if (Decl->hasAttr<NoInlineAttr>() || Decl->hasAttr<FlattenAttr>()) >> + if (Decl && (Decl->hasAttr<NoInlineAttr>() || >> + Decl->hasAttr<FlattenAttr>())) >> S.Diag(St->getBeginLoc(), >> diag::warn_function_stmt_attribute_precedence) >> << A << (Decl->hasAttr<NoInlineAttr>() ? 2 : 1); >> } >> >> diff --git a/clang/test/Sema/attr-alwaysinline.cpp b/clang/test/Sema/attr- >> alwaysinline.cpp >> index 6b8e8f215a4b..213d70407f48 100644 >> --- a/clang/test/Sema/attr-alwaysinline.cpp >> +++ b/clang/test/Sema/attr-alwaysinline.cpp >> @@ -25,3 +25,22 @@ void foo() { >> } >> >> [[clang::always_inline]] static int i = bar(); // expected-warning >> {{'always_inline' >> attribute only applies to functions and statements}} >> + >> +// This used to crash the compiler. >> +template<int D> >> +int foo(int x) { >> + if constexpr (D > 1) >> + [[clang::always_inline]] return foo<D-1>(x + 1); >> + else >> + return x; >> +} >> + >> +// FIXME: This should warn that always_inline statement attribute has >> +higher // precedence than the noinline function attribute. >> +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; >> +} >> >> diff --git a/clang/test/Sema/attr-noinline.cpp b/clang/test/Sema/attr- >> noinline.cpp >> index d35782f11adb..a62ca1debcc5 100644 >> --- a/clang/test/Sema/attr-noinline.cpp >> +++ b/clang/test/Sema/attr-noinline.cpp >> @@ -25,3 +25,22 @@ void foo() { >> } >> >> [[clang::noinline]] static int i = bar(); // expected-warning {{'noinline' >> attribute >> only applies to functions and statements}} >> + >> +// This used to crash the compiler. >> +template<int D> >> +int foo(int x) { >> + if constexpr (D > 1) >> + [[clang::noinline]] return foo<D-1>(x + 1); >> + else >> + return x; >> +} >> + >> +// FIXME: This should warn that noinline statement attribute has higher >> +// precedence than the always_inline function attribute. >> +template<int D> [[clang::always_inline]] int bar(int x) { >> + if constexpr (D > 1) >> + [[clang::noinline]] return bar<D-1>(x + 1); >> + else >> + return x; >> +} >> >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> INVALID URI REMOVED >> commits__;!!JmoZiZGBv3RvKRSx!5T2bYoGu6_sqxRYd-ZFC--KklLgMVa3mP6dp- >> DaM426lCB_1eQvZAEGwE8Pe2BFekx30eRBU7KU4wdK2-3lnIjBE824$ _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits