]> granicus.if.org Git - clang/commit
Correct handling of _Pragma macro inside a macro argument.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 3 Apr 2012 16:47:40 +0000 (16:47 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 3 Apr 2012 16:47:40 +0000 (16:47 +0000)
commit14e645557ae91c6770d62beb00a1c522e0bfd5d6
tree3c71397dbd2b2bfe3f8b71ddb355702e5b43025b
parentc8443e592dbab65cd06ddea9fad6c6f049a08942
Correct handling of _Pragma macro inside a macro argument.

If we are pre-expanding a macro argument don't actually "activate"
the pragma at that point, activate the pragma whenever we encounter
it again in the token stream.
This ensures that we will activate it in the correct location
or that we will ignore it if it never enters the token stream, e.g:

     \#define EMPTY(x)
     \#define INACTIVE(x) EMPTY(x)
     INACTIVE(_Pragma("clang diagnostic ignored \"-Wconversion\""))

This also fixes the crash in rdar://11168596.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153959 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Lex/Preprocessor.h
lib/Lex/MacroArgs.cpp
lib/Lex/Pragma.cpp
lib/Lex/Preprocessor.cpp
test/Preprocessor/_Pragma-in-macro-arg.c [new file with mode: 0644]