[clang-tools-extra] r182014 - cpp11-migrate: Check for valid NULL macros from macro arg expansions

Edwin Vane edwin.vane at intel.com
Thu May 16 07:55:05 PDT 2013


Author: revane
Date: Thu May 16 09:55:05 2013
New Revision: 182014

URL: http://llvm.org/viewvc/llvm-project?rev=182014&view=rev
Log:
cpp11-migrate: Check for valid NULL macros from macro arg expansions

The recent improvement to the Use Nullptr Transform for macro arg
expansions wasn't testing that only allowed NULL macros used in macro
args can be transformed. This revision replaces a TODO to that effect.

Fixes PR15955.


Modified:
    clang-tools-extra/trunk/cpp11-migrate/UseNullptr/NullptrActions.cpp
    clang-tools-extra/trunk/test/cpp11-migrate/UseNullptr/macros.cpp

Modified: clang-tools-extra/trunk/cpp11-migrate/UseNullptr/NullptrActions.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/UseNullptr/NullptrActions.cpp?rev=182014&r1=182013&r2=182014&view=diff
==============================================================================
--- clang-tools-extra/trunk/cpp11-migrate/UseNullptr/NullptrActions.cpp (original)
+++ clang-tools-extra/trunk/cpp11-migrate/UseNullptr/NullptrActions.cpp Thu May 16 09:55:05 2013
@@ -286,10 +286,16 @@ private:
       const SrcMgr::SLocEntry *E = &SM.getSLocEntry(LocInfo.first);
       const SrcMgr::ExpansionInfo &Expansion = E->getExpansion();
 
+      SourceLocation OldArgLoc = ArgLoc;
       ArgLoc = Expansion.getExpansionLocStart();
       if (!Expansion.isMacroArgExpansion()) {
-        // TODO: Insert test for user-defined null macro here.
-        return MacroLoc.isFileID();
+        if (!MacroLoc.isFileID())
+          return false;
+
+        StringRef Name =
+            Lexer::getImmediateMacroName(OldArgLoc, SM, Context.getLangOpts());
+        return std::find(UserNullMacros.begin(), UserNullMacros.end(), Name) !=
+               UserNullMacros.end();
       }
 
       MacroLoc = SM.getImmediateExpansionRange(ArgLoc).first;

Modified: clang-tools-extra/trunk/test/cpp11-migrate/UseNullptr/macros.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/cpp11-migrate/UseNullptr/macros.cpp?rev=182014&r1=182013&r2=182014&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/cpp11-migrate/UseNullptr/macros.cpp (original)
+++ clang-tools-extra/trunk/test/cpp11-migrate/UseNullptr/macros.cpp Thu May 16 09:55:05 2013
@@ -153,4 +153,12 @@ void test_macro_args() {
   // CHECK: PTR_AND_PTR_USE(nullptr);
   PTR_AND_PTR_USE(NULL);
   // CHECK: PTR_AND_PTR_USE(nullptr);
+
+#define OPTIONAL_CODE(...) __VA_ARGS__
+#define NOT_NULL dummy(0)
+#define CALL(X) X
+  OPTIONAL_CODE(NOT_NULL);
+  // CHECK: OPTIONAL_CODE(NOT_NULL);
+  CALL(NOT_NULL);
+  // CHECK: CALL(NOT_NULL);
 }





More information about the cfe-commits mailing list