]> granicus.if.org Git - clang/commitdiff
[modules] Make sure enabled diagnostic pragmas inside the module don't affect the...
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 27 Mar 2013 17:17:23 +0000 (17:17 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 27 Mar 2013 17:17:23 +0000 (17:17 +0000)
imports the module.

Getting diagnostic sections from modules properly working is a fixme.

rdar://13516663

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178151 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Serialization/ASTWriter.h
lib/Serialization/ASTWriter.cpp
test/Modules/Inputs/diag_pragma.h [new file with mode: 0644]
test/Modules/Inputs/module.map
test/Modules/diag-pragma.c [new file with mode: 0644]

index 1c8236669c9a80efce7a2379582fa7e8faa68532..2938dc76de4992db31e34dcecdb7aa36767aeb99 100644 (file)
@@ -432,7 +432,8 @@ private:
   void WritePreprocessorDetail(PreprocessingRecord &PPRec);
   void WriteSubmodules(Module *WritingModule);
                                         
-  void WritePragmaDiagnosticMappings(const DiagnosticsEngine &Diag);
+  void WritePragmaDiagnosticMappings(const DiagnosticsEngine &Diag,
+                                     bool isModule);
   void WriteCXXBaseSpecifiersOffsets();
   void WriteType(QualType T);
   uint64_t WriteDeclContextLexicalBlock(ASTContext &Context, DeclContext *DC);
index 95e32a37fe6fcd185ba9925c8d9ec153a42a1054..033d48c1471b289723c0ad4ce7a47f5e79c2ee8b 100644 (file)
@@ -2444,8 +2444,14 @@ ASTWriter::inferSubmoduleIDFromLocation(SourceLocation Loc) {
   return getSubmoduleID(OwningMod);
 }
 
-void ASTWriter::WritePragmaDiagnosticMappings(const DiagnosticsEngine &Diag) {
-  // FIXME: Make it work properly with modules.
+void ASTWriter::WritePragmaDiagnosticMappings(const DiagnosticsEngine &Diag,
+                                              bool isModule) {
+  // Make sure set diagnostic pragmas don't affect the translation unit that
+  // imports the module.
+  // FIXME: Make diagnostic pragma sections work properly with modules.
+  if (isModule)
+    return;
+
   llvm::SmallDenseMap<const DiagnosticsEngine::DiagState *, unsigned, 64>
       DiagStateIDMap;
   unsigned CurrID = 0;
@@ -4048,7 +4054,7 @@ void ASTWriter::WriteASTCore(Sema &SemaRef,
   WriteOpenCLExtensions(SemaRef);
 
   WriteTypeDeclOffsets();
-  WritePragmaDiagnosticMappings(Context.getDiagnostics());
+  WritePragmaDiagnosticMappings(Context.getDiagnostics(), isModule);
 
   WriteCXXBaseSpecifiersOffsets();
   
diff --git a/test/Modules/Inputs/diag_pragma.h b/test/Modules/Inputs/diag_pragma.h
new file mode 100644 (file)
index 0000000..a8f9589
--- /dev/null
@@ -0,0 +1,3 @@
+#define DIAG_PRAGMA_MACRO 1
+
+#pragma clang diagnostic ignored "-Wparentheses"
index 479bfcfa7ff4588801735449e555e0e0cfddb09d..93ba4935ffd2a00054c0a75aafd11642d41ed521 100644 (file)
@@ -188,3 +188,7 @@ module config {
   header "config.h"
   config_macros [exhaustive] WANT_FOO, WANT_BAR
 }
+
+module diag_pragma {
+  header "diag_pragma.h"
+}
diff --git a/test/Modules/diag-pragma.c b/test/Modules/diag-pragma.c
new file mode 100644 (file)
index 0000000..7ec3400
--- /dev/null
@@ -0,0 +1,13 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -fmodules -x objective-c -emit-module -fmodules-cache-path=%t -fmodule-name=diag_pragma %S/Inputs/module.map
+// RUN: %clang_cc1 -fmodules -x objective-c -verify -fmodules-cache-path=%t %s
+// FIXME: When we have a syntax for modules in C, use that.
+
+@import diag_pragma;
+
+int foo(int x) {
+  if (x = DIAG_PRAGMA_MACRO) // expected-warning {{using the result of an assignment as a condition without parentheses}} \
+                             // expected-note {{place parentheses}} expected-note {{use '=='}}
+    return 0;
+  return 1;
+}