forked from OSchip/llvm-project
Handle include directive with comments. It turns out that in this case comments are not coming in source order. Instead of trying to std::sort() comments (which can be costly), just remove comments that are not in order.
llvm-svn: 158940
This commit is contained in:
parent
c457f62033
commit
923074016b
|
@ -158,13 +158,15 @@ void RawCommentList::addComment(const RawComment &RC) {
|
|||
if (RC.isInvalid())
|
||||
return;
|
||||
|
||||
assert((Comments.empty() ||
|
||||
Comments.back().getSourceRange().getEnd() ==
|
||||
RC.getSourceRange().getBegin() ||
|
||||
SourceMgr.isBeforeInTranslationUnit(
|
||||
Comments.back().getSourceRange().getEnd(),
|
||||
RC.getSourceRange().getBegin())) &&
|
||||
"comments are not coming in source order");
|
||||
// Check if the comments are not in source order.
|
||||
while (!Comments.empty() &&
|
||||
!SourceMgr.isBeforeInTranslationUnit(
|
||||
Comments.back().getSourceRange().getBegin(),
|
||||
RC.getSourceRange().getBegin())) {
|
||||
// If they are, just pop a few last comments that don't fit.
|
||||
// This happens if an \#include directive contains comments.
|
||||
Comments.pop_back();
|
||||
}
|
||||
|
||||
if (OnlyWhitespaceSeen) {
|
||||
if (!onlyWhitespaceBetweenComments(SourceMgr, LastComment, RC))
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
/* Meow */
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -I%S/Inputs %s
|
||||
|
||||
// As long as none of this crashes, we don't care about comments in
|
||||
// preprocessor directives.
|
||||
|
||||
#include "annotate-comments-preprocessor.h" /* Aaa. */ /* Bbb. */
|
||||
#include "annotate-comments-preprocessor.h" /* Aaa. */
|
||||
#include "annotate-comments-preprocessor.h" /** Aaa. */
|
||||
#include "annotate-comments-preprocessor.h" /**< Aaa. */
|
||||
#include "annotate-comments-preprocessor.h" // Aaa.
|
||||
#include "annotate-comments-preprocessor.h" /// Aaa.
|
||||
#include "annotate-comments-preprocessor.h" ///< Aaa.
|
||||
|
||||
#define A0 0
|
||||
#define A1 1 /* Aaa. */
|
||||
#define A2 1 /** Aaa. */
|
||||
#define A3 1 /**< Aaa. */
|
||||
#define A4 1 // Aaa.
|
||||
#define A5 1 /// Aaa.
|
||||
#define A6 1 ///< Aaa.
|
||||
|
||||
int A[] = { A0, A1, A2, A3, A4, A5, A6 };
|
||||
|
||||
#if A0 /** Aaa. */
|
||||
int f(int a1[A1], int a2[A2], int a3[A3], int a4[A4], int a5[A5], int a6[A6]);
|
||||
#endif /** Aaa. */
|
||||
|
||||
#if A1 /** Aaa. */
|
||||
int g(int a1[A1], int a2[A2], int a3[A3], int a4[A4], int a5[A5], int a6[A6]);
|
||||
#endif /* Aaa. */
|
||||
|
||||
#pragma once /** Aaa. */
|
||||
|
||||
#define FOO \
|
||||
do { \
|
||||
/* Aaa. */ \
|
||||
/** Aaa. */ \
|
||||
/**< Aaa. */ \
|
||||
; \
|
||||
} while(0)
|
||||
|
||||
void h(void) {
|
||||
FOO;
|
||||
}
|
||||
|
Loading…
Reference in New Issue