Skip to content

Commit daf887f

Browse files
committed
Merge branch 'sotoc-complex-macros' into 'aurora_offloading_prototype'
Fix problems with some complex macros (May fix llvm#5) See merge request NEC-RWTH-Projects/clang!14
2 parents 887b013 + 30fca0a commit daf887f

File tree

6 files changed

+31
-6
lines changed

6 files changed

+31
-6
lines changed

clang/tools/sotoc/src/Debug.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ extern int SotocDebugLevel;
2323
#define DEBUGP(...) \
2424
do { \
2525
if (SotocDebugLevel > 0) { \
26-
llvm::errs() << "Sotoc: " << llvm::formatv(__VA_ARGS__); \
26+
llvm::errs() << "Sotoc: " << __VA_ARGS__; \
2727
llvm::errs() << "\n"; \
2828
} \
2929
} while (false)

clang/tools/sotoc/src/DeclResolver.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ void DeclResolver::addDecl(clang::Decl *D) {
6565
return;
6666
}
6767

68+
DEBUGPDECL(D, "Add declaration to resolver: ");
69+
6870
std::unordered_set<clang::Decl *> UnresolvedDecls;
6971
UnresolvedDecls.insert(D);
7072

@@ -161,9 +163,11 @@ void DeclResolver::orderAndAddFragments(TargetCode &TC) {
161163
if (!AllDecls.at(orderStack.top()).IsFromSystemHeader) {
162164
auto codeDecl = std::make_shared<TargetCodeDecl>(orderStack.top());
163165

166+
DEBUGPDECL(orderStack.top(), "Generating Fragment for Decl: ");
164167
// TODO: this wont hurt but is not always necessary
165168
codeDecl->NeedsSemicolon = true;
166-
TC.addCodeFragmentFront(codeDecl);
169+
bool added = TC.addCodeFragmentFront(codeDecl);
170+
DEBUGP("Decl was a duplicate: " << !added);
167171
}
168172
orderStack.pop();
169173
}

clang/tools/sotoc/src/TargetCode.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ void TargetCode::generateCode(llvm::raw_ostream &Out) {
7575

7676
// This is a workaround, since "Decl::print" includes "pragma omp declare".
7777
if (PrettyCode != "")
78-
TargetCodeRewriter.ReplaceText(Frag->getInnerRange(), PrettyCode);
78+
TargetCodeRewriter.ReplaceText(Frag->getSpellingRange(), PrettyCode);
7979

8080
if (TCR) {
8181
generateFunctionPrologue(TCR);
@@ -85,7 +85,7 @@ void TargetCode::generateCode(llvm::raw_ostream &Out) {
8585
generateFunctionEpilogue(TCR);
8686
}
8787
Out << "\n";
88-
Out << TargetCodeRewriter.getRewrittenText(Frag->getInnerRange());
88+
Out << TargetCodeRewriter.getRewrittenText(Frag->getSpellingRange());
8989

9090
if (Frag->NeedsSemicolon) {
9191
Out << ";";

clang/tools/sotoc/src/TargetCodeFragment.cpp

+17-2
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,13 @@ clang::SourceRange TargetCodeRegion::getRealRange() {
156156
return CapturedStmtNode->getSourceRange();
157157
}
158158

159+
clang::SourceRange TargetCodeRegion::getSpellingRange() {
160+
auto &SM = CapturedStmtNode->getCapturedDecl()->getASTContext().getSourceManager();
161+
auto InnerRange = getInnerRange();
162+
return clang::SourceRange(SM.getSpellingLoc(InnerRange.getBegin()),
163+
SM.getSpellingLoc(InnerRange.getEnd()));
164+
}
165+
159166
clang::SourceRange TargetCodeRegion::getInnerRange() {
160167
auto InnerLocStart = getStartLoc();
161168
auto InnerLocEnd = getEndLoc();
@@ -428,9 +435,17 @@ std::string TargetCodeRegion::PrintPretty() {
428435
clang::SourceRange TargetCodeDecl::getRealRange() {
429436
// return DeclNode->getSourceRange();
430437
// return DeclNode->getSourceRange();
438+
//auto &SM = DeclNode->getASTContext().getSourceManager();
439+
//return clang::SourceRange(SM.getSpellingLoc(DeclNode->getBeginLoc()),
440+
// SM.getSpellingLoc(DeclNode->getEndLoc()));
441+
return DeclNode->getSourceRange();
442+
}
443+
444+
clang::SourceRange TargetCodeDecl::getSpellingRange() {
431445
auto &SM = DeclNode->getASTContext().getSourceManager();
432-
return clang::SourceRange(SM.getSpellingLoc(DeclNode->getBeginLoc()),
433-
SM.getSpellingLoc(DeclNode->getEndLoc()));
446+
auto InnerRange = getInnerRange();
447+
return clang::SourceRange(SM.getSpellingLoc(InnerRange.getBegin()),
448+
SM.getSpellingLoc(InnerRange.getEnd()));
434449
}
435450

436451
std::string TargetCodeDecl::PrintPretty() {

clang/tools/sotoc/src/TargetCodeFragment.h

+5
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ class TargetCodeFragment {
8383
/// Gets the 'inner' source range. This can differ for target regions from the
8484
/// source range.
8585
virtual clang::SourceRange getInnerRange() { return getRealRange(); };
86+
/// Get the spelling source range. That is the range without macro
87+
/// expansions.
88+
virtual clang::SourceRange getSpellingRange() = 0;
8689
/// Accessor to TargetCodeKind
8790
clang::OpenMPDirectiveKind getTargetCodeKind() { return TargetCodeKind; };
8891
};
@@ -140,6 +143,7 @@ class TargetCodeRegion : public TargetCodeFragment {
140143
virtual std::string PrintPretty() override;
141144
clang::SourceRange getRealRange() override;
142145
clang::SourceRange getInnerRange() override;
146+
clang::SourceRange getSpellingRange() override;
143147
/// Returns a source location at the start of a pragma in the captured
144148
/// statment.
145149
clang::SourceLocation getStartLoc();
@@ -174,4 +178,5 @@ class TargetCodeDecl : public TargetCodeFragment {
174178

175179
virtual std::string PrintPretty() override;
176180
clang::SourceRange getRealRange() override;
181+
clang::SourceRange getSpellingRange() override;
177182
};

clang/tools/sotoc/src/main.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ class SourceTransformAction : public clang::ASTFrontendAction {
7272
// std::error_code error_code;
7373
// llvm::raw_fd_ostream outFile("output.txt", error_code,
7474
// llvm::sys::fs::F_Append);
75+
DEBUGP("Generating Code§");
7576
Code->generateCode(llvm::outs());
7677
// outFile.close();
7778
delete Code;

0 commit comments

Comments
 (0)