diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index c2cdc0695feb..951df79f91f6 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -1211,6 +1211,9 @@ void UnwrappedLineParser::parsePPDefine() { return; } +#ifdef SYCLomatic_CUSTOMIZATION + bool MaybeIncludeGuard = false; +#endif // SYCLomatic_CUSTOMIZATION if (IncludeGuard == IG_IfNdefed && IncludeGuardToken->TokenText == FormatTok->TokenText) { IncludeGuard = IG_Defined; @@ -1221,6 +1224,9 @@ void UnwrappedLineParser::parsePPDefine() { break; } } +#ifdef SYCLomatic_CUSTOMIZATION + MaybeIncludeGuard = IncludeGuard == IG_Defined; +#endif // SYCLomatic_CUSTOMIZATION } // In the context of a define, even keywords should be treated as normal @@ -1231,6 +1237,13 @@ void UnwrappedLineParser::parsePPDefine() { FormatTok->Tok.setKind(tok::identifier); FormatTok->Tok.setIdentifierInfo(Keywords.kw_internal_ident_after_define); nextToken(); + +#ifdef SYCLomatic_CUSTOMIZATION + // IncludeGuard can't have a non-empty macro definition. + if (MaybeIncludeGuard && !eof()) + IncludeGuard = IG_Rejected; +#endif // SYCLomatic_CUSTOMIZATION + if (FormatTok->Tok.getKind() == tok::l_paren && !FormatTok->hasWhitespaceBefore()) { parseParens(); diff --git a/clang/test/dpct/format/.clang-format b/clang/test/dpct/format/.clang-format new file mode 100644 index 000000000000..5d5bb0d22dcb --- /dev/null +++ b/clang/test/dpct/format/.clang-format @@ -0,0 +1 @@ +IndentPPDirectives: BeforeHash diff --git a/clang/test/dpct/format/BeforeHash.cu b/clang/test/dpct/format/BeforeHash.cu new file mode 100644 index 000000000000..bae448b5af68 --- /dev/null +++ b/clang/test/dpct/format/BeforeHash.cu @@ -0,0 +1,23 @@ +// RUN: cd %S +// RUN: dpct --out-root %T %s --cuda-include-path="%cuda-path/include" +// RUN: FileCheck %s --match-full-lines --input-file %T/BeforeHash.dp.cpp +// RUN: %if build_lit %{icpx -c -fsycl %T/BeforeHash.dp.cpp -o %T/BeforeHash.dp.o %} + +#ifndef ABCD +#define ABCD 0 +#endif + +// CHECK: #define DPCT_PROFILING_ENABLED +// CHECK-NEXT: #include +// CHECK-NEXT: #include +// CHECK-NEXT: #include +#include + +// CHECK: void foo() { +// CHECK-NEXT: dpct::event_ptr start; +// CHECK-NEXT: dpct::sync_barrier(start); +// CHECK-NEXT: } +void foo() { + cudaEvent_t start; + cudaEventRecord(start); +}