From f9b8bc662a84bb89a2d98530592f5d8fb6bee761 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Sat, 2 May 2009 17:45:47 +0000 Subject: [PATCH] Downgrade the invalid offsetof error to a warning. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70634 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/DiagnosticGroups.td | 1 + include/clang/Basic/DiagnosticSemaKinds.td | 3 ++- lib/Sema/SemaExpr.cpp | 6 +++--- test/SemaCXX/offsetof.cpp | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/include/clang/Basic/DiagnosticGroups.td b/include/clang/Basic/DiagnosticGroups.td index 8e9296db16..bee24ad903 100644 --- a/include/clang/Basic/DiagnosticGroups.td +++ b/include/clang/Basic/DiagnosticGroups.td @@ -82,6 +82,7 @@ def : DiagGroup<"strict-overflow=1">; def : DiagGroup<"strict-overflow=2">; def : DiagGroup<"strict-overflow">; +def InvalidOffsetof : DiagGroup<"invalid-offsetof">; def : DiagGroup<"strict-prototypes">; def : DiagGroup<"strict-selector-match">; def Switch : DiagGroup<"switch">; diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 72689b9523..2900c3d3aa 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -936,7 +936,8 @@ def err_offsetof_record_type : Error< def err_offsetof_array_type : Error<"offsetof requires array type, %0 invalid">; def ext_offsetof_extended_field_designator : Extension< "using extended field designator is an extension">; -def err_offsetof_non_pod_type : Error<"offset of on non-POD type %0">; +def warn_offsetof_non_pod_type : Warning<"offset of on non-POD type %0">, + InGroup; def warn_floatingpoint_eq : Warning< "comparing floating point with == or != is unsafe">, diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 33d308ee39..dc058b2a3a 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -4777,9 +4777,9 @@ Sema::OwningExprResult Sema::ActOnBuiltinOffsetOf(Scope *S, RecordDecl *RD = RC->getDecl(); if (CXXRecordDecl *CRD = dyn_cast(RD)) { if (!CRD->isPOD()) - return ExprError(Diag(BuiltinLoc, diag::err_offsetof_non_pod_type) - << SourceRange(CompPtr[0].LocStart, OC.LocEnd) - << Res->getType()); + ExprError(Diag(BuiltinLoc, diag::warn_offsetof_non_pod_type) + << SourceRange(CompPtr[0].LocStart, OC.LocEnd) + << Res->getType()); } FieldDecl *MemberDecl diff --git a/test/SemaCXX/offsetof.cpp b/test/SemaCXX/offsetof.cpp index 726dc7e527..c8a3d3df45 100644 --- a/test/SemaCXX/offsetof.cpp +++ b/test/SemaCXX/offsetof.cpp @@ -10,6 +10,6 @@ struct P { }; void f() { - int i = __builtin_offsetof(P, fieldThatPointsToANonPODType.m); // expected-error{{offset of on non-POD type 'struct P'}} + int i = __builtin_offsetof(P, fieldThatPointsToANonPODType.m); // expected-warning{{offset of on non-POD type 'struct P'}} } -- 2.40.0