Skip to content

Commit 9c0f672

Browse files
authored
merge main into amd-staging (#447)
2 parents 6c91672 + 965cef7 commit 9c0f672

File tree

29 files changed

+519
-559
lines changed

29 files changed

+519
-559
lines changed

bolt/lib/Core/BinaryFunction.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1699,9 +1699,19 @@ bool BinaryFunction::scanExternalRefs() {
16991699

17001700
const uint64_t FunctionOffset =
17011701
TargetAddress - TargetFunction->getAddress();
1702-
BranchTargetSymbol =
1703-
FunctionOffset ? TargetFunction->addEntryPointAtOffset(FunctionOffset)
1704-
: TargetFunction->getSymbol();
1702+
if (!TargetFunction->isInConstantIsland(TargetAddress)) {
1703+
BranchTargetSymbol =
1704+
FunctionOffset
1705+
? TargetFunction->addEntryPointAtOffset(FunctionOffset)
1706+
: TargetFunction->getSymbol();
1707+
} else {
1708+
TargetFunction->setIgnored();
1709+
BC.outs() << "BOLT-WARNING: Ignoring entry point at address 0x"
1710+
<< Twine::utohexstr(Address)
1711+
<< " in constant island of function " << *TargetFunction
1712+
<< '\n';
1713+
continue;
1714+
}
17051715
}
17061716

17071717
// Can't find more references. Not creating relocations since we are not

bolt/test/AArch64/constant-island-entry.s

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1-
// This test checks that we ignore functions which add an entry point that
2-
// is in a constant island.
1+
## This test checks that we ignore functions which add an entry point that
2+
## is in a constant island.
33

44
# RUN: llvm-mc -filetype=obj -triple aarch64-unknown-unknown %s -o %t.o
55
# RUN: %clang %cflags %t.o -pie -Wl,-q -o %t.exe
6+
7+
## Check when the caller is successfully disassembled.
68
# RUN: llvm-bolt %t.exe -o %t.bolt 2>&1 | FileCheck %s
79

10+
## Skip caller to check the identical warning is triggered from ScanExternalRefs().
11+
# RUN: llvm-bolt %t.exe -o %t.bolt -skip-funcs=caller 2>&1 | FileCheck %s
12+
813
# CHECK: BOLT-WARNING: Ignoring entry point at address 0x{{[0-9a-f]+}} in constant island of function func
914

1015
.globl func

clang-tools-extra/clang-tidy/readability/RedundantParenthesesCheck.cpp

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "RedundantParenthesesCheck.h"
10+
#include "../utils/Matchers.h"
11+
#include "../utils/OptionsUtils.h"
1012
#include "clang/AST/Expr.h"
1113
#include "clang/ASTMatchers/ASTMatchFinder.h"
1214
#include "clang/ASTMatchers/ASTMatchers.h"
@@ -32,15 +34,30 @@ AST_MATCHER(ParenExpr, isInMacro) {
3234

3335
} // namespace
3436

37+
RedundantParenthesesCheck::RedundantParenthesesCheck(StringRef Name,
38+
ClangTidyContext *Context)
39+
: ClangTidyCheck(Name, Context),
40+
AllowedDecls(utils::options::parseStringList(
41+
Options.get("AllowedDecls", "std::max;std::min"))) {}
42+
43+
void RedundantParenthesesCheck::storeOptions(
44+
ClangTidyOptions::OptionMap &Opts) {
45+
Options.store(Opts, "AllowedDecls",
46+
utils::options::serializeStringList(AllowedDecls));
47+
}
48+
3549
void RedundantParenthesesCheck::registerMatchers(MatchFinder *Finder) {
3650
const auto ConstantExpr =
3751
expr(anyOf(integerLiteral(), floatLiteral(), characterLiteral(),
3852
cxxBoolLiteral(), stringLiteral(), cxxNullPtrLiteralExpr()));
3953
Finder->addMatcher(
40-
parenExpr(subExpr(anyOf(parenExpr(), ConstantExpr, declRefExpr())),
41-
unless(anyOf(isInMacro(),
42-
// sizeof(...) is common used.
43-
hasParent(unaryExprOrTypeTraitExpr()))))
54+
parenExpr(
55+
subExpr(anyOf(parenExpr(), ConstantExpr,
56+
declRefExpr(to(namedDecl(unless(
57+
matchers::matchesAnyListedName(AllowedDecls))))))),
58+
unless(anyOf(isInMacro(),
59+
// sizeof(...) is common used.
60+
hasParent(unaryExprOrTypeTraitExpr()))))
4461
.bind("dup"),
4562
this);
4663
}

clang-tools-extra/clang-tidy/readability/RedundantParenthesesCheck.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,16 @@ namespace clang::tidy::readability {
2020
/// https://clang.llvm.org/extra/clang-tidy/checks/readability/redundant-parentheses.html
2121
class RedundantParenthesesCheck : public ClangTidyCheck {
2222
public:
23-
RedundantParenthesesCheck(StringRef Name, ClangTidyContext *Context)
24-
: ClangTidyCheck(Name, Context) {}
23+
RedundantParenthesesCheck(StringRef Name, ClangTidyContext *Context);
24+
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
2525
void registerMatchers(ast_matchers::MatchFinder *Finder) override;
2626
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
2727
bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
2828
return LangOpts.CPlusPlus | LangOpts.C99;
2929
}
30+
31+
private:
32+
const std::vector<StringRef> AllowedDecls;
3033
};
3134

3235
} // namespace clang::tidy::readability

clang-tools-extra/docs/clang-tidy/checks/readability/redundant-parentheses.rst

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,16 @@ affect the semantics.
2727
.. code-block:: c++
2828

2929
int a = (1 * 2) + 3; // no warning
30+
31+
Options
32+
-------
33+
34+
.. option:: AllowedDecls
35+
36+
Semicolon-separated list of regular expressions matching names of declarations
37+
to ignore when the parentheses are around. Declarations can include variables
38+
or functions. The default is an `std::max;std::min`.
39+
40+
Some STL library functions may have the same name as widely used function-like
41+
macro. For example, ``std::max`` and ``max`` macro. A workaround to distinguish
42+
them is adding parentheses around functions to prevent function-like macro.

clang-tools-extra/test/clang-tidy/checkers/readability/redundant-parentheses.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,12 @@ void exceptions() {
6262
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: redundant parentheses around expression [readability-redundant-parentheses]
6363
// CHECK-FIXES: alignof(3);
6464
}
65+
66+
namespace std {
67+
template<class T> T max(T, T);
68+
template<class T> T min(T, T);
69+
} // namespace std
70+
void ignoreStdMaxMin() {
71+
(std::max)(1,2);
72+
(std::min)(1,2);
73+
}

clang/AreaTeamMembers.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ [email protected] (email), rnk (Discourse), rnk (GitHub), rnk (Discord)
1313
Other Members
1414
-------------
1515
Eli Friedman
16-
efriedma@quicinc.com> (email), efriedma-quic (Discourse), efriedma-quic (GitHub)
16+
efriedma@qti.qualcomm.com> (email), efriedma-quic (Discourse), efriedma-quic (GitHub)
1717

clang/Maintainers.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Clang LLVM IR generation
4646
| rjmccall\@apple.com (email), rjmccall (Phabricator), rjmccall (GitHub)
4747
4848
| Eli Friedman
49-
| efriedma\@quicinc.com (email), efriedma (Phabricator), efriedma-quic (GitHub)
49+
| efriedma\@qti.qualcomm.com (email), efriedma (Phabricator), efriedma-quic (GitHub)
5050
5151
| Anton Korobeynikov
5252
| anton\@korobeynikov.info (email), asl (Phabricator), asl (GitHub)

clang/lib/Tooling/Transformer/RangeSelector.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,12 @@ RangeSelector transformer::name(std::string ID) {
205205
// `foo<int>` for which this range will be too short. Doing so will
206206
// require subcasing `NamedDecl`, because it doesn't provide virtual
207207
// access to the \c DeclarationNameInfo.
208-
if (tooling::getText(R, *Result.Context) != D->getName())
209-
return CharSourceRange();
208+
StringRef Text = tooling::getText(R, *Result.Context);
209+
if (Text != D->getName())
210+
return llvm::make_error<StringError>(
211+
llvm::errc::not_supported,
212+
"range selected by name(node id=" + ID + "): '" + Text +
213+
"' is different from decl name '" + D->getName() + "'");
210214
return R;
211215
}
212216
if (const auto *E = Node.get<DeclRefExpr>()) {

clang/unittests/Tooling/RangeSelectorTest.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,31 @@ TEST(RangeSelectorTest, NameOpDeclRefError) {
527527
AllOf(HasSubstr(Ref), HasSubstr("requires property 'identifier'")))));
528528
}
529529

530+
TEST(RangeSelectorTest, NameOpDeclInMacroArg) {
531+
StringRef Code = R"cc(
532+
#define MACRO(name) int name;
533+
MACRO(x)
534+
)cc";
535+
const char *ID = "id";
536+
TestMatch Match = matchCode(Code, varDecl().bind(ID));
537+
EXPECT_THAT_EXPECTED(select(name(ID), Match), HasValue("x"));
538+
}
539+
540+
TEST(RangeSelectorTest, NameOpDeclInMacroBodyError) {
541+
StringRef Code = R"cc(
542+
#define MACRO int x;
543+
MACRO
544+
)cc";
545+
const char *ID = "id";
546+
TestMatch Match = matchCode(Code, varDecl().bind(ID));
547+
EXPECT_THAT_EXPECTED(
548+
name(ID)(Match.Result),
549+
Failed<StringError>(testing::Property(
550+
&StringError::getMessage,
551+
AllOf(HasSubstr("range selected by name(node id="),
552+
HasSubstr("' is different from decl name 'x'")))));
553+
}
554+
530555
TEST(RangeSelectorTest, CallArgsOp) {
531556
const StringRef Code = R"cc(
532557
struct C {

0 commit comments

Comments
 (0)