aboutsummaryrefslogtreecommitdiff
path: root/Driver/clang.cpp
diff options
context:
space:
mode:
authorSam Bishop <sam@bishop.dhs.org>2008-04-14 14:41:57 +0000
committerSam Bishop <sam@bishop.dhs.org>2008-04-14 14:41:57 +0000
commit1102d6bd49ad7a2b84b69473b039ca3e2e45be3d (patch)
treecf623c0e063867d63caaa6dc2251221885754c97 /Driver/clang.cpp
parentfebe719596ee68605944da5f2e03258e18e6df8c (diff)
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
Diffstat (limited to 'Driver/clang.cpp')
-rw-r--r--Driver/clang.cpp17
1 files changed, 10 insertions, 7 deletions
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.