Skip to content

Commit 7fa4ab4

Browse files
committed
Merge from 'master' to 'sycl-web' (intel#11)
CONFLICT (content): Merge conflict in llvm/test/CMakeLists.txt
2 parents 237e8be + e4af56d commit 7fa4ab4

File tree

19 files changed

+787
-541
lines changed

19 files changed

+787
-541
lines changed

clang/lib/Sema/ParsedAttr.cpp

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,26 @@ struct ParsedAttrInfo {
110110
unsigned IsKnownToGCC : 1;
111111
unsigned IsSupportedByPragmaAttribute : 1;
112112

113-
bool (*DiagAppertainsToDecl)(Sema &S, const ParsedAttr &Attr, const Decl *);
114-
bool (*DiagLangOpts)(Sema &S, const ParsedAttr &Attr);
115-
bool (*ExistsInTarget)(const TargetInfo &Target);
116-
unsigned (*SpellingIndexToSemanticSpelling)(const ParsedAttr &Attr);
117-
void (*GetPragmaAttributeMatchRules)(
118-
llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &Rules,
119-
const LangOptions &LangOpts);
113+
virtual ~ParsedAttrInfo() = default;
114+
115+
virtual bool diagAppertainsToDecl(Sema &S, const ParsedAttr &Attr,
116+
const Decl *) const {
117+
return true;
118+
}
119+
virtual bool diagLangOpts(Sema &S, const ParsedAttr &Attr) const {
120+
return true;
121+
}
122+
virtual bool existsInTarget(const TargetInfo &Target) const {
123+
return true;
124+
}
125+
virtual unsigned
126+
spellingIndexToSemanticSpelling(const ParsedAttr &Attr) const {
127+
return UINT_MAX;
128+
}
129+
virtual void getPragmaAttributeMatchRules(
130+
llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &Rules,
131+
const LangOptions &LangOpts) const {
132+
}
120133
};
121134

122135
namespace {
@@ -126,7 +139,13 @@ namespace {
126139
} // namespace
127140

128141
static const ParsedAttrInfo &getInfo(const ParsedAttr &A) {
129-
return AttrInfoMap[A.getKind()];
142+
// If we have a ParsedAttrInfo for this ParsedAttr then return that,
143+
// otherwise return a default ParsedAttrInfo.
144+
if (A.getKind() < llvm::array_lengthof(AttrInfoMap))
145+
return *AttrInfoMap[A.getKind()];
146+
147+
static ParsedAttrInfo DefaultParsedAttrInfo;
148+
return DefaultParsedAttrInfo;
130149
}
131150

132151
unsigned ParsedAttr::getMinArgs() const { return getInfo(*this).NumArgs; }
@@ -140,7 +159,7 @@ bool ParsedAttr::hasCustomParsing() const {
140159
}
141160

142161
bool ParsedAttr::diagnoseAppertainsTo(Sema &S, const Decl *D) const {
143-
return getInfo(*this).DiagAppertainsToDecl(S, *this, D);
162+
return getInfo(*this).diagAppertainsToDecl(S, *this, D);
144163
}
145164

146165
bool ParsedAttr::appliesToDecl(const Decl *D,
@@ -152,11 +171,11 @@ void ParsedAttr::getMatchRules(
152171
const LangOptions &LangOpts,
153172
SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules)
154173
const {
155-
return getInfo(*this).GetPragmaAttributeMatchRules(MatchRules, LangOpts);
174+
return getInfo(*this).getPragmaAttributeMatchRules(MatchRules, LangOpts);
156175
}
157176

158177
bool ParsedAttr::diagnoseLangOpts(Sema &S) const {
159-
return getInfo(*this).DiagLangOpts(S, *this);
178+
return getInfo(*this).diagLangOpts(S, *this);
160179
}
161180

162181
bool ParsedAttr::isTargetSpecificAttr() const {
@@ -168,7 +187,7 @@ bool ParsedAttr::isTypeAttr() const { return getInfo(*this).IsType; }
168187
bool ParsedAttr::isStmtAttr() const { return getInfo(*this).IsStmt; }
169188

170189
bool ParsedAttr::existsInTarget(const TargetInfo &Target) const {
171-
return getInfo(*this).ExistsInTarget(Target);
190+
return getInfo(*this).existsInTarget(Target);
172191
}
173192

174193
bool ParsedAttr::isKnownToGCC() const { return getInfo(*this).IsKnownToGCC; }
@@ -178,7 +197,7 @@ bool ParsedAttr::isSupportedByPragmaAttribute() const {
178197
}
179198

180199
unsigned ParsedAttr::getSemanticSpelling() const {
181-
return getInfo(*this).SpellingIndexToSemanticSpelling(*this);
200+
return getInfo(*this).spellingIndexToSemanticSpelling(*this);
182201
}
183202

184203
bool ParsedAttr::hasVariadicArg() const {

clang/test/CodeGenCXX/member-function-pointer-calls.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,8 @@ int f(A* a, int (A::*fp)()) {
1111
}
1212

1313
// CHECK-LABEL: define i32 @_Z2g1v()
14-
// CHECK-LEGACY: ret i32 1
15-
// CHECK-NEWPM: [[A:%.*]] = alloca %struct.A, align 8
16-
// CHECK-NEWPM: [[TMP:%.*]] = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 0
17-
// CHECK-NEWPM: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [4 x i8*] }, { [4 x i8*] }* @_ZTV1A, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** [[TMP]], align 8
18-
// CHECK-NEWPM: [[RET:%.*]] = call i32 @_ZN1A3vf1Ev(%struct.A* nonnull %a) #2
19-
// CHECK-NEWPM: ret i32 [[RET]]
14+
// CHECK-NOT: }
15+
// CHECK: ret i32 1
2016
// MINGW64-LABEL: define dso_local i32 @_Z2g1v()
2117
// MINGW64: call i32 @_Z1fP1AMS_FivE(%struct.A* %{{.*}}, { i64, i64 }* %{{.*}})
2218
int g1() {
@@ -25,6 +21,7 @@ int g1() {
2521
}
2622

2723
// CHECK-LABEL: define i32 @_Z2g2v()
24+
// CHECK-NOT: }
2825
// CHECK: ret i32 2
2926
// MINGW64-LABEL: define dso_local i32 @_Z2g2v()
3027
// MINGW64: call i32 @_Z1fP1AMS_FivE(%struct.A* %{{.*}}, { i64, i64 }* %{{.*}})

0 commit comments

Comments
 (0)