[cfe-commits] r142187 - in /cfe/trunk: include/clang/Frontend/PreprocessorOptions.h lib/Frontend/CompilerInvocation.cpp test/Modules/Inputs/CmdLine.framework/ test/Modules/Inputs/CmdLine.framework/Headers/ test/Modules/Inputs/CmdLine.framework/Headers/CmdLine.h test/Modules/on-demand-build-warnings.m test/Modules/on-demand-build.m test/Modules/on-demand-macros.m

Douglas Gregor dgregor at apple.com
Mon Oct 17 07:55:37 PDT 2011


Author: dgregor
Date: Mon Oct 17 09:55:37 2011
New Revision: 142187

URL: http://llvm.org/viewvc/llvm-project?rev=142187&view=rev
Log:
When building a module, use the macro definitions on the command line
as part of the hash rather than ignoring them. This means we'll end up
building more module variants (overall), but it allows configuration
macros such as NDEBUG to work so long as they're specified via command
line. More to come in this space.

Added:
    cfe/trunk/test/Modules/Inputs/CmdLine.framework/
    cfe/trunk/test/Modules/Inputs/CmdLine.framework/Headers/
    cfe/trunk/test/Modules/Inputs/CmdLine.framework/Headers/CmdLine.h
    cfe/trunk/test/Modules/on-demand-macros.m
Modified:
    cfe/trunk/include/clang/Frontend/PreprocessorOptions.h
    cfe/trunk/lib/Frontend/CompilerInvocation.cpp
    cfe/trunk/test/Modules/on-demand-build-warnings.m
    cfe/trunk/test/Modules/on-demand-build.m

Modified: cfe/trunk/include/clang/Frontend/PreprocessorOptions.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/PreprocessorOptions.h?rev=142187&r1=142186&r2=142187&view=diff
==============================================================================
--- cfe/trunk/include/clang/Frontend/PreprocessorOptions.h (original)
+++ cfe/trunk/include/clang/Frontend/PreprocessorOptions.h Mon Oct 17 09:55:37 2011
@@ -206,7 +206,6 @@
   /// \brief Reset any options that are not considered when building a
   /// module.
   void resetNonModularOptions() {
-    Macros.clear();
     Includes.clear();
     MacroIncludes.clear();
     ChainedIncludes.clear();

Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=142187&r1=142186&r2=142187&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Oct 17 09:55:37 2011
@@ -2026,6 +2026,23 @@
   Signature.add(getPreprocessorOpts().UsePredefines, 1);
   Signature.add(getPreprocessorOpts().DetailedRecord, 1);
   
+  // Hash the preprocessor defines.
+  // FIXME: This is terrible. Use an MD5 sum of the preprocessor defines.
+  std::vector<StringRef> MacroDefs;
+  for (std::vector<std::pair<std::string, bool/*isUndef*/> >::const_iterator 
+            I = getPreprocessorOpts().Macros.begin(),
+         IEnd = getPreprocessorOpts().Macros.end();
+       I != IEnd; ++I) {
+    if (!I->second)
+      MacroDefs.push_back(I->first);
+  }
+  llvm::array_pod_sort(MacroDefs.begin(), MacroDefs.end());
+       
+  unsigned PPHashResult = 0;
+  for (unsigned I = 0, N = MacroDefs.size(); I != N; ++I)
+    PPHashResult = llvm::HashString(MacroDefs[I], PPHashResult);
+  Signature.add(PPHashResult, 32);
+  
   // We've generated the signature. Treat it as one large APInt that we'll
   // encode in base-36 and return.
   Signature.flush();

Added: cfe/trunk/test/Modules/Inputs/CmdLine.framework/Headers/CmdLine.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/CmdLine.framework/Headers/CmdLine.h?rev=142187&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/CmdLine.framework/Headers/CmdLine.h (added)
+++ cfe/trunk/test/Modules/Inputs/CmdLine.framework/Headers/CmdLine.h Mon Oct 17 09:55:37 2011
@@ -0,0 +1,6 @@
+#ifdef FOO_RETURNS_INT_PTR
+int *foo(void);
+#else
+float *foo(void);
+#endif
+

Modified: cfe/trunk/test/Modules/on-demand-build-warnings.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/on-demand-build-warnings.m?rev=142187&r1=142186&r2=142187&view=diff
==============================================================================
--- cfe/trunk/test/Modules/on-demand-build-warnings.m (original)
+++ cfe/trunk/test/Modules/on-demand-build-warnings.m Mon Oct 17 09:55:37 2011
@@ -1,5 +1,5 @@
 // RUN: rm -rf %t
-// RUN: %clang_cc1 -fno-objc-infer-related-result-type -Wmodule-build -fmodule-cache-path %t -F %S/Inputs -DFOO -verify %s
+// RUN: %clang_cc1 -fno-objc-infer-related-result-type -Wmodule-build -fmodule-cache-path %t -F %S/Inputs -verify %s
 
 __import_module__ Module; // expected-warning{{building module 'Module' from source}}
 

Modified: cfe/trunk/test/Modules/on-demand-build.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/on-demand-build.m?rev=142187&r1=142186&r2=142187&view=diff
==============================================================================
--- cfe/trunk/test/Modules/on-demand-build.m (original)
+++ cfe/trunk/test/Modules/on-demand-build.m Mon Oct 17 09:55:37 2011
@@ -1,8 +1,8 @@
 // RUN: rm -rf %t
-// RUN: %clang_cc1 -fno-objc-infer-related-result-type -Werror -fmodule-cache-path %t -F %S/Inputs -DFOO -verify %s
-// RUN: %clang_cc1 -fno-objc-infer-related-result-type -Werror -x objective-c++ -fmodule-cache-path %t -F %S/Inputs -DFOO -verify %s
-// RUN: %clang_cc1 -fno-objc-infer-related-result-type -Werror -fmodule-cache-path %t -F %S/Inputs -DFOO -verify %s
-
+// RUN: %clang_cc1 -fno-objc-infer-related-result-type -Werror -fmodule-cache-path %t -F %S/Inputs -verify %s
+// RUN: %clang_cc1 -fno-objc-infer-related-result-type -Werror -x objective-c++ -fmodule-cache-path %t -F %S/Inputs -verify %s
+// RUN: %clang_cc1 -fno-objc-infer-related-result-type -Werror -fmodule-cache-path %t -F %S/Inputs -verify %s
+#define FOO
 __import_module__ Module;
 @interface OtherClass
 @end

Added: cfe/trunk/test/Modules/on-demand-macros.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/on-demand-macros.m?rev=142187&view=auto
==============================================================================
--- cfe/trunk/test/Modules/on-demand-macros.m (added)
+++ cfe/trunk/test/Modules/on-demand-macros.m Mon Oct 17 09:55:37 2011
@@ -0,0 +1,13 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -fmodule-cache-path %t -F %S/Inputs -DFOO_RETURNS_INT_PTR -verify %s
+// RUN: %clang_cc1 -fmodule-cache-path %t -F %S/Inputs -verify %s
+
+__import_module__ CmdLine;
+
+void test() {
+#ifdef FOO_RETURNS_INT_PTR
+  int *ip = foo();
+#else
+  float *fp = foo();
+#endif
+}





More information about the cfe-commits mailing list