From c25d8058958d9cda0d9d6216b475180ba2f7c71d Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Fri, 22 May 2009 21:35:34 +0000 Subject: [PATCH] In assembler-with-cpp mode, don't error on '#' (stringize) operator applied to non-argument names, pass the tokens through. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72283 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Lex/PPDirectives.cpp | 8 +++++--- test/Preprocessor/assembler-with-cpp.c | 10 ++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/Lex/PPDirectives.cpp b/lib/Lex/PPDirectives.cpp index 331424bdc8..d7b8fc7fd8 100644 --- a/lib/Lex/PPDirectives.cpp +++ b/lib/Lex/PPDirectives.cpp @@ -1376,9 +1376,11 @@ void Preprocessor::HandleDefineDirective(Token &DefineTok) { // Get the next token of the macro. LexUnexpandedToken(Tok); - // Not a macro arg identifier? - if (!Tok.getIdentifierInfo() || - MI->getArgumentNum(Tok.getIdentifierInfo()) == -1) { + // Check for a valid macro arg identifier, unless this is a .S file in + // which case it is still added to the body. + if ((!Tok.getIdentifierInfo() || + MI->getArgumentNum(Tok.getIdentifierInfo()) == -1) && + !getLangOptions().AsmPreprocessor) { Diag(Tok, diag::err_pp_stringize_not_parameter); ReleaseMacroInfo(MI); diff --git a/test/Preprocessor/assembler-with-cpp.c b/test/Preprocessor/assembler-with-cpp.c index e27cf2d970..885e67b98c 100644 --- a/test/Preprocessor/assembler-with-cpp.c +++ b/test/Preprocessor/assembler-with-cpp.c @@ -29,6 +29,8 @@ 2: ' 3: " +// (balance quotes to keep editors happy): "' + // Empty char literals are ok. // RUN: grep "4: ''" %t && 4: '' @@ -53,4 +55,12 @@ 7: FOO(blarg) +// +#define T6() T6 #nostring +#define T7(x) T7 #x +T6() +T7(foo) +// RUN: grep 'T6 #nostring' %t && +// RUN: grep 'T7 "foo"' %t && + // RUN: true -- 2.50.1