From 391ca9f2c9e9b93fe7196b56f20701cbb6dc0dd7 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Tue, 9 Apr 2013 01:17:02 +0000 Subject: [PATCH] Mark as referenced the functions from instantiated UserDefinedLiterals. Fixes rdar://13589856 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179078 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/TreeTransform.h | 2 ++ test/SemaCXX/cxx11-user-defined-literals-unused.cpp | 13 +++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 test/SemaCXX/cxx11-user-defined-literals-unused.cpp diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index f68de26cde..835609585e 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -6173,6 +6173,8 @@ TreeTransform::TransformCharacterLiteral(CharacterLiteral *E) { template ExprResult TreeTransform::TransformUserDefinedLiteral(UserDefinedLiteral *E) { + if (FunctionDecl *FD = E->getDirectCallee()) + SemaRef.MarkFunctionReferenced(E->getLocStart(), FD); return SemaRef.MaybeBindToTemporary(E); } diff --git a/test/SemaCXX/cxx11-user-defined-literals-unused.cpp b/test/SemaCXX/cxx11-user-defined-literals-unused.cpp new file mode 100644 index 0000000000..cd93ffbf21 --- /dev/null +++ b/test/SemaCXX/cxx11-user-defined-literals-unused.cpp @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -std=c++11 -verify %s -Wunused + +namespace { +double operator"" _x(long double value) { return double(value); } +int operator"" _ii(long double value) { return int(value); } // expected-warning {{not needed and will not be emitted}} +} + +namespace rdar13589856 { + template double value() { return 3.2_x; } + template int valuei() { return 3.2_ii; } + + double get_value() { return value(); } +} -- 2.40.0