mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-25 06:40:18 +00:00
[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:
parent
6ad6c3b1c2
commit
5e14925a35
@ -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
|
||||
|
7
clang/test/Preprocessor/macro_arg_slocentry_merge.c
Normal file
7
clang/test/Preprocessor/macro_arg_slocentry_merge.c
Normal 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_'
|
7
clang/test/Preprocessor/macro_arg_slocentry_merge.h
Normal file
7
clang/test/Preprocessor/macro_arg_slocentry_merge.h
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
#define WINDOW win
|
||||
#define P_(args) args
|
||||
extern void f P_((WINDOW win));
|
Loading…
Reference in New Issue
Block a user