From d017e42af00c2e7c380d0f9b27c81734f4b2844e Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Wed, 9 Jan 2013 23:22:20 +0000 Subject: [PATCH] [PreprocessingRecord] A macro expansion can be reported out-of-order in cases when there are macro expansions inside macro arguments where the arguments are not expanded in the same order as listed; don't assert that all macro expansions are in source order. rdar://12397063 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172018 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Lex/PreprocessingRecord.cpp | 14 +++++++++++--- test/Preprocessor/pp-record.c | 5 +++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/Lex/PreprocessingRecord.cpp b/lib/Lex/PreprocessingRecord.cpp index 497af0b3da..8e8afeb4b7 100644 --- a/lib/Lex/PreprocessingRecord.cpp +++ b/lib/Lex/PreprocessingRecord.cpp @@ -244,11 +244,11 @@ PreprocessingRecord::addPreprocessedEntity(PreprocessedEntity *Entity) { assert(Entity); SourceLocation BeginLoc = Entity->getSourceRange().getBegin(); - if (!isa(Entity)) { + if (isa(Entity)) { assert((PreprocessedEntities.empty() || !SourceMgr.isBeforeInTranslationUnit(BeginLoc, PreprocessedEntities.back()->getSourceRange().getBegin())) && - "a macro directive was encountered out-of-order"); + "a macro definition was encountered out-of-order"); PreprocessedEntities.push_back(Entity); return getPPEntityID(PreprocessedEntities.size()-1, /*isLoaded=*/false); } @@ -263,7 +263,15 @@ PreprocessingRecord::addPreprocessedEntity(PreprocessedEntity *Entity) { // The entity's location is not after the previous one; this can happen with // include directives that form the filename using macros, e.g: - // "#include MACRO(STUFF)". + // "#include MACRO(STUFF)" + // or with macro expansions inside macro arguments where the arguments are + // not expanded in the same order as listed, e.g: + // \code + // #define M1 1 + // #define M2 2 + // #define FM(x,y) y x + // FM(M1, M2) + // \endcode typedef std::vector::iterator pp_iter; diff --git a/test/Preprocessor/pp-record.c b/test/Preprocessor/pp-record.c index dd958d0e56..92ca366e37 100644 --- a/test/Preprocessor/pp-record.c +++ b/test/Preprocessor/pp-record.c @@ -21,3 +21,8 @@ FNM( int b; #endif ) + +#define M1 c +#define M2 int +#define FM2(x,y) y x +FM2(M1, M2); -- 2.40.0