From: Sam Bishop Date: Mon, 14 Apr 2008 14:41:57 +0000 (+0000) Subject: Handle -D and -U options in order, so that they can cancel each other out when X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1102d6bd49ad7a2b84b69473b039ca3e2e45be3d;p=clang Handle -D and -U options in order, so that they can cancel each other out when intermixed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49645 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Driver/clang.cpp b/Driver/clang.cpp index 4c8a3525c8..098450d72d 100644 --- a/Driver/clang.cpp +++ b/Driver/clang.cpp @@ -598,14 +598,17 @@ static unsigned InitializePreprocessor(Preprocessor &PP, return 0; } } - + // Add macros from the command line. - // FIXME: Should traverse the #define/#undef lists in parallel. - for (unsigned i = 0, e = D_macros.size(); i != e; ++i) - DefineBuiltinMacro(PredefineBuffer, D_macros[i].c_str()); - for (unsigned i = 0, e = U_macros.size(); i != e; ++i) - DefineBuiltinMacro(PredefineBuffer, U_macros[i].c_str(), "#undef "); - + unsigned d = 0, D = D_macros.size(); + unsigned u = 0, U = U_macros.size(); + while (d < D || u < U) { + if (u == U || (d < D && D_macros.getPosition(d) < U_macros.getPosition(u))) + DefineBuiltinMacro(PredefineBuffer, D_macros[d++].c_str()); + else + DefineBuiltinMacro(PredefineBuffer, U_macros[u++].c_str(), "#undef "); + } + // FIXME: Read any files specified by -imacros. // Add implicit #includes from -include.