[preprocessor] When "merging" macro argument tokens into one SLocEntry chunk,

make sure they came from the same kind of FileIDs.

Thanks to Abramo Bagnara for providing the test case.

llvm-svn: 170616
This commit is contained in:
Argyrios Kyrtzidis 2012-12-19 23:55:44 +00:00
parent 6ad6c3b1c2
commit 5e14925a35
3 changed files with 20 additions and 2 deletions

View File

@ -749,14 +749,18 @@ static void updateConsecutiveMacroArgTokens(SourceManager &SM,
Token *NextTok = begin_tokens + 1;
for (; NextTok < end_tokens; ++NextTok) {
SourceLocation NextLoc = NextTok->getLocation();
if (CurLoc.isFileID() != NextLoc.isFileID())
break; // Token from different kind of FileID.
int RelOffs;
if (!SM.isInSameSLocAddrSpace(CurLoc, NextTok->getLocation(), &RelOffs))
if (!SM.isInSameSLocAddrSpace(CurLoc, NextLoc, &RelOffs))
break; // Token from different local/loaded location.
// Check that token is not before the previous token or more than 50
// "characters" away.
if (RelOffs < 0 || RelOffs > 50)
break;
CurLoc = NextTok->getLocation();
CurLoc = NextLoc;
}
// For the consecutive tokens, find the length of the SLocEntry to contain

View File

@ -0,0 +1,7 @@
// RUN: not %clang_cc1 -fsyntax-only %s 2>&1 | FileCheck %s
#include "macro_arg_slocentry_merge.h"
// CHECK: macro_arg_slocentry_merge.h:7:19: error: unknown type name 'win'
// CHECK: macro_arg_slocentry_merge.h:5:16: note: expanded from macro 'WINDOW'
// CHECK: macro_arg_slocentry_merge.h:6:18: note: expanded from macro 'P_'

View File

@ -0,0 +1,7 @@
#define WINDOW win
#define P_(args) args
extern void f P_((WINDOW win));