From a15b76b3774e6228bc4ea05851aa2425ca19f7c4 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Thu, 24 Mar 2016 23:49:34 +0000 Subject: Try to fix ODR violation of ErrorInfo::ID This implements my suggestion to Lang. llvm-svn: 264360 --- llvm/unittests/Support/ErrorTest.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'llvm/unittests/Support/ErrorTest.cpp') diff --git a/llvm/unittests/Support/ErrorTest.cpp b/llvm/unittests/Support/ErrorTest.cpp index cf1c6e6..893bd68 100644 --- a/llvm/unittests/Support/ErrorTest.cpp +++ b/llvm/unittests/Support/ErrorTest.cpp @@ -35,6 +35,9 @@ public: llvm_unreachable("CustomError doesn't support ECError conversion"); } + // Used by ErrorInfo::classID. + static char ID; + protected: // This error is subclassed below, but we can't use inheriting constructors // yet, so we can't propagate the constructors through ErrorInfo. Instead @@ -45,6 +48,8 @@ protected: int Info; }; +char CustomError::ID = 0; + // Custom error class with a custom base class and some additional random // 'info'. class CustomSubError : public ErrorInfo { @@ -66,10 +71,15 @@ public: llvm_unreachable("CustomSubError doesn't support ECError conversion"); } + // Used by ErrorInfo::classID. + static char ID; + protected: int ExtraInfo; }; +char CustomSubError::ID = 0; + static Error handleCustomError(const CustomError &CE) { return Error(); } static void handleCustomErrorVoid(const CustomError &CE) {} @@ -453,6 +463,3 @@ TEST(Error, ErrorCodeConversions) { } } // end anon namespace - -template <> char ErrorInfo::ID = 0; -template <> char ErrorInfo::ID = 0; -- cgit v1.1