]> granicus.if.org Git - clang/commitdiff
PR4395: Don't detect token concatenation in C mode for
authorEli Friedman <eli.friedman@gmail.com>
Mon, 15 Jun 2009 19:48:50 +0000 (19:48 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Mon, 15 Jun 2009 19:48:50 +0000 (19:48 +0000)
C++-specific tokens.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@73408 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Lex/TokenConcatenation.cpp
test/Lexer/token-concat-2.c [new file with mode: 0644]

index ab989cafc156c72cc38374d130407a29b09a5e51..be13b274574a6c529c07458e6111c3223889c387 100644 (file)
@@ -192,7 +192,8 @@ bool TokenConcatenation::AvoidConcat(const Token &PrevTok,
     return isalnum(FirstChar) || Tok.is(tok::numeric_constant) ||
     FirstChar == '+' || FirstChar == '-' || FirstChar == '.';
   case tok::period:          // ..., .*, .1234
-    return FirstChar == '.' || isdigit(FirstChar) || FirstChar == '*';
+    return FirstChar == '.' || isdigit(FirstChar) ||
+    (PP.getLangOptions().CPlusPlus && FirstChar == '*');
   case tok::amp:             // &&
     return FirstChar == '&';
   case tok::plus:            // ++
@@ -210,10 +211,11 @@ bool TokenConcatenation::AvoidConcat(const Token &PrevTok,
   case tok::percent:         // %>, %:
     return FirstChar == '>' || FirstChar == ':';
   case tok::colon:           // ::, :>
-    return FirstChar == ':' ||FirstChar == '>';
+    return FirstChar == '>' ||
+    (PP.getLangOptions().CPlusPlus && FirstChar == ':');
   case tok::hash:            // ##, #@, %:%:
     return FirstChar == '#' || FirstChar == '@' || FirstChar == '%';
   case tok::arrow:           // ->*
-    return FirstChar == '*';
+    return PP.getLangOptions().CPlusPlus && FirstChar == '*';
   }
 }
diff --git a/test/Lexer/token-concat-2.c b/test/Lexer/token-concat-2.c
new file mode 100644 (file)
index 0000000..2891654
--- /dev/null
@@ -0,0 +1,4 @@
+// RUN: clang-cc -E -x c -o - %s | grep '[.][*]'
+// PR4395
+#define X .*
+X