summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/CodeGen/CodeGenAction.cpp6
-rw-r--r--clang/test/Frontend/Weverything-and-remarks.cpp28
2 files changed, 34 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp
index 3db1660b805..4bb3895108d 100644
--- a/clang/lib/CodeGen/CodeGenAction.cpp
+++ b/clang/lib/CodeGen/CodeGenAction.cpp
@@ -461,6 +461,12 @@ void BackendConsumer::DiagnosticHandlerImpl(const DiagnosticInfo &DI) {
// handler. There is no generic way of emitting them.
OptimizationRemarkHandler(cast<DiagnosticInfoOptimizationRemark>(DI));
return;
+ case llvm::DK_OptimizationRemarkMissed:
+ case llvm::DK_OptimizationRemarkAnalysis:
+ // TODO: Do nothing for now. The implementation of these
+ // two remarks is still under review (http://reviews.llvm.org/D3683).
+ // Remove this once that patch lands.
+ return;
default:
// Plugin IDs are not bound to any value as they are set dynamically.
ComputeDiagRemarkID(Severity, backend_plugin, DiagID);
diff --git a/clang/test/Frontend/Weverything-and-remarks.cpp b/clang/test/Frontend/Weverything-and-remarks.cpp
new file mode 100644
index 00000000000..ce7e8f3f122
--- /dev/null
+++ b/clang/test/Frontend/Weverything-and-remarks.cpp
@@ -0,0 +1,28 @@
+// Test that -Weverything does not trigger any backend remarks.
+//
+// This was triggering backend remarks for which there were no frontend
+// flags to filter them. The handler in BackendConsumer::DiagnosticHandlerImpl
+// should not emitting diagnostics for unhandled kinds.
+
+// RUN: %clang -c -Weverything -O0 -o /dev/null %s 2> %t.err
+// RUN: FileCheck < %t.err %s
+
+typedef __char32_t char32_t;
+typedef long unsigned int size_t;
+template <class _CharT>
+struct __attribute__((__type_visibility__("default"))) char_traits;
+
+template <>
+struct __attribute__((__type_visibility__("default"))) char_traits<char32_t> {
+ typedef char32_t char_type;
+ static void assign(char_type& __c1, const char_type& __c2) throw() {
+ __c1 = __c2;
+ }
+ static char_type* move(char_type* __s1, const char_type* __s2, size_t __n);
+};
+char32_t* char_traits<char32_t>::move(char_type* __s1, const char_type* __s2,
+ size_t __n) {
+ { assign(*--__s1, *--__s2); }
+}
+
+// CHECK-NOT: {{^remark:}}
OpenPOWER on IntegriCloud